From d3aa040eed0a04ad4838c14bccf6b2f8570e68b0 Mon Sep 17 00:00:00 2001 From: Muqsit Date: Tue, 7 Jul 2026 03:52:25 -0700 Subject: [PATCH] refactor(repo): restructure into apps/ + packages/ + native/ (atomic) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sorts the repo by kind (Turborepo/Nx apps+packages convention + a native/ bucket for standalone daemons). One atomic move; no JS workspaces (nothing cross-imports, so each package self-installs — avoids the @inquirer/core hoisting break). apps/cli/ @phnx-labs/agents-cli (was repo root) + menubar/ (welded, in tarball) apps/factory/ the Factory GUI (was packages/factory) packages/ session-tracker, swarmify-mirror (shared libs) native/computer-mac was packages/computer-helper (fixes mac/win naming asymmetry) native/computer-win was packages/computer-helper-win root now { "private": true } monorepo root + new README Hand-edits: menubar resolver -> ../../../menubar; computer-* resolvers -> ../../../../native/computer-{mac,win} (depth +2, native/ at repo root while the CLI is nested under apps/cli); CI working-directory: apps/cli on tests/tests-windows/ ci/bench + path filters re-prefixed in lockstep + computer-helper-win.yml -> native/computer-win; release.sh git show :package.json -> :apps/cli/package.json. VS Code publish identity (publisher swarmify / swarm-ext / appId) unchanged. Verified: apps/cli frozen install + build rc=0. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/bench.yml | 3 + .github/workflows/ci.yml | 3 + .github/workflows/computer-helper-win.yml | 8 +- .github/workflows/tests-windows-noop.yml | 10 +- .github/workflows/tests-windows.yml | 13 +- .github/workflows/tests.yml | 3 + README.md | 825 +----------------- .crabbox.yaml => apps/cli/.crabbox.yaml | 0 .npmignore => apps/cli/.npmignore | 0 CHANGELOG.md => apps/cli/CHANGELOG.md | 0 apps/cli/LICENSE | 185 ++++ apps/cli/README.md | 814 +++++++++++++++++ {bench => apps/cli/bench}/after.json | 0 {bench => apps/cli/bench}/baseline.json | 0 {bench => apps/cli/bench}/offload-smoke.sh | 0 {bench => apps/cli/bench}/resolve-perf.ts | 0 {bench => apps/cli/bench}/sessions-perf.ts | 0 {bench => apps/cli/bench}/tty-vs-headless.py | 0 bun.lock => apps/cli/bun.lock | 0 .../cli/menubar}/.gitignore | 0 .../cli/menubar}/Package.swift | 0 .../Sources/MenubarHelper/AgentsCLI.swift | 0 .../Sources/MenubarHelper/Bench.swift | 0 .../menubar}/Sources/MenubarHelper/Clip.swift | 0 .../Sources/MenubarHelper/Hotkey.swift | 0 .../menubar}/Sources/MenubarHelper/Icon.swift | 0 .../Sources/MenubarHelper/LocalState.swift | 0 .../Sources/MenubarHelper/Models.swift | 0 .../MenubarHelper/StatusItemController.swift | 0 .../menubar}/Sources/MenubarHelper/main.swift | 0 .../cli/menubar}/scripts/build.sh | 0 apps/cli/package.json | 111 +++ .../cli/scripts}/Agents CLI.app.sha256 | 0 {scripts => apps/cli/scripts}/bench-ssh.mjs | 0 .../cli/scripts}/bench-staleness.ts | 0 {scripts => apps/cli/scripts}/build-bin.sh | 0 .../cli/scripts}/build-keychain-helper.sh | 0 {scripts => apps/cli/scripts}/build-win.sh | 4 +- {scripts => apps/cli/scripts}/build.sh | 0 .../cli/scripts}/companion-shim/README.md | 0 .../cli/scripts}/companion-shim/bin/agents.js | 0 .../companion-shim/scripts/postinstall.js | 0 .../cli/scripts}/install-helper.js | 0 {scripts => apps/cli/scripts}/install.sh | 0 .../cli/scripts}/keychain-entitlements.plist | 0 {scripts => apps/cli/scripts}/postinstall.js | 0 .../cli/scripts}/postinstall.test.ts | 0 {scripts => apps/cli/scripts}/release.sh | 4 +- {scripts => apps/cli/scripts}/sandbox.sh | 0 .../cli/scripts}/scrub-orphan-branches.sh | 0 .../cli/scripts}/setup-npm-secret.sh | 0 .../cli/scripts}/verify-keychain-helper.sh | 0 .../cli/scripts}/verify-menubar-helper.sh | 6 +- {src => apps/cli/src}/browser.ts | 0 .../__tests__/auto-install-resolver.test.ts | 0 .../cli/src}/commands/__tests__/beta.test.ts | 0 .../src}/commands/__tests__/inspect.test.ts | 0 .../__tests__/profiles-create.test.ts | 0 .../sessions-active-grouping.test.ts | 0 .../__tests__/sessions-columns.test.ts | 0 .../__tests__/sessions-host-filter.test.ts | 0 .../__tests__/sessions-live-preview.test.ts | 0 .../sessions-machine-grouping.test.ts | 0 .../commands/__tests__/sessions-tail.test.ts | 0 .../src}/commands/__tests__/sessions.test.ts | 0 {src => apps/cli/src}/commands/alias.ts | 0 {src => apps/cli/src}/commands/audit.ts | 0 {src => apps/cli/src}/commands/beta.ts | 0 .../cli/src}/commands/browser-picker.ts | 0 .../cli/src}/commands/browser.pdf-har.test.ts | 0 {src => apps/cli/src}/commands/browser.ts | 0 {src => apps/cli/src}/commands/budget.test.ts | 0 {src => apps/cli/src}/commands/budget.ts | 0 {src => apps/cli/src}/commands/check.test.ts | 0 {src => apps/cli/src}/commands/check.ts | 0 {src => apps/cli/src}/commands/cli.ts | 0 {src => apps/cli/src}/commands/cloud.ts | 0 {src => apps/cli/src}/commands/commands.ts | 0 .../src}/commands/computer-actions.test.ts | 0 .../cli/src}/commands/computer-actions.ts | 2 +- .../cli/src}/commands/computer.test.ts | 0 {src => apps/cli/src}/commands/computer.ts | 8 +- {src => apps/cli/src}/commands/cost.test.ts | 0 {src => apps/cli/src}/commands/cost.ts | 0 {src => apps/cli/src}/commands/daemon.ts | 0 .../cli/src}/commands/defaults.test.ts | 0 {src => apps/cli/src}/commands/defaults.ts | 0 {src => apps/cli/src}/commands/doctor.test.ts | 0 {src => apps/cli/src}/commands/doctor.ts | 0 {src => apps/cli/src}/commands/drive.ts | 0 {src => apps/cli/src}/commands/events.ts | 0 .../cli/src}/commands/exec-loop.test.ts | 0 {src => apps/cli/src}/commands/exec.ts | 0 {src => apps/cli/src}/commands/factory.ts | 0 .../cli/src}/commands/feedback.test.ts | 0 {src => apps/cli/src}/commands/feedback.ts | 0 {src => apps/cli/src}/commands/focus.test.ts | 0 {src => apps/cli/src}/commands/focus.ts | 0 {src => apps/cli/src}/commands/go.test.ts | 0 {src => apps/cli/src}/commands/go.ts | 0 {src => apps/cli/src}/commands/helper.ts | 0 {src => apps/cli/src}/commands/hooks.ts | 0 {src => apps/cli/src}/commands/hosts.ts | 0 {src => apps/cli/src}/commands/import.ts | 0 .../cli/src}/commands/inspect.test.ts | 0 {src => apps/cli/src}/commands/inspect.ts | 0 {src => apps/cli/src}/commands/lock.ts | 0 {src => apps/cli/src}/commands/logs.ts | 0 {src => apps/cli/src}/commands/mcp.ts | 0 {src => apps/cli/src}/commands/menubar.ts | 0 {src => apps/cli/src}/commands/message.ts | 0 {src => apps/cli/src}/commands/models.test.ts | 0 {src => apps/cli/src}/commands/models.ts | 0 .../cli/src}/commands/packages.test.ts | 0 {src => apps/cli/src}/commands/packages.ts | 0 .../cli/src}/commands/permissions.test.ts | 0 {src => apps/cli/src}/commands/permissions.ts | 0 .../cli/src}/commands/plugins.test.ts | 0 {src => apps/cli/src}/commands/plugins.ts | 0 {src => apps/cli/src}/commands/profiles.ts | 0 {src => apps/cli/src}/commands/prune.ts | 0 {src => apps/cli/src}/commands/pty.ts | 0 {src => apps/cli/src}/commands/pull.ts | 0 {src => apps/cli/src}/commands/push.ts | 0 .../cli/src}/commands/refresh-rules.ts | 0 {src => apps/cli/src}/commands/repo.test.ts | 0 {src => apps/cli/src}/commands/repo.ts | 0 .../cli/src}/commands/resource-view.test.ts | 0 .../cli/src}/commands/resource-view.ts | 0 .../src}/commands/routines-webhook.test.ts | 0 {src => apps/cli/src}/commands/routines.ts | 0 {src => apps/cli/src}/commands/rules.ts | 0 .../cli/src}/commands/secrets-migrate.ts | 0 .../cli/src}/commands/secrets-sync.ts | 0 .../cli/src}/commands/secrets.test.ts | 0 {src => apps/cli/src}/commands/secrets.ts | 0 {src => apps/cli/src}/commands/serve.ts | 0 .../cli/src}/commands/sessions-inject.ts | 0 .../cli/src}/commands/sessions-picker.ts | 0 .../cli/src}/commands/sessions-resume.ts | 0 .../cli/src}/commands/sessions-sync.ts | 0 .../cli/src}/commands/sessions-tail.ts | 0 .../src}/commands/sessions.overview.test.ts | 0 .../src}/commands/sessions.serialize.test.ts | 0 {src => apps/cli/src}/commands/sessions.ts | 0 {src => apps/cli/src}/commands/setup.ts | 0 {src => apps/cli/src}/commands/skills.ts | 0 {src => apps/cli/src}/commands/ssh.ts | 0 {src => apps/cli/src}/commands/status.ts | 0 {src => apps/cli/src}/commands/subagents.ts | 0 {src => apps/cli/src}/commands/sync.ts | 0 .../cli/src}/commands/teams-picker.ts | 0 {src => apps/cli/src}/commands/teams.ts | 0 {src => apps/cli/src}/commands/tmux.ts | 0 {src => apps/cli/src}/commands/trash.ts | 0 {src => apps/cli/src}/commands/usage.ts | 0 {src => apps/cli/src}/commands/utils.ts | 0 {src => apps/cli/src}/commands/versions.ts | 0 .../cli/src}/commands/view.resources.test.ts | 0 {src => apps/cli/src}/commands/view.ts | 0 {src => apps/cli/src}/commands/wallet.test.ts | 0 {src => apps/cli/src}/commands/wallet.ts | 0 .../cli/src}/commands/watchdog.test.ts | 0 {src => apps/cli/src}/commands/watchdog.ts | 0 {src => apps/cli/src}/commands/workflows.ts | 0 {src => apps/cli/src}/commands/worktree.ts | 0 {src => apps/cli/src}/computer.ts | 0 {src => apps/cli/src}/index.ts | 0 .../__tests__/add-targets-user-repo.test.ts | 0 .../cli/src}/lib/__tests__/bugfixes.test.ts | 0 .../src}/lib/__tests__/capabilities.test.ts | 0 .../cli/src}/lib/__tests__/diff-text.test.ts | 0 .../__tests__/discover-mcp-from-repo.test.ts | 0 .../src}/lib/__tests__/doctor-diff.test.ts | 0 .../cli/src}/lib/__tests__/exec.test.ts | 0 .../__tests__/extra-alias-selectors.test.ts | 0 .../src}/lib/__tests__/extras-sync.test.ts | 0 .../lib/__tests__/gemini-settings.test.ts | 0 .../cli/src}/lib/__tests__/git-sync.test.ts | 0 .../src}/lib/__tests__/hooks-layering.test.ts | 0 .../cli/src}/lib/__tests__/hooks.test.ts | 0 .../cli/src}/lib/__tests__/import.test.ts | 0 .../cli/src}/lib/__tests__/manifest.test.ts | 0 .../cli/src}/lib/__tests__/mcp-paths.test.ts | 0 .../__tests__/migrate-system-mirror.test.ts | 0 .../cli/src}/lib/__tests__/migrate.test.ts | 0 .../cli/src}/lib/__tests__/models.test.ts | 0 .../src}/lib/__tests__/onepassword.test.ts | 0 .../lib/__tests__/plugin-marketplace.test.ts | 0 .../src}/lib/__tests__/plugins-prune.test.ts | 0 .../cli/src}/lib/__tests__/plugins.test.ts | 0 .../prompt-agent-version-selection.test.ts | 0 .../lib/__tests__/promptcuts-paths.test.ts | 0 .../cli/src}/lib/__tests__/pty-server.test.ts | 0 .../resolve-agent-version-targets.test.ts | 0 .../lib/__tests__/resolve-resource.test.ts | 0 .../lib/__tests__/resource-patterns.test.ts | 0 .../cli/src}/lib/__tests__/rotate.test.ts | 0 .../lib/__tests__/routines-format.test.ts | 0 .../src}/lib/__tests__/routines.endAt.test.ts | 0 .../routines.project-discovery.test.ts | 0 .../lib/__tests__/routines.timeout.test.ts | 0 .../lib/__tests__/routines.workflow.test.ts | 0 .../cli/src}/lib/__tests__/runner.test.ts | 0 .../cli/src}/lib/__tests__/sandbox.test.ts | 0 .../lib/__tests__/scheduler.endAt.test.ts | 0 .../lib/__tests__/settings-manifest.test.ts | 0 .../cli/src}/lib/__tests__/shims.test.ts | 0 .../cli/src}/lib/__tests__/state.test.ts | 0 .../lib/__tests__/subagents-prune.test.ts | 0 .../shims/bash-insert-before-node-path.after | 0 .../shims/bash-insert-before-node-path.before | 0 .../shims/bash-insert-before-node-path.json | 0 .../shims/fish-replace-legacy-path.after | 0 .../shims/fish-replace-legacy-path.before | 0 .../shims/fish-replace-legacy-path.json | 0 .../zsh-append-after-installer-blocks.after | 0 .../zsh-append-after-installer-blocks.before | 0 .../zsh-append-after-installer-blocks.json | 0 .../testdata/shims/zsh-idempotent.after | 0 .../testdata/shims/zsh-idempotent.before | 0 .../testdata/shims/zsh-idempotent.json | 0 .../shims/zsh-ignore-lookalike-paths.after | 0 .../shims/zsh-ignore-lookalike-paths.before | 0 .../shims/zsh-ignore-lookalike-paths.json | 0 .../shims/zsh-reorder-before-nvm.after | 0 .../shims/zsh-reorder-before-nvm.before | 0 .../shims/zsh-reorder-before-nvm.json | 0 .../lib/__tests__/unmanaged-installs.test.ts | 0 .../cli/src}/lib/__tests__/usage.test.ts | 0 .../lib/__tests__/version-duplicates.test.ts | 0 .../version-not-installed-error.test.ts | 0 .../cli/src}/lib/__tests__/versions.test.ts | 0 .../cli/src}/lib/__tests__/workflows.test.ts | 0 {src => apps/cli/src}/lib/acp/client.ts | 0 {src => apps/cli/src}/lib/acp/harnesses.ts | 0 {src => apps/cli/src}/lib/acp/run.ts | 0 {src => apps/cli/src}/lib/agent-spec/index.ts | 0 .../src}/lib/agent-spec/primitives.test.ts | 0 .../cli/src}/lib/agent-spec/primitives.ts | 0 .../cli/src}/lib/agent-spec/provider.ts | 0 .../cli/src}/lib/agent-spec/resolve.test.ts | 0 .../cli/src}/lib/agent-spec/resolve.ts | 0 {src => apps/cli/src}/lib/agent-spec/types.ts | 0 {src => apps/cli/src}/lib/agents.test.ts | 0 {src => apps/cli/src}/lib/agents.ts | 0 {src => apps/cli/src}/lib/artifact-actions.ts | 0 {src => apps/cli/src}/lib/audit/log.test.ts | 0 {src => apps/cli/src}/lib/audit/log.ts | 0 {src => apps/cli/src}/lib/auto-pull-worker.ts | 0 {src => apps/cli/src}/lib/auto-pull.ts | 0 {src => apps/cli/src}/lib/beta.ts | 0 {src => apps/cli/src}/lib/browser/cdp.test.ts | 0 {src => apps/cli/src}/lib/browser/cdp.ts | 0 .../cli/src}/lib/browser/chrome.test.ts | 0 {src => apps/cli/src}/lib/browser/chrome.ts | 0 {src => apps/cli/src}/lib/browser/devices.ts | 0 .../src}/lib/browser/domain-skills.test.ts | 0 .../cli/src}/lib/browser/domain-skills.ts | 0 .../src}/lib/browser/drivers/local.test.ts | 0 .../cli/src}/lib/browser/drivers/local.ts | 0 .../cli/src}/lib/browser/drivers/ssh.test.ts | 0 .../cli/src}/lib/browser/drivers/ssh.ts | 0 {src => apps/cli/src}/lib/browser/editor.ts | 0 {src => apps/cli/src}/lib/browser/har.test.ts | 0 {src => apps/cli/src}/lib/browser/har.ts | 0 {src => apps/cli/src}/lib/browser/index.ts | 0 {src => apps/cli/src}/lib/browser/input.ts | 0 {src => apps/cli/src}/lib/browser/ipc.test.ts | 0 {src => apps/cli/src}/lib/browser/ipc.ts | 0 .../cli/src}/lib/browser/local.test.ts | 0 .../cli/src}/lib/browser/port.test.ts | 0 .../cli/src}/lib/browser/profiles.test.ts | 0 {src => apps/cli/src}/lib/browser/profiles.ts | 0 .../cli/src}/lib/browser/refs.test.ts | 0 {src => apps/cli/src}/lib/browser/refs.ts | 0 .../src}/lib/browser/runtime-state.test.ts | 0 .../cli/src}/lib/browser/runtime-state.ts | 0 .../cli/src}/lib/browser/service.logs.test.ts | 0 .../cli/src}/lib/browser/service.test.ts | 0 {src => apps/cli/src}/lib/browser/service.ts | 0 {src => apps/cli/src}/lib/browser/types.ts | 0 .../cli/src}/lib/browser/upload.test.ts | 0 {src => apps/cli/src}/lib/browser/upload.ts | 0 .../cli/src}/lib/budget/config.test.ts | 0 {src => apps/cli/src}/lib/budget/config.ts | 0 .../cli/src}/lib/budget/enforce.test.ts | 0 {src => apps/cli/src}/lib/budget/enforce.ts | 0 .../cli/src}/lib/budget/ledger.test.ts | 0 {src => apps/cli/src}/lib/budget/ledger.ts | 0 .../cli/src}/lib/budget/live-cloud.test.ts | 0 .../cli/src}/lib/budget/live-cloud.ts | 0 .../cli/src}/lib/budget/live-team.test.ts | 0 {src => apps/cli/src}/lib/budget/live-team.ts | 0 .../cli/src}/lib/budget/preflight.test.ts | 0 {src => apps/cli/src}/lib/budget/preflight.ts | 0 {src => apps/cli/src}/lib/capabilities.ts | 0 {src => apps/cli/src}/lib/checkpoint.test.ts | 0 {src => apps/cli/src}/lib/checkpoint.ts | 0 .../cli/src}/lib/cli-resources.test.ts | 0 {src => apps/cli/src}/lib/cli-resources.ts | 0 .../cli/src}/lib/cloud/agent-routing.test.ts | 0 .../cli/src}/lib/cloud/antigravity.test.ts | 0 .../cli/src}/lib/cloud/antigravity.ts | 0 {src => apps/cli/src}/lib/cloud/codex.ts | 0 .../cli/src}/lib/cloud/factory.test.ts | 0 {src => apps/cli/src}/lib/cloud/factory.ts | 0 {src => apps/cli/src}/lib/cloud/paths.test.ts | 0 {src => apps/cli/src}/lib/cloud/registry.ts | 0 {src => apps/cli/src}/lib/cloud/rush.test.ts | 0 {src => apps/cli/src}/lib/cloud/rush.ts | 0 {src => apps/cli/src}/lib/cloud/store.ts | 0 .../cli/src}/lib/cloud/stream.test.ts | 0 {src => apps/cli/src}/lib/cloud/stream.ts | 0 .../src}/lib/cloud/target-discovery.test.ts | 0 {src => apps/cli/src}/lib/cloud/types.test.ts | 0 {src => apps/cli/src}/lib/cloud/types.ts | 0 {src => apps/cli/src}/lib/command-skills.ts | 0 {src => apps/cli/src}/lib/commands.test.ts | 0 {src => apps/cli/src}/lib/commands.ts | 0 .../cli/src}/lib/computer-rpc.test.ts | 0 {src => apps/cli/src}/lib/computer-rpc.ts | 6 +- .../cli/src}/lib/computer/dispatch.test.ts | 0 .../cli/src}/lib/computer/dispatch.ts | 0 .../cli/src}/lib/computer/loop.test.ts | 0 {src => apps/cli/src}/lib/computer/loop.ts | 0 {src => apps/cli/src}/lib/computer/model.ts | 0 {src => apps/cli/src}/lib/concurrency.test.ts | 0 {src => apps/cli/src}/lib/concurrency.ts | 0 {src => apps/cli/src}/lib/convert.ts | 0 {src => apps/cli/src}/lib/crabbox/cli.ts | 0 .../cli/src}/lib/crabbox/lease.test.ts | 0 {src => apps/cli/src}/lib/crabbox/lease.ts | 0 .../cli/src}/lib/crabbox/runtimes.test.ts | 0 {src => apps/cli/src}/lib/crabbox/runtimes.ts | 0 {src => apps/cli/src}/lib/daemon.test.ts | 0 {src => apps/cli/src}/lib/daemon.ts | 0 .../devices/__tests__/resolve-target.test.ts | 0 .../cli/src}/lib/devices/connect.test.ts | 0 {src => apps/cli/src}/lib/devices/connect.ts | 0 .../cli/src}/lib/devices/ignored.test.ts | 0 .../cli/src}/lib/devices/pending.test.ts | 0 {src => apps/cli/src}/lib/devices/pending.ts | 0 .../cli/src}/lib/devices/registry.test.ts | 0 {src => apps/cli/src}/lib/devices/registry.ts | 0 .../cli/src}/lib/devices/resolve-target.ts | 0 .../cli/src}/lib/devices/ssh-config.test.ts | 0 .../cli/src}/lib/devices/ssh-config.ts | 0 .../cli/src}/lib/devices/sync.test.ts | 0 {src => apps/cli/src}/lib/devices/sync.ts | 0 .../cli/src}/lib/devices/tailscale.test.ts | 0 .../cli/src}/lib/devices/tailscale.ts | 0 {src => apps/cli/src}/lib/diff-text.ts | 0 {src => apps/cli/src}/lib/doctor-diff.ts | 0 {src => apps/cli/src}/lib/drift-sync.test.ts | 0 {src => apps/cli/src}/lib/drift-sync.ts | 0 {src => apps/cli/src}/lib/drift.ts | 0 {src => apps/cli/src}/lib/drive-sync.test.ts | 0 {src => apps/cli/src}/lib/drive-sync.ts | 0 {src => apps/cli/src}/lib/events.ts | 0 {src => apps/cli/src}/lib/exec-shim.test.ts | 0 {src => apps/cli/src}/lib/exec.test.ts | 0 {src => apps/cli/src}/lib/exec.ts | 0 {src => apps/cli/src}/lib/fs-atomic.ts | 0 {src => apps/cli/src}/lib/fs-walk.test.ts | 0 {src => apps/cli/src}/lib/fs-walk.ts | 0 {src => apps/cli/src}/lib/fuzzy.test.ts | 0 {src => apps/cli/src}/lib/fuzzy.ts | 0 {src => apps/cli/src}/lib/gemini-settings.ts | 0 {src => apps/cli/src}/lib/git.test.ts | 0 {src => apps/cli/src}/lib/git.ts | 0 {src => apps/cli/src}/lib/heal.ts | 0 {src => apps/cli/src}/lib/help.test.ts | 0 {src => apps/cli/src}/lib/help.ts | 0 {src => apps/cli/src}/lib/hooks.ts | 0 .../src}/lib/hooks/__tests__/match.test.ts | 0 .../src}/lib/hooks/cache-integration.test.ts | 0 {src => apps/cli/src}/lib/hooks/cache.test.ts | 0 {src => apps/cli/src}/lib/hooks/cache.ts | 0 {src => apps/cli/src}/lib/hooks/match.ts | 0 .../cli/src}/lib/hooks/profile.test.ts | 0 {src => apps/cli/src}/lib/hooks/profile.ts | 0 .../cli/src}/lib/hosts/dispatch.test.ts | 0 {src => apps/cli/src}/lib/hosts/dispatch.ts | 0 {src => apps/cli/src}/lib/hosts/logs.test.ts | 0 {src => apps/cli/src}/lib/hosts/logs.ts | 0 .../cli/src}/lib/hosts/option.test.ts | 0 {src => apps/cli/src}/lib/hosts/option.ts | 0 .../cli/src}/lib/hosts/passthrough.test.ts | 0 .../cli/src}/lib/hosts/passthrough.ts | 0 .../cli/src}/lib/hosts/progress.test.ts | 0 {src => apps/cli/src}/lib/hosts/progress.ts | 0 .../src}/lib/hosts/providers/local.test.ts | 0 .../cli/src}/lib/hosts/providers/local.ts | 0 {src => apps/cli/src}/lib/hosts/ready.test.ts | 0 {src => apps/cli/src}/lib/hosts/ready.ts | 0 .../cli/src}/lib/hosts/reconcile.test.ts | 0 {src => apps/cli/src}/lib/hosts/reconcile.ts | 0 .../cli/src}/lib/hosts/registry.test.ts | 0 {src => apps/cli/src}/lib/hosts/registry.ts | 0 .../cli/src}/lib/hosts/remote-cmd.test.ts | 0 {src => apps/cli/src}/lib/hosts/remote-cmd.ts | 0 {src => apps/cli/src}/lib/hosts/remote-os.ts | 0 .../cli/src}/lib/hosts/session-index.test.ts | 0 .../cli/src}/lib/hosts/session-index.ts | 0 .../cli/src}/lib/hosts/ssh-config.test.ts | 0 {src => apps/cli/src}/lib/hosts/ssh-config.ts | 0 {src => apps/cli/src}/lib/hosts/tasks.test.ts | 0 {src => apps/cli/src}/lib/hosts/tasks.ts | 0 {src => apps/cli/src}/lib/hosts/types.ts | 0 {src => apps/cli/src}/lib/import.test.ts | 0 {src => apps/cli/src}/lib/import.ts | 0 {src => apps/cli/src}/lib/lock.test.ts | 0 {src => apps/cli/src}/lib/lock.ts | 0 {src => apps/cli/src}/lib/log-follow.test.ts | 0 {src => apps/cli/src}/lib/log-follow.ts | 0 .../cli/src}/lib/loop-integration.test.ts | 0 {src => apps/cli/src}/lib/loop.test.ts | 0 {src => apps/cli/src}/lib/loop.ts | 0 {src => apps/cli/src}/lib/machine-id.ts | 0 .../cli/src}/lib/mailbox-target.test.ts | 0 {src => apps/cli/src}/lib/mailbox-target.ts | 0 {src => apps/cli/src}/lib/mailbox.test.ts | 0 {src => apps/cli/src}/lib/mailbox.ts | 0 {src => apps/cli/src}/lib/manifest.ts | 0 {src => apps/cli/src}/lib/markdown.ts | 0 {src => apps/cli/src}/lib/mcp.test.ts | 0 {src => apps/cli/src}/lib/mcp.ts | 0 .../src}/lib/menubar/install-menubar.test.ts | 0 .../cli/src}/lib/menubar/install-menubar.ts | 4 +- {src => apps/cli/src}/lib/migrate.test.ts | 0 {src => apps/cli/src}/lib/migrate.ts | 0 {src => apps/cli/src}/lib/models.ts | 0 {src => apps/cli/src}/lib/onepassword.ts | 0 {src => apps/cli/src}/lib/overdue.ts | 0 {src => apps/cli/src}/lib/paths.ts | 0 {src => apps/cli/src}/lib/permissions.test.ts | 0 {src => apps/cli/src}/lib/permissions.ts | 0 {src => apps/cli/src}/lib/picker.test.ts | 0 {src => apps/cli/src}/lib/picker.ts | 0 .../cli/src}/lib/platform/exec.test.ts | 0 {src => apps/cli/src}/lib/platform/exec.ts | 0 {src => apps/cli/src}/lib/platform/index.ts | 0 .../cli/src}/lib/platform/ipc.test.ts | 0 {src => apps/cli/src}/lib/platform/ipc.ts | 0 .../cli/src}/lib/platform/links.test.ts | 0 {src => apps/cli/src}/lib/platform/links.ts | 0 .../cli/src}/lib/platform/paths.test.ts | 0 {src => apps/cli/src}/lib/platform/paths.ts | 0 .../cli/src}/lib/platform/posixpath.test.ts | 0 .../cli/src}/lib/platform/posixpath.ts | 0 .../cli/src}/lib/platform/process.test.ts | 0 {src => apps/cli/src}/lib/platform/process.ts | 0 .../cli/src}/lib/platform/winpath.test.ts | 0 {src => apps/cli/src}/lib/platform/winpath.ts | 0 .../cli/src}/lib/plugin-marketplace.test.ts | 0 .../cli/src}/lib/plugin-marketplace.ts | 0 {src => apps/cli/src}/lib/plugins.test.ts | 0 {src => apps/cli/src}/lib/plugins.ts | 0 .../cli/src}/lib/pricing/cost.test.ts | 0 {src => apps/cli/src}/lib/pricing/cost.ts | 0 {src => apps/cli/src}/lib/pricing/index.ts | 0 {src => apps/cli/src}/lib/pricing/prices.json | 0 .../cli/src}/lib/pricing/table.test.ts | 0 {src => apps/cli/src}/lib/pricing/table.ts | 0 .../cli/src}/lib/profiles-presets.test.ts | 0 {src => apps/cli/src}/lib/profiles-presets.ts | 0 {src => apps/cli/src}/lib/profiles.test.ts | 0 {src => apps/cli/src}/lib/profiles.ts | 0 .../cli/src}/lib/project-launch.test.ts | 0 {src => apps/cli/src}/lib/project-launch.ts | 0 {src => apps/cli/src}/lib/pty-client.ts | 0 {src => apps/cli/src}/lib/pty-server.ts | 0 {src => apps/cli/src}/lib/pwsh.ts | 0 {src => apps/cli/src}/lib/redact.ts | 0 {src => apps/cli/src}/lib/refresh.ts | 0 {src => apps/cli/src}/lib/registry.test.ts | 0 {src => apps/cli/src}/lib/registry.ts | 0 .../cli/src}/lib/resource-patterns.ts | 0 {src => apps/cli/src}/lib/resources.ts | 0 .../cli/src}/lib/resources/commands.test.ts | 0 .../cli/src}/lib/resources/commands.ts | 0 .../cli/src}/lib/resources/hooks.test.ts | 0 {src => apps/cli/src}/lib/resources/hooks.ts | 0 {src => apps/cli/src}/lib/resources/index.ts | 0 .../cli/src}/lib/resources/mcp.test.ts | 0 {src => apps/cli/src}/lib/resources/mcp.ts | 0 .../src}/lib/resources/permissions.test.ts | 0 .../cli/src}/lib/resources/permissions.ts | 0 .../cli/src}/lib/resources/rules.test.ts | 0 {src => apps/cli/src}/lib/resources/rules.ts | 0 .../cli/src}/lib/resources/skills.test.ts | 0 {src => apps/cli/src}/lib/resources/skills.ts | 0 .../cli/src}/lib/resources/subagents.test.ts | 0 .../cli/src}/lib/resources/subagents.ts | 0 {src => apps/cli/src}/lib/resources/types.ts | 0 .../cli/src}/lib/resources/workflows.test.ts | 0 .../cli/src}/lib/resources/workflows.ts | 0 {src => apps/cli/src}/lib/rotate.test.ts | 0 {src => apps/cli/src}/lib/rotate.ts | 0 {src => apps/cli/src}/lib/routines-format.ts | 0 {src => apps/cli/src}/lib/routines.test.ts | 0 {src => apps/cli/src}/lib/routines.ts | 0 .../cli/src}/lib/rules/compile.test.ts | 0 {src => apps/cli/src}/lib/rules/compile.ts | 0 .../cli/src}/lib/rules/compose.test.ts | 0 {src => apps/cli/src}/lib/rules/compose.ts | 0 {src => apps/cli/src}/lib/rules/rules.test.ts | 0 {src => apps/cli/src}/lib/rules/rules.ts | 0 {src => apps/cli/src}/lib/run-config.test.ts | 0 {src => apps/cli/src}/lib/run-config.ts | 0 .../cli/src}/lib/run-defaults.test.ts | 0 {src => apps/cli/src}/lib/run-defaults.ts | 0 {src => apps/cli/src}/lib/runner.ts | 0 {src => apps/cli/src}/lib/sandbox.test.ts | 0 {src => apps/cli/src}/lib/sandbox.ts | 0 {src => apps/cli/src}/lib/scheduler.ts | 0 .../__tests__/bundles-file-backend.test.ts | 0 .../__tests__/bundles-linux-fallback.test.ts | 0 .../secrets/__tests__/bundles-storage.test.ts | 0 .../lib/secrets/__tests__/bundles.test.ts | 0 .../secrets/__tests__/install-helper.test.ts | 0 .../secrets/__tests__/keychain-helper.test.ts | 0 .../src}/lib/secrets/__tests__/linux.test.ts | 0 .../src}/lib/secrets/__tests__/meta.test.ts | 0 .../lib/secrets/__tests__/raw-item.test.ts | 0 .../lib/secrets/__tests__/secrets.test.ts | 0 .../secrets/__tests__/sync-backend.test.ts | 0 .../src}/lib/secrets/__tests__/sync.test.ts | 0 .../cli/src}/lib/secrets/agent.test.ts | 0 {src => apps/cli/src}/lib/secrets/agent.ts | 0 .../cli/src}/lib/secrets/bundles.test.ts | 0 {src => apps/cli/src}/lib/secrets/bundles.ts | 0 .../cli/src}/lib/secrets/drivers/rush.ts | 0 .../cli/src}/lib/secrets/filestore.test.ts | 0 .../cli/src}/lib/secrets/filestore.ts | 0 .../cli/src}/lib/secrets/index.test.ts | 0 {src => apps/cli/src}/lib/secrets/index.ts | 0 .../cli/src}/lib/secrets/install-helper.ts | 0 .../src}/lib/secrets/keychain-helper.swift | 0 .../cli/src}/lib/secrets/linux.test.ts | 0 {src => apps/cli/src}/lib/secrets/linux.ts | 0 {src => apps/cli/src}/lib/secrets/mcp.test.ts | 0 {src => apps/cli/src}/lib/secrets/mcp.ts | 0 .../cli/src}/lib/secrets/policy.test.ts | 0 {src => apps/cli/src}/lib/secrets/profiles.ts | 0 .../cli/src}/lib/secrets/remote.test.ts | 0 {src => apps/cli/src}/lib/secrets/remote.ts | 0 .../cli/src}/lib/secrets/sync-backend.ts | 0 .../cli/src}/lib/secrets/sync.test.ts | 0 {src => apps/cli/src}/lib/secrets/sync.ts | 0 .../cli/src}/lib/secrets/windows.test.ts | 0 {src => apps/cli/src}/lib/secrets/windows.ts | 0 {src => apps/cli/src}/lib/self-update.test.ts | 0 {src => apps/cli/src}/lib/self-update.ts | 0 {src => apps/cli/src}/lib/serve/data.test.ts | 0 {src => apps/cli/src}/lib/serve/data.ts | 0 {src => apps/cli/src}/lib/serve/page.ts | 0 .../cli/src}/lib/serve/server.test.ts | 0 {src => apps/cli/src}/lib/serve/server.ts | 0 .../src}/lib/session/__tests__/active.test.ts | 0 .../cli/src}/lib/session/__tests__/db.test.ts | 0 .../lib/session/__tests__/discover.test.ts | 0 .../__tests__/parse-antigravity.test.ts | 0 .../lib/session/__tests__/parse-codex.test.ts | 0 .../lib/session/__tests__/parse-droid.test.ts | 0 .../lib/session/__tests__/parse-kimi.test.ts | 0 .../parse-opencode-subprocess.test.ts | 0 .../lib/session/__tests__/parse-rush.test.ts | 0 .../session/__tests__/parse-security.test.ts | 0 .../src}/lib/session/__tests__/prompt.test.ts | 0 .../session/__tests__/remote-active.test.ts | 0 .../lib/session/__tests__/remote-list.test.ts | 0 .../src}/lib/session/__tests__/render.test.ts | 0 .../testdata/session-screenshots.jsonl | 0 .../testdata/session-ssh-heavy.jsonl | 0 .../testdata/session-subagents-todos.jsonl | 0 .../cli/src}/lib/session/active.test.ts | 0 {src => apps/cli/src}/lib/session/active.ts | 0 .../cli/src}/lib/session/artifacts.ts | 0 .../cli/src}/lib/session/cloud.test.ts | 0 {src => apps/cli/src}/lib/session/cloud.ts | 0 {src => apps/cli/src}/lib/session/db.ts | 0 .../cli/src}/lib/session/digest.test.ts | 0 {src => apps/cli/src}/lib/session/digest.ts | 0 .../cli/src}/lib/session/discover.test.ts | 0 {src => apps/cli/src}/lib/session/discover.ts | 0 .../cli/src}/lib/session/ghostty-tabs.test.ts | 0 .../cli/src}/lib/session/ghostty-tabs.ts | 0 .../cli/src}/lib/session/inject.test.ts | 0 {src => apps/cli/src}/lib/session/inject.ts | 0 {src => apps/cli/src}/lib/session/parse.ts | 0 .../cli/src}/lib/session/pid-registry.test.ts | 0 .../cli/src}/lib/session/pid-registry.ts | 0 .../cli/src}/lib/session/prompt.test.ts | 0 {src => apps/cli/src}/lib/session/prompt.ts | 0 .../cli/src}/lib/session/provenance.test.ts | 0 .../cli/src}/lib/session/provenance.ts | 0 .../src}/lib/session/relative-time.test.ts | 0 .../cli/src}/lib/session/relative-time.ts | 0 .../cli/src}/lib/session/remote-active.ts | 0 .../cli/src}/lib/session/remote-list.ts | 0 .../cli/src}/lib/session/remote.test.ts | 0 {src => apps/cli/src}/lib/session/remote.ts | 0 {src => apps/cli/src}/lib/session/render.ts | 0 .../cli/src}/lib/session/state.test.ts | 0 {src => apps/cli/src}/lib/session/state.ts | 0 .../cli/src}/lib/session/sync/agents.ts | 0 .../cli/src}/lib/session/sync/config.test.ts | 0 .../cli/src}/lib/session/sync/config.ts | 0 .../cli/src}/lib/session/sync/crdt.test.ts | 0 .../cli/src}/lib/session/sync/crdt.ts | 0 .../cli/src}/lib/session/sync/manifest.ts | 0 {src => apps/cli/src}/lib/session/sync/r2.ts | 0 .../cli/src}/lib/session/sync/sync.test.ts | 0 .../cli/src}/lib/session/sync/sync.ts | 0 .../cli/src}/lib/session/tail.test.ts | 0 {src => apps/cli/src}/lib/session/tail.ts | 0 .../cli/src}/lib/session/team-filter.test.ts | 0 .../cli/src}/lib/session/team-filter.ts | 0 .../session/testdata/codex-custom-tools.jsonl | 0 .../lib/session/testdata/codex-fixture.jsonl | 0 .../testdata/droid-execute-create.jsonl | 0 .../lib/session/testdata/kimi-tool-args.jsonl | 0 .../session/testdata/tail-sample-claude.jsonl | 0 {src => apps/cli/src}/lib/session/types.ts | 0 .../cli/src}/lib/session/width.test.ts | 0 {src => apps/cli/src}/lib/session/width.ts | 0 .../cli/src}/lib/settings-manifest.ts | 0 .../cli/src}/lib/shims.adoption.test.ts | 0 .../cli/src}/lib/shims.auth-carry.test.ts | 0 .../cli/src}/lib/shims.device-pins.test.ts | 0 .../src}/lib/shims.openclaw-migration.test.ts | 0 .../src}/lib/shims.session-rewrite.test.ts | 0 {src => apps/cli/src}/lib/shims.test.ts | 0 {src => apps/cli/src}/lib/shims.ts | 0 {src => apps/cli/src}/lib/skills.test.ts | 0 {src => apps/cli/src}/lib/skills.ts | 0 {src => apps/cli/src}/lib/sqlite.ts | 0 {src => apps/cli/src}/lib/ssh-exec.test.ts | 0 {src => apps/cli/src}/lib/ssh-exec.ts | 0 {src => apps/cli/src}/lib/ssh-tunnel.test.ts | 0 {src => apps/cli/src}/lib/ssh-tunnel.ts | 6 +- .../src}/lib/staleness/__tests__/_fixtures.ts | 0 .../src}/lib/staleness/__tests__/_harness.ts | 0 .../lib/staleness/__tests__/commands.test.ts | 0 .../lib/staleness/__tests__/hooks.test.ts | 0 .../staleness/__tests__/integration.test.ts | 0 .../src}/lib/staleness/__tests__/mcp.test.ts | 0 .../staleness/__tests__/permissions.test.ts | 0 .../lib/staleness/__tests__/plugins.test.ts | 0 .../lib/staleness/__tests__/rules.test.ts | 0 .../lib/staleness/__tests__/skills.test.ts | 0 .../lib/staleness/__tests__/subagents.test.ts | 0 .../lib/staleness/__tests__/workflows.test.ts | 0 .../src}/lib/staleness/checkers/commands.ts | 0 .../cli/src}/lib/staleness/checkers/hooks.ts | 0 .../cli/src}/lib/staleness/checkers/mcp.ts | 0 .../lib/staleness/checkers/permissions.ts | 0 .../src}/lib/staleness/checkers/plugins.ts | 0 .../cli/src}/lib/staleness/checkers/rules.ts | 0 .../cli/src}/lib/staleness/checkers/skills.ts | 0 .../src}/lib/staleness/checkers/subagents.ts | 0 .../cli/src}/lib/staleness/checkers/types.ts | 0 .../src}/lib/staleness/checkers/workflows.ts | 0 .../src}/lib/staleness/detectors/commands.ts | 0 .../cli/src}/lib/staleness/detectors/hooks.ts | 0 .../cli/src}/lib/staleness/detectors/mcp.ts | 0 .../lib/staleness/detectors/permissions.ts | 0 .../src}/lib/staleness/detectors/plugins.ts | 0 .../cli/src}/lib/staleness/detectors/rules.ts | 0 .../src}/lib/staleness/detectors/skills.ts | 0 .../src}/lib/staleness/detectors/subagents.ts | 0 .../cli/src}/lib/staleness/detectors/types.ts | 0 .../src}/lib/staleness/detectors/workflows.ts | 0 .../cli/src}/lib/staleness/fingerprint.ts | 0 {src => apps/cli/src}/lib/staleness/index.ts | 0 {src => apps/cli/src}/lib/staleness/layers.ts | 0 .../cli/src}/lib/staleness/registry.test.ts | 0 .../cli/src}/lib/staleness/registry.ts | 0 {src => apps/cli/src}/lib/staleness/types.ts | 0 .../lib/staleness/writers/commands.test.ts | 0 .../src}/lib/staleness/writers/commands.ts | 0 .../cli/src}/lib/staleness/writers/hooks.ts | 0 .../cli/src}/lib/staleness/writers/kinds.ts | 0 .../src}/lib/staleness/writers/lazy-map.ts | 0 .../cli/src}/lib/staleness/writers/mcp.ts | 0 .../src}/lib/staleness/writers/permissions.ts | 0 .../cli/src}/lib/staleness/writers/plugins.ts | 0 .../cli/src}/lib/staleness/writers/rules.ts | 0 .../cli/src}/lib/staleness/writers/skills.ts | 0 .../cli/src}/lib/staleness/writers/sources.ts | 0 .../src}/lib/staleness/writers/subagents.ts | 0 .../cli/src}/lib/staleness/writers/types.ts | 0 .../src}/lib/staleness/writers/workflows.ts | 0 .../cli/src}/lib/startup/command-registry.ts | 0 .../cli/src}/lib/startup/dev-build.test.ts | 0 .../cli/src}/lib/startup/dev-build.ts | 0 {src => apps/cli/src}/lib/state.ts | 0 {src => apps/cli/src}/lib/subagents.ts | 0 {src => apps/cli/src}/lib/sync-status.test.ts | 0 {src => apps/cli/src}/lib/sync-status.ts | 0 .../cli/src}/lib/sync-umbrella.test.ts | 0 {src => apps/cli/src}/lib/sync-umbrella.ts | 0 .../src}/lib/teams/__tests__/agents.test.ts | 0 .../lib/teams/__tests__/api-summary.test.ts | 0 .../src}/lib/teams/__tests__/forEach.test.ts | 0 .../__tests__/parsers-antigravity.test.ts | 0 .../lib/teams/__tests__/parsers-grok.test.ts | 0 .../lib/teams/__tests__/parsers-kimi.test.ts | 0 .../lib/teams/__tests__/persistence.test.ts | 0 .../src}/lib/teams/__tests__/registry.test.ts | 0 .../teams/__tests__/stop-pid-reuse.test.ts | 0 .../lib/teams/__tests__/supervisor.test.ts | 0 .../testdata/kimi-stream-notool.jsonl | 0 .../__tests__/testdata/kimi-stream-tool.jsonl | 0 .../lib/teams/agents.cli-detection.test.ts | 0 .../src}/lib/teams/agents.exit-code.test.ts | 0 .../src}/lib/teams/agents.kimi-status.test.ts | 0 .../cli/src}/lib/teams/agents.sign-in.test.ts | 0 {src => apps/cli/src}/lib/teams/agents.ts | 0 {src => apps/cli/src}/lib/teams/api.ts | 0 {src => apps/cli/src}/lib/teams/debug.ts | 0 {src => apps/cli/src}/lib/teams/file_ops.ts | 0 {src => apps/cli/src}/lib/teams/forEach.ts | 0 {src => apps/cli/src}/lib/teams/index.ts | 0 {src => apps/cli/src}/lib/teams/parsers.ts | 0 .../cli/src}/lib/teams/persistence.ts | 0 .../cli/src}/lib/teams/pr-watch.test.ts | 0 {src => apps/cli/src}/lib/teams/pr-watch.ts | 0 {src => apps/cli/src}/lib/teams/registry.ts | 0 {src => apps/cli/src}/lib/teams/summarizer.ts | 0 {src => apps/cli/src}/lib/teams/supervisor.ts | 0 {src => apps/cli/src}/lib/teams/worktree.ts | 0 {src => apps/cli/src}/lib/template.ts | 0 .../lib/terminal/backends/backends.test.ts | 0 .../cli/src}/lib/terminal/backends/ghostty.ts | 0 .../cli/src}/lib/terminal/backends/index.ts | 0 .../cli/src}/lib/terminal/backends/iterm.ts | 0 .../cli/src}/lib/terminal/backends/tmux.ts | 0 .../lib/terminal/backends/vscodium-agent.ts | 0 .../cli/src}/lib/terminal/engine.test.ts | 0 {src => apps/cli/src}/lib/terminal/engine.ts | 0 {src => apps/cli/src}/lib/terminal/index.ts | 0 .../cli/src}/lib/terminal/inject.test.ts | 0 {src => apps/cli/src}/lib/terminal/inject.ts | 0 {src => apps/cli/src}/lib/terminal/policy.ts | 0 {src => apps/cli/src}/lib/terminal/quote.ts | 0 .../cli/src}/lib/terminal/resolve.test.ts | 0 {src => apps/cli/src}/lib/terminal/resolve.ts | 0 {src => apps/cli/src}/lib/terminal/shell.ts | 0 .../cli/src}/lib/terminal/transport.ts | 0 {src => apps/cli/src}/lib/terminal/types.ts | 0 {src => apps/cli/src}/lib/tmux/binary.ts | 0 {src => apps/cli/src}/lib/tmux/index.ts | 0 {src => apps/cli/src}/lib/tmux/paths.ts | 0 .../cli/src}/lib/tmux/session.test.ts | 0 {src => apps/cli/src}/lib/tmux/session.ts | 0 .../cli/src}/lib/triggers/webhook.test.ts | 0 {src => apps/cli/src}/lib/triggers/webhook.ts | 0 {src => apps/cli/src}/lib/types.ts | 0 {src => apps/cli/src}/lib/usage.ts | 0 .../cli/src}/lib/version-duplicates.ts | 0 {src => apps/cli/src}/lib/version.test.ts | 0 {src => apps/cli/src}/lib/version.ts | 0 .../src}/lib/versions.installscripts.test.ts | 0 {src => apps/cli/src}/lib/versions.test.ts | 0 {src => apps/cli/src}/lib/versions.ts | 0 .../src}/lib/wallet/__tests__/wallet.test.ts | 0 {src => apps/cli/src}/lib/wallet/index.ts | 0 {src => apps/cli/src}/lib/watchdog/index.ts | 0 .../cli/src}/lib/watchdog/read.test.ts | 0 {src => apps/cli/src}/lib/watchdog/read.ts | 0 .../cli/src}/lib/watchdog/runner.test.ts | 0 {src => apps/cli/src}/lib/watchdog/runner.ts | 0 .../testdata/tail-sample-claude.jsonl | 0 .../cli/src}/lib/watchdog/watchdog.test.ts | 0 .../cli/src}/lib/watchdog/watchdog.ts | 0 .../src}/lib/watchdog/watchdogTail.test.ts | 0 .../cli/src}/lib/watchdog/watchdogTail.ts | 0 {src => apps/cli/src}/lib/whats-new.test.ts | 0 {src => apps/cli/src}/lib/whats-new.ts | 0 {src => apps/cli/src}/lib/workflows.test.ts | 0 {src => apps/cli/src}/lib/workflows.ts | 0 .../cli/tests}/agents-memory-loading.test.ts | 0 {tests => apps/cli/tests}/agents.test.ts | 0 .../cli/tests}/artifact-actions.test.ts | 0 .../cli/tests}/bare-invocation.test.ts | 0 .../cli/tests}/bench-concurrent-writes.ts | 0 .../tests}/bench-concurrent-writes.worker.ts | 0 .../cli/tests}/cli-command-sync-spec.test.ts | 0 .../tests}/cli-resources/injection.test.ts | 0 {tests => apps/cli/tests}/daemon.test.ts | 0 .../cli/tests}/e2e/container-fresh-install.sh | 0 .../cli/tests}/e2e/fresh-install-settings.sh | 0 .../cli/tests}/events-audit.test.ts | 0 .../cli/tests}/events-redact.test.ts | 0 .../cli/tests}/exec/sanitize-env.test.ts | 0 {tests => apps/cli/tests}/extra-repos.test.ts | 0 .../cli/tests}/fixtures/cli-command-spec.json | 0 .../fixtures/permissions/test-basic.yml | 0 .../fixtures/project-resources/README.md | 0 .../repo/.agents/agents.yaml | 0 .../repo/.agents/commands/myproj.md | 0 .../repo/.agents/mcp/proj-mcp.yaml | 0 .../repo/.agents/rules/rules.yaml | 0 .../.agents/rules/subrules/project-marker.md | 0 .../.agents/rules/subrules/project-secret.md | 0 .../repo/.agents/skills/myskill/SKILL.md | 0 .../project-resources/repo/agents.yaml | 0 .../project-resources/repo/sub/deep/.gitkeep | 0 .../project-resources/sibling/.gitkeep | 0 .../fixtures/teams/claude-session.jsonl | 0 .../tests}/fixtures/teams/codex-session.jsonl | 0 .../fixtures/teams/cursor-session.jsonl | 0 .../fixtures/teams/gemini-session.jsonl | 0 .../fixtures/teams/opencode-session.jsonl | 0 {tests => apps/cli/tests}/git.test.ts | 0 {tests => apps/cli/tests}/help-output.test.ts | 0 .../cli/tests}/hook-doc-sidecar.test.ts | 0 .../cli/tests}/hooks-soft-delete.test.ts | 0 {tests => apps/cli/tests}/jobs.test.ts | 0 .../cli/tests}/non-interactive.test.ts | 0 .../tests}/package-name-consistency.test.ts | 0 {tests => apps/cli/tests}/perf-agents.test.ts | 0 {tests => apps/cli/tests}/permissions.test.ts | 0 .../cli/tests}/plugin-drift-detail.test.ts | 0 .../cli/tests}/plugin-manifest-repair.test.ts | 0 .../cli/tests}/project-agents-dir.test.ts | 0 .../tests}/project-resources-pipeline.test.ts | 0 .../cli/tests}/prune-command.test.ts | 0 {tests => apps/cli/tests}/registry.test.ts | 0 {tests => apps/cli/tests}/repo-view.test.ts | 0 .../cli/tests}/run-defaults-command.test.ts | 0 {tests => apps/cli/tests}/runner-loop.test.ts | 0 {tests => apps/cli/tests}/runner.test.ts | 0 {tests => apps/cli/tests}/sandbox.test.ts | 0 {tests => apps/cli/tests}/scheduler.test.ts | 0 .../cli/tests}/session-artifacts.test.ts | 0 {tests => apps/cli/tests}/shims.test.ts | 0 .../cli/tests}/teams-events.test.ts | 0 .../cli/tests}/teams-session-id.test.ts | 0 {tests => apps/cli/tests}/template.test.ts | 0 .../cli/tests}/versions-sync.test.ts | 0 {tests => apps/cli/tests}/versions.test.ts | 0 tsconfig.json => apps/cli/tsconfig.json | 0 vitest.config.ts => apps/cli/vitest.config.ts | 0 {packages => apps}/factory/.gitignore | 0 {packages => apps}/factory/.vscodeignore | 0 {packages => apps}/factory/AGENTS.md | 0 {packages => apps}/factory/README.md | 0 {packages => apps}/factory/app/.gitignore | 0 {packages => apps}/factory/app/bun.lock | 0 {packages => apps}/factory/app/floorData.ts | 0 {packages => apps}/factory/app/main.ts | 0 {packages => apps}/factory/app/package.json | 0 {packages => apps}/factory/app/preload.ts | 0 .../factory/app/scripts/build.sh | 0 {packages => apps}/factory/app/scripts/dev.sh | 0 .../factory/app/scripts/install.sh | 0 .../factory/app/scripts/release.sh | 0 {packages => apps}/factory/app/tsconfig.json | 0 .../factory/assets/agents-activity.svg | 0 {packages => apps}/factory/assets/agents.png | Bin {packages => apps}/factory/assets/alerter | Bin .../factory/assets/antigravity.png | Bin .../factory/assets/chatgpt-light.png | Bin {packages => apps}/factory/assets/chatgpt.png | Bin {packages => apps}/factory/assets/claude.png | Bin .../factory/assets/cursor-light.png | Bin {packages => apps}/factory/assets/cursor.png | Bin .../factory/assets/design/components.png | Bin {packages => apps}/factory/assets/gemini.png | Bin {packages => apps}/factory/assets/github.png | Bin {packages => apps}/factory/assets/grok.png | Bin {packages => apps}/factory/assets/linear.png | Bin {packages => apps}/factory/assets/mcp.png | Bin .../factory/assets/opencode.png | Bin {packages => apps}/factory/assets/rush.png | Bin {packages => apps}/factory/assets/vscode.png | Bin .../factory/icons/agents-icon.png | Bin .../factory/icons/agents-icons.json | 0 .../factory/icons/antigravity.png | Bin .../factory/icons/claude-icon.png | Bin .../factory/icons/codex-icon.png | Bin .../factory/icons/codex-light-icon.png | Bin .../factory/icons/cursor-icon.png | Bin .../factory/icons/cursor-light-icon.png | Bin .../factory/icons/gemini-icon.png | Bin {packages => apps}/factory/icons/grok.png | Bin .../factory/icons/opencode-icon.png | Bin .../factory/mcp/notifications/bun.lock | 0 .../factory/mcp/notifications/package.json | 0 .../factory/mcp/notifications/src/index.ts | 0 .../factory/mcp/notifications/src/server.ts | 0 .../factory/mcp/notifications/tsconfig.json | 0 {packages => apps}/factory/package.json | 0 .../factory/scripts/activate.sh | 0 .../factory/scripts/bench-fs-watch.ts | 0 {packages => apps}/factory/scripts/build.sh | 0 {packages => apps}/factory/scripts/install.sh | 0 {packages => apps}/factory/scripts/release.sh | 0 .../factory/src/core/agentInventory.test.ts | 0 .../factory/src/core/agentInventory.ts | 0 .../factory/src/core/agentModels.test.ts | 0 .../factory/src/core/agentModels.ts | 0 .../factory/src/core/agentResources.test.ts | 0 .../factory/src/core/agentResources.ts | 0 .../factory/src/core/agentlinks.test.ts | 0 .../factory/src/core/agentlinks.ts | 0 .../factory/src/core/agents.test.ts | 0 {packages => apps}/factory/src/core/agents.ts | 0 .../factory/src/core/agentsBin.test.ts | 0 .../factory/src/core/agentsBin.ts | 0 .../factory/src/core/binResolve.test.ts | 0 .../factory/src/core/binResolve.ts | 0 .../factory/src/core/claudemd.test.ts | 0 .../factory/src/core/claudemd.ts | 0 .../factory/src/core/commitgen.test.ts | 0 .../factory/src/core/commitgen.ts | 0 .../factory/src/core/deviceHealth.test.ts | 0 .../factory/src/core/deviceHealth.ts | 0 .../factory/src/core/dispatchRanking.test.ts | 0 .../factory/src/core/dispatchRanking.ts | 0 .../factory/src/core/draftPrompt.test.ts | 0 .../factory/src/core/draftPrompt.ts | 0 .../factory/src/core/foreman.config.test.ts | 0 .../factory/src/core/foreman.config.ts | 0 .../factory/src/core/foreman.cycle.test.ts | 0 .../factory/src/core/foreman.cycle.ts | 0 .../factory/src/core/foreman.digest.test.ts | 0 .../factory/src/core/foreman.digest.ts | 0 .../factory/src/core/foreman.target.test.ts | 0 .../factory/src/core/foreman.target.ts | 0 .../factory/src/core/foreman.windowId.test.ts | 0 .../factory/src/core/foreman.windowId.ts | 0 .../factory/src/core/git.test.ts | 0 {packages => apps}/factory/src/core/git.ts | 0 .../factory/src/core/handoff.ts | 0 .../factory/src/core/hostInventory.test.ts | 0 .../factory/src/core/hostInventory.ts | 0 .../factory/src/core/inject.test.ts | 0 {packages => apps}/factory/src/core/inject.ts | 0 .../factory/src/core/labelgen.test.ts | 0 .../factory/src/core/labelgen.ts | 0 .../factory/src/core/liveSession.ts | 0 .../factory/src/core/liveness.ts | 0 .../factory/src/core/panel.helpers.ts | 0 .../factory/src/core/pdfEngine.test.ts | 0 .../factory/src/core/pdfEngine.ts | 0 .../factory/src/core/peerMessaging.test.ts | 0 .../factory/src/core/peerMessaging.ts | 0 .../factory/src/core/prChecks.test.ts | 0 .../factory/src/core/prChecks.ts | 0 .../factory/src/core/prewarm.simple.test.ts | 0 .../factory/src/core/prewarm.simple.ts | 0 .../factory/src/core/prewarm.test.ts | 0 .../factory/src/core/prewarm.ts | 0 .../factory/src/core/processStartTime.ts | 0 .../factory/src/core/projectDetect.test.ts | 0 .../factory/src/core/projectDetect.ts | 0 .../factory/src/core/projectIndex.test.ts | 0 .../factory/src/core/projectIndex.ts | 0 .../factory/src/core/prompts.test.ts | 0 .../factory/src/core/prompts.ts | 0 .../factory/src/core/remoteSessions.test.ts | 0 .../factory/src/core/remoteSessions.ts | 0 .../factory/src/core/repoIndex.test.ts | 0 .../factory/src/core/repoIndex.ts | 0 .../factory/src/core/repoSync.test.ts | 0 .../factory/src/core/repoSync.ts | 0 .../factory/src/core/resumeInBest.test.ts | 0 .../factory/src/core/resumeInBest.ts | 0 .../factory/src/core/rushToken.ts | 0 .../factory/src/core/session-read.test.ts | 0 .../factory/src/core/session.activity.ts | 0 .../factory/src/core/session.summary.test.ts | 0 .../factory/src/core/session.summary.ts | 0 .../factory/src/core/sessionName.test.ts | 0 .../factory/src/core/sessionName.ts | 0 .../factory/src/core/sessions.persist.ts | 0 .../factory/src/core/sessions.ts | 0 .../factory/src/core/settings.test.ts | 0 .../factory/src/core/settings.ts | 0 {packages => apps}/factory/src/core/spawn.ts | 0 .../factory/src/core/swarm.detect.test.ts | 0 .../factory/src/core/swarm.detect.ts | 0 .../factory/src/core/swarm.skills.test.ts | 0 .../factory/src/core/swarmifyConfig.test.ts | 0 .../factory/src/core/swarmifyConfig.ts | 0 .../factory/src/core/tasks.test.ts | 0 {packages => apps}/factory/src/core/tasks.ts | 0 .../src/core/terminalReadiness.test.ts | 0 .../factory/src/core/terminalReadiness.ts | 0 .../factory/src/core/terminals.test.ts | 0 .../factory/src/core/terminals.ts | 0 .../src/core/testdata/active-sessions.json | 0 .../src/core/testdata/agentlinks/AGENTS.md | 0 .../src/core/testdata/agentlinks/CLAUDE.md | 0 .../src/core/testdata/agentlinks/GEMINI.md | 0 .../src/core/testdata/claude-session.jsonl | 0 .../src/core/testdata/claude-waiting.jsonl | 0 .../testdata/hostInventory/hosts-list.json | 0 .../testdata/hostInventory/view-host.json | 0 .../src/core/testdata/narrative-claude.jsonl | 0 .../src/core/testdata/narrative-codex.jsonl | 0 .../src/core/testdata/narrative-gemini.jsonl | 0 .../src/core/testdata/view-claude.json | 0 .../factory/src/core/utils.test.ts | 0 {packages => apps}/factory/src/core/utils.ts | 0 .../factory/src/core/watchdog.test.ts | 0 .../factory/src/core/watchdog.ts | 0 .../factory/src/core/watchdogLog.test.ts | 0 .../factory/src/core/watchdogLog.ts | 0 .../factory/src/core/watchdogTail.test.ts | 0 .../factory/src/core/watchdogTail.ts | 0 .../factory/src/core/worktree.ts | 0 .../factory/src/mcp/watchdog-bridge.ts | 0 .../factory/src/mcp/watchdog-server.ts | 0 .../factory/src/mcp/watchdogInstall.ts | 0 .../factory/src/monitor/broadcast.test.ts | 0 .../factory/src/monitor/broadcast.ts | 0 .../factory/src/monitor/broadcastTypes.ts | 0 .../factory/src/monitor/follower.test.ts | 0 .../factory/src/monitor/follower.ts | 0 .../factory/src/monitor/gate.test.ts | 0 .../factory/src/monitor/gate.ts | 0 .../factory/src/monitor/host.ts | 0 .../factory/src/monitor/leader.test.ts | 0 .../factory/src/monitor/leader.ts | 0 .../factory/src/monitor/lease.ts | 0 .../monitor/panelSnapshotBroadcast.test.ts | 0 .../factory/src/monitor/probes.ts | 0 .../factory/src/monitor/protocol.ts | 0 .../src/monitor/readinessBroadcast.test.ts | 0 .../src/monitor/readinessDetector.test.ts | 0 .../factory/src/monitor/readinessDetector.ts | 0 .../factory/src/monitor/sessionParse.ts | 0 .../src/monitor/sessionWatcher.test.ts | 0 .../factory/src/monitor/sessionWatcher.ts | 0 .../src/monitor/snapshotDetector.test.ts | 0 .../factory/src/monitor/snapshotDetector.ts | 0 .../src/monitor/watchdogBroadcast.test.ts | 0 .../src/monitor/watchdogDetector.test.ts | 0 .../factory/src/monitor/watchdogDetector.ts | 0 .../factory/src/vscode/agentPanel.vscode.ts | 0 .../src/vscode/agentlinks.vscode.test.ts | 0 .../factory/src/vscode/agentlinks.vscode.ts | 0 .../factory/src/vscode/agents.vscode.ts | 0 .../factory/src/vscode/claudemd.vscode.ts | 0 .../factory/src/vscode/contextFiles.ts | 0 .../factory/src/vscode/customEditor.ts | 0 .../factory/src/vscode/deviceHealth.vscode.ts | 0 .../factory/src/vscode/extension.ts | 0 .../factory/src/vscode/foreman.audio.ts | 0 .../factory/src/vscode/foreman.registry.ts | 0 .../factory/src/vscode/foreman.smart.ts | 0 .../factory/src/vscode/foreman.sources.ts | 0 .../factory/src/vscode/foreman.vscode.ts | 0 .../src/vscode/git.integration.test.ts | 0 .../factory/src/vscode/git.vscode.ts | 0 .../factory/src/vscode/github.vscode.ts | 0 .../factory/src/vscode/issuesPanel.vscode.ts | 0 .../factory/src/vscode/linear.vscode.ts | 0 .../src/vscode/notifications.vscode.ts | 0 .../factory/src/vscode/prewarm.e2e.test.ts | 0 .../factory/src/vscode/prewarm.vscode.ts | 0 .../factory/src/vscode/recap.vscode.test.ts | 0 .../factory/src/vscode/recap.vscode.ts | 0 .../src/vscode/remoteSessions.vscode.test.ts | 0 .../src/vscode/remoteSessions.vscode.ts | 0 .../sessionTracker.followerRouting.test.ts | 0 .../factory/src/vscode/sessionTracker.test.ts | 0 .../factory/src/vscode/sessionTracker.ts | 0 .../src/vscode/sessions.vscode.test.ts | 0 .../factory/src/vscode/sessions.vscode.ts | 0 .../factory/src/vscode/settings.vscode.ts | 0 .../factory/src/vscode/swarm.vscode.ts | 0 .../src/vscode/swarmifyConfig.vscode.test.ts | 0 .../src/vscode/swarmifyConfig.vscode.ts | 0 .../factory/src/vscode/tasks.vscode.ts | 0 .../terminalReadiness.followerRouting.test.ts | 0 .../terminalReadiness.integration.test.ts | 0 .../factory/src/vscode/terminalReadiness.ts | 0 .../src/vscode/terminals.vscode.test.ts | 0 .../factory/src/vscode/terminals.vscode.ts | 0 .../factory/src/vscode/theme.vscode.ts | 0 {packages => apps}/factory/src/vscode/tmux.ts | 0 .../factory/src/vscode/watchdog.vscode.ts | 0 .../factory/src/vscode/workbench.vscode.ts | 0 {packages => apps}/factory/tsconfig.json | 0 {packages => apps}/factory/ui/.gitignore | 0 {packages => apps}/factory/ui/AGENTS.md | 0 {packages => apps}/factory/ui/CLAUDE.md | 0 {packages => apps}/factory/ui/GEMINI.md | 0 {packages => apps}/factory/ui/bun.lock | 0 .../layout-1-mission-control.html | 0 .../layout-2-split-ops.html | 0 .../layout-3-grid-matrix.html | 0 .../layout-4-timeline-rail.html | 0 .../layout-5-dashboard-gauges.html | 0 .../layout-6-kanban-flow.html | 0 .../layout-7-task-staleness.html | 0 .../layout-8-calendar-gradient.html | 0 {packages => apps}/factory/ui/editor/App.tsx | 0 .../ui/editor/components/BubbleMenu.tsx | 0 .../factory/ui/editor/components/Editor.tsx | 0 .../ui/editor/components/FrontmatterPanel.tsx | 0 .../factory/ui/editor/components/Outline.tsx | 0 .../editor/components/SlashCommandsList.tsx | 0 .../factory/ui/editor/components/Toolbar.tsx | 0 .../factory/ui/editor/extensions/Callout.ts | 0 .../ui/editor/extensions/FileAttachment.ts | 0 .../ui/editor/extensions/KeyboardShortcuts.ts | 0 .../ui/editor/extensions/SlashCommands.ts | 0 .../factory/ui/editor/extensions/Toggle.ts | 0 .../ui/editor/extensions/VideoBlock.ts | 0 .../factory/ui/editor/frontmatter.test.ts | 0 .../factory/ui/editor/frontmatter.ts | 0 .../factory/ui/editor/index.html | 0 {packages => apps}/factory/ui/editor/main.tsx | 0 .../factory/ui/editor/styles.css | 0 {packages => apps}/factory/ui/package.json | 0 .../factory/ui/settings/App.tsx | 0 .../ui/settings/components/FactorySection.tsx | 0 .../ui/settings/components/bench/BenchTab.tsx | 0 .../ui/settings/components/bench/CycleBar.tsx | 0 .../components/bench/DeadlineView.tsx | 0 .../settings/components/bench/KanbanBoard.tsx | 0 .../components/bench/TaskCalendar.tsx | 0 .../ui/settings/components/bench/TaskCard.tsx | 0 .../settings/components/bench/TaskDetail.tsx | 0 .../ui/settings/components/bench/bench.css | 0 .../ui/settings/components/bench/index.ts | 0 .../components/common/CheckboxField.tsx | 0 .../ui/settings/components/common/ExtLink.tsx | 0 .../components/common/OAuthButtons.tsx | 0 .../components/common/OAuthDialog.tsx | 0 .../components/common/SectionHeader.tsx | 0 .../components/common/StatusBadge.tsx | 0 .../common/WorkspaceConfigSection.tsx | 0 .../ui/settings/components/common/index.ts | 0 .../dashboard/AgentTerminalsSection.tsx | 0 .../dashboard/ApprovalQueueSection.tsx | 0 .../components/dashboard/DashboardIntro.tsx | 0 .../dashboard/RecentSwarmsSection.tsx | 0 .../dashboard/RunningAgentsSection.tsx | 0 .../components/dashboard/ShortcutsSection.tsx | 0 .../components/dashboard/helpers.test.ts | 0 .../settings/components/dashboard/helpers.ts | 0 .../components/foreman/ForemanCursor.tsx | 0 .../components/foreman/ForemanOrb.tsx | 0 .../ui/settings/components/foreman/index.ts | 0 .../mission-control/ActiveSwarmsPane.tsx | 0 .../mission-control/AgentAvatar.test.ts | 0 .../mission-control/AgentAvatar.tsx | 0 .../mission-control/AgentSelect.tsx | 0 .../mission-control/AgentTerminalsPane.tsx | 0 .../mission-control/BacklogCenter.tsx | 0 .../mission-control/BatchToggle.tsx | 0 .../mission-control/CloudActivityFeed.tsx | 0 .../mission-control/CommandPalette.tsx | 0 .../mission-control/CompletedSwarmsPane.tsx | 0 .../mission-control/DispatchPanel.tsx | 0 .../mission-control/FailureCard.tsx | 0 .../components/mission-control/FeedItem.tsx | 0 .../mission-control/FloorControls.tsx | 0 .../mission-control/FloorSidebar.tsx | 0 .../components/mission-control/HostDetail.tsx | 0 .../components/mission-control/HostSelect.tsx | 0 .../mission-control/MissionControlTab.tsx | 0 .../components/mission-control/ModeSeg.tsx | 0 .../mission-control/NeedsYouClusters.tsx | 0 .../components/mission-control/NotifyBell.tsx | 0 .../components/mission-control/PlanReview.tsx | 0 .../mission-control/ProjectSelect.tsx | 0 .../mission-control/SavedViewsBar.tsx | 0 .../components/mission-control/StatusBar.tsx | 0 .../mission-control/StructuredReply.tsx | 0 .../mission-control/SwarmDetailPane.tsx | 0 .../mission-control/TicketDetail.tsx | 0 .../mission-control/TodoChecklist.tsx | 0 .../components/mission-control/TopBar.tsx | 0 .../mission-control/UnifiedAgentsPane.tsx | 0 .../mission-control/WatchdogSeg.tsx | 0 .../mission-control/cloudActivity.test.ts | 0 .../mission-control/cloudActivity.ts | 0 .../mission-control/design-system.css | 0 .../components/mission-control/dispatch.css | 0 .../mission-control/dispatch.test.ts | 0 .../components/mission-control/dispatch.ts | 0 .../mission-control/dispatch.types.ts | 0 .../mission-control/dispatchIcons.tsx | 0 .../mission-control/dispatchInput.tsx | 0 .../components/mission-control/floor.css | 0 .../mission-control/floorAdapter.test.ts | 0 .../mission-control/floorAdapter.ts | 0 .../mission-control/floorModel.test.ts | 0 .../components/mission-control/floorModel.ts | 0 .../components/mission-control/icons.tsx | 0 .../components/mission-control/index.ts | 0 .../mission-control/savedViews.test.ts | 0 .../components/mission-control/savedViews.ts | 0 .../testdata/cloud-summary-zavknykt.txt | 0 .../components/mission-control/types.ts | 0 .../components/mission-control/useNow.ts | 0 .../settings/components/panel/AgentDial.tsx | 0 .../components/panel/AgentResources.tsx | 0 .../components/panel/ChannelSelect.tsx | 0 .../components/panel/DisplayControls.tsx | 0 .../components/panel/HarnessRoster.tsx | 0 .../components/panel/LaunchMatrix.tsx | 0 .../components/panel/MachineStatus.tsx | 0 .../ui/settings/components/panel/PanelTab.tsx | 0 .../ui/settings/components/panel/PatchBay.tsx | 0 .../components/panel/ProjectRulesSection.tsx | 0 .../settings/components/panel/StatusBank.tsx | 0 .../settings/components/panel/TuneSection.tsx | 0 .../ui/settings/components/panel/index.ts | 0 .../ui/settings/components/panel/panel.css | 0 .../ui/settings/components/tabs/GuideTab.tsx | 0 .../ui/settings/components/tabs/index.ts | 0 .../ui/settings/components/ui/badge.tsx | 0 .../ui/settings/components/ui/button.tsx | 0 .../ui/settings/components/ui/card.tsx | 0 .../ui/settings/components/ui/checkbox.tsx | 0 .../settings/components/ui/dropdown-menu.tsx | 0 .../ui/settings/components/ui/input.tsx | 0 .../ui/settings/components/ui/scroll-area.tsx | 0 .../ui/settings/components/ui/tabs.tsx | 0 .../factory/ui/settings/constants/index.ts | 0 .../factory/ui/settings/hooks/index.ts | 0 .../ui/settings/hooks/usePanelVisibility.ts | 0 .../factory/ui/settings/hooks/useTheme.ts | 0 .../factory/ui/settings/hooks/useVscodeApi.ts | 0 .../factory/ui/settings/host/bridge.test.ts | 0 .../factory/ui/settings/host/bridge.ts | 0 .../factory/ui/settings/index.css | 0 .../factory/ui/settings/index.html | 0 .../factory/ui/settings/lib/utils.ts | 0 .../factory/ui/settings/main.tsx | 0 .../factory/ui/settings/preview/index.html | 0 .../factory/ui/settings/preview/preview.tsx | 0 .../factory/ui/settings/reference/bench.html | 0 .../factory/ui/settings/reference/panel.html | 0 .../ui/settings/reference/settings.css | 0 .../ui/settings/reference/settings.html | 0 .../ui/settings/reference/variant-a.css | 0 .../ui/settings/reference/variant-a.html | 0 .../factory/ui/settings/shared/protocol.ts | 0 .../factory/ui/settings/types/index.ts | 0 .../ui/settings/utils/formatting.test.ts | 0 .../factory/ui/settings/utils/formatting.ts | 0 .../factory/ui/settings/utils/icons.test.ts | 0 .../factory/ui/settings/utils/icons.ts | 0 .../factory/ui/settings/utils/index.ts | 0 .../factory/ui/settings/utils/markdown.ts | 0 .../factory/ui/settings/utils/tree.ts | 0 .../factory/ui/settings/utils/validation.ts | 0 {packages => apps}/factory/ui/tsconfig.json | 0 .../factory/ui/vite.editor.config.ts | 0 .../factory/ui/vite.preview.config.ts | 0 .../factory/ui/vite.settings.config.ts | 0 .../factory/ui/vite.standalone.config.ts | 0 .../computer-mac}/.gitignore | 0 .../computer-mac}/Package.swift | 0 .../computer-mac}/README.md | 0 .../Sources/ComputerHelper/AX.swift | 0 .../Sources/ComputerHelper/Apps.swift | 0 .../Sources/ComputerHelper/CursorSprite.swift | 0 .../Sources/ComputerHelper/ElementCache.swift | 0 .../Sources/ComputerHelper/EventSynth.swift | 0 .../Sources/ComputerHelper/Events.swift | 0 .../Sources/ComputerHelper/Mouse.swift | 0 .../Sources/ComputerHelper/Notify.swift | 0 .../Sources/ComputerHelper/RPC.swift | 0 .../Sources/ComputerHelper/Screenshot.swift | 0 .../Sources/ComputerHelper/Wait.swift | 0 .../Sources/ComputerHelper/main.swift | 0 .../computer-mac}/scripts/build.sh | 0 .../computer-win}/.gitignore | 0 .../computer-win}/Apps.cs | 0 .../computer-win}/Automation.cs | 0 .../computer-win}/ElementCache.cs | 0 .../computer-win}/Program.cs | 0 .../computer-win}/Rpc.cs | 0 .../computer-win}/Screenshot.cs | 0 .../computer-win}/computer-helper-win.csproj | 0 .../computer-win}/smoke/smoke.mjs | 0 package.json | 112 +-- 1290 files changed, 1187 insertions(+), 940 deletions(-) rename .crabbox.yaml => apps/cli/.crabbox.yaml (100%) rename .npmignore => apps/cli/.npmignore (100%) rename CHANGELOG.md => apps/cli/CHANGELOG.md (100%) create mode 100644 apps/cli/LICENSE create mode 100644 apps/cli/README.md rename {bench => apps/cli/bench}/after.json (100%) rename {bench => apps/cli/bench}/baseline.json (100%) rename {bench => apps/cli/bench}/offload-smoke.sh (100%) rename {bench => apps/cli/bench}/resolve-perf.ts (100%) rename {bench => apps/cli/bench}/sessions-perf.ts (100%) rename {bench => apps/cli/bench}/tty-vs-headless.py (100%) rename bun.lock => apps/cli/bun.lock (100%) rename {packages/computer-helper => apps/cli/menubar}/.gitignore (100%) rename {packages/menubar-helper => apps/cli/menubar}/Package.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/AgentsCLI.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/Bench.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/Clip.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/Hotkey.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/Icon.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/LocalState.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/Models.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/StatusItemController.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/Sources/MenubarHelper/main.swift (100%) rename {packages/menubar-helper => apps/cli/menubar}/scripts/build.sh (100%) create mode 100644 apps/cli/package.json rename {scripts => apps/cli/scripts}/Agents CLI.app.sha256 (100%) rename {scripts => apps/cli/scripts}/bench-ssh.mjs (100%) rename {scripts => apps/cli/scripts}/bench-staleness.ts (100%) rename {scripts => apps/cli/scripts}/build-bin.sh (100%) rename {scripts => apps/cli/scripts}/build-keychain-helper.sh (100%) rename {scripts => apps/cli/scripts}/build-win.sh (94%) rename {scripts => apps/cli/scripts}/build.sh (100%) rename {scripts => apps/cli/scripts}/companion-shim/README.md (100%) rename {scripts => apps/cli/scripts}/companion-shim/bin/agents.js (100%) rename {scripts => apps/cli/scripts}/companion-shim/scripts/postinstall.js (100%) rename {scripts => apps/cli/scripts}/install-helper.js (100%) rename {scripts => apps/cli/scripts}/install.sh (100%) rename {scripts => apps/cli/scripts}/keychain-entitlements.plist (100%) rename {scripts => apps/cli/scripts}/postinstall.js (100%) rename {scripts => apps/cli/scripts}/postinstall.test.ts (100%) rename {scripts => apps/cli/scripts}/release.sh (99%) rename {scripts => apps/cli/scripts}/sandbox.sh (100%) rename {scripts => apps/cli/scripts}/scrub-orphan-branches.sh (100%) rename {scripts => apps/cli/scripts}/setup-npm-secret.sh (100%) rename {scripts => apps/cli/scripts}/verify-keychain-helper.sh (100%) rename {scripts => apps/cli/scripts}/verify-menubar-helper.sh (86%) rename {src => apps/cli/src}/browser.ts (100%) rename {src => apps/cli/src}/commands/__tests__/auto-install-resolver.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/beta.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/inspect.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/profiles-create.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-active-grouping.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-columns.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-host-filter.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-live-preview.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-machine-grouping.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions-tail.test.ts (100%) rename {src => apps/cli/src}/commands/__tests__/sessions.test.ts (100%) rename {src => apps/cli/src}/commands/alias.ts (100%) rename {src => apps/cli/src}/commands/audit.ts (100%) rename {src => apps/cli/src}/commands/beta.ts (100%) rename {src => apps/cli/src}/commands/browser-picker.ts (100%) rename {src => apps/cli/src}/commands/browser.pdf-har.test.ts (100%) rename {src => apps/cli/src}/commands/browser.ts (100%) rename {src => apps/cli/src}/commands/budget.test.ts (100%) rename {src => apps/cli/src}/commands/budget.ts (100%) rename {src => apps/cli/src}/commands/check.test.ts (100%) rename {src => apps/cli/src}/commands/check.ts (100%) rename {src => apps/cli/src}/commands/cli.ts (100%) rename {src => apps/cli/src}/commands/cloud.ts (100%) rename {src => apps/cli/src}/commands/commands.ts (100%) rename {src => apps/cli/src}/commands/computer-actions.test.ts (100%) rename {src => apps/cli/src}/commands/computer-actions.ts (99%) rename {src => apps/cli/src}/commands/computer.test.ts (100%) rename {src => apps/cli/src}/commands/computer.ts (99%) rename {src => apps/cli/src}/commands/cost.test.ts (100%) rename {src => apps/cli/src}/commands/cost.ts (100%) rename {src => apps/cli/src}/commands/daemon.ts (100%) rename {src => apps/cli/src}/commands/defaults.test.ts (100%) rename {src => apps/cli/src}/commands/defaults.ts (100%) rename {src => apps/cli/src}/commands/doctor.test.ts (100%) rename {src => apps/cli/src}/commands/doctor.ts (100%) rename {src => apps/cli/src}/commands/drive.ts (100%) rename {src => apps/cli/src}/commands/events.ts (100%) rename {src => apps/cli/src}/commands/exec-loop.test.ts (100%) rename {src => apps/cli/src}/commands/exec.ts (100%) rename {src => apps/cli/src}/commands/factory.ts (100%) rename {src => apps/cli/src}/commands/feedback.test.ts (100%) rename {src => apps/cli/src}/commands/feedback.ts (100%) rename {src => apps/cli/src}/commands/focus.test.ts (100%) rename {src => apps/cli/src}/commands/focus.ts (100%) rename {src => apps/cli/src}/commands/go.test.ts (100%) rename {src => apps/cli/src}/commands/go.ts (100%) rename {src => apps/cli/src}/commands/helper.ts (100%) rename {src => apps/cli/src}/commands/hooks.ts (100%) rename {src => apps/cli/src}/commands/hosts.ts (100%) rename {src => apps/cli/src}/commands/import.ts (100%) rename {src => apps/cli/src}/commands/inspect.test.ts (100%) rename {src => apps/cli/src}/commands/inspect.ts (100%) rename {src => apps/cli/src}/commands/lock.ts (100%) rename {src => apps/cli/src}/commands/logs.ts (100%) rename {src => apps/cli/src}/commands/mcp.ts (100%) rename {src => apps/cli/src}/commands/menubar.ts (100%) rename {src => apps/cli/src}/commands/message.ts (100%) rename {src => apps/cli/src}/commands/models.test.ts (100%) rename {src => apps/cli/src}/commands/models.ts (100%) rename {src => apps/cli/src}/commands/packages.test.ts (100%) rename {src => apps/cli/src}/commands/packages.ts (100%) rename {src => apps/cli/src}/commands/permissions.test.ts (100%) rename {src => apps/cli/src}/commands/permissions.ts (100%) rename {src => apps/cli/src}/commands/plugins.test.ts (100%) rename {src => apps/cli/src}/commands/plugins.ts (100%) rename {src => apps/cli/src}/commands/profiles.ts (100%) rename {src => apps/cli/src}/commands/prune.ts (100%) rename {src => apps/cli/src}/commands/pty.ts (100%) rename {src => apps/cli/src}/commands/pull.ts (100%) rename {src => apps/cli/src}/commands/push.ts (100%) rename {src => apps/cli/src}/commands/refresh-rules.ts (100%) rename {src => apps/cli/src}/commands/repo.test.ts (100%) rename {src => apps/cli/src}/commands/repo.ts (100%) rename {src => apps/cli/src}/commands/resource-view.test.ts (100%) rename {src => apps/cli/src}/commands/resource-view.ts (100%) rename {src => apps/cli/src}/commands/routines-webhook.test.ts (100%) rename {src => apps/cli/src}/commands/routines.ts (100%) rename {src => apps/cli/src}/commands/rules.ts (100%) rename {src => apps/cli/src}/commands/secrets-migrate.ts (100%) rename {src => apps/cli/src}/commands/secrets-sync.ts (100%) rename {src => apps/cli/src}/commands/secrets.test.ts (100%) rename {src => apps/cli/src}/commands/secrets.ts (100%) rename {src => apps/cli/src}/commands/serve.ts (100%) rename {src => apps/cli/src}/commands/sessions-inject.ts (100%) rename {src => apps/cli/src}/commands/sessions-picker.ts (100%) rename {src => apps/cli/src}/commands/sessions-resume.ts (100%) rename {src => apps/cli/src}/commands/sessions-sync.ts (100%) rename {src => apps/cli/src}/commands/sessions-tail.ts (100%) rename {src => apps/cli/src}/commands/sessions.overview.test.ts (100%) rename {src => apps/cli/src}/commands/sessions.serialize.test.ts (100%) rename {src => apps/cli/src}/commands/sessions.ts (100%) rename {src => apps/cli/src}/commands/setup.ts (100%) rename {src => apps/cli/src}/commands/skills.ts (100%) rename {src => apps/cli/src}/commands/ssh.ts (100%) rename {src => apps/cli/src}/commands/status.ts (100%) rename {src => apps/cli/src}/commands/subagents.ts (100%) rename {src => apps/cli/src}/commands/sync.ts (100%) rename {src => apps/cli/src}/commands/teams-picker.ts (100%) rename {src => apps/cli/src}/commands/teams.ts (100%) rename {src => apps/cli/src}/commands/tmux.ts (100%) rename {src => apps/cli/src}/commands/trash.ts (100%) rename {src => apps/cli/src}/commands/usage.ts (100%) rename {src => apps/cli/src}/commands/utils.ts (100%) rename {src => apps/cli/src}/commands/versions.ts (100%) rename {src => apps/cli/src}/commands/view.resources.test.ts (100%) rename {src => apps/cli/src}/commands/view.ts (100%) rename {src => apps/cli/src}/commands/wallet.test.ts (100%) rename {src => apps/cli/src}/commands/wallet.ts (100%) rename {src => apps/cli/src}/commands/watchdog.test.ts (100%) rename {src => apps/cli/src}/commands/watchdog.ts (100%) rename {src => apps/cli/src}/commands/workflows.ts (100%) rename {src => apps/cli/src}/commands/worktree.ts (100%) rename {src => apps/cli/src}/computer.ts (100%) rename {src => apps/cli/src}/index.ts (100%) rename {src => apps/cli/src}/lib/__tests__/add-targets-user-repo.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/bugfixes.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/capabilities.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/diff-text.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/discover-mcp-from-repo.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/doctor-diff.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/exec.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/extra-alias-selectors.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/extras-sync.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/gemini-settings.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/git-sync.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/hooks-layering.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/hooks.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/import.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/manifest.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/mcp-paths.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/migrate-system-mirror.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/migrate.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/models.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/onepassword.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/plugin-marketplace.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/plugins-prune.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/plugins.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/prompt-agent-version-selection.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/promptcuts-paths.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/pty-server.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/resolve-agent-version-targets.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/resolve-resource.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/resource-patterns.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/rotate.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/routines-format.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/routines.endAt.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/routines.project-discovery.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/routines.timeout.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/routines.workflow.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/runner.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/sandbox.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/scheduler.endAt.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/settings-manifest.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/shims.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/state.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/subagents-prune.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/bash-insert-before-node-path.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/bash-insert-before-node-path.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/bash-insert-before-node-path.json (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/fish-replace-legacy-path.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/fish-replace-legacy-path.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/fish-replace-legacy-path.json (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.json (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-idempotent.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-idempotent.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-idempotent.json (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.json (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.after (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.before (100%) rename {src => apps/cli/src}/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.json (100%) rename {src => apps/cli/src}/lib/__tests__/unmanaged-installs.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/usage.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/version-duplicates.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/version-not-installed-error.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/versions.test.ts (100%) rename {src => apps/cli/src}/lib/__tests__/workflows.test.ts (100%) rename {src => apps/cli/src}/lib/acp/client.ts (100%) rename {src => apps/cli/src}/lib/acp/harnesses.ts (100%) rename {src => apps/cli/src}/lib/acp/run.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/index.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/primitives.test.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/primitives.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/provider.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/resolve.test.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/resolve.ts (100%) rename {src => apps/cli/src}/lib/agent-spec/types.ts (100%) rename {src => apps/cli/src}/lib/agents.test.ts (100%) rename {src => apps/cli/src}/lib/agents.ts (100%) rename {src => apps/cli/src}/lib/artifact-actions.ts (100%) rename {src => apps/cli/src}/lib/audit/log.test.ts (100%) rename {src => apps/cli/src}/lib/audit/log.ts (100%) rename {src => apps/cli/src}/lib/auto-pull-worker.ts (100%) rename {src => apps/cli/src}/lib/auto-pull.ts (100%) rename {src => apps/cli/src}/lib/beta.ts (100%) rename {src => apps/cli/src}/lib/browser/cdp.test.ts (100%) rename {src => apps/cli/src}/lib/browser/cdp.ts (100%) rename {src => apps/cli/src}/lib/browser/chrome.test.ts (100%) rename {src => apps/cli/src}/lib/browser/chrome.ts (100%) rename {src => apps/cli/src}/lib/browser/devices.ts (100%) rename {src => apps/cli/src}/lib/browser/domain-skills.test.ts (100%) rename {src => apps/cli/src}/lib/browser/domain-skills.ts (100%) rename {src => apps/cli/src}/lib/browser/drivers/local.test.ts (100%) rename {src => apps/cli/src}/lib/browser/drivers/local.ts (100%) rename {src => apps/cli/src}/lib/browser/drivers/ssh.test.ts (100%) rename {src => apps/cli/src}/lib/browser/drivers/ssh.ts (100%) rename {src => apps/cli/src}/lib/browser/editor.ts (100%) rename {src => apps/cli/src}/lib/browser/har.test.ts (100%) rename {src => apps/cli/src}/lib/browser/har.ts (100%) rename {src => apps/cli/src}/lib/browser/index.ts (100%) rename {src => apps/cli/src}/lib/browser/input.ts (100%) rename {src => apps/cli/src}/lib/browser/ipc.test.ts (100%) rename {src => apps/cli/src}/lib/browser/ipc.ts (100%) rename {src => apps/cli/src}/lib/browser/local.test.ts (100%) rename {src => apps/cli/src}/lib/browser/port.test.ts (100%) rename {src => apps/cli/src}/lib/browser/profiles.test.ts (100%) rename {src => apps/cli/src}/lib/browser/profiles.ts (100%) rename {src => apps/cli/src}/lib/browser/refs.test.ts (100%) rename {src => apps/cli/src}/lib/browser/refs.ts (100%) rename {src => apps/cli/src}/lib/browser/runtime-state.test.ts (100%) rename {src => apps/cli/src}/lib/browser/runtime-state.ts (100%) rename {src => apps/cli/src}/lib/browser/service.logs.test.ts (100%) rename {src => apps/cli/src}/lib/browser/service.test.ts (100%) rename {src => apps/cli/src}/lib/browser/service.ts (100%) rename {src => apps/cli/src}/lib/browser/types.ts (100%) rename {src => apps/cli/src}/lib/browser/upload.test.ts (100%) rename {src => apps/cli/src}/lib/browser/upload.ts (100%) rename {src => apps/cli/src}/lib/budget/config.test.ts (100%) rename {src => apps/cli/src}/lib/budget/config.ts (100%) rename {src => apps/cli/src}/lib/budget/enforce.test.ts (100%) rename {src => apps/cli/src}/lib/budget/enforce.ts (100%) rename {src => apps/cli/src}/lib/budget/ledger.test.ts (100%) rename {src => apps/cli/src}/lib/budget/ledger.ts (100%) rename {src => apps/cli/src}/lib/budget/live-cloud.test.ts (100%) rename {src => apps/cli/src}/lib/budget/live-cloud.ts (100%) rename {src => apps/cli/src}/lib/budget/live-team.test.ts (100%) rename {src => apps/cli/src}/lib/budget/live-team.ts (100%) rename {src => apps/cli/src}/lib/budget/preflight.test.ts (100%) rename {src => apps/cli/src}/lib/budget/preflight.ts (100%) rename {src => apps/cli/src}/lib/capabilities.ts (100%) rename {src => apps/cli/src}/lib/checkpoint.test.ts (100%) rename {src => apps/cli/src}/lib/checkpoint.ts (100%) rename {src => apps/cli/src}/lib/cli-resources.test.ts (100%) rename {src => apps/cli/src}/lib/cli-resources.ts (100%) rename {src => apps/cli/src}/lib/cloud/agent-routing.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/antigravity.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/antigravity.ts (100%) rename {src => apps/cli/src}/lib/cloud/codex.ts (100%) rename {src => apps/cli/src}/lib/cloud/factory.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/factory.ts (100%) rename {src => apps/cli/src}/lib/cloud/paths.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/registry.ts (100%) rename {src => apps/cli/src}/lib/cloud/rush.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/rush.ts (100%) rename {src => apps/cli/src}/lib/cloud/store.ts (100%) rename {src => apps/cli/src}/lib/cloud/stream.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/stream.ts (100%) rename {src => apps/cli/src}/lib/cloud/target-discovery.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/types.test.ts (100%) rename {src => apps/cli/src}/lib/cloud/types.ts (100%) rename {src => apps/cli/src}/lib/command-skills.ts (100%) rename {src => apps/cli/src}/lib/commands.test.ts (100%) rename {src => apps/cli/src}/lib/commands.ts (100%) rename {src => apps/cli/src}/lib/computer-rpc.test.ts (100%) rename {src => apps/cli/src}/lib/computer-rpc.ts (97%) rename {src => apps/cli/src}/lib/computer/dispatch.test.ts (100%) rename {src => apps/cli/src}/lib/computer/dispatch.ts (100%) rename {src => apps/cli/src}/lib/computer/loop.test.ts (100%) rename {src => apps/cli/src}/lib/computer/loop.ts (100%) rename {src => apps/cli/src}/lib/computer/model.ts (100%) rename {src => apps/cli/src}/lib/concurrency.test.ts (100%) rename {src => apps/cli/src}/lib/concurrency.ts (100%) rename {src => apps/cli/src}/lib/convert.ts (100%) rename {src => apps/cli/src}/lib/crabbox/cli.ts (100%) rename {src => apps/cli/src}/lib/crabbox/lease.test.ts (100%) rename {src => apps/cli/src}/lib/crabbox/lease.ts (100%) rename {src => apps/cli/src}/lib/crabbox/runtimes.test.ts (100%) rename {src => apps/cli/src}/lib/crabbox/runtimes.ts (100%) rename {src => apps/cli/src}/lib/daemon.test.ts (100%) rename {src => apps/cli/src}/lib/daemon.ts (100%) rename {src => apps/cli/src}/lib/devices/__tests__/resolve-target.test.ts (100%) rename {src => apps/cli/src}/lib/devices/connect.test.ts (100%) rename {src => apps/cli/src}/lib/devices/connect.ts (100%) rename {src => apps/cli/src}/lib/devices/ignored.test.ts (100%) rename {src => apps/cli/src}/lib/devices/pending.test.ts (100%) rename {src => apps/cli/src}/lib/devices/pending.ts (100%) rename {src => apps/cli/src}/lib/devices/registry.test.ts (100%) rename {src => apps/cli/src}/lib/devices/registry.ts (100%) rename {src => apps/cli/src}/lib/devices/resolve-target.ts (100%) rename {src => apps/cli/src}/lib/devices/ssh-config.test.ts (100%) rename {src => apps/cli/src}/lib/devices/ssh-config.ts (100%) rename {src => apps/cli/src}/lib/devices/sync.test.ts (100%) rename {src => apps/cli/src}/lib/devices/sync.ts (100%) rename {src => apps/cli/src}/lib/devices/tailscale.test.ts (100%) rename {src => apps/cli/src}/lib/devices/tailscale.ts (100%) rename {src => apps/cli/src}/lib/diff-text.ts (100%) rename {src => apps/cli/src}/lib/doctor-diff.ts (100%) rename {src => apps/cli/src}/lib/drift-sync.test.ts (100%) rename {src => apps/cli/src}/lib/drift-sync.ts (100%) rename {src => apps/cli/src}/lib/drift.ts (100%) rename {src => apps/cli/src}/lib/drive-sync.test.ts (100%) rename {src => apps/cli/src}/lib/drive-sync.ts (100%) rename {src => apps/cli/src}/lib/events.ts (100%) rename {src => apps/cli/src}/lib/exec-shim.test.ts (100%) rename {src => apps/cli/src}/lib/exec.test.ts (100%) rename {src => apps/cli/src}/lib/exec.ts (100%) rename {src => apps/cli/src}/lib/fs-atomic.ts (100%) rename {src => apps/cli/src}/lib/fs-walk.test.ts (100%) rename {src => apps/cli/src}/lib/fs-walk.ts (100%) rename {src => apps/cli/src}/lib/fuzzy.test.ts (100%) rename {src => apps/cli/src}/lib/fuzzy.ts (100%) rename {src => apps/cli/src}/lib/gemini-settings.ts (100%) rename {src => apps/cli/src}/lib/git.test.ts (100%) rename {src => apps/cli/src}/lib/git.ts (100%) rename {src => apps/cli/src}/lib/heal.ts (100%) rename {src => apps/cli/src}/lib/help.test.ts (100%) rename {src => apps/cli/src}/lib/help.ts (100%) rename {src => apps/cli/src}/lib/hooks.ts (100%) rename {src => apps/cli/src}/lib/hooks/__tests__/match.test.ts (100%) rename {src => apps/cli/src}/lib/hooks/cache-integration.test.ts (100%) rename {src => apps/cli/src}/lib/hooks/cache.test.ts (100%) rename {src => apps/cli/src}/lib/hooks/cache.ts (100%) rename {src => apps/cli/src}/lib/hooks/match.ts (100%) rename {src => apps/cli/src}/lib/hooks/profile.test.ts (100%) rename {src => apps/cli/src}/lib/hooks/profile.ts (100%) rename {src => apps/cli/src}/lib/hosts/dispatch.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/dispatch.ts (100%) rename {src => apps/cli/src}/lib/hosts/logs.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/logs.ts (100%) rename {src => apps/cli/src}/lib/hosts/option.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/option.ts (100%) rename {src => apps/cli/src}/lib/hosts/passthrough.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/passthrough.ts (100%) rename {src => apps/cli/src}/lib/hosts/progress.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/progress.ts (100%) rename {src => apps/cli/src}/lib/hosts/providers/local.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/providers/local.ts (100%) rename {src => apps/cli/src}/lib/hosts/ready.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/ready.ts (100%) rename {src => apps/cli/src}/lib/hosts/reconcile.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/reconcile.ts (100%) rename {src => apps/cli/src}/lib/hosts/registry.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/registry.ts (100%) rename {src => apps/cli/src}/lib/hosts/remote-cmd.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/remote-cmd.ts (100%) rename {src => apps/cli/src}/lib/hosts/remote-os.ts (100%) rename {src => apps/cli/src}/lib/hosts/session-index.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/session-index.ts (100%) rename {src => apps/cli/src}/lib/hosts/ssh-config.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/ssh-config.ts (100%) rename {src => apps/cli/src}/lib/hosts/tasks.test.ts (100%) rename {src => apps/cli/src}/lib/hosts/tasks.ts (100%) rename {src => apps/cli/src}/lib/hosts/types.ts (100%) rename {src => apps/cli/src}/lib/import.test.ts (100%) rename {src => apps/cli/src}/lib/import.ts (100%) rename {src => apps/cli/src}/lib/lock.test.ts (100%) rename {src => apps/cli/src}/lib/lock.ts (100%) rename {src => apps/cli/src}/lib/log-follow.test.ts (100%) rename {src => apps/cli/src}/lib/log-follow.ts (100%) rename {src => apps/cli/src}/lib/loop-integration.test.ts (100%) rename {src => apps/cli/src}/lib/loop.test.ts (100%) rename {src => apps/cli/src}/lib/loop.ts (100%) rename {src => apps/cli/src}/lib/machine-id.ts (100%) rename {src => apps/cli/src}/lib/mailbox-target.test.ts (100%) rename {src => apps/cli/src}/lib/mailbox-target.ts (100%) rename {src => apps/cli/src}/lib/mailbox.test.ts (100%) rename {src => apps/cli/src}/lib/mailbox.ts (100%) rename {src => apps/cli/src}/lib/manifest.ts (100%) rename {src => apps/cli/src}/lib/markdown.ts (100%) rename {src => apps/cli/src}/lib/mcp.test.ts (100%) rename {src => apps/cli/src}/lib/mcp.ts (100%) rename {src => apps/cli/src}/lib/menubar/install-menubar.test.ts (100%) rename {src => apps/cli/src}/lib/menubar/install-menubar.ts (98%) rename {src => apps/cli/src}/lib/migrate.test.ts (100%) rename {src => apps/cli/src}/lib/migrate.ts (100%) rename {src => apps/cli/src}/lib/models.ts (100%) rename {src => apps/cli/src}/lib/onepassword.ts (100%) rename {src => apps/cli/src}/lib/overdue.ts (100%) rename {src => apps/cli/src}/lib/paths.ts (100%) rename {src => apps/cli/src}/lib/permissions.test.ts (100%) rename {src => apps/cli/src}/lib/permissions.ts (100%) rename {src => apps/cli/src}/lib/picker.test.ts (100%) rename {src => apps/cli/src}/lib/picker.ts (100%) rename {src => apps/cli/src}/lib/platform/exec.test.ts (100%) rename {src => apps/cli/src}/lib/platform/exec.ts (100%) rename {src => apps/cli/src}/lib/platform/index.ts (100%) rename {src => apps/cli/src}/lib/platform/ipc.test.ts (100%) rename {src => apps/cli/src}/lib/platform/ipc.ts (100%) rename {src => apps/cli/src}/lib/platform/links.test.ts (100%) rename {src => apps/cli/src}/lib/platform/links.ts (100%) rename {src => apps/cli/src}/lib/platform/paths.test.ts (100%) rename {src => apps/cli/src}/lib/platform/paths.ts (100%) rename {src => apps/cli/src}/lib/platform/posixpath.test.ts (100%) rename {src => apps/cli/src}/lib/platform/posixpath.ts (100%) rename {src => apps/cli/src}/lib/platform/process.test.ts (100%) rename {src => apps/cli/src}/lib/platform/process.ts (100%) rename {src => apps/cli/src}/lib/platform/winpath.test.ts (100%) rename {src => apps/cli/src}/lib/platform/winpath.ts (100%) rename {src => apps/cli/src}/lib/plugin-marketplace.test.ts (100%) rename {src => apps/cli/src}/lib/plugin-marketplace.ts (100%) rename {src => apps/cli/src}/lib/plugins.test.ts (100%) rename {src => apps/cli/src}/lib/plugins.ts (100%) rename {src => apps/cli/src}/lib/pricing/cost.test.ts (100%) rename {src => apps/cli/src}/lib/pricing/cost.ts (100%) rename {src => apps/cli/src}/lib/pricing/index.ts (100%) rename {src => apps/cli/src}/lib/pricing/prices.json (100%) rename {src => apps/cli/src}/lib/pricing/table.test.ts (100%) rename {src => apps/cli/src}/lib/pricing/table.ts (100%) rename {src => apps/cli/src}/lib/profiles-presets.test.ts (100%) rename {src => apps/cli/src}/lib/profiles-presets.ts (100%) rename {src => apps/cli/src}/lib/profiles.test.ts (100%) rename {src => apps/cli/src}/lib/profiles.ts (100%) rename {src => apps/cli/src}/lib/project-launch.test.ts (100%) rename {src => apps/cli/src}/lib/project-launch.ts (100%) rename {src => apps/cli/src}/lib/pty-client.ts (100%) rename {src => apps/cli/src}/lib/pty-server.ts (100%) rename {src => apps/cli/src}/lib/pwsh.ts (100%) rename {src => apps/cli/src}/lib/redact.ts (100%) rename {src => apps/cli/src}/lib/refresh.ts (100%) rename {src => apps/cli/src}/lib/registry.test.ts (100%) rename {src => apps/cli/src}/lib/registry.ts (100%) rename {src => apps/cli/src}/lib/resource-patterns.ts (100%) rename {src => apps/cli/src}/lib/resources.ts (100%) rename {src => apps/cli/src}/lib/resources/commands.test.ts (100%) rename {src => apps/cli/src}/lib/resources/commands.ts (100%) rename {src => apps/cli/src}/lib/resources/hooks.test.ts (100%) rename {src => apps/cli/src}/lib/resources/hooks.ts (100%) rename {src => apps/cli/src}/lib/resources/index.ts (100%) rename {src => apps/cli/src}/lib/resources/mcp.test.ts (100%) rename {src => apps/cli/src}/lib/resources/mcp.ts (100%) rename {src => apps/cli/src}/lib/resources/permissions.test.ts (100%) rename {src => apps/cli/src}/lib/resources/permissions.ts (100%) rename {src => apps/cli/src}/lib/resources/rules.test.ts (100%) rename {src => apps/cli/src}/lib/resources/rules.ts (100%) rename {src => apps/cli/src}/lib/resources/skills.test.ts (100%) rename {src => apps/cli/src}/lib/resources/skills.ts (100%) rename {src => apps/cli/src}/lib/resources/subagents.test.ts (100%) rename {src => apps/cli/src}/lib/resources/subagents.ts (100%) rename {src => apps/cli/src}/lib/resources/types.ts (100%) rename {src => apps/cli/src}/lib/resources/workflows.test.ts (100%) rename {src => apps/cli/src}/lib/resources/workflows.ts (100%) rename {src => apps/cli/src}/lib/rotate.test.ts (100%) rename {src => apps/cli/src}/lib/rotate.ts (100%) rename {src => apps/cli/src}/lib/routines-format.ts (100%) rename {src => apps/cli/src}/lib/routines.test.ts (100%) rename {src => apps/cli/src}/lib/routines.ts (100%) rename {src => apps/cli/src}/lib/rules/compile.test.ts (100%) rename {src => apps/cli/src}/lib/rules/compile.ts (100%) rename {src => apps/cli/src}/lib/rules/compose.test.ts (100%) rename {src => apps/cli/src}/lib/rules/compose.ts (100%) rename {src => apps/cli/src}/lib/rules/rules.test.ts (100%) rename {src => apps/cli/src}/lib/rules/rules.ts (100%) rename {src => apps/cli/src}/lib/run-config.test.ts (100%) rename {src => apps/cli/src}/lib/run-config.ts (100%) rename {src => apps/cli/src}/lib/run-defaults.test.ts (100%) rename {src => apps/cli/src}/lib/run-defaults.ts (100%) rename {src => apps/cli/src}/lib/runner.ts (100%) rename {src => apps/cli/src}/lib/sandbox.test.ts (100%) rename {src => apps/cli/src}/lib/sandbox.ts (100%) rename {src => apps/cli/src}/lib/scheduler.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/bundles-file-backend.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/bundles-linux-fallback.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/bundles-storage.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/bundles.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/install-helper.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/keychain-helper.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/linux.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/meta.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/raw-item.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/secrets.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/sync-backend.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/__tests__/sync.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/agent.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/agent.ts (100%) rename {src => apps/cli/src}/lib/secrets/bundles.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/bundles.ts (100%) rename {src => apps/cli/src}/lib/secrets/drivers/rush.ts (100%) rename {src => apps/cli/src}/lib/secrets/filestore.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/filestore.ts (100%) rename {src => apps/cli/src}/lib/secrets/index.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/index.ts (100%) rename {src => apps/cli/src}/lib/secrets/install-helper.ts (100%) rename {src => apps/cli/src}/lib/secrets/keychain-helper.swift (100%) rename {src => apps/cli/src}/lib/secrets/linux.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/linux.ts (100%) rename {src => apps/cli/src}/lib/secrets/mcp.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/mcp.ts (100%) rename {src => apps/cli/src}/lib/secrets/policy.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/profiles.ts (100%) rename {src => apps/cli/src}/lib/secrets/remote.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/remote.ts (100%) rename {src => apps/cli/src}/lib/secrets/sync-backend.ts (100%) rename {src => apps/cli/src}/lib/secrets/sync.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/sync.ts (100%) rename {src => apps/cli/src}/lib/secrets/windows.test.ts (100%) rename {src => apps/cli/src}/lib/secrets/windows.ts (100%) rename {src => apps/cli/src}/lib/self-update.test.ts (100%) rename {src => apps/cli/src}/lib/self-update.ts (100%) rename {src => apps/cli/src}/lib/serve/data.test.ts (100%) rename {src => apps/cli/src}/lib/serve/data.ts (100%) rename {src => apps/cli/src}/lib/serve/page.ts (100%) rename {src => apps/cli/src}/lib/serve/server.test.ts (100%) rename {src => apps/cli/src}/lib/serve/server.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/active.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/db.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/discover.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-antigravity.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-codex.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-droid.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-kimi.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-opencode-subprocess.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-rush.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/parse-security.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/prompt.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/remote-active.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/remote-list.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/render.test.ts (100%) rename {src => apps/cli/src}/lib/session/__tests__/testdata/session-screenshots.jsonl (100%) rename {src => apps/cli/src}/lib/session/__tests__/testdata/session-ssh-heavy.jsonl (100%) rename {src => apps/cli/src}/lib/session/__tests__/testdata/session-subagents-todos.jsonl (100%) rename {src => apps/cli/src}/lib/session/active.test.ts (100%) rename {src => apps/cli/src}/lib/session/active.ts (100%) rename {src => apps/cli/src}/lib/session/artifacts.ts (100%) rename {src => apps/cli/src}/lib/session/cloud.test.ts (100%) rename {src => apps/cli/src}/lib/session/cloud.ts (100%) rename {src => apps/cli/src}/lib/session/db.ts (100%) rename {src => apps/cli/src}/lib/session/digest.test.ts (100%) rename {src => apps/cli/src}/lib/session/digest.ts (100%) rename {src => apps/cli/src}/lib/session/discover.test.ts (100%) rename {src => apps/cli/src}/lib/session/discover.ts (100%) rename {src => apps/cli/src}/lib/session/ghostty-tabs.test.ts (100%) rename {src => apps/cli/src}/lib/session/ghostty-tabs.ts (100%) rename {src => apps/cli/src}/lib/session/inject.test.ts (100%) rename {src => apps/cli/src}/lib/session/inject.ts (100%) rename {src => apps/cli/src}/lib/session/parse.ts (100%) rename {src => apps/cli/src}/lib/session/pid-registry.test.ts (100%) rename {src => apps/cli/src}/lib/session/pid-registry.ts (100%) rename {src => apps/cli/src}/lib/session/prompt.test.ts (100%) rename {src => apps/cli/src}/lib/session/prompt.ts (100%) rename {src => apps/cli/src}/lib/session/provenance.test.ts (100%) rename {src => apps/cli/src}/lib/session/provenance.ts (100%) rename {src => apps/cli/src}/lib/session/relative-time.test.ts (100%) rename {src => apps/cli/src}/lib/session/relative-time.ts (100%) rename {src => apps/cli/src}/lib/session/remote-active.ts (100%) rename {src => apps/cli/src}/lib/session/remote-list.ts (100%) rename {src => apps/cli/src}/lib/session/remote.test.ts (100%) rename {src => apps/cli/src}/lib/session/remote.ts (100%) rename {src => apps/cli/src}/lib/session/render.ts (100%) rename {src => apps/cli/src}/lib/session/state.test.ts (100%) rename {src => apps/cli/src}/lib/session/state.ts (100%) rename {src => apps/cli/src}/lib/session/sync/agents.ts (100%) rename {src => apps/cli/src}/lib/session/sync/config.test.ts (100%) rename {src => apps/cli/src}/lib/session/sync/config.ts (100%) rename {src => apps/cli/src}/lib/session/sync/crdt.test.ts (100%) rename {src => apps/cli/src}/lib/session/sync/crdt.ts (100%) rename {src => apps/cli/src}/lib/session/sync/manifest.ts (100%) rename {src => apps/cli/src}/lib/session/sync/r2.ts (100%) rename {src => apps/cli/src}/lib/session/sync/sync.test.ts (100%) rename {src => apps/cli/src}/lib/session/sync/sync.ts (100%) rename {src => apps/cli/src}/lib/session/tail.test.ts (100%) rename {src => apps/cli/src}/lib/session/tail.ts (100%) rename {src => apps/cli/src}/lib/session/team-filter.test.ts (100%) rename {src => apps/cli/src}/lib/session/team-filter.ts (100%) rename {src => apps/cli/src}/lib/session/testdata/codex-custom-tools.jsonl (100%) rename {src => apps/cli/src}/lib/session/testdata/codex-fixture.jsonl (100%) rename {src => apps/cli/src}/lib/session/testdata/droid-execute-create.jsonl (100%) rename {src => apps/cli/src}/lib/session/testdata/kimi-tool-args.jsonl (100%) rename {src => apps/cli/src}/lib/session/testdata/tail-sample-claude.jsonl (100%) rename {src => apps/cli/src}/lib/session/types.ts (100%) rename {src => apps/cli/src}/lib/session/width.test.ts (100%) rename {src => apps/cli/src}/lib/session/width.ts (100%) rename {src => apps/cli/src}/lib/settings-manifest.ts (100%) rename {src => apps/cli/src}/lib/shims.adoption.test.ts (100%) rename {src => apps/cli/src}/lib/shims.auth-carry.test.ts (100%) rename {src => apps/cli/src}/lib/shims.device-pins.test.ts (100%) rename {src => apps/cli/src}/lib/shims.openclaw-migration.test.ts (100%) rename {src => apps/cli/src}/lib/shims.session-rewrite.test.ts (100%) rename {src => apps/cli/src}/lib/shims.test.ts (100%) rename {src => apps/cli/src}/lib/shims.ts (100%) rename {src => apps/cli/src}/lib/skills.test.ts (100%) rename {src => apps/cli/src}/lib/skills.ts (100%) rename {src => apps/cli/src}/lib/sqlite.ts (100%) rename {src => apps/cli/src}/lib/ssh-exec.test.ts (100%) rename {src => apps/cli/src}/lib/ssh-exec.ts (100%) rename {src => apps/cli/src}/lib/ssh-tunnel.test.ts (100%) rename {src => apps/cli/src}/lib/ssh-tunnel.ts (98%) rename {src => apps/cli/src}/lib/staleness/__tests__/_fixtures.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/_harness.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/commands.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/hooks.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/integration.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/mcp.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/permissions.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/plugins.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/rules.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/skills.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/subagents.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/__tests__/workflows.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/commands.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/hooks.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/mcp.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/permissions.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/plugins.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/rules.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/skills.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/subagents.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/types.ts (100%) rename {src => apps/cli/src}/lib/staleness/checkers/workflows.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/commands.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/hooks.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/mcp.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/permissions.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/plugins.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/rules.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/skills.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/subagents.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/types.ts (100%) rename {src => apps/cli/src}/lib/staleness/detectors/workflows.ts (100%) rename {src => apps/cli/src}/lib/staleness/fingerprint.ts (100%) rename {src => apps/cli/src}/lib/staleness/index.ts (100%) rename {src => apps/cli/src}/lib/staleness/layers.ts (100%) rename {src => apps/cli/src}/lib/staleness/registry.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/registry.ts (100%) rename {src => apps/cli/src}/lib/staleness/types.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/commands.test.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/commands.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/hooks.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/kinds.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/lazy-map.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/mcp.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/permissions.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/plugins.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/rules.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/skills.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/sources.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/subagents.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/types.ts (100%) rename {src => apps/cli/src}/lib/staleness/writers/workflows.ts (100%) rename {src => apps/cli/src}/lib/startup/command-registry.ts (100%) rename {src => apps/cli/src}/lib/startup/dev-build.test.ts (100%) rename {src => apps/cli/src}/lib/startup/dev-build.ts (100%) rename {src => apps/cli/src}/lib/state.ts (100%) rename {src => apps/cli/src}/lib/subagents.ts (100%) rename {src => apps/cli/src}/lib/sync-status.test.ts (100%) rename {src => apps/cli/src}/lib/sync-status.ts (100%) rename {src => apps/cli/src}/lib/sync-umbrella.test.ts (100%) rename {src => apps/cli/src}/lib/sync-umbrella.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/agents.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/api-summary.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/forEach.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/parsers-antigravity.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/parsers-grok.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/parsers-kimi.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/persistence.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/registry.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/stop-pid-reuse.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/supervisor.test.ts (100%) rename {src => apps/cli/src}/lib/teams/__tests__/testdata/kimi-stream-notool.jsonl (100%) rename {src => apps/cli/src}/lib/teams/__tests__/testdata/kimi-stream-tool.jsonl (100%) rename {src => apps/cli/src}/lib/teams/agents.cli-detection.test.ts (100%) rename {src => apps/cli/src}/lib/teams/agents.exit-code.test.ts (100%) rename {src => apps/cli/src}/lib/teams/agents.kimi-status.test.ts (100%) rename {src => apps/cli/src}/lib/teams/agents.sign-in.test.ts (100%) rename {src => apps/cli/src}/lib/teams/agents.ts (100%) rename {src => apps/cli/src}/lib/teams/api.ts (100%) rename {src => apps/cli/src}/lib/teams/debug.ts (100%) rename {src => apps/cli/src}/lib/teams/file_ops.ts (100%) rename {src => apps/cli/src}/lib/teams/forEach.ts (100%) rename {src => apps/cli/src}/lib/teams/index.ts (100%) rename {src => apps/cli/src}/lib/teams/parsers.ts (100%) rename {src => apps/cli/src}/lib/teams/persistence.ts (100%) rename {src => apps/cli/src}/lib/teams/pr-watch.test.ts (100%) rename {src => apps/cli/src}/lib/teams/pr-watch.ts (100%) rename {src => apps/cli/src}/lib/teams/registry.ts (100%) rename {src => apps/cli/src}/lib/teams/summarizer.ts (100%) rename {src => apps/cli/src}/lib/teams/supervisor.ts (100%) rename {src => apps/cli/src}/lib/teams/worktree.ts (100%) rename {src => apps/cli/src}/lib/template.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/backends.test.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/ghostty.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/index.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/iterm.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/tmux.ts (100%) rename {src => apps/cli/src}/lib/terminal/backends/vscodium-agent.ts (100%) rename {src => apps/cli/src}/lib/terminal/engine.test.ts (100%) rename {src => apps/cli/src}/lib/terminal/engine.ts (100%) rename {src => apps/cli/src}/lib/terminal/index.ts (100%) rename {src => apps/cli/src}/lib/terminal/inject.test.ts (100%) rename {src => apps/cli/src}/lib/terminal/inject.ts (100%) rename {src => apps/cli/src}/lib/terminal/policy.ts (100%) rename {src => apps/cli/src}/lib/terminal/quote.ts (100%) rename {src => apps/cli/src}/lib/terminal/resolve.test.ts (100%) rename {src => apps/cli/src}/lib/terminal/resolve.ts (100%) rename {src => apps/cli/src}/lib/terminal/shell.ts (100%) rename {src => apps/cli/src}/lib/terminal/transport.ts (100%) rename {src => apps/cli/src}/lib/terminal/types.ts (100%) rename {src => apps/cli/src}/lib/tmux/binary.ts (100%) rename {src => apps/cli/src}/lib/tmux/index.ts (100%) rename {src => apps/cli/src}/lib/tmux/paths.ts (100%) rename {src => apps/cli/src}/lib/tmux/session.test.ts (100%) rename {src => apps/cli/src}/lib/tmux/session.ts (100%) rename {src => apps/cli/src}/lib/triggers/webhook.test.ts (100%) rename {src => apps/cli/src}/lib/triggers/webhook.ts (100%) rename {src => apps/cli/src}/lib/types.ts (100%) rename {src => apps/cli/src}/lib/usage.ts (100%) rename {src => apps/cli/src}/lib/version-duplicates.ts (100%) rename {src => apps/cli/src}/lib/version.test.ts (100%) rename {src => apps/cli/src}/lib/version.ts (100%) rename {src => apps/cli/src}/lib/versions.installscripts.test.ts (100%) rename {src => apps/cli/src}/lib/versions.test.ts (100%) rename {src => apps/cli/src}/lib/versions.ts (100%) rename {src => apps/cli/src}/lib/wallet/__tests__/wallet.test.ts (100%) rename {src => apps/cli/src}/lib/wallet/index.ts (100%) rename {src => apps/cli/src}/lib/watchdog/index.ts (100%) rename {src => apps/cli/src}/lib/watchdog/read.test.ts (100%) rename {src => apps/cli/src}/lib/watchdog/read.ts (100%) rename {src => apps/cli/src}/lib/watchdog/runner.test.ts (100%) rename {src => apps/cli/src}/lib/watchdog/runner.ts (100%) rename {src => apps/cli/src}/lib/watchdog/testdata/tail-sample-claude.jsonl (100%) rename {src => apps/cli/src}/lib/watchdog/watchdog.test.ts (100%) rename {src => apps/cli/src}/lib/watchdog/watchdog.ts (100%) rename {src => apps/cli/src}/lib/watchdog/watchdogTail.test.ts (100%) rename {src => apps/cli/src}/lib/watchdog/watchdogTail.ts (100%) rename {src => apps/cli/src}/lib/whats-new.test.ts (100%) rename {src => apps/cli/src}/lib/whats-new.ts (100%) rename {src => apps/cli/src}/lib/workflows.test.ts (100%) rename {src => apps/cli/src}/lib/workflows.ts (100%) rename {tests => apps/cli/tests}/agents-memory-loading.test.ts (100%) rename {tests => apps/cli/tests}/agents.test.ts (100%) rename {tests => apps/cli/tests}/artifact-actions.test.ts (100%) rename {tests => apps/cli/tests}/bare-invocation.test.ts (100%) rename {tests => apps/cli/tests}/bench-concurrent-writes.ts (100%) rename {tests => apps/cli/tests}/bench-concurrent-writes.worker.ts (100%) rename {tests => apps/cli/tests}/cli-command-sync-spec.test.ts (100%) rename {tests => apps/cli/tests}/cli-resources/injection.test.ts (100%) rename {tests => apps/cli/tests}/daemon.test.ts (100%) rename {tests => apps/cli/tests}/e2e/container-fresh-install.sh (100%) rename {tests => apps/cli/tests}/e2e/fresh-install-settings.sh (100%) rename {tests => apps/cli/tests}/events-audit.test.ts (100%) rename {tests => apps/cli/tests}/events-redact.test.ts (100%) rename {tests => apps/cli/tests}/exec/sanitize-env.test.ts (100%) rename {tests => apps/cli/tests}/extra-repos.test.ts (100%) rename {tests => apps/cli/tests}/fixtures/cli-command-spec.json (100%) rename {tests => apps/cli/tests}/fixtures/permissions/test-basic.yml (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/README.md (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/agents.yaml (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/commands/myproj.md (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/mcp/proj-mcp.yaml (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/rules/rules.yaml (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/rules/subrules/project-marker.md (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/rules/subrules/project-secret.md (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/.agents/skills/myskill/SKILL.md (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/agents.yaml (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/repo/sub/deep/.gitkeep (100%) rename {tests => apps/cli/tests}/fixtures/project-resources/sibling/.gitkeep (100%) rename {tests => apps/cli/tests}/fixtures/teams/claude-session.jsonl (100%) rename {tests => apps/cli/tests}/fixtures/teams/codex-session.jsonl (100%) rename {tests => apps/cli/tests}/fixtures/teams/cursor-session.jsonl (100%) rename {tests => apps/cli/tests}/fixtures/teams/gemini-session.jsonl (100%) rename {tests => apps/cli/tests}/fixtures/teams/opencode-session.jsonl (100%) rename {tests => apps/cli/tests}/git.test.ts (100%) rename {tests => apps/cli/tests}/help-output.test.ts (100%) rename {tests => apps/cli/tests}/hook-doc-sidecar.test.ts (100%) rename {tests => apps/cli/tests}/hooks-soft-delete.test.ts (100%) rename {tests => apps/cli/tests}/jobs.test.ts (100%) rename {tests => apps/cli/tests}/non-interactive.test.ts (100%) rename {tests => apps/cli/tests}/package-name-consistency.test.ts (100%) rename {tests => apps/cli/tests}/perf-agents.test.ts (100%) rename {tests => apps/cli/tests}/permissions.test.ts (100%) rename {tests => apps/cli/tests}/plugin-drift-detail.test.ts (100%) rename {tests => apps/cli/tests}/plugin-manifest-repair.test.ts (100%) rename {tests => apps/cli/tests}/project-agents-dir.test.ts (100%) rename {tests => apps/cli/tests}/project-resources-pipeline.test.ts (100%) rename {tests => apps/cli/tests}/prune-command.test.ts (100%) rename {tests => apps/cli/tests}/registry.test.ts (100%) rename {tests => apps/cli/tests}/repo-view.test.ts (100%) rename {tests => apps/cli/tests}/run-defaults-command.test.ts (100%) rename {tests => apps/cli/tests}/runner-loop.test.ts (100%) rename {tests => apps/cli/tests}/runner.test.ts (100%) rename {tests => apps/cli/tests}/sandbox.test.ts (100%) rename {tests => apps/cli/tests}/scheduler.test.ts (100%) rename {tests => apps/cli/tests}/session-artifacts.test.ts (100%) rename {tests => apps/cli/tests}/shims.test.ts (100%) rename {tests => apps/cli/tests}/teams-events.test.ts (100%) rename {tests => apps/cli/tests}/teams-session-id.test.ts (100%) rename {tests => apps/cli/tests}/template.test.ts (100%) rename {tests => apps/cli/tests}/versions-sync.test.ts (100%) rename {tests => apps/cli/tests}/versions.test.ts (100%) rename tsconfig.json => apps/cli/tsconfig.json (100%) rename vitest.config.ts => apps/cli/vitest.config.ts (100%) rename {packages => apps}/factory/.gitignore (100%) rename {packages => apps}/factory/.vscodeignore (100%) rename {packages => apps}/factory/AGENTS.md (100%) rename {packages => apps}/factory/README.md (100%) rename {packages => apps}/factory/app/.gitignore (100%) rename {packages => apps}/factory/app/bun.lock (100%) rename {packages => apps}/factory/app/floorData.ts (100%) rename {packages => apps}/factory/app/main.ts (100%) rename {packages => apps}/factory/app/package.json (100%) rename {packages => apps}/factory/app/preload.ts (100%) rename {packages => apps}/factory/app/scripts/build.sh (100%) rename {packages => apps}/factory/app/scripts/dev.sh (100%) rename {packages => apps}/factory/app/scripts/install.sh (100%) rename {packages => apps}/factory/app/scripts/release.sh (100%) rename {packages => apps}/factory/app/tsconfig.json (100%) rename {packages => apps}/factory/assets/agents-activity.svg (100%) rename {packages => apps}/factory/assets/agents.png (100%) rename {packages => apps}/factory/assets/alerter (100%) rename {packages => apps}/factory/assets/antigravity.png (100%) rename {packages => apps}/factory/assets/chatgpt-light.png (100%) rename {packages => apps}/factory/assets/chatgpt.png (100%) rename {packages => apps}/factory/assets/claude.png (100%) rename {packages => apps}/factory/assets/cursor-light.png (100%) rename {packages => apps}/factory/assets/cursor.png (100%) rename {packages => apps}/factory/assets/design/components.png (100%) rename {packages => apps}/factory/assets/gemini.png (100%) rename {packages => apps}/factory/assets/github.png (100%) rename {packages => apps}/factory/assets/grok.png (100%) rename {packages => apps}/factory/assets/linear.png (100%) rename {packages => apps}/factory/assets/mcp.png (100%) rename {packages => apps}/factory/assets/opencode.png (100%) rename {packages => apps}/factory/assets/rush.png (100%) rename {packages => apps}/factory/assets/vscode.png (100%) rename {packages => apps}/factory/icons/agents-icon.png (100%) rename {packages => apps}/factory/icons/agents-icons.json (100%) rename {packages => apps}/factory/icons/antigravity.png (100%) rename {packages => apps}/factory/icons/claude-icon.png (100%) rename {packages => apps}/factory/icons/codex-icon.png (100%) rename {packages => apps}/factory/icons/codex-light-icon.png (100%) rename {packages => apps}/factory/icons/cursor-icon.png (100%) rename {packages => apps}/factory/icons/cursor-light-icon.png (100%) rename {packages => apps}/factory/icons/gemini-icon.png (100%) rename {packages => apps}/factory/icons/grok.png (100%) rename {packages => apps}/factory/icons/opencode-icon.png (100%) rename {packages => apps}/factory/mcp/notifications/bun.lock (100%) rename {packages => apps}/factory/mcp/notifications/package.json (100%) rename {packages => apps}/factory/mcp/notifications/src/index.ts (100%) rename {packages => apps}/factory/mcp/notifications/src/server.ts (100%) rename {packages => apps}/factory/mcp/notifications/tsconfig.json (100%) rename {packages => apps}/factory/package.json (100%) rename {packages => apps}/factory/scripts/activate.sh (100%) rename {packages => apps}/factory/scripts/bench-fs-watch.ts (100%) rename {packages => apps}/factory/scripts/build.sh (100%) rename {packages => apps}/factory/scripts/install.sh (100%) rename {packages => apps}/factory/scripts/release.sh (100%) rename {packages => apps}/factory/src/core/agentInventory.test.ts (100%) rename {packages => apps}/factory/src/core/agentInventory.ts (100%) rename {packages => apps}/factory/src/core/agentModels.test.ts (100%) rename {packages => apps}/factory/src/core/agentModels.ts (100%) rename {packages => apps}/factory/src/core/agentResources.test.ts (100%) rename {packages => apps}/factory/src/core/agentResources.ts (100%) rename {packages => apps}/factory/src/core/agentlinks.test.ts (100%) rename {packages => apps}/factory/src/core/agentlinks.ts (100%) rename {packages => apps}/factory/src/core/agents.test.ts (100%) rename {packages => apps}/factory/src/core/agents.ts (100%) rename {packages => apps}/factory/src/core/agentsBin.test.ts (100%) rename {packages => apps}/factory/src/core/agentsBin.ts (100%) rename {packages => apps}/factory/src/core/binResolve.test.ts (100%) rename {packages => apps}/factory/src/core/binResolve.ts (100%) rename {packages => apps}/factory/src/core/claudemd.test.ts (100%) rename {packages => apps}/factory/src/core/claudemd.ts (100%) rename {packages => apps}/factory/src/core/commitgen.test.ts (100%) rename {packages => apps}/factory/src/core/commitgen.ts (100%) rename {packages => apps}/factory/src/core/deviceHealth.test.ts (100%) rename {packages => apps}/factory/src/core/deviceHealth.ts (100%) rename {packages => apps}/factory/src/core/dispatchRanking.test.ts (100%) rename {packages => apps}/factory/src/core/dispatchRanking.ts (100%) rename {packages => apps}/factory/src/core/draftPrompt.test.ts (100%) rename {packages => apps}/factory/src/core/draftPrompt.ts (100%) rename {packages => apps}/factory/src/core/foreman.config.test.ts (100%) rename {packages => apps}/factory/src/core/foreman.config.ts (100%) rename {packages => apps}/factory/src/core/foreman.cycle.test.ts (100%) rename {packages => apps}/factory/src/core/foreman.cycle.ts (100%) rename {packages => apps}/factory/src/core/foreman.digest.test.ts (100%) rename {packages => apps}/factory/src/core/foreman.digest.ts (100%) rename {packages => apps}/factory/src/core/foreman.target.test.ts (100%) rename {packages => apps}/factory/src/core/foreman.target.ts (100%) rename {packages => apps}/factory/src/core/foreman.windowId.test.ts (100%) rename {packages => apps}/factory/src/core/foreman.windowId.ts (100%) rename {packages => apps}/factory/src/core/git.test.ts (100%) rename {packages => apps}/factory/src/core/git.ts (100%) rename {packages => apps}/factory/src/core/handoff.ts (100%) rename {packages => apps}/factory/src/core/hostInventory.test.ts (100%) rename {packages => apps}/factory/src/core/hostInventory.ts (100%) rename {packages => apps}/factory/src/core/inject.test.ts (100%) rename {packages => apps}/factory/src/core/inject.ts (100%) rename {packages => apps}/factory/src/core/labelgen.test.ts (100%) rename {packages => apps}/factory/src/core/labelgen.ts (100%) rename {packages => apps}/factory/src/core/liveSession.ts (100%) rename {packages => apps}/factory/src/core/liveness.ts (100%) rename {packages => apps}/factory/src/core/panel.helpers.ts (100%) rename {packages => apps}/factory/src/core/pdfEngine.test.ts (100%) rename {packages => apps}/factory/src/core/pdfEngine.ts (100%) rename {packages => apps}/factory/src/core/peerMessaging.test.ts (100%) rename {packages => apps}/factory/src/core/peerMessaging.ts (100%) rename {packages => apps}/factory/src/core/prChecks.test.ts (100%) rename {packages => apps}/factory/src/core/prChecks.ts (100%) rename {packages => apps}/factory/src/core/prewarm.simple.test.ts (100%) rename {packages => apps}/factory/src/core/prewarm.simple.ts (100%) rename {packages => apps}/factory/src/core/prewarm.test.ts (100%) rename {packages => apps}/factory/src/core/prewarm.ts (100%) rename {packages => apps}/factory/src/core/processStartTime.ts (100%) rename {packages => apps}/factory/src/core/projectDetect.test.ts (100%) rename {packages => apps}/factory/src/core/projectDetect.ts (100%) rename {packages => apps}/factory/src/core/projectIndex.test.ts (100%) rename {packages => apps}/factory/src/core/projectIndex.ts (100%) rename {packages => apps}/factory/src/core/prompts.test.ts (100%) rename {packages => apps}/factory/src/core/prompts.ts (100%) rename {packages => apps}/factory/src/core/remoteSessions.test.ts (100%) rename {packages => apps}/factory/src/core/remoteSessions.ts (100%) rename {packages => apps}/factory/src/core/repoIndex.test.ts (100%) rename {packages => apps}/factory/src/core/repoIndex.ts (100%) rename {packages => apps}/factory/src/core/repoSync.test.ts (100%) rename {packages => apps}/factory/src/core/repoSync.ts (100%) rename {packages => apps}/factory/src/core/resumeInBest.test.ts (100%) rename {packages => apps}/factory/src/core/resumeInBest.ts (100%) rename {packages => apps}/factory/src/core/rushToken.ts (100%) rename {packages => apps}/factory/src/core/session-read.test.ts (100%) rename {packages => apps}/factory/src/core/session.activity.ts (100%) rename {packages => apps}/factory/src/core/session.summary.test.ts (100%) rename {packages => apps}/factory/src/core/session.summary.ts (100%) rename {packages => apps}/factory/src/core/sessionName.test.ts (100%) rename {packages => apps}/factory/src/core/sessionName.ts (100%) rename {packages => apps}/factory/src/core/sessions.persist.ts (100%) rename {packages => apps}/factory/src/core/sessions.ts (100%) rename {packages => apps}/factory/src/core/settings.test.ts (100%) rename {packages => apps}/factory/src/core/settings.ts (100%) rename {packages => apps}/factory/src/core/spawn.ts (100%) rename {packages => apps}/factory/src/core/swarm.detect.test.ts (100%) rename {packages => apps}/factory/src/core/swarm.detect.ts (100%) rename {packages => apps}/factory/src/core/swarm.skills.test.ts (100%) rename {packages => apps}/factory/src/core/swarmifyConfig.test.ts (100%) rename {packages => apps}/factory/src/core/swarmifyConfig.ts (100%) rename {packages => apps}/factory/src/core/tasks.test.ts (100%) rename {packages => apps}/factory/src/core/tasks.ts (100%) rename {packages => apps}/factory/src/core/terminalReadiness.test.ts (100%) rename {packages => apps}/factory/src/core/terminalReadiness.ts (100%) rename {packages => apps}/factory/src/core/terminals.test.ts (100%) rename {packages => apps}/factory/src/core/terminals.ts (100%) rename {packages => apps}/factory/src/core/testdata/active-sessions.json (100%) rename {packages => apps}/factory/src/core/testdata/agentlinks/AGENTS.md (100%) rename {packages => apps}/factory/src/core/testdata/agentlinks/CLAUDE.md (100%) rename {packages => apps}/factory/src/core/testdata/agentlinks/GEMINI.md (100%) rename {packages => apps}/factory/src/core/testdata/claude-session.jsonl (100%) rename {packages => apps}/factory/src/core/testdata/claude-waiting.jsonl (100%) rename {packages => apps}/factory/src/core/testdata/hostInventory/hosts-list.json (100%) rename {packages => apps}/factory/src/core/testdata/hostInventory/view-host.json (100%) rename {packages => apps}/factory/src/core/testdata/narrative-claude.jsonl (100%) rename {packages => apps}/factory/src/core/testdata/narrative-codex.jsonl (100%) rename {packages => apps}/factory/src/core/testdata/narrative-gemini.jsonl (100%) rename {packages => apps}/factory/src/core/testdata/view-claude.json (100%) rename {packages => apps}/factory/src/core/utils.test.ts (100%) rename {packages => apps}/factory/src/core/utils.ts (100%) rename {packages => apps}/factory/src/core/watchdog.test.ts (100%) rename {packages => apps}/factory/src/core/watchdog.ts (100%) rename {packages => apps}/factory/src/core/watchdogLog.test.ts (100%) rename {packages => apps}/factory/src/core/watchdogLog.ts (100%) rename {packages => apps}/factory/src/core/watchdogTail.test.ts (100%) rename {packages => apps}/factory/src/core/watchdogTail.ts (100%) rename {packages => apps}/factory/src/core/worktree.ts (100%) rename {packages => apps}/factory/src/mcp/watchdog-bridge.ts (100%) rename {packages => apps}/factory/src/mcp/watchdog-server.ts (100%) rename {packages => apps}/factory/src/mcp/watchdogInstall.ts (100%) rename {packages => apps}/factory/src/monitor/broadcast.test.ts (100%) rename {packages => apps}/factory/src/monitor/broadcast.ts (100%) rename {packages => apps}/factory/src/monitor/broadcastTypes.ts (100%) rename {packages => apps}/factory/src/monitor/follower.test.ts (100%) rename {packages => apps}/factory/src/monitor/follower.ts (100%) rename {packages => apps}/factory/src/monitor/gate.test.ts (100%) rename {packages => apps}/factory/src/monitor/gate.ts (100%) rename {packages => apps}/factory/src/monitor/host.ts (100%) rename {packages => apps}/factory/src/monitor/leader.test.ts (100%) rename {packages => apps}/factory/src/monitor/leader.ts (100%) rename {packages => apps}/factory/src/monitor/lease.ts (100%) rename {packages => apps}/factory/src/monitor/panelSnapshotBroadcast.test.ts (100%) rename {packages => apps}/factory/src/monitor/probes.ts (100%) rename {packages => apps}/factory/src/monitor/protocol.ts (100%) rename {packages => apps}/factory/src/monitor/readinessBroadcast.test.ts (100%) rename {packages => apps}/factory/src/monitor/readinessDetector.test.ts (100%) rename {packages => apps}/factory/src/monitor/readinessDetector.ts (100%) rename {packages => apps}/factory/src/monitor/sessionParse.ts (100%) rename {packages => apps}/factory/src/monitor/sessionWatcher.test.ts (100%) rename {packages => apps}/factory/src/monitor/sessionWatcher.ts (100%) rename {packages => apps}/factory/src/monitor/snapshotDetector.test.ts (100%) rename {packages => apps}/factory/src/monitor/snapshotDetector.ts (100%) rename {packages => apps}/factory/src/monitor/watchdogBroadcast.test.ts (100%) rename {packages => apps}/factory/src/monitor/watchdogDetector.test.ts (100%) rename {packages => apps}/factory/src/monitor/watchdogDetector.ts (100%) rename {packages => apps}/factory/src/vscode/agentPanel.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/agentlinks.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/agentlinks.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/agents.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/claudemd.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/contextFiles.ts (100%) rename {packages => apps}/factory/src/vscode/customEditor.ts (100%) rename {packages => apps}/factory/src/vscode/deviceHealth.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/extension.ts (100%) rename {packages => apps}/factory/src/vscode/foreman.audio.ts (100%) rename {packages => apps}/factory/src/vscode/foreman.registry.ts (100%) rename {packages => apps}/factory/src/vscode/foreman.smart.ts (100%) rename {packages => apps}/factory/src/vscode/foreman.sources.ts (100%) rename {packages => apps}/factory/src/vscode/foreman.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/git.integration.test.ts (100%) rename {packages => apps}/factory/src/vscode/git.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/github.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/issuesPanel.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/linear.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/notifications.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/prewarm.e2e.test.ts (100%) rename {packages => apps}/factory/src/vscode/prewarm.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/recap.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/recap.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/remoteSessions.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/remoteSessions.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/sessionTracker.followerRouting.test.ts (100%) rename {packages => apps}/factory/src/vscode/sessionTracker.test.ts (100%) rename {packages => apps}/factory/src/vscode/sessionTracker.ts (100%) rename {packages => apps}/factory/src/vscode/sessions.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/sessions.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/settings.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/swarm.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/swarmifyConfig.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/swarmifyConfig.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/tasks.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/terminalReadiness.followerRouting.test.ts (100%) rename {packages => apps}/factory/src/vscode/terminalReadiness.integration.test.ts (100%) rename {packages => apps}/factory/src/vscode/terminalReadiness.ts (100%) rename {packages => apps}/factory/src/vscode/terminals.vscode.test.ts (100%) rename {packages => apps}/factory/src/vscode/terminals.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/theme.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/tmux.ts (100%) rename {packages => apps}/factory/src/vscode/watchdog.vscode.ts (100%) rename {packages => apps}/factory/src/vscode/workbench.vscode.ts (100%) rename {packages => apps}/factory/tsconfig.json (100%) rename {packages => apps}/factory/ui/.gitignore (100%) rename {packages => apps}/factory/ui/AGENTS.md (100%) rename {packages => apps}/factory/ui/CLAUDE.md (100%) rename {packages => apps}/factory/ui/GEMINI.md (100%) rename {packages => apps}/factory/ui/bun.lock (100%) rename {packages => apps}/factory/ui/design-explorations/layout-1-mission-control.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-2-split-ops.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-3-grid-matrix.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-4-timeline-rail.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-5-dashboard-gauges.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-6-kanban-flow.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-7-task-staleness.html (100%) rename {packages => apps}/factory/ui/design-explorations/layout-8-calendar-gradient.html (100%) rename {packages => apps}/factory/ui/editor/App.tsx (100%) rename {packages => apps}/factory/ui/editor/components/BubbleMenu.tsx (100%) rename {packages => apps}/factory/ui/editor/components/Editor.tsx (100%) rename {packages => apps}/factory/ui/editor/components/FrontmatterPanel.tsx (100%) rename {packages => apps}/factory/ui/editor/components/Outline.tsx (100%) rename {packages => apps}/factory/ui/editor/components/SlashCommandsList.tsx (100%) rename {packages => apps}/factory/ui/editor/components/Toolbar.tsx (100%) rename {packages => apps}/factory/ui/editor/extensions/Callout.ts (100%) rename {packages => apps}/factory/ui/editor/extensions/FileAttachment.ts (100%) rename {packages => apps}/factory/ui/editor/extensions/KeyboardShortcuts.ts (100%) rename {packages => apps}/factory/ui/editor/extensions/SlashCommands.ts (100%) rename {packages => apps}/factory/ui/editor/extensions/Toggle.ts (100%) rename {packages => apps}/factory/ui/editor/extensions/VideoBlock.ts (100%) rename {packages => apps}/factory/ui/editor/frontmatter.test.ts (100%) rename {packages => apps}/factory/ui/editor/frontmatter.ts (100%) rename {packages => apps}/factory/ui/editor/index.html (100%) rename {packages => apps}/factory/ui/editor/main.tsx (100%) rename {packages => apps}/factory/ui/editor/styles.css (100%) rename {packages => apps}/factory/ui/package.json (100%) rename {packages => apps}/factory/ui/settings/App.tsx (100%) rename {packages => apps}/factory/ui/settings/components/FactorySection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/BenchTab.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/CycleBar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/DeadlineView.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/KanbanBoard.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/TaskCalendar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/TaskCard.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/TaskDetail.tsx (100%) rename {packages => apps}/factory/ui/settings/components/bench/bench.css (100%) rename {packages => apps}/factory/ui/settings/components/bench/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/common/CheckboxField.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/ExtLink.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/OAuthButtons.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/OAuthDialog.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/SectionHeader.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/StatusBadge.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/WorkspaceConfigSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/common/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/AgentTerminalsSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/ApprovalQueueSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/DashboardIntro.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/RecentSwarmsSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/RunningAgentsSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/ShortcutsSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/helpers.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/dashboard/helpers.ts (100%) rename {packages => apps}/factory/ui/settings/components/foreman/ForemanCursor.tsx (100%) rename {packages => apps}/factory/ui/settings/components/foreman/ForemanOrb.tsx (100%) rename {packages => apps}/factory/ui/settings/components/foreman/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/ActiveSwarmsPane.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/AgentAvatar.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/AgentAvatar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/AgentSelect.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/AgentTerminalsPane.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/BacklogCenter.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/BatchToggle.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/CloudActivityFeed.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/CommandPalette.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/CompletedSwarmsPane.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/DispatchPanel.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/FailureCard.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/FeedItem.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/FloorControls.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/FloorSidebar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/HostDetail.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/HostSelect.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/MissionControlTab.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/ModeSeg.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/NeedsYouClusters.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/NotifyBell.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/PlanReview.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/ProjectSelect.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/SavedViewsBar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/StatusBar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/StructuredReply.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/SwarmDetailPane.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/TicketDetail.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/TodoChecklist.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/TopBar.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/UnifiedAgentsPane.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/WatchdogSeg.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/cloudActivity.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/cloudActivity.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/design-system.css (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatch.css (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatch.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatch.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatch.types.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatchIcons.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/dispatchInput.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/floor.css (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/floorAdapter.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/floorAdapter.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/floorModel.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/floorModel.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/icons.tsx (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/savedViews.test.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/savedViews.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/testdata/cloud-summary-zavknykt.txt (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/types.ts (100%) rename {packages => apps}/factory/ui/settings/components/mission-control/useNow.ts (100%) rename {packages => apps}/factory/ui/settings/components/panel/AgentDial.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/AgentResources.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/ChannelSelect.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/DisplayControls.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/HarnessRoster.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/LaunchMatrix.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/MachineStatus.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/PanelTab.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/PatchBay.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/ProjectRulesSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/StatusBank.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/TuneSection.tsx (100%) rename {packages => apps}/factory/ui/settings/components/panel/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/panel/panel.css (100%) rename {packages => apps}/factory/ui/settings/components/tabs/GuideTab.tsx (100%) rename {packages => apps}/factory/ui/settings/components/tabs/index.ts (100%) rename {packages => apps}/factory/ui/settings/components/ui/badge.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/button.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/card.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/checkbox.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/dropdown-menu.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/input.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/scroll-area.tsx (100%) rename {packages => apps}/factory/ui/settings/components/ui/tabs.tsx (100%) rename {packages => apps}/factory/ui/settings/constants/index.ts (100%) rename {packages => apps}/factory/ui/settings/hooks/index.ts (100%) rename {packages => apps}/factory/ui/settings/hooks/usePanelVisibility.ts (100%) rename {packages => apps}/factory/ui/settings/hooks/useTheme.ts (100%) rename {packages => apps}/factory/ui/settings/hooks/useVscodeApi.ts (100%) rename {packages => apps}/factory/ui/settings/host/bridge.test.ts (100%) rename {packages => apps}/factory/ui/settings/host/bridge.ts (100%) rename {packages => apps}/factory/ui/settings/index.css (100%) rename {packages => apps}/factory/ui/settings/index.html (100%) rename {packages => apps}/factory/ui/settings/lib/utils.ts (100%) rename {packages => apps}/factory/ui/settings/main.tsx (100%) rename {packages => apps}/factory/ui/settings/preview/index.html (100%) rename {packages => apps}/factory/ui/settings/preview/preview.tsx (100%) rename {packages => apps}/factory/ui/settings/reference/bench.html (100%) rename {packages => apps}/factory/ui/settings/reference/panel.html (100%) rename {packages => apps}/factory/ui/settings/reference/settings.css (100%) rename {packages => apps}/factory/ui/settings/reference/settings.html (100%) rename {packages => apps}/factory/ui/settings/reference/variant-a.css (100%) rename {packages => apps}/factory/ui/settings/reference/variant-a.html (100%) rename {packages => apps}/factory/ui/settings/shared/protocol.ts (100%) rename {packages => apps}/factory/ui/settings/types/index.ts (100%) rename {packages => apps}/factory/ui/settings/utils/formatting.test.ts (100%) rename {packages => apps}/factory/ui/settings/utils/formatting.ts (100%) rename {packages => apps}/factory/ui/settings/utils/icons.test.ts (100%) rename {packages => apps}/factory/ui/settings/utils/icons.ts (100%) rename {packages => apps}/factory/ui/settings/utils/index.ts (100%) rename {packages => apps}/factory/ui/settings/utils/markdown.ts (100%) rename {packages => apps}/factory/ui/settings/utils/tree.ts (100%) rename {packages => apps}/factory/ui/settings/utils/validation.ts (100%) rename {packages => apps}/factory/ui/tsconfig.json (100%) rename {packages => apps}/factory/ui/vite.editor.config.ts (100%) rename {packages => apps}/factory/ui/vite.preview.config.ts (100%) rename {packages => apps}/factory/ui/vite.settings.config.ts (100%) rename {packages => apps}/factory/ui/vite.standalone.config.ts (100%) rename {packages/menubar-helper => native/computer-mac}/.gitignore (100%) rename {packages/computer-helper => native/computer-mac}/Package.swift (100%) rename {packages/computer-helper => native/computer-mac}/README.md (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/AX.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Apps.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/CursorSprite.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/ElementCache.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/EventSynth.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Events.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Mouse.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Notify.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/RPC.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Screenshot.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/Wait.swift (100%) rename {packages/computer-helper => native/computer-mac}/Sources/ComputerHelper/main.swift (100%) rename {packages/computer-helper => native/computer-mac}/scripts/build.sh (100%) rename {packages/computer-helper-win => native/computer-win}/.gitignore (100%) rename {packages/computer-helper-win => native/computer-win}/Apps.cs (100%) rename {packages/computer-helper-win => native/computer-win}/Automation.cs (100%) rename {packages/computer-helper-win => native/computer-win}/ElementCache.cs (100%) rename {packages/computer-helper-win => native/computer-win}/Program.cs (100%) rename {packages/computer-helper-win => native/computer-win}/Rpc.cs (100%) rename {packages/computer-helper-win => native/computer-win}/Screenshot.cs (100%) rename {packages/computer-helper-win => native/computer-win}/computer-helper-win.csproj (100%) rename {packages/computer-helper-win => native/computer-win}/smoke/smoke.mjs (100%) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 7f36988e7..0bd7f385a 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -25,6 +25,9 @@ jobs: bench: runs-on: ubuntu-latest permissions: {} + defaults: + run: + working-directory: apps/cli steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a8351d25..ea9bf58fb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,9 @@ jobs: build: runs-on: ${{ matrix.os }} permissions: {} + defaults: + run: + working-directory: apps/cli strategy: # Run every OS x node combo to completion so a single platform failure # doesn't mask the others — we want the full cross-platform picture. diff --git a/.github/workflows/computer-helper-win.yml b/.github/workflows/computer-helper-win.yml index e9f0272f1..c34e400c1 100644 --- a/.github/workflows/computer-helper-win.yml +++ b/.github/workflows/computer-helper-win.yml @@ -11,11 +11,11 @@ on: push: branches: ['win-computer-use', 'main'] paths: - - 'packages/computer-helper-win/**' + - 'native/computer-win/**' - '.github/workflows/computer-helper-win.yml' pull_request: paths: - - 'packages/computer-helper-win/**' + - 'native/computer-win/**' - '.github/workflows/computer-helper-win.yml' jobs: @@ -24,7 +24,7 @@ jobs: permissions: {} defaults: run: - working-directory: packages/computer-helper-win + working-directory: native/computer-win steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -56,7 +56,7 @@ jobs: permissions: {} defaults: run: - working-directory: packages/computer-helper-win + working-directory: native/computer-win steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/.github/workflows/tests-windows-noop.yml b/.github/workflows/tests-windows-noop.yml index bd709610f..b348ca6d7 100644 --- a/.github/workflows/tests-windows-noop.yml +++ b/.github/workflows/tests-windows-noop.yml @@ -12,11 +12,11 @@ on: pull_request: branches: ['main', 'release/**'] paths-ignore: - - 'src/lib/hooks.ts' - - 'src/lib/hooks/**' - - 'src/lib/platform/**' - - 'src/lib/shims*.ts' - - 'hooks/**' + - 'apps/cli/src/lib/hooks.ts' + - 'apps/cli/src/lib/hooks/**' + - 'apps/cli/src/lib/platform/**' + - 'apps/cli/src/lib/shims*.ts' + - 'apps/cli/hooks/**' - '.github/workflows/tests-windows.yml' concurrency: diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index 1688d0384..92dfcc0af 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -21,11 +21,11 @@ on: pull_request: branches: ['main', 'release/**'] paths: - - 'src/lib/hooks.ts' - - 'src/lib/hooks/**' - - 'src/lib/platform/**' - - 'src/lib/shims*.ts' - - 'hooks/**' + - 'apps/cli/src/lib/hooks.ts' + - 'apps/cli/src/lib/hooks/**' + - 'apps/cli/src/lib/platform/**' + - 'apps/cli/src/lib/shims*.ts' + - 'apps/cli/hooks/**' - '.github/workflows/tests-windows.yml' concurrency: @@ -36,6 +36,9 @@ jobs: test-windows: runs-on: windows-latest timeout-minutes: 25 + defaults: + run: + working-directory: apps/cli steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e03d7fea9..579c23f34 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,6 +22,9 @@ jobs: test: runs-on: ubuntu-latest timeout-minutes: 20 + defaults: + run: + working-directory: apps/cli steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/README.md b/README.md index 3e72f4ba1..f042ff0f6 100644 --- a/README.md +++ b/README.md @@ -1,814 +1,35 @@ -

- agents -

+# agents-cli — monorepo -

agents

+Phoenix Labs OSS. This repo houses the CLI, the Factory GUI, native helper daemons, +and shared libraries. Each package installs and builds independently. -

- npm version - license - downloads - github -

- -**The missing toolchain for CLI coding agents.** Run any agent on your existing subscription. Spawn parallel teams in isolated terminals. Schedule routines, drive browsers and Electron apps, and store secrets behind Touch ID — all from one CLI. - -

- Claude Code -      - Codex CLI -      - Gemini CLI -      - Cursor -      - OpenCode -      - OpenClaw -      - Hermes Agent -      - Grok -      - Droid -

- -https://agents-cli.sh/demo.mp4 - -```bash -npm install -g @phnx-labs/agents-cli -# or -bun install -g @phnx-labs/agents-cli -``` - -Already installed? `agents upgrade` updates agents-cli itself to the latest version (`agents upgrade 1.2.3` for a specific version or dist-tag, `-y` to skip the confirm prompt). The command is `upgrade` on every platform -- there is no `agents update` (on macOS, `agents helper update` is a different command that reinstalls the keychain helper, not agents-cli). - -Source: [github.com/phnx-labs/agents-cli](https://github.com/phnx-labs/agents-cli) - -Also available as `ag` -- all commands work with both `agents` and `ag`. - -- [Pin versions per project](#pin-versions-per-project) -- [One config, every agent](#one-config-every-agent) -- [Run any agent](#run-any-agent) -- [Sessions across agents](#sessions-across-agents) -- [Run open models through Claude Code](#run-open-models-through-claude-code) -- [Teams](#teams) -- [Workflows](#workflows) -- [Browser](#browser) -- [Secrets](#secrets) -- [Routines](#routines) -- [PTY](#pty) -- [Portable setup](#portable-setup) -- [Private skills](#private-skills) -- [Security & Privacy](#security--privacy) -- [Compatibility](#compatibility) -- [FAQ](#faq) - ---- - -## Pin versions per project - -```bash -# This project needs claude@2.0.65 -- newer versions changed tool calling. -agents use claude@2.0.65 -p - -# The monorepo uses codex@0.116.0 across the team. -agents use codex@0.116.0 -p -``` - -This creates an `agents.yaml` at the project root: - -```yaml -# agents.yaml (commit this to your repo) -agents: - claude: "2.0.65" - codex: "0.116.0" -``` - -Think `requirements.txt` for CLI coding agents, on steroids. A shim reads `agents.yaml` from the project root and routes `claude` / `codex` / `gemini` / `grok` (and others) to the right version automatically. Each version gets its own isolated home -- switching backs up config and re-syncs resources. - -```bash -agents add claude@2.0.65 # Install a specific version -agents add codex@latest # Install latest -agents add codex@oldest # Install the oldest published version -agents view # See everything installed -``` - ---- - -## One config, every agent - -```bash -# Set up the Notion MCP server once. -agents install mcp:com.notion/mcp - -# It's now registered with Claude Code, Codex, Gemini CLI, and Cursor. -agents mcp list -``` - -Skills, slash commands, rules, hooks, and permissions work the same way -- install once in `~/.agents/`, synced to every agent's native format automatically. - -```bash -agents skills add gh:yourteam/python-expert # Knowledge pack -> all agents -agents commands add gh:yourteam/commands # Slash commands -> all agents -agents rules add gh:team/rules # AGENTS.md -> CLAUDE.md, GEMINI.md, .cursorrules -agents permissions add ./perms # Permissions -> auto-converted per agent -``` - -Write one `AGENTS.md`. It becomes `CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor. - ---- - -## Run any agent - -```bash -agents run claude "Find all auth vulnerabilities in src/" -agents run codex "Fix the issues Claude found" -agents run gemini "Write tests for the fixed code" -``` - -Each resolves to the project-pinned version with skills, MCP servers, and permissions already synced. Single-typo names auto-correct across every command — `agents view cladue` resolves to `claude`, `agents add codx@latest` to `codex`. - -### Rate-limited? Keep working. - -```bash -# Claude Code hits a rate limit -> Codex picks up automatically. Same project, same config. -agents run claude "refactor auth module" --mode edit --fallback codex,gemini -``` - -### Multiple accounts? Spread the load. - -```bash -# Picks the signed-in account you haven't used recently. -agents run claude "summarize recent commits" --strategy balanced -``` - -`--strategy balanced` spreads work across available versions of the same agent -- useful when you have multiple accounts and want to avoid burning through one. - -### Chain agents - -```bash -agents run claude "Review PRs merged this week, summarize risks" \ - | agents run codex "Write regression tests for the top 3 risks" -``` - -Supports plan (read-only) and edit modes, effort levels, JSON output for scripting, and timeout limits. - -### One protocol, every harness - -```bash -# Typed event stream instead of raw stdout. Same command, any supported agent. -agents run claude "review this diff" --acp --json -``` - -`--acp` routes through the [Agent Client Protocol](https://github.com/zed-industries/agent-client-protocol) so you get a unified event stream -- `agent_message_chunk`, `tool_call`, `plan_update`, `stop_reason` -- instead of writing a parser per CLI. File writes and shell commands flow through agents-cli, which means `--mode plan` becomes a real sandbox: the write RPC is denied, not just unused. - -ACP adapters are documented for claude, codex, gemini, cursor, opencode, openclaw, and grok. Other harnesses keep running on the direct-exec path. - ---- - -## Sessions across agents - -When you run multiple agents, conversations scatter across tools. Session search brings them together. - -```bash -# Where was that auth conversation? Search Claude Code, Codex, Gemini CLI, OpenCode at once. -agents sessions "auth middleware" - -# Filter by agent, project, or time window -agents sessions --agent codex --since 7d -agents sessions --project my-app - -# Read a full conversation -agents sessions a1b2c3d4 --markdown - -# Just the last 3 turns, user messages only -agents sessions a1b2c3d4 --last 3 --include user -``` - -Interactive picker when you're in a terminal. Structured output (`--json`, `--markdown`, filtered by role or turn count) when piped. - -Backed by a SQLite + FTS5 index at `~/.agents/.history/sessions/sessions.db` with incremental scanning -- warm reads in ~100ms. External tools can consume `--json` output as a programmatic observability layer; see [docs/05-sessions.md](docs/05-sessions.md) for the schema and [docs/06-observability.md](docs/06-observability.md) for the consumption patterns. - ---- - -## Run open models through Claude Code (experimental) - -> **Note:** Profiles are experimental, but available by default — no enable step needed. - -```bash -# Kimi K2.5 responding inside Claude Code's UI, tools, and skills. -# No proxy server. No LiteLLM. One OpenRouter key, stored in Keychain. -agents profiles add kimi -agents run kimi "refactor this file" -``` - -Built-in presets (all via OpenRouter, one shared key): - -| Preset | Model | Notes | -|---|---|---| -| `kimi` | Kimi K2.5 | #1 HumanEval. Reasoning -- interactive only. | -| `minimax` | MiniMax M2.5 | #1 SWE-bench Verified. Reasoning. | -| `glm` | GLM 5 | #1 Chatbot Arena (open-weight). | -| `qwen` | Qwen3 Coder Next | Latest coding Qwen. Print-safe. | -| `deepseek` | DeepSeek Chat V3 | Latest non-reasoning. Print-safe. | - -A profile swaps the model while keeping Claude Code as the agent runtime -- same UI, slash commands, skills, MCP tools. Under the hood: `ANTHROPIC_BASE_URL` + `ANTHROPIC_MODEL`, auth from Keychain at spawn time. - -Custom endpoints (Ollama, vLLM) work too -- drop a YAML in `~/.agents/profiles/`: - -```yaml -name: local-qwen -host: { agent: claude } -env: - ANTHROPIC_BASE_URL: https://ollama.example.com - ANTHROPIC_MODEL: qwen3.6:35b -auth: - envVar: ANTHROPIC_AUTH_TOKEN - keychainItem: agents-cli.ollama.token ``` - -Profile YAML has no secrets -- safe to `agents repo push` to a shared repo. `agents profiles presets` lists the full catalog. - ---- - -## Run on your own machines - -Dispatch any read-only or config command -- and `agents run` itself -- to another machine over SSH. No daemon. - -```bash -# Enroll a machine (from ~/.ssh/config, or inline with user@address) -agents hosts add gpu-box -agents hosts check gpu-box # reachable? which agents-cli version? - -# Run there instead of locally -agents run claude --host gpu-box "profile this build" # follows live by default -agents logs --host gpu-box # pick a dispatched run and view its log -agents logs -f # re-attach to a running one and follow -agents view claude --host gpu-box # inspect the remote install -agents sync --host gpu-box # make the remote machine current - -# Your Tailscale fleet, auto-discovered -agents devices sync # ingest `tailscale status` -agents ssh mac-mini # hardened SSH: fails fast if offline, - # PowerShell on Windows, password-from-Keychain +apps/ + cli/ @phnx-labs/agents-cli — the CLI (published to npm) + └─ menubar/ native macOS menu-bar helper (ships in the CLI tarball) + factory/ the Factory GUI — VS Code extension + React UI + Electron desktop app +packages/ + session-tracker/ @agents/session-tracker — SessionStart hook + pid-lineage lib + swarmify-mirror/ frozen legacy @swarmify shim (do not update) +native/ + computer-mac/ macOS accessibility/screenshot daemon (Swift) + computer-win/ Windows accessibility/screenshot daemon (C#) ``` -**Hosts** (`agents hosts`) are git-synced dispatch targets in `agents.yaml`; **devices** (`agents devices`) are your Tailscale machines in a local registry. Both ride SSH. See [docs/00-concepts.md](docs/00-concepts.md#devices--hosts). - -Every `--host` command rides one multiplexed SSH engine, tuned for driving a fleet from a small laptop: the first call to a machine opens a control socket and every later call reuses it (no repeat TCP+auth handshake), connections carry keepalive so a dropped link dies in ~45 s instead of zombying, and following a remote run polls in a single round-trip per cycle. Measured against a Tailscale-relayed host: repeated calls **~6–7× faster**, dispatch readiness **~2×**, and the follow loop **~21× faster with 50% fewer local ssh spawns**. Design: [docs/09-ssh-transport.md](docs/09-ssh-transport.md) · reproduce: `node scripts/bench-ssh.mjs `. - ---- +## Build -## Teams +Each package is self-contained (no JS workspaces): ```bash -agents teams create auth-feature +# CLI +cd apps/cli && bun install && bun run build && bun run test -# Research first, then implement, then test. -agents teams add auth-feature claude "Research auth libraries" --name researcher -agents teams add auth-feature codex "Draft the migration" --name migrator --after researcher -agents teams add auth-feature claude "Write tests for the new code" --name tester --after migrator +# Factory GUI +cd apps/factory && bun install && bun run compile -agents teams start auth-feature # Fires teammates whose deps are done -agents teams status auth-feature # Who's working, what they changed, what they said +# Native daemons (built from source, not shipped in the CLI tarball) +./native/computer-mac/scripts/build.sh debug ``` -Teammates run detached -- close your terminal, they keep working. Check in with `teams status`, read full output with `teams logs `, clean up with `teams disband`. - -Team state is observable via `agents teams list --json` / `agents teams status --json` (compact by default; add `--verbose` for the full per-teammate shape). External tools join it with `sessions --json` (teammates get `isTeamOrigin: true`) and `cloud list --json` (for `--cloud` teammates) to build a unified fleet view. See [docs/06-observability.md](docs/06-observability.md). - ---- - -## Workflows - -Bundle an orchestrator prompt with optional subagents, skills, and plugins into a named, reusable pipeline. One bundle, one invocation. - -```bash -# Use a workflow — workflow name goes in the agent slot -agents run code-review "review PR #42 on acme/api" - -# List + inspect -agents workflows list -agents workflows view code-review - -# Install from GitHub or local -agents workflows add gh:yourteam/code-review -agents workflows add ./my-workflow -``` - -A workflow is a directory: - -``` -~/.agents/workflows/code-review/ - WORKFLOW.md # YAML frontmatter + orchestrator system prompt - subagents/ # optional: *.md files exposed to the orchestrator - security.md - style.md - skills/ # optional: knowledge packs scoped to this workflow - plugins/ # optional: plugin bundles -``` - -`WORKFLOW.md`'s Markdown body is the orchestrator's system prompt. Files under `subagents/` get copied to `~/.claude/agents/` at run time so the built-in Agent tool can dispatch to them by name — including in parallel. `skills/` and `plugins/` sync into the version home just for the run. - -```yaml -# WORKFLOW.md frontmatter ---- -name: Code Review -description: Evidence-grounded PR review with file:line citations. -model: opus -tools: - - Read - - Grep - - Bash - - WebFetch ---- -``` - -Workflows that need to write — post PR comments, edit files, send Slack — should run with `--mode edit` or `--mode full`. `agents run` defaults to `--mode plan` (read-only), which deadlocks at `ExitPlanMode` in headless runs. - -Resolution is project > user > system: a `/.agents/workflows//` overrides a same-named workflow in `~/.agents/workflows/`. Commit project workflows with your repo so teammates get the same pipeline. - ---- - -## Plugins - -Bundle skills, commands, hooks, MCP servers, settings, and permissions under a single manifest. One source dir at `~/.agents/plugins//`, mirrored into every installed Claude / OpenClaw version automatically. - -```bash -# Install from a git URL or local path -agents plugins install hivemind@https://github.com/activeloopai/hivemind.git -agents plugins install ./my-plugin - -# Apply to one agent (default version) or all supported -agents plugins sync rush-toolkit claude -agents plugins sync rush-toolkit -``` - -A plugin is a directory with a manifest: - -``` -~/.agents/plugins/my-plugin/ - .claude-plugin/plugin.json # required: { name, version, description } - skills//SKILL.md # optional - commands/*.md # optional - hooks/hooks.json # optional — executable surface - .mcp.json # optional — executable surface - bin/, scripts/, settings.json # optional — executable surface - permissions/ # optional — executable surface -``` - -On sync, agents-cli copies the plugin into each version home's marketplace (`/.claude/plugins/marketplaces/agents-cli/plugins//`), registers the synthetic marketplace, and flips `settings.json#enabledPlugins[@agents-cli] = true` so Claude / OpenClaw load it. - -### Executable-surface gate - -Plugins that ship `hooks/`, `.mcp.json`, `bin/`, `scripts/`, `settings.json` (non-permissions), or `permissions/` can execute code on session events. agents-cli requires explicit consent before flipping `enabledPlugins`: - -```bash -# Hooks-bearing plugins copy in but stay disabled by default -agents plugins install hivemind@https://github.com/activeloopai/hivemind.git \ - --allow-exec-surfaces - -# Same gate on re-sync (e.g., after upstream updates) -agents plugins sync hivemind claude --allow-exec-surfaces -``` - -Skills, commands, and subagents are declarative and never trip the gate. The gate is per-plugin, per-install: consenting to hivemind doesn't grant blanket exec-surface trust to anything else. - -### Version portability - -Plugins live in the user repo (`~/.agents/plugins/`), not inside any single version home. Switching Claude via `agents use claude@` re-syncs the plugin into the new version automatically — no re-install. New Claude versions added later pick it up on their first sync. Project-level `/.agents/plugins//` overrides a same-named user plugin (resolution is project > user > system, same as every other resource). - ---- - -## Browser - -Give agents access to a real browser — no relay extension, no cloud service, no Playwright getting blocked. - -```bash -# First run: omit --profile and we auto-pick the first installed Chromium-family -# browser. macOS prefers Chrome > Brave > Edge > Chromium > Comet; Linux prefers -# Chrome > Chromium > Brave > Edge; Windows prefers Edge (always preinstalled) > -# Chrome > Brave > Comet. The auto-picked profile is saved as "default" for later runs. -export AGENTS_BROWSER_TASK=$(agents browser start --url https://app.example.com) - -# Or pin a named profile to a specific browser (chrome, comet, brave, chromium, -# edge, or custom) when you want isolation from "default". -agents browser profiles create work --browser chrome -# `start` writes the resolved name (e.g. `swift-crab-falcon-a3f92b1c`) to stdout -# and human-friendly commentary to stderr, so $(...) capture stays clean. -export AGENTS_BROWSER_TASK=$(agents browser start --profile work --url https://app.example.com) -agents browser refs # Get interactive element refs -agents browser click 42 # Click element ref 42 -agents browser type 15 --text "hello" # Type into element ref 15 -agents browser screenshot # Smart resizing, token-efficient -agents browser tabs # List tabs open for the current task -agents browser tab focus tab123 # Switch focus to another tab -agents browser done # Close task's tabs when finished - -# Need to address a different task in the same shell? Override per call: -agents browser screenshot --task other-flow -``` - -### Why this works where Playwright fails - -Playwright and Puppeteer spin up fresh browser instances with automation flags. Sites like LinkedIn, Google, and most finance apps detect and block them immediately. - -`agents browser` launches your existing residential Chrome (or Brave, Edge, Chromium) on your machine via CDP. Same browser fingerprint, same IP, same everything. Sites can't detect automation because you're using the same browser you'd use manually. - -### Token-efficient automation - -The CLI handles the mechanical work so agents don't burn tokens on low-level browser commands. Screenshots are automatically resized without excessive compression — agents process smaller images while keeping the detail they need to make decisions. - -### Profile isolation - -Multiple agents can run browser tasks simultaneously without stepping on each other. Each profile gets its own user data directory, cookies, and state. One agent logs into your work Slack, another into your personal email — no conflicts, no shared state. - -```bash -agents browser profiles create work-slack --browser chrome -agents browser profiles create personal-gmail --browser chrome -# Two agents, two profiles, no interference -``` - -### Safe credential access - -Attach a [secrets bundle](#secrets) to a profile. The agent can log in without credentials in plaintext, and every secret access is recorded in the session log. - -```bash -agents browser profiles create bank --browser chrome --secrets bank-creds -``` - -### Electron apps - -Control Electron apps (Slack, Discord, VS Code, your own app) with custom binaries: - -```bash -agents browser profiles create slack \ - --browser custom \ - --binary "/Applications/Slack.app/Contents/MacOS/Slack" \ - --electron -``` - -### Remote browsers - -Connect to browsers running anywhere — local, SSH tunnels, or cloud services: - -```bash -# Local CDP (discovers WebSocket URL automatically) -agents browser profiles create local-debug \ - --browser chrome \ - --endpoint "http://localhost:9222" - -# SSH tunnel to a remote machine -agents browser profiles create staging \ - --browser chrome \ - --endpoint "ssh://deploy@staging.example.com?port=9222" - -# Cloud browser services (BrowserBase, Steel, etc.) -agents browser profiles create cloud \ - --browser chrome \ - --endpoint "wss://connect.browserbase.com?apiKey=..." -``` - ---- - -## Secrets - -> **Platform:** `agents secrets` requires macOS Keychain or Linux libsecret. -> On Windows (non-WSL), use environment variables or a `.env` file instead. - -```bash -# API keys in Keychain, not in .env files. -agents secrets create prod-stripe -agents secrets add prod-stripe STRIPE_SECRET_KEY # Prompts, stores in Keychain -agents secrets add prod-stripe TEST_CARD --value "4242..." - -# Injected at run time. Bundle definitions live in the Keychain, not on disk. -agents run claude "charge a test card" --secrets prod-stripe -``` - -

- How agents-cli secrets work: bundle definitions live in the macOS Keychain alongside their values, agents-cli resolves at runtime and injects the env into the child process -

- -Merge order: profile env < `--secrets` < `--env K=V`. A missing keychain item aborts before the child starts. - -### Cross-machine sync via iCloud Keychain - -Secret bundles sync through iCloud Keychain by default. Sign into the same iCloud account on another Mac (with iCloud Keychain enabled) and the bundle appears there within seconds — no copy-paste, no `.env` files emailed to yourself, no shared secret stores. Pass `--no-icloud-sync` when creating a bundle if it should stay device-local. - -```bash -# On laptop: -agents secrets create npm-tokens -agents secrets add npm-tokens NPM_TOKEN # value lives in iCloud Keychain - -# On another Mac (same iCloud account): -agents secrets list # npm-tokens is already there; -agents run claude "..." --secrets npm-tokens # injects NPM_TOKEN automatically -``` - -Under the hood, synced bundles route writes through a notarized helper app (`Agents CLI.app`) that holds the entitlement macOS requires for `kSecAttrSynchronizable`. Bundles created with `--no-icloud-sync` stay device-local. - -Bundle definitions sync via iCloud Keychain too — no `agents repo push` needed for secrets, no recreate step on each Mac. Nothing about secrets ever lives in plaintext on disk. - -### Per-secret metadata and rotation - -Tag each secret with `--type`, `--expires`, and `--note` so the bundle is self-documenting. `--expires` is always future-dated (`YYYY-MM-DD`); past or same-day values are rejected. Use `agents secrets rotate ` to refresh a credential — `add` only creates new keys, `rotate` replaces the value and preserves metadata unless overridden. - -```bash -agents secrets add prod STRIPE_API_KEY --type api-key --expires 2027-01-15 --note "Live key, owner: payments-team" -agents secrets rotate prod STRIPE_API_KEY --note "rotated after suspected leak" -agents secrets list # EXPIRING column flags secrets due in the next 30 days -``` - ---- - -## Routines - -```bash -# Claude Code reviews PRs every weekday at 9 AM. Scheduler auto-starts. -agents routines add daily-digest \ - --schedule "0 9 * * 1-5" \ - --agent claude \ - --prompt "Review yesterday's PRs and summarize key changes" - -agents routines list # All jobs + next run times -agents routines run daily-digest # Test it now, ignore the schedule -agents routines logs daily-digest # Check last execution -``` - -Jobs run sandboxed -- agents only see directories and tools you explicitly allow. - ---- - -## PTY - -```bash -# Give agents a real terminal for REPLs, TUIs, interactive programs. -SID=$(agents pty start) -agents pty exec $SID "python3" -agents pty screen $SID # Clean text, no ANSI -- what a human sees -agents pty write $SID "print('hello')\n" -agents pty stop $SID -``` - -A sidecar server holds sessions alive between CLI calls. `screen` renders via xterm-headless. Sessions auto-clean after 30 minutes idle. - ---- - -## Portable setup - -```bash -# New machine? One command. -agents setup - -# Installs CLIs, registers MCP servers, syncs skills/commands/rules/hooks, -# sets up shims, configures defaults. Done. - -agents repo push # Snapshot your config to git -``` - -### How config is layered - -Two repos with the same shape, different roles: - -| Repo | Role | Owner | -|---|---|---| -| `~/.agents-system/` | **System repo** — core/built-in skills, commands, hooks, rules, MCP configs, permissions, and profiles that ship with `agents-cli`. The defaults every install gets. | Maintained upstream at [phnx-labs/.agents-system](https://github.com/phnx-labs/.agents-system) | -| `~/.agents/` | **User repo** — your personal additions and overrides. This is what `agents repo push`/`pull` syncs. | You | - -**Version pinning:** `agents.yaml` at project root pins which agent version to use (like `.nvmrc` for Node). - -**Resource resolution:** When syncing resources (commands, skills, rules, hooks, MCP, permissions), the order is **project > user > system**. A `.agents/` directory at project root wins, then `~/.agents/`, then `~/.agents-system/`. Same-named resources higher in the chain override lower ones; everything else unions in. - -See [docs/00-concepts.md](docs/00-concepts.md) for the full mental model: DotAgents repos, resource kinds, and how resolution works end-to-end. - -Other useful commands: `agents doctor` checks CLI availability and resource sync drift, `agents usage` shows available quota/rate-limit data for installed agents, `agents budget` shows cross-vendor spend caps and current spend-to-cap (and enforces pre-flight estimates + a hard-cap kill-switch on every run — see [docs/06-observability.md](docs/06-observability.md#budget-guardrails-agents-budget)), `agents import` adopts an existing unmanaged install, `agents trash` lists and restores soft-deleted version directories, and `agents subagents` installs reusable subagent definitions for parent-agent workflows. - ---- - -## Private skills - -Keep work or personal skills in a separate repo — public ones in `~/.agents/`, private ones in an extra repo that merges in at sync time. - -```bash -# Add a private repo for work-only skills -agents repo add gh:yourname/.agents-work - -# Add with a custom alias -agents repo add git@github.com:acme/team-skills.git --as acme - -agents repo list # Primary + every registered extra -agents repo pull # Pull updates for all enabled extras -agents repo disable acme # Stop merging without deleting -agents repo remove acme # Unregister and delete the clone -``` - -Extras clone into `~/.agents-system/.repos//` and ship the same layout as the primary (`skills/`, `commands/`, `hooks/`, `rules/`). Their contents merge into agent version homes after the primary's — so `~/.agents/` always wins on name collisions. `agents skills list` shows which repo each skill came from. - ---- - -## Security & Privacy - -**The CLI binary has no built-in telemetry or phone-home path.** Routine commands run locally; explicit features such as cloud dispatch and iCloud Keychain sync send only the data needed for the action you invoke. Here's exactly what `agents-cli` stores locally and why. - -### Event log - -Every agent run, version install, browser launch, and secrets access is logged to `~/.agents/.cache/logs/events-YYYY-MM-DD.jsonl`. This gives you a complete record of what agents did on your machine. - -```bash -# What gets logged (example event): -{ - "ts": "2026-05-09T10:23:45Z", - "event": "agent.run.end", - "agent": "claude", - "version": "2.1.121", - "prompt": "Fix the auth bug in...", # truncated to 200 chars - "durationMs": 45230, - "exitCode": 0, - "hostname": "your-mac", - "platform": "darwin" -} -``` - -**What's logged:** Operation type, agent, version, timing, prompt length + SHA-256 hash (raw text never stored), exit codes, errors, and secret bundle/key names with caller context. Argv entries that look like tokens or secret paths are redacted. **What's NOT logged:** Raw prompts, outputs, file contents, or secret values. - -**Permissions:** Logs directory is `0700` (owner-only), files are `0600`. Only you can read them. - -**Retention:** 7 days by default, then auto-pruned. - -**Opt out:** Set `AGENTS_DISABLE_EVENT_LOG=1` in your shell to disable completely. - -### Session search - -Conversations with Claude, Codex, Gemini, and other agents scatter across their native storage. Session search indexes them locally so you can find any conversation: - -```bash -agents sessions "auth middleware" # Full-text search across all agents -agents sessions --agent claude --since 7d -``` - -The index lives at `~/.agents/.history/sessions/sessions.db` (SQLite + FTS5). Nothing leaves your machine. See [Sessions](#sessions-across-agents) for full usage. - -### Secrets - -API keys and credentials are stored in macOS Keychain, never in plaintext files. Bundle definitions also live in Keychain. - -```bash -agents secrets create my-keys -agents secrets add my-keys API_KEY # Prompts for value, stores in Keychain -``` - -By default, secrets sync via iCloud Keychain to your other Macs. With `--no-icloud-sync`, they stay device-local. See [Secrets](#secrets) for full usage. - -### Summary - -| Data | Location | Who can read | Opt out | -|------|----------|--------------|---------| -| Event log | `~/.agents/.cache/logs/` | You only (0600) | `AGENTS_DISABLE_EVENT_LOG=1` | -| Session index | `~/.agents/.history/sessions/` | You only | Delete the directory | -| Secrets | macOS Keychain | You + apps you authorize | Don't use `agents secrets` | -| Config | `~/.agents/` | You only | N/A | - ---- - -## Compatibility - -Which DotAgents resources each agent CLI can load. Source of truth: [src/lib/agents.ts](src/lib/agents.ts) (`capabilities`); gates use `supports(agent, cap, version)` from [src/lib/capabilities.ts](src/lib/capabilities.ts). Full matrix also in [docs/00-concepts.md](docs/00-concepts.md). - -> **† Gemini CLI is deprecated.** Google retired it for free, Pro, and Ultra tiers on **June 18, 2026** (announced at Google I/O 2026); the `gemini` command no longer serves requests on those tiers. agents-cli still manages existing installs, but warns on `agents add gemini` and `agents teams add … gemini`. New setups should use **Antigravity CLI** (`antigravity`), Google's official successor — see [the transition notice](https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/). - -| Agent | Versions | Hooks | MCP | Permissions | Skills | Commands | Plugins | Subagents | Rules | Workflows | -|-------|----------|-------|-----|-------------|--------|----------|---------|-----------|-------|-----------| -| Claude Code | yes | yes | yes | yes | yes | yes | yes | yes | `CLAUDE.md` | yes | -| Codex CLI | yes | >= 0.116.0 | yes | no | yes | < 0.117.0 · skills ($name, >= 0.117) | >= 0.128.0 | no | `AGENTS.md` | no | -| Gemini CLI † | yes | >= 0.26.0 | yes | no | yes | yes (.toml) | no | no | `GEMINI.md` | no | -| Antigravity | yes | yes | yes | yes | yes | yes | yes | no | `AGENTS.md` | no | -| Grok Build | yes | yes | yes | yes | yes | skills ($name) | yes | no | `AGENTS.md` | no | -| OpenClaw | yes | yes | yes | no | yes | gateway | yes | yes | `workspace/AGENTS.md` | no | -| Cursor | yes | no | yes | no | yes | yes | no | no | `.cursorrules` | no | -| OpenCode | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | -| Copilot | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | -| Amp | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | -| Kiro | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | -| Goose | yes | no | yes | no | no | no | no | no | `AGENTS.md` | no | -| Roo Code | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | - -**Legend:** `yes` / `no` = synced or skipped at install time. `skills ($name)` = no file-based slash-command dir; behavior ships as a generated skill invoked with `$command`. `gateway` = OpenClaw resolves slash commands at runtime, not from synced files. Version suffixes are enforced at sync time — out-of-range versions are skipped with a clear message. - -**Host CLIs** (`agents cli`) are separate: YAML manifests under `~/.agents/cli/` install binaries onto your PATH (`gh`, `higgsfield`, etc.). They are not copied into per-agent version homes. - -### agents-cli features (not agent-native resources) - -| Agent | Routines | Teams | Session index | -|-------|----------|-------|---------------| -| Claude Code | yes | yes | yes | -| Codex CLI | yes | yes | yes | -| Gemini CLI † | yes | yes | yes | -| Cursor | -- | yes | -- | -| OpenCode | -- | yes | -- | -| Grok Build | -- | yes | yes | -| Antigravity | -- | yes | -- | -| Copilot | -- | -- | yes | -| OpenClaw, Amp, Kiro, Goose, Roo | -- | -- | -- | - -### Version-gated sync - -| Capability | Agent | Gate | -|------------|-------|------| -| Hooks | Codex | >= 0.116.0 | -| Hooks | Gemini | >= 0.26.0 | -| File-based commands | Codex | < 0.117.0 (0.117+ uses command-as-skill) | -| Plugins | Codex | >= 0.128.0 | - -Codex `0.117.0+` no longer reads `.codex/prompts/`; agents-cli converts slash commands into skills so they stay invocable as `$name`. OpenCode's plugin-based hook system is on the roadmap; hooks stay `no` until a writer ships. - -Slash commands can declare per-agent/version targeting in frontmatter (`agents:`, `since:`, `until:`). Gating applies when syncing from `~/.agents/commands/` (user/system) into version homes — project `.agents/commands/` files are read in place and are not filtered by `agents:`. This repo ships `.agents/commands/version.md` as `/version` for Claude, Codex, Gemini, Cursor, OpenCode, Copilot, and Grok; Antigravity excluded until verified. - -## FAQ - -### Why use `agents` instead of `claude` / `codex` / `gemini` directly? - -Claude Code, Codex CLI, Gemini CLI, Grok Build, and others each have their own config format, MCP setup, version management, and skill system. If you use more than one, you maintain N copies of everything. `agents` gives you one interface, one config source, and one place to pin versions -- plus features the individual CLIs don't ship: cross-agent pipelines, shared teams, unified session search, and project-pinned versions like `.nvmrc`. - -### Is it free? - -Yes. This developer tool is entirely free because we believe developers should have the best tools — fast and robust — so they can create the best products for their users. - -### Is this like `nvm` / `mise` / `asdf` for AI agents? - -For version management, yes. `agents-cli` reads `agents.yaml` from the project root, walks up the directory tree, and routes to the correct binary per project. But it also manages agent-native resources (skills, MCP servers, commands, hooks, permissions) that language version managers don't touch. - -### How does version switching actually work? - -Same approach as nvm, pyenv, and rbenv — battle-tested by millions of developers. When you install a version, we set up a shim script that resolves the version from `agents.yaml` and runs the right binary. Each version has an isolated config directory. No manual setup required. - -### How do I share my agent setup with my team? - -Add a `.agents/` directory at your project root with your skills, hooks, rules, and commands. Resources merge automatically: project > user (`~/.agents/`) > system (`~/.agents-system/`). Commit it with your repo and teammates get the same agent environment. - -### Do I need to write separate rules for each agent (CLAUDE.md, GEMINI.md, etc.)? - -No. Write one `AGENTS.md` — it's the canonical source. We automatically sync it to each agent's expected location (`CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor). Same content, zero duplication. - -### Do agents use API keys or subscriptions? - -Your choice. We hand off to the original CLI process — use your existing subscription or API key. This is intentional: subscription pricing is usually cheaper than API token pricing for individual users. Configure each agent however you want. - -### Does it store my API keys or send telemetry? - -**No CLI telemetry or phone-home.** API keys come from your shell environment or each agent CLI's existing auth, and remote calls only happen when you invoke a feature that requires them, such as cloud dispatch. - -For full transparency: `agents-cli` keeps a local event log at `~/.agents/.cache/logs/` so you can see exactly what agents did on your machine. Logs are owner-readable only (0600) and auto-prune after 7 days. Set `AGENTS_DISABLE_EVENT_LOG=1` to disable. See [Security & Privacy](#security--privacy) for details. - -### Which platforms? - -macOS and Linux. Windows via WSL works but isn't first-class yet. - -**macOS-only features:** Keychain-based secrets (`agents secrets`, `agents profiles login`) require macOS. Default iCloud sync for bundles requires macOS + iCloud Keychain enabled; use `--no-icloud-sync` for device-local bundles. On Linux, use environment variables or `.env` files for API keys. Native Linux credential store support is planned. - -### Do I need Node.js? - -The installer tries Bun first (faster), falls back to npm. Node 22.5+ required at runtime. - -### Can I use it in CI? - -Yes -- `agents run` is non-interactive by default. `--yes` auto-accepts prompts, `--json` for structured output. Pass explicit names and IDs instead of relying on interactive pickers. - -The auto-update prompt is suppressed automatically when stdin or stdout isn't a TTY. For headless environments where TTY detection misfires (k8s pods that allocate a PTY for stdout, cloud sandbox factories), set `AGENTS_CLI_DISABLE_AUTO_UPDATE=1` to skip the update check entirely -- no prompt, no network call. - -To update on demand instead of waiting for the prompt, run `agents upgrade` (add `-y` to skip the confirmation, or pass a version/dist-tag to install something other than latest). - -### What happens to my config when I switch versions? - -Each version has its own isolated config directory. Switching just repoints a symlink — your per-version config stays untouched. On first migration (if you had a real `~/.claude/` directory before using agents-cli), that gets backed up once to `~/.agents-system/backups/`. - -### Does session search use RAG or semantic search? - -No — it's a SQLite + FTS5 full-text index. Fast, flexible, and robust. Agents can query sessions programmatically. Most commands support `--json` output for scripting with jq. - -### How do I use custom or local models? - -Profiles (experimental — available by default). Works with LiteLLM Proxy, Ollama, or any OpenAI-compatible endpoint. Drop a YAML in `~/.agents/profiles/` pointing to your endpoint. - -### Can I add support for a new agent? - -Agents are defined in [src/lib/agents.ts](src/lib/agents.ts) -- each is a config object declaring commands dir, rules file, and capabilities. PRs welcome. - -### What's the relationship to Phoenix Labs / Rush? - -`agents-cli` is an open client maintained by Phoenix Labs. Rush is a separate product. No Rush account required, no upsell. - -## Contributing - -```bash -git clone https://github.com/phnx-labs/agents-cli -cd agents-cli -bun install && bun run build && bun test -``` - -Commands in [src/commands/](src/commands/), libraries in [src/lib/](src/lib/), tests as `*.test.ts` under vitest. [CLAUDE.md](CLAUDE.md) has the full style guide. [docs/04-landscape.md](docs/04-landscape.md) covers the competitive landscape. - -## License - -Apache-2.0 -- see [LICENSE](./LICENSE). +The full contributor/design guide lives in [`apps/cli/README.md`](apps/cli/README.md) and +[`docs/`](docs/README.md); repo memory is in [`AGENTS.md`](AGENTS.md). diff --git a/.crabbox.yaml b/apps/cli/.crabbox.yaml similarity index 100% rename from .crabbox.yaml rename to apps/cli/.crabbox.yaml diff --git a/.npmignore b/apps/cli/.npmignore similarity index 100% rename from .npmignore rename to apps/cli/.npmignore diff --git a/CHANGELOG.md b/apps/cli/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to apps/cli/CHANGELOG.md diff --git a/apps/cli/LICENSE b/apps/cli/LICENSE new file mode 100644 index 000000000..30fe4780a --- /dev/null +++ b/apps/cli/LICENSE @@ -0,0 +1,185 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice that is +included in or attached to the work (an example is provided in the Appendix +below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor for +inclusion in the Work by the copyright owner or by an individual or Legal Entity +authorized to submit on behalf of the copyright owner. For the purposes of this +definition, "submitted" means any form of electronic, verbal, or written +communication sent to the Licensor or its representatives, including but not +limited to communication on electronic mailing lists, source code control +systems, and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated in writing by +the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this +License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable copyright license to +reproduce, prepare Derivative Works of, publicly display, publicly perform, +sublicense, and distribute the Work and such Derivative Works in Source or +Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, +each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and otherwise +transfer the Work, where such license applies only to those patent claims +licensable by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) with the Work +to which such Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim in a lawsuit) +alleging that the Work or a Contribution incorporated within the Work +constitutes direct or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate as of the date +such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or +Derivative Works thereof in any medium, with or without modifications, and in +Source or Object form, provided that You meet the following conditions: + +(a) You must give any other recipients of the Work or Derivative Works a copy of +this License; and + +(b) You must cause any modified files to carry prominent notices stating that +You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works that You +distribute, all copyright, patent, trademark, and attribution notices from the +Source form of the Work, excluding those notices that do not pertain to any part +of the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its distribution, then +any Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. + +The contents of the NOTICE file are for informational purposes only and do not +modify the License. You may add Your own attribution notices within Derivative +Works that You distribute, alongside or as an addendum to the NOTICE text from +the Work, provided that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any +Contribution intentionally submitted for inclusion in the Work by You to the +Licensor shall be under the terms and conditions of this License, without any +additional terms or conditions. Notwithstanding the above, nothing herein shall +supersede or modify the terms of any separate license agreement you may have +executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, +trademarks, service marks, or product names of the Licensor, except as required +for reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in +writing, Licensor provides the Work (and each Contributor provides its +Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied, including, without limitation, any warranties or +conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any risks +associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in +tort (including negligence), contract, or otherwise, unless required by +applicable law (such as deliberate and grossly negligent acts) or agreed to in +writing, shall any Contributor be liable to You for damages, including any +direct, indirect, special, incidental, or consequential damages of any character +arising as a result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, work stoppage, +computer failure or malfunction, or any and all other commercial damages or +losses), even if such Contributor has been advised of the possibility of such +damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or +Derivative Works thereof, You may choose to offer, and charge a fee for, +acceptance of support, warranty, indemnity, or other liability obligations +and/or rights consistent with this License. However, in accepting such +obligations, You may act only on Your own behalf and on Your sole +responsibility, not on behalf of any other Contributor, and only if You agree to +indemnify, defend, and hold each Contributor harmless for any liability incurred +by, or claims asserted against, such Contributor by reason of your accepting any +such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification +within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/apps/cli/README.md b/apps/cli/README.md new file mode 100644 index 000000000..3e72f4ba1 --- /dev/null +++ b/apps/cli/README.md @@ -0,0 +1,814 @@ +

+ agents +

+ +

agents

+ +

+ npm version + license + downloads + github +

+ +**The missing toolchain for CLI coding agents.** Run any agent on your existing subscription. Spawn parallel teams in isolated terminals. Schedule routines, drive browsers and Electron apps, and store secrets behind Touch ID — all from one CLI. + +

+ Claude Code +      + Codex CLI +      + Gemini CLI +      + Cursor +      + OpenCode +      + OpenClaw +      + Hermes Agent +      + Grok +      + Droid +

+ +https://agents-cli.sh/demo.mp4 + +```bash +npm install -g @phnx-labs/agents-cli +# or +bun install -g @phnx-labs/agents-cli +``` + +Already installed? `agents upgrade` updates agents-cli itself to the latest version (`agents upgrade 1.2.3` for a specific version or dist-tag, `-y` to skip the confirm prompt). The command is `upgrade` on every platform -- there is no `agents update` (on macOS, `agents helper update` is a different command that reinstalls the keychain helper, not agents-cli). + +Source: [github.com/phnx-labs/agents-cli](https://github.com/phnx-labs/agents-cli) + +Also available as `ag` -- all commands work with both `agents` and `ag`. + +- [Pin versions per project](#pin-versions-per-project) +- [One config, every agent](#one-config-every-agent) +- [Run any agent](#run-any-agent) +- [Sessions across agents](#sessions-across-agents) +- [Run open models through Claude Code](#run-open-models-through-claude-code) +- [Teams](#teams) +- [Workflows](#workflows) +- [Browser](#browser) +- [Secrets](#secrets) +- [Routines](#routines) +- [PTY](#pty) +- [Portable setup](#portable-setup) +- [Private skills](#private-skills) +- [Security & Privacy](#security--privacy) +- [Compatibility](#compatibility) +- [FAQ](#faq) + +--- + +## Pin versions per project + +```bash +# This project needs claude@2.0.65 -- newer versions changed tool calling. +agents use claude@2.0.65 -p + +# The monorepo uses codex@0.116.0 across the team. +agents use codex@0.116.0 -p +``` + +This creates an `agents.yaml` at the project root: + +```yaml +# agents.yaml (commit this to your repo) +agents: + claude: "2.0.65" + codex: "0.116.0" +``` + +Think `requirements.txt` for CLI coding agents, on steroids. A shim reads `agents.yaml` from the project root and routes `claude` / `codex` / `gemini` / `grok` (and others) to the right version automatically. Each version gets its own isolated home -- switching backs up config and re-syncs resources. + +```bash +agents add claude@2.0.65 # Install a specific version +agents add codex@latest # Install latest +agents add codex@oldest # Install the oldest published version +agents view # See everything installed +``` + +--- + +## One config, every agent + +```bash +# Set up the Notion MCP server once. +agents install mcp:com.notion/mcp + +# It's now registered with Claude Code, Codex, Gemini CLI, and Cursor. +agents mcp list +``` + +Skills, slash commands, rules, hooks, and permissions work the same way -- install once in `~/.agents/`, synced to every agent's native format automatically. + +```bash +agents skills add gh:yourteam/python-expert # Knowledge pack -> all agents +agents commands add gh:yourteam/commands # Slash commands -> all agents +agents rules add gh:team/rules # AGENTS.md -> CLAUDE.md, GEMINI.md, .cursorrules +agents permissions add ./perms # Permissions -> auto-converted per agent +``` + +Write one `AGENTS.md`. It becomes `CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor. + +--- + +## Run any agent + +```bash +agents run claude "Find all auth vulnerabilities in src/" +agents run codex "Fix the issues Claude found" +agents run gemini "Write tests for the fixed code" +``` + +Each resolves to the project-pinned version with skills, MCP servers, and permissions already synced. Single-typo names auto-correct across every command — `agents view cladue` resolves to `claude`, `agents add codx@latest` to `codex`. + +### Rate-limited? Keep working. + +```bash +# Claude Code hits a rate limit -> Codex picks up automatically. Same project, same config. +agents run claude "refactor auth module" --mode edit --fallback codex,gemini +``` + +### Multiple accounts? Spread the load. + +```bash +# Picks the signed-in account you haven't used recently. +agents run claude "summarize recent commits" --strategy balanced +``` + +`--strategy balanced` spreads work across available versions of the same agent -- useful when you have multiple accounts and want to avoid burning through one. + +### Chain agents + +```bash +agents run claude "Review PRs merged this week, summarize risks" \ + | agents run codex "Write regression tests for the top 3 risks" +``` + +Supports plan (read-only) and edit modes, effort levels, JSON output for scripting, and timeout limits. + +### One protocol, every harness + +```bash +# Typed event stream instead of raw stdout. Same command, any supported agent. +agents run claude "review this diff" --acp --json +``` + +`--acp` routes through the [Agent Client Protocol](https://github.com/zed-industries/agent-client-protocol) so you get a unified event stream -- `agent_message_chunk`, `tool_call`, `plan_update`, `stop_reason` -- instead of writing a parser per CLI. File writes and shell commands flow through agents-cli, which means `--mode plan` becomes a real sandbox: the write RPC is denied, not just unused. + +ACP adapters are documented for claude, codex, gemini, cursor, opencode, openclaw, and grok. Other harnesses keep running on the direct-exec path. + +--- + +## Sessions across agents + +When you run multiple agents, conversations scatter across tools. Session search brings them together. + +```bash +# Where was that auth conversation? Search Claude Code, Codex, Gemini CLI, OpenCode at once. +agents sessions "auth middleware" + +# Filter by agent, project, or time window +agents sessions --agent codex --since 7d +agents sessions --project my-app + +# Read a full conversation +agents sessions a1b2c3d4 --markdown + +# Just the last 3 turns, user messages only +agents sessions a1b2c3d4 --last 3 --include user +``` + +Interactive picker when you're in a terminal. Structured output (`--json`, `--markdown`, filtered by role or turn count) when piped. + +Backed by a SQLite + FTS5 index at `~/.agents/.history/sessions/sessions.db` with incremental scanning -- warm reads in ~100ms. External tools can consume `--json` output as a programmatic observability layer; see [docs/05-sessions.md](docs/05-sessions.md) for the schema and [docs/06-observability.md](docs/06-observability.md) for the consumption patterns. + +--- + +## Run open models through Claude Code (experimental) + +> **Note:** Profiles are experimental, but available by default — no enable step needed. + +```bash +# Kimi K2.5 responding inside Claude Code's UI, tools, and skills. +# No proxy server. No LiteLLM. One OpenRouter key, stored in Keychain. +agents profiles add kimi +agents run kimi "refactor this file" +``` + +Built-in presets (all via OpenRouter, one shared key): + +| Preset | Model | Notes | +|---|---|---| +| `kimi` | Kimi K2.5 | #1 HumanEval. Reasoning -- interactive only. | +| `minimax` | MiniMax M2.5 | #1 SWE-bench Verified. Reasoning. | +| `glm` | GLM 5 | #1 Chatbot Arena (open-weight). | +| `qwen` | Qwen3 Coder Next | Latest coding Qwen. Print-safe. | +| `deepseek` | DeepSeek Chat V3 | Latest non-reasoning. Print-safe. | + +A profile swaps the model while keeping Claude Code as the agent runtime -- same UI, slash commands, skills, MCP tools. Under the hood: `ANTHROPIC_BASE_URL` + `ANTHROPIC_MODEL`, auth from Keychain at spawn time. + +Custom endpoints (Ollama, vLLM) work too -- drop a YAML in `~/.agents/profiles/`: + +```yaml +name: local-qwen +host: { agent: claude } +env: + ANTHROPIC_BASE_URL: https://ollama.example.com + ANTHROPIC_MODEL: qwen3.6:35b +auth: + envVar: ANTHROPIC_AUTH_TOKEN + keychainItem: agents-cli.ollama.token +``` + +Profile YAML has no secrets -- safe to `agents repo push` to a shared repo. `agents profiles presets` lists the full catalog. + +--- + +## Run on your own machines + +Dispatch any read-only or config command -- and `agents run` itself -- to another machine over SSH. No daemon. + +```bash +# Enroll a machine (from ~/.ssh/config, or inline with user@address) +agents hosts add gpu-box +agents hosts check gpu-box # reachable? which agents-cli version? + +# Run there instead of locally +agents run claude --host gpu-box "profile this build" # follows live by default +agents logs --host gpu-box # pick a dispatched run and view its log +agents logs -f # re-attach to a running one and follow +agents view claude --host gpu-box # inspect the remote install +agents sync --host gpu-box # make the remote machine current + +# Your Tailscale fleet, auto-discovered +agents devices sync # ingest `tailscale status` +agents ssh mac-mini # hardened SSH: fails fast if offline, + # PowerShell on Windows, password-from-Keychain +``` + +**Hosts** (`agents hosts`) are git-synced dispatch targets in `agents.yaml`; **devices** (`agents devices`) are your Tailscale machines in a local registry. Both ride SSH. See [docs/00-concepts.md](docs/00-concepts.md#devices--hosts). + +Every `--host` command rides one multiplexed SSH engine, tuned for driving a fleet from a small laptop: the first call to a machine opens a control socket and every later call reuses it (no repeat TCP+auth handshake), connections carry keepalive so a dropped link dies in ~45 s instead of zombying, and following a remote run polls in a single round-trip per cycle. Measured against a Tailscale-relayed host: repeated calls **~6–7× faster**, dispatch readiness **~2×**, and the follow loop **~21× faster with 50% fewer local ssh spawns**. Design: [docs/09-ssh-transport.md](docs/09-ssh-transport.md) · reproduce: `node scripts/bench-ssh.mjs `. + +--- + +## Teams + +```bash +agents teams create auth-feature + +# Research first, then implement, then test. +agents teams add auth-feature claude "Research auth libraries" --name researcher +agents teams add auth-feature codex "Draft the migration" --name migrator --after researcher +agents teams add auth-feature claude "Write tests for the new code" --name tester --after migrator + +agents teams start auth-feature # Fires teammates whose deps are done +agents teams status auth-feature # Who's working, what they changed, what they said +``` + +Teammates run detached -- close your terminal, they keep working. Check in with `teams status`, read full output with `teams logs `, clean up with `teams disband`. + +Team state is observable via `agents teams list --json` / `agents teams status --json` (compact by default; add `--verbose` for the full per-teammate shape). External tools join it with `sessions --json` (teammates get `isTeamOrigin: true`) and `cloud list --json` (for `--cloud` teammates) to build a unified fleet view. See [docs/06-observability.md](docs/06-observability.md). + +--- + +## Workflows + +Bundle an orchestrator prompt with optional subagents, skills, and plugins into a named, reusable pipeline. One bundle, one invocation. + +```bash +# Use a workflow — workflow name goes in the agent slot +agents run code-review "review PR #42 on acme/api" + +# List + inspect +agents workflows list +agents workflows view code-review + +# Install from GitHub or local +agents workflows add gh:yourteam/code-review +agents workflows add ./my-workflow +``` + +A workflow is a directory: + +``` +~/.agents/workflows/code-review/ + WORKFLOW.md # YAML frontmatter + orchestrator system prompt + subagents/ # optional: *.md files exposed to the orchestrator + security.md + style.md + skills/ # optional: knowledge packs scoped to this workflow + plugins/ # optional: plugin bundles +``` + +`WORKFLOW.md`'s Markdown body is the orchestrator's system prompt. Files under `subagents/` get copied to `~/.claude/agents/` at run time so the built-in Agent tool can dispatch to them by name — including in parallel. `skills/` and `plugins/` sync into the version home just for the run. + +```yaml +# WORKFLOW.md frontmatter +--- +name: Code Review +description: Evidence-grounded PR review with file:line citations. +model: opus +tools: + - Read + - Grep + - Bash + - WebFetch +--- +``` + +Workflows that need to write — post PR comments, edit files, send Slack — should run with `--mode edit` or `--mode full`. `agents run` defaults to `--mode plan` (read-only), which deadlocks at `ExitPlanMode` in headless runs. + +Resolution is project > user > system: a `/.agents/workflows//` overrides a same-named workflow in `~/.agents/workflows/`. Commit project workflows with your repo so teammates get the same pipeline. + +--- + +## Plugins + +Bundle skills, commands, hooks, MCP servers, settings, and permissions under a single manifest. One source dir at `~/.agents/plugins//`, mirrored into every installed Claude / OpenClaw version automatically. + +```bash +# Install from a git URL or local path +agents plugins install hivemind@https://github.com/activeloopai/hivemind.git +agents plugins install ./my-plugin + +# Apply to one agent (default version) or all supported +agents plugins sync rush-toolkit claude +agents plugins sync rush-toolkit +``` + +A plugin is a directory with a manifest: + +``` +~/.agents/plugins/my-plugin/ + .claude-plugin/plugin.json # required: { name, version, description } + skills//SKILL.md # optional + commands/*.md # optional + hooks/hooks.json # optional — executable surface + .mcp.json # optional — executable surface + bin/, scripts/, settings.json # optional — executable surface + permissions/ # optional — executable surface +``` + +On sync, agents-cli copies the plugin into each version home's marketplace (`/.claude/plugins/marketplaces/agents-cli/plugins//`), registers the synthetic marketplace, and flips `settings.json#enabledPlugins[@agents-cli] = true` so Claude / OpenClaw load it. + +### Executable-surface gate + +Plugins that ship `hooks/`, `.mcp.json`, `bin/`, `scripts/`, `settings.json` (non-permissions), or `permissions/` can execute code on session events. agents-cli requires explicit consent before flipping `enabledPlugins`: + +```bash +# Hooks-bearing plugins copy in but stay disabled by default +agents plugins install hivemind@https://github.com/activeloopai/hivemind.git \ + --allow-exec-surfaces + +# Same gate on re-sync (e.g., after upstream updates) +agents plugins sync hivemind claude --allow-exec-surfaces +``` + +Skills, commands, and subagents are declarative and never trip the gate. The gate is per-plugin, per-install: consenting to hivemind doesn't grant blanket exec-surface trust to anything else. + +### Version portability + +Plugins live in the user repo (`~/.agents/plugins/`), not inside any single version home. Switching Claude via `agents use claude@` re-syncs the plugin into the new version automatically — no re-install. New Claude versions added later pick it up on their first sync. Project-level `/.agents/plugins//` overrides a same-named user plugin (resolution is project > user > system, same as every other resource). + +--- + +## Browser + +Give agents access to a real browser — no relay extension, no cloud service, no Playwright getting blocked. + +```bash +# First run: omit --profile and we auto-pick the first installed Chromium-family +# browser. macOS prefers Chrome > Brave > Edge > Chromium > Comet; Linux prefers +# Chrome > Chromium > Brave > Edge; Windows prefers Edge (always preinstalled) > +# Chrome > Brave > Comet. The auto-picked profile is saved as "default" for later runs. +export AGENTS_BROWSER_TASK=$(agents browser start --url https://app.example.com) + +# Or pin a named profile to a specific browser (chrome, comet, brave, chromium, +# edge, or custom) when you want isolation from "default". +agents browser profiles create work --browser chrome +# `start` writes the resolved name (e.g. `swift-crab-falcon-a3f92b1c`) to stdout +# and human-friendly commentary to stderr, so $(...) capture stays clean. +export AGENTS_BROWSER_TASK=$(agents browser start --profile work --url https://app.example.com) +agents browser refs # Get interactive element refs +agents browser click 42 # Click element ref 42 +agents browser type 15 --text "hello" # Type into element ref 15 +agents browser screenshot # Smart resizing, token-efficient +agents browser tabs # List tabs open for the current task +agents browser tab focus tab123 # Switch focus to another tab +agents browser done # Close task's tabs when finished + +# Need to address a different task in the same shell? Override per call: +agents browser screenshot --task other-flow +``` + +### Why this works where Playwright fails + +Playwright and Puppeteer spin up fresh browser instances with automation flags. Sites like LinkedIn, Google, and most finance apps detect and block them immediately. + +`agents browser` launches your existing residential Chrome (or Brave, Edge, Chromium) on your machine via CDP. Same browser fingerprint, same IP, same everything. Sites can't detect automation because you're using the same browser you'd use manually. + +### Token-efficient automation + +The CLI handles the mechanical work so agents don't burn tokens on low-level browser commands. Screenshots are automatically resized without excessive compression — agents process smaller images while keeping the detail they need to make decisions. + +### Profile isolation + +Multiple agents can run browser tasks simultaneously without stepping on each other. Each profile gets its own user data directory, cookies, and state. One agent logs into your work Slack, another into your personal email — no conflicts, no shared state. + +```bash +agents browser profiles create work-slack --browser chrome +agents browser profiles create personal-gmail --browser chrome +# Two agents, two profiles, no interference +``` + +### Safe credential access + +Attach a [secrets bundle](#secrets) to a profile. The agent can log in without credentials in plaintext, and every secret access is recorded in the session log. + +```bash +agents browser profiles create bank --browser chrome --secrets bank-creds +``` + +### Electron apps + +Control Electron apps (Slack, Discord, VS Code, your own app) with custom binaries: + +```bash +agents browser profiles create slack \ + --browser custom \ + --binary "/Applications/Slack.app/Contents/MacOS/Slack" \ + --electron +``` + +### Remote browsers + +Connect to browsers running anywhere — local, SSH tunnels, or cloud services: + +```bash +# Local CDP (discovers WebSocket URL automatically) +agents browser profiles create local-debug \ + --browser chrome \ + --endpoint "http://localhost:9222" + +# SSH tunnel to a remote machine +agents browser profiles create staging \ + --browser chrome \ + --endpoint "ssh://deploy@staging.example.com?port=9222" + +# Cloud browser services (BrowserBase, Steel, etc.) +agents browser profiles create cloud \ + --browser chrome \ + --endpoint "wss://connect.browserbase.com?apiKey=..." +``` + +--- + +## Secrets + +> **Platform:** `agents secrets` requires macOS Keychain or Linux libsecret. +> On Windows (non-WSL), use environment variables or a `.env` file instead. + +```bash +# API keys in Keychain, not in .env files. +agents secrets create prod-stripe +agents secrets add prod-stripe STRIPE_SECRET_KEY # Prompts, stores in Keychain +agents secrets add prod-stripe TEST_CARD --value "4242..." + +# Injected at run time. Bundle definitions live in the Keychain, not on disk. +agents run claude "charge a test card" --secrets prod-stripe +``` + +

+ How agents-cli secrets work: bundle definitions live in the macOS Keychain alongside their values, agents-cli resolves at runtime and injects the env into the child process +

+ +Merge order: profile env < `--secrets` < `--env K=V`. A missing keychain item aborts before the child starts. + +### Cross-machine sync via iCloud Keychain + +Secret bundles sync through iCloud Keychain by default. Sign into the same iCloud account on another Mac (with iCloud Keychain enabled) and the bundle appears there within seconds — no copy-paste, no `.env` files emailed to yourself, no shared secret stores. Pass `--no-icloud-sync` when creating a bundle if it should stay device-local. + +```bash +# On laptop: +agents secrets create npm-tokens +agents secrets add npm-tokens NPM_TOKEN # value lives in iCloud Keychain + +# On another Mac (same iCloud account): +agents secrets list # npm-tokens is already there; +agents run claude "..." --secrets npm-tokens # injects NPM_TOKEN automatically +``` + +Under the hood, synced bundles route writes through a notarized helper app (`Agents CLI.app`) that holds the entitlement macOS requires for `kSecAttrSynchronizable`. Bundles created with `--no-icloud-sync` stay device-local. + +Bundle definitions sync via iCloud Keychain too — no `agents repo push` needed for secrets, no recreate step on each Mac. Nothing about secrets ever lives in plaintext on disk. + +### Per-secret metadata and rotation + +Tag each secret with `--type`, `--expires`, and `--note` so the bundle is self-documenting. `--expires` is always future-dated (`YYYY-MM-DD`); past or same-day values are rejected. Use `agents secrets rotate ` to refresh a credential — `add` only creates new keys, `rotate` replaces the value and preserves metadata unless overridden. + +```bash +agents secrets add prod STRIPE_API_KEY --type api-key --expires 2027-01-15 --note "Live key, owner: payments-team" +agents secrets rotate prod STRIPE_API_KEY --note "rotated after suspected leak" +agents secrets list # EXPIRING column flags secrets due in the next 30 days +``` + +--- + +## Routines + +```bash +# Claude Code reviews PRs every weekday at 9 AM. Scheduler auto-starts. +agents routines add daily-digest \ + --schedule "0 9 * * 1-5" \ + --agent claude \ + --prompt "Review yesterday's PRs and summarize key changes" + +agents routines list # All jobs + next run times +agents routines run daily-digest # Test it now, ignore the schedule +agents routines logs daily-digest # Check last execution +``` + +Jobs run sandboxed -- agents only see directories and tools you explicitly allow. + +--- + +## PTY + +```bash +# Give agents a real terminal for REPLs, TUIs, interactive programs. +SID=$(agents pty start) +agents pty exec $SID "python3" +agents pty screen $SID # Clean text, no ANSI -- what a human sees +agents pty write $SID "print('hello')\n" +agents pty stop $SID +``` + +A sidecar server holds sessions alive between CLI calls. `screen` renders via xterm-headless. Sessions auto-clean after 30 minutes idle. + +--- + +## Portable setup + +```bash +# New machine? One command. +agents setup + +# Installs CLIs, registers MCP servers, syncs skills/commands/rules/hooks, +# sets up shims, configures defaults. Done. + +agents repo push # Snapshot your config to git +``` + +### How config is layered + +Two repos with the same shape, different roles: + +| Repo | Role | Owner | +|---|---|---| +| `~/.agents-system/` | **System repo** — core/built-in skills, commands, hooks, rules, MCP configs, permissions, and profiles that ship with `agents-cli`. The defaults every install gets. | Maintained upstream at [phnx-labs/.agents-system](https://github.com/phnx-labs/.agents-system) | +| `~/.agents/` | **User repo** — your personal additions and overrides. This is what `agents repo push`/`pull` syncs. | You | + +**Version pinning:** `agents.yaml` at project root pins which agent version to use (like `.nvmrc` for Node). + +**Resource resolution:** When syncing resources (commands, skills, rules, hooks, MCP, permissions), the order is **project > user > system**. A `.agents/` directory at project root wins, then `~/.agents/`, then `~/.agents-system/`. Same-named resources higher in the chain override lower ones; everything else unions in. + +See [docs/00-concepts.md](docs/00-concepts.md) for the full mental model: DotAgents repos, resource kinds, and how resolution works end-to-end. + +Other useful commands: `agents doctor` checks CLI availability and resource sync drift, `agents usage` shows available quota/rate-limit data for installed agents, `agents budget` shows cross-vendor spend caps and current spend-to-cap (and enforces pre-flight estimates + a hard-cap kill-switch on every run — see [docs/06-observability.md](docs/06-observability.md#budget-guardrails-agents-budget)), `agents import` adopts an existing unmanaged install, `agents trash` lists and restores soft-deleted version directories, and `agents subagents` installs reusable subagent definitions for parent-agent workflows. + +--- + +## Private skills + +Keep work or personal skills in a separate repo — public ones in `~/.agents/`, private ones in an extra repo that merges in at sync time. + +```bash +# Add a private repo for work-only skills +agents repo add gh:yourname/.agents-work + +# Add with a custom alias +agents repo add git@github.com:acme/team-skills.git --as acme + +agents repo list # Primary + every registered extra +agents repo pull # Pull updates for all enabled extras +agents repo disable acme # Stop merging without deleting +agents repo remove acme # Unregister and delete the clone +``` + +Extras clone into `~/.agents-system/.repos//` and ship the same layout as the primary (`skills/`, `commands/`, `hooks/`, `rules/`). Their contents merge into agent version homes after the primary's — so `~/.agents/` always wins on name collisions. `agents skills list` shows which repo each skill came from. + +--- + +## Security & Privacy + +**The CLI binary has no built-in telemetry or phone-home path.** Routine commands run locally; explicit features such as cloud dispatch and iCloud Keychain sync send only the data needed for the action you invoke. Here's exactly what `agents-cli` stores locally and why. + +### Event log + +Every agent run, version install, browser launch, and secrets access is logged to `~/.agents/.cache/logs/events-YYYY-MM-DD.jsonl`. This gives you a complete record of what agents did on your machine. + +```bash +# What gets logged (example event): +{ + "ts": "2026-05-09T10:23:45Z", + "event": "agent.run.end", + "agent": "claude", + "version": "2.1.121", + "prompt": "Fix the auth bug in...", # truncated to 200 chars + "durationMs": 45230, + "exitCode": 0, + "hostname": "your-mac", + "platform": "darwin" +} +``` + +**What's logged:** Operation type, agent, version, timing, prompt length + SHA-256 hash (raw text never stored), exit codes, errors, and secret bundle/key names with caller context. Argv entries that look like tokens or secret paths are redacted. **What's NOT logged:** Raw prompts, outputs, file contents, or secret values. + +**Permissions:** Logs directory is `0700` (owner-only), files are `0600`. Only you can read them. + +**Retention:** 7 days by default, then auto-pruned. + +**Opt out:** Set `AGENTS_DISABLE_EVENT_LOG=1` in your shell to disable completely. + +### Session search + +Conversations with Claude, Codex, Gemini, and other agents scatter across their native storage. Session search indexes them locally so you can find any conversation: + +```bash +agents sessions "auth middleware" # Full-text search across all agents +agents sessions --agent claude --since 7d +``` + +The index lives at `~/.agents/.history/sessions/sessions.db` (SQLite + FTS5). Nothing leaves your machine. See [Sessions](#sessions-across-agents) for full usage. + +### Secrets + +API keys and credentials are stored in macOS Keychain, never in plaintext files. Bundle definitions also live in Keychain. + +```bash +agents secrets create my-keys +agents secrets add my-keys API_KEY # Prompts for value, stores in Keychain +``` + +By default, secrets sync via iCloud Keychain to your other Macs. With `--no-icloud-sync`, they stay device-local. See [Secrets](#secrets) for full usage. + +### Summary + +| Data | Location | Who can read | Opt out | +|------|----------|--------------|---------| +| Event log | `~/.agents/.cache/logs/` | You only (0600) | `AGENTS_DISABLE_EVENT_LOG=1` | +| Session index | `~/.agents/.history/sessions/` | You only | Delete the directory | +| Secrets | macOS Keychain | You + apps you authorize | Don't use `agents secrets` | +| Config | `~/.agents/` | You only | N/A | + +--- + +## Compatibility + +Which DotAgents resources each agent CLI can load. Source of truth: [src/lib/agents.ts](src/lib/agents.ts) (`capabilities`); gates use `supports(agent, cap, version)` from [src/lib/capabilities.ts](src/lib/capabilities.ts). Full matrix also in [docs/00-concepts.md](docs/00-concepts.md). + +> **† Gemini CLI is deprecated.** Google retired it for free, Pro, and Ultra tiers on **June 18, 2026** (announced at Google I/O 2026); the `gemini` command no longer serves requests on those tiers. agents-cli still manages existing installs, but warns on `agents add gemini` and `agents teams add … gemini`. New setups should use **Antigravity CLI** (`antigravity`), Google's official successor — see [the transition notice](https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/). + +| Agent | Versions | Hooks | MCP | Permissions | Skills | Commands | Plugins | Subagents | Rules | Workflows | +|-------|----------|-------|-----|-------------|--------|----------|---------|-----------|-------|-----------| +| Claude Code | yes | yes | yes | yes | yes | yes | yes | yes | `CLAUDE.md` | yes | +| Codex CLI | yes | >= 0.116.0 | yes | no | yes | < 0.117.0 · skills ($name, >= 0.117) | >= 0.128.0 | no | `AGENTS.md` | no | +| Gemini CLI † | yes | >= 0.26.0 | yes | no | yes | yes (.toml) | no | no | `GEMINI.md` | no | +| Antigravity | yes | yes | yes | yes | yes | yes | yes | no | `AGENTS.md` | no | +| Grok Build | yes | yes | yes | yes | yes | skills ($name) | yes | no | `AGENTS.md` | no | +| OpenClaw | yes | yes | yes | no | yes | gateway | yes | yes | `workspace/AGENTS.md` | no | +| Cursor | yes | no | yes | no | yes | yes | no | no | `.cursorrules` | no | +| OpenCode | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | +| Copilot | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | +| Amp | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | +| Kiro | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | +| Goose | yes | no | yes | no | no | no | no | no | `AGENTS.md` | no | +| Roo Code | yes | no | yes | no | yes | yes | no | no | `AGENTS.md` | no | + +**Legend:** `yes` / `no` = synced or skipped at install time. `skills ($name)` = no file-based slash-command dir; behavior ships as a generated skill invoked with `$command`. `gateway` = OpenClaw resolves slash commands at runtime, not from synced files. Version suffixes are enforced at sync time — out-of-range versions are skipped with a clear message. + +**Host CLIs** (`agents cli`) are separate: YAML manifests under `~/.agents/cli/` install binaries onto your PATH (`gh`, `higgsfield`, etc.). They are not copied into per-agent version homes. + +### agents-cli features (not agent-native resources) + +| Agent | Routines | Teams | Session index | +|-------|----------|-------|---------------| +| Claude Code | yes | yes | yes | +| Codex CLI | yes | yes | yes | +| Gemini CLI † | yes | yes | yes | +| Cursor | -- | yes | -- | +| OpenCode | -- | yes | -- | +| Grok Build | -- | yes | yes | +| Antigravity | -- | yes | -- | +| Copilot | -- | -- | yes | +| OpenClaw, Amp, Kiro, Goose, Roo | -- | -- | -- | + +### Version-gated sync + +| Capability | Agent | Gate | +|------------|-------|------| +| Hooks | Codex | >= 0.116.0 | +| Hooks | Gemini | >= 0.26.0 | +| File-based commands | Codex | < 0.117.0 (0.117+ uses command-as-skill) | +| Plugins | Codex | >= 0.128.0 | + +Codex `0.117.0+` no longer reads `.codex/prompts/`; agents-cli converts slash commands into skills so they stay invocable as `$name`. OpenCode's plugin-based hook system is on the roadmap; hooks stay `no` until a writer ships. + +Slash commands can declare per-agent/version targeting in frontmatter (`agents:`, `since:`, `until:`). Gating applies when syncing from `~/.agents/commands/` (user/system) into version homes — project `.agents/commands/` files are read in place and are not filtered by `agents:`. This repo ships `.agents/commands/version.md` as `/version` for Claude, Codex, Gemini, Cursor, OpenCode, Copilot, and Grok; Antigravity excluded until verified. + +## FAQ + +### Why use `agents` instead of `claude` / `codex` / `gemini` directly? + +Claude Code, Codex CLI, Gemini CLI, Grok Build, and others each have their own config format, MCP setup, version management, and skill system. If you use more than one, you maintain N copies of everything. `agents` gives you one interface, one config source, and one place to pin versions -- plus features the individual CLIs don't ship: cross-agent pipelines, shared teams, unified session search, and project-pinned versions like `.nvmrc`. + +### Is it free? + +Yes. This developer tool is entirely free because we believe developers should have the best tools — fast and robust — so they can create the best products for their users. + +### Is this like `nvm` / `mise` / `asdf` for AI agents? + +For version management, yes. `agents-cli` reads `agents.yaml` from the project root, walks up the directory tree, and routes to the correct binary per project. But it also manages agent-native resources (skills, MCP servers, commands, hooks, permissions) that language version managers don't touch. + +### How does version switching actually work? + +Same approach as nvm, pyenv, and rbenv — battle-tested by millions of developers. When you install a version, we set up a shim script that resolves the version from `agents.yaml` and runs the right binary. Each version has an isolated config directory. No manual setup required. + +### How do I share my agent setup with my team? + +Add a `.agents/` directory at your project root with your skills, hooks, rules, and commands. Resources merge automatically: project > user (`~/.agents/`) > system (`~/.agents-system/`). Commit it with your repo and teammates get the same agent environment. + +### Do I need to write separate rules for each agent (CLAUDE.md, GEMINI.md, etc.)? + +No. Write one `AGENTS.md` — it's the canonical source. We automatically sync it to each agent's expected location (`CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor). Same content, zero duplication. + +### Do agents use API keys or subscriptions? + +Your choice. We hand off to the original CLI process — use your existing subscription or API key. This is intentional: subscription pricing is usually cheaper than API token pricing for individual users. Configure each agent however you want. + +### Does it store my API keys or send telemetry? + +**No CLI telemetry or phone-home.** API keys come from your shell environment or each agent CLI's existing auth, and remote calls only happen when you invoke a feature that requires them, such as cloud dispatch. + +For full transparency: `agents-cli` keeps a local event log at `~/.agents/.cache/logs/` so you can see exactly what agents did on your machine. Logs are owner-readable only (0600) and auto-prune after 7 days. Set `AGENTS_DISABLE_EVENT_LOG=1` to disable. See [Security & Privacy](#security--privacy) for details. + +### Which platforms? + +macOS and Linux. Windows via WSL works but isn't first-class yet. + +**macOS-only features:** Keychain-based secrets (`agents secrets`, `agents profiles login`) require macOS. Default iCloud sync for bundles requires macOS + iCloud Keychain enabled; use `--no-icloud-sync` for device-local bundles. On Linux, use environment variables or `.env` files for API keys. Native Linux credential store support is planned. + +### Do I need Node.js? + +The installer tries Bun first (faster), falls back to npm. Node 22.5+ required at runtime. + +### Can I use it in CI? + +Yes -- `agents run` is non-interactive by default. `--yes` auto-accepts prompts, `--json` for structured output. Pass explicit names and IDs instead of relying on interactive pickers. + +The auto-update prompt is suppressed automatically when stdin or stdout isn't a TTY. For headless environments where TTY detection misfires (k8s pods that allocate a PTY for stdout, cloud sandbox factories), set `AGENTS_CLI_DISABLE_AUTO_UPDATE=1` to skip the update check entirely -- no prompt, no network call. + +To update on demand instead of waiting for the prompt, run `agents upgrade` (add `-y` to skip the confirmation, or pass a version/dist-tag to install something other than latest). + +### What happens to my config when I switch versions? + +Each version has its own isolated config directory. Switching just repoints a symlink — your per-version config stays untouched. On first migration (if you had a real `~/.claude/` directory before using agents-cli), that gets backed up once to `~/.agents-system/backups/`. + +### Does session search use RAG or semantic search? + +No — it's a SQLite + FTS5 full-text index. Fast, flexible, and robust. Agents can query sessions programmatically. Most commands support `--json` output for scripting with jq. + +### How do I use custom or local models? + +Profiles (experimental — available by default). Works with LiteLLM Proxy, Ollama, or any OpenAI-compatible endpoint. Drop a YAML in `~/.agents/profiles/` pointing to your endpoint. + +### Can I add support for a new agent? + +Agents are defined in [src/lib/agents.ts](src/lib/agents.ts) -- each is a config object declaring commands dir, rules file, and capabilities. PRs welcome. + +### What's the relationship to Phoenix Labs / Rush? + +`agents-cli` is an open client maintained by Phoenix Labs. Rush is a separate product. No Rush account required, no upsell. + +## Contributing + +```bash +git clone https://github.com/phnx-labs/agents-cli +cd agents-cli +bun install && bun run build && bun test +``` + +Commands in [src/commands/](src/commands/), libraries in [src/lib/](src/lib/), tests as `*.test.ts` under vitest. [CLAUDE.md](CLAUDE.md) has the full style guide. [docs/04-landscape.md](docs/04-landscape.md) covers the competitive landscape. + +## License + +Apache-2.0 -- see [LICENSE](./LICENSE). diff --git a/bench/after.json b/apps/cli/bench/after.json similarity index 100% rename from bench/after.json rename to apps/cli/bench/after.json diff --git a/bench/baseline.json b/apps/cli/bench/baseline.json similarity index 100% rename from bench/baseline.json rename to apps/cli/bench/baseline.json diff --git a/bench/offload-smoke.sh b/apps/cli/bench/offload-smoke.sh similarity index 100% rename from bench/offload-smoke.sh rename to apps/cli/bench/offload-smoke.sh diff --git a/bench/resolve-perf.ts b/apps/cli/bench/resolve-perf.ts similarity index 100% rename from bench/resolve-perf.ts rename to apps/cli/bench/resolve-perf.ts diff --git a/bench/sessions-perf.ts b/apps/cli/bench/sessions-perf.ts similarity index 100% rename from bench/sessions-perf.ts rename to apps/cli/bench/sessions-perf.ts diff --git a/bench/tty-vs-headless.py b/apps/cli/bench/tty-vs-headless.py similarity index 100% rename from bench/tty-vs-headless.py rename to apps/cli/bench/tty-vs-headless.py diff --git a/bun.lock b/apps/cli/bun.lock similarity index 100% rename from bun.lock rename to apps/cli/bun.lock diff --git a/packages/computer-helper/.gitignore b/apps/cli/menubar/.gitignore similarity index 100% rename from packages/computer-helper/.gitignore rename to apps/cli/menubar/.gitignore diff --git a/packages/menubar-helper/Package.swift b/apps/cli/menubar/Package.swift similarity index 100% rename from packages/menubar-helper/Package.swift rename to apps/cli/menubar/Package.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/AgentsCLI.swift b/apps/cli/menubar/Sources/MenubarHelper/AgentsCLI.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/AgentsCLI.swift rename to apps/cli/menubar/Sources/MenubarHelper/AgentsCLI.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/Bench.swift b/apps/cli/menubar/Sources/MenubarHelper/Bench.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/Bench.swift rename to apps/cli/menubar/Sources/MenubarHelper/Bench.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/Clip.swift b/apps/cli/menubar/Sources/MenubarHelper/Clip.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/Clip.swift rename to apps/cli/menubar/Sources/MenubarHelper/Clip.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/Hotkey.swift b/apps/cli/menubar/Sources/MenubarHelper/Hotkey.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/Hotkey.swift rename to apps/cli/menubar/Sources/MenubarHelper/Hotkey.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/Icon.swift b/apps/cli/menubar/Sources/MenubarHelper/Icon.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/Icon.swift rename to apps/cli/menubar/Sources/MenubarHelper/Icon.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/LocalState.swift b/apps/cli/menubar/Sources/MenubarHelper/LocalState.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/LocalState.swift rename to apps/cli/menubar/Sources/MenubarHelper/LocalState.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/Models.swift b/apps/cli/menubar/Sources/MenubarHelper/Models.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/Models.swift rename to apps/cli/menubar/Sources/MenubarHelper/Models.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/StatusItemController.swift b/apps/cli/menubar/Sources/MenubarHelper/StatusItemController.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/StatusItemController.swift rename to apps/cli/menubar/Sources/MenubarHelper/StatusItemController.swift diff --git a/packages/menubar-helper/Sources/MenubarHelper/main.swift b/apps/cli/menubar/Sources/MenubarHelper/main.swift similarity index 100% rename from packages/menubar-helper/Sources/MenubarHelper/main.swift rename to apps/cli/menubar/Sources/MenubarHelper/main.swift diff --git a/packages/menubar-helper/scripts/build.sh b/apps/cli/menubar/scripts/build.sh similarity index 100% rename from packages/menubar-helper/scripts/build.sh rename to apps/cli/menubar/scripts/build.sh diff --git a/apps/cli/package.json b/apps/cli/package.json new file mode 100644 index 000000000..3926f40aa --- /dev/null +++ b/apps/cli/package.json @@ -0,0 +1,111 @@ +{ + "name": "@phnx-labs/agents-cli", + "version": "1.20.40", + "description": "One CLI for all your AI coding agents - versions, config, cloud dispatch, sessions, and teams (now with first-class Grok Build CLI support)", + "type": "module", + "main": "dist/index.js", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./teams": { + "types": "./dist/lib/teams/index.d.ts", + "import": "./dist/lib/teams/index.js" + } + }, + "bin": { + "agents": "dist/index.js", + "ag": "dist/index.js", + "browser": "dist/browser.js", + "computer": "dist/computer.js" + }, + "files": [ + "dist/**/*.js", + "dist/**/*.d.ts", + "dist/**/*.json", + "dist/lib/secrets/Agents CLI.app/**", + "dist/lib/menubar/MenubarHelper.app/**", + "scripts/postinstall.js", + "scripts/install-helper.js", + "CHANGELOG.md", + "README.md", + "LICENSE" + ], + "publishConfig": { + "provenance": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/phnx-labs/agents-cli.git" + }, + "homepage": "https://agents-cli.sh", + "bugs": { + "url": "https://github.com/phnx-labs/agents-cli/issues" + }, + "scripts": { + "build": "tsc && rm -rf 'dist/lib/secrets/AgentsKeychain.app' 'dist/lib/secrets/Agents CLI.app' 'dist/lib/menubar/MenubarHelper.app' && ([ \"$(uname)\" = \"Darwin\" ] && cp -R 'bin/Agents CLI.app' 'dist/lib/secrets/Agents CLI.app' || true) && ([ \"$(uname)\" = \"Darwin\" ] && [ -d 'bin/MenubarHelper.app' ] && mkdir -p 'dist/lib/menubar' && cp -R 'bin/MenubarHelper.app' 'dist/lib/menubar/MenubarHelper.app' || true)", + "build:bin": "scripts/build-bin.sh", + "prepare": "npm run build", + "prepack": "scripts/verify-keychain-helper.sh && scripts/verify-menubar-helper.sh", + "postinstall": "node scripts/postinstall.js", + "dev": "tsx src/index.ts", + "start": "node dist/index.js", + "test": "node ./node_modules/vitest/vitest.mjs run", + "test:remote": "scripts/sandbox.sh 'bun install && bun run build && bun run test'", + "test:watch": "node ./node_modules/vitest/vitest.mjs" + }, + "keywords": [ + "agents", + "cli", + "dotfiles", + "claude", + "codex", + "gemini", + "cursor", + "opencode", + "grok", + "xai", + "mcp", + "skills", + "ai", + "sync", + "multi-agent" + ], + "author": "Phoenix Labs", + "license": "Apache-2.0", + "engines": { + "node": ">=22.5.0", + "npm": ">=9" + }, + "trustedDependencies": [ + "@homebridge/node-pty-prebuilt-multiarch" + ], + "dependencies": { + "@homebridge/node-pty-prebuilt-multiarch": "0.13.1", + "@inquirer/prompts": "8.5.2", + "@types/proper-lockfile": "4.1.4", + "@xterm/headless": "6.0.0", + "@zed-industries/agent-client-protocol": "0.4.5", + "aws4fetch": "1.0.20", + "chalk": "5.6.2", + "commander": "15.0.0", + "croner": "10.0.1", + "diff": "9.0.0", + "marked": "15.0.12", + "marked-terminal": "7.3.0", + "ora": "9.4.1", + "proper-lockfile": "4.1.2", + "simple-git": "3.36.0", + "smol-toml": "1.7.0", + "yaml": "2.9.0" + }, + "devDependencies": { + "@types/diff": "8.0.0", + "@types/marked-terminal": "6.1.1", + "@types/node": "26.1.0", + "tsx": "4.23.0", + "typescript": "6.0.3", + "vitest": "4.1.9" + } +} diff --git a/scripts/Agents CLI.app.sha256 b/apps/cli/scripts/Agents CLI.app.sha256 similarity index 100% rename from scripts/Agents CLI.app.sha256 rename to apps/cli/scripts/Agents CLI.app.sha256 diff --git a/scripts/bench-ssh.mjs b/apps/cli/scripts/bench-ssh.mjs similarity index 100% rename from scripts/bench-ssh.mjs rename to apps/cli/scripts/bench-ssh.mjs diff --git a/scripts/bench-staleness.ts b/apps/cli/scripts/bench-staleness.ts similarity index 100% rename from scripts/bench-staleness.ts rename to apps/cli/scripts/bench-staleness.ts diff --git a/scripts/build-bin.sh b/apps/cli/scripts/build-bin.sh similarity index 100% rename from scripts/build-bin.sh rename to apps/cli/scripts/build-bin.sh diff --git a/scripts/build-keychain-helper.sh b/apps/cli/scripts/build-keychain-helper.sh similarity index 100% rename from scripts/build-keychain-helper.sh rename to apps/cli/scripts/build-keychain-helper.sh diff --git a/scripts/build-win.sh b/apps/cli/scripts/build-win.sh similarity index 94% rename from scripts/build-win.sh rename to apps/cli/scripts/build-win.sh index 13e854881..b91cb3a7b 100755 --- a/scripts/build-win.sh +++ b/apps/cli/scripts/build-win.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Cross-publish the Windows computer-use daemon (packages/computer-helper-win) +# Cross-publish the Windows computer-use daemon (native/computer-win) # into a single self-contained win-x64 exe — from a macOS or Linux build host. # # The csproj already sets EnableWindowsTargeting=true, so `dotnet publish` for a @@ -39,7 +39,7 @@ if [[ -z "$DOTNET" && -x "$HOME/.dotnet/dotnet" ]]; then fi [[ -n "$DOTNET" ]] || die "dotnet not found. Install the .NET 10 SDK: curl -fsSL https://dot.net/v1/dotnet-install.sh | bash -s -- --channel 10.0" -PROJECT="packages/computer-helper-win" +PROJECT="native/computer-win" OUT="$PROJECT/dist" bold "Build (win-x64)"; echo " $("$DOTNET" --version) — $PROJECT" diff --git a/scripts/build.sh b/apps/cli/scripts/build.sh similarity index 100% rename from scripts/build.sh rename to apps/cli/scripts/build.sh diff --git a/scripts/companion-shim/README.md b/apps/cli/scripts/companion-shim/README.md similarity index 100% rename from scripts/companion-shim/README.md rename to apps/cli/scripts/companion-shim/README.md diff --git a/scripts/companion-shim/bin/agents.js b/apps/cli/scripts/companion-shim/bin/agents.js similarity index 100% rename from scripts/companion-shim/bin/agents.js rename to apps/cli/scripts/companion-shim/bin/agents.js diff --git a/scripts/companion-shim/scripts/postinstall.js b/apps/cli/scripts/companion-shim/scripts/postinstall.js similarity index 100% rename from scripts/companion-shim/scripts/postinstall.js rename to apps/cli/scripts/companion-shim/scripts/postinstall.js diff --git a/scripts/install-helper.js b/apps/cli/scripts/install-helper.js similarity index 100% rename from scripts/install-helper.js rename to apps/cli/scripts/install-helper.js diff --git a/scripts/install.sh b/apps/cli/scripts/install.sh similarity index 100% rename from scripts/install.sh rename to apps/cli/scripts/install.sh diff --git a/scripts/keychain-entitlements.plist b/apps/cli/scripts/keychain-entitlements.plist similarity index 100% rename from scripts/keychain-entitlements.plist rename to apps/cli/scripts/keychain-entitlements.plist diff --git a/scripts/postinstall.js b/apps/cli/scripts/postinstall.js similarity index 100% rename from scripts/postinstall.js rename to apps/cli/scripts/postinstall.js diff --git a/scripts/postinstall.test.ts b/apps/cli/scripts/postinstall.test.ts similarity index 100% rename from scripts/postinstall.test.ts rename to apps/cli/scripts/postinstall.test.ts diff --git a/scripts/release.sh b/apps/cli/scripts/release.sh similarity index 99% rename from scripts/release.sh rename to apps/cli/scripts/release.sh index 248046ce4..e36d4d15a 100755 --- a/scripts/release.sh +++ b/apps/cli/scripts/release.sh @@ -363,7 +363,7 @@ echo # local commit subjects, so a half-finished release re-runs cleanly. RELEASE_BRANCH="release/v$TARGET" MAIN_AT_TARGET=false -if [[ "$(git show "origin/$DEFAULT_BRANCH:package.json" 2>/dev/null | jq -r .version 2>/dev/null || echo '')" == "$TARGET" ]]; then +if [[ "$(git show "origin/$DEFAULT_BRANCH:apps/cli/package.json" 2>/dev/null | jq -r .version 2>/dev/null || echo '')" == "$TARGET" ]]; then MAIN_AT_TARGET=true # a prior run already merged the chore(release) PR fi EXISTING_PR="$(gh pr list --head "$RELEASE_BRANCH" --state open --json number --jq '.[0].number // empty' 2>/dev/null || true)" @@ -538,7 +538,7 @@ fi # ----- Resolve the merged commit + integrity guards (before any publish) ----- git fetch --quiet origin "$DEFAULT_BRANCH" MERGED_SHA="$(git rev-parse "origin/$DEFAULT_BRANCH")" -MERGED_VER="$(git show "$MERGED_SHA:package.json" | jq -r .version)" +MERGED_VER="$(git show "$MERGED_SHA:apps/cli/package.json" | jq -r .version)" [[ "$MERGED_VER" == "$TARGET" ]] || die "merged $DEFAULT_BRANCH is at $MERGED_VER, not $TARGET -- refusing to tag/publish" if [[ -n "${BRANCH_TREE:-}" ]]; then # A single-commit squash onto an unchanged base yields a tree identical to what diff --git a/scripts/sandbox.sh b/apps/cli/scripts/sandbox.sh similarity index 100% rename from scripts/sandbox.sh rename to apps/cli/scripts/sandbox.sh diff --git a/scripts/scrub-orphan-branches.sh b/apps/cli/scripts/scrub-orphan-branches.sh similarity index 100% rename from scripts/scrub-orphan-branches.sh rename to apps/cli/scripts/scrub-orphan-branches.sh diff --git a/scripts/setup-npm-secret.sh b/apps/cli/scripts/setup-npm-secret.sh similarity index 100% rename from scripts/setup-npm-secret.sh rename to apps/cli/scripts/setup-npm-secret.sh diff --git a/scripts/verify-keychain-helper.sh b/apps/cli/scripts/verify-keychain-helper.sh similarity index 100% rename from scripts/verify-keychain-helper.sh rename to apps/cli/scripts/verify-keychain-helper.sh diff --git a/scripts/verify-menubar-helper.sh b/apps/cli/scripts/verify-menubar-helper.sh similarity index 86% rename from scripts/verify-menubar-helper.sh rename to apps/cli/scripts/verify-menubar-helper.sh index 91a85ab83..3317c7f19 100755 --- a/scripts/verify-menubar-helper.sh +++ b/apps/cli/scripts/verify-menubar-helper.sh @@ -27,15 +27,15 @@ APP="bin/MenubarHelper.app" if [ ! -d "$APP" ]; then echo "menubar helper missing: $APP not found" >&2 echo "Build and stage it before releasing:" >&2 - echo " packages/menubar-helper/scripts/build.sh release" >&2 - echo " cp -R packages/menubar-helper/dist/MenubarHelper.app bin/MenubarHelper.app" >&2 + echo " menubar/scripts/build.sh release" >&2 + echo " cp -R menubar/dist/MenubarHelper.app bin/MenubarHelper.app" >&2 exit 1 fi if command -v codesign >/dev/null 2>&1; then if ! codesign --verify --deep --strict "$APP" 2>/dev/null; then echo "menubar helper failed codesign --verify --deep --strict: $APP" >&2 - echo "Rebuild it: packages/menubar-helper/scripts/build.sh release" >&2 + echo "Rebuild it: menubar/scripts/build.sh release" >&2 exit 1 fi fi diff --git a/src/browser.ts b/apps/cli/src/browser.ts similarity index 100% rename from src/browser.ts rename to apps/cli/src/browser.ts diff --git a/src/commands/__tests__/auto-install-resolver.test.ts b/apps/cli/src/commands/__tests__/auto-install-resolver.test.ts similarity index 100% rename from src/commands/__tests__/auto-install-resolver.test.ts rename to apps/cli/src/commands/__tests__/auto-install-resolver.test.ts diff --git a/src/commands/__tests__/beta.test.ts b/apps/cli/src/commands/__tests__/beta.test.ts similarity index 100% rename from src/commands/__tests__/beta.test.ts rename to apps/cli/src/commands/__tests__/beta.test.ts diff --git a/src/commands/__tests__/inspect.test.ts b/apps/cli/src/commands/__tests__/inspect.test.ts similarity index 100% rename from src/commands/__tests__/inspect.test.ts rename to apps/cli/src/commands/__tests__/inspect.test.ts diff --git a/src/commands/__tests__/profiles-create.test.ts b/apps/cli/src/commands/__tests__/profiles-create.test.ts similarity index 100% rename from src/commands/__tests__/profiles-create.test.ts rename to apps/cli/src/commands/__tests__/profiles-create.test.ts diff --git a/src/commands/__tests__/sessions-active-grouping.test.ts b/apps/cli/src/commands/__tests__/sessions-active-grouping.test.ts similarity index 100% rename from src/commands/__tests__/sessions-active-grouping.test.ts rename to apps/cli/src/commands/__tests__/sessions-active-grouping.test.ts diff --git a/src/commands/__tests__/sessions-columns.test.ts b/apps/cli/src/commands/__tests__/sessions-columns.test.ts similarity index 100% rename from src/commands/__tests__/sessions-columns.test.ts rename to apps/cli/src/commands/__tests__/sessions-columns.test.ts diff --git a/src/commands/__tests__/sessions-host-filter.test.ts b/apps/cli/src/commands/__tests__/sessions-host-filter.test.ts similarity index 100% rename from src/commands/__tests__/sessions-host-filter.test.ts rename to apps/cli/src/commands/__tests__/sessions-host-filter.test.ts diff --git a/src/commands/__tests__/sessions-live-preview.test.ts b/apps/cli/src/commands/__tests__/sessions-live-preview.test.ts similarity index 100% rename from src/commands/__tests__/sessions-live-preview.test.ts rename to apps/cli/src/commands/__tests__/sessions-live-preview.test.ts diff --git a/src/commands/__tests__/sessions-machine-grouping.test.ts b/apps/cli/src/commands/__tests__/sessions-machine-grouping.test.ts similarity index 100% rename from src/commands/__tests__/sessions-machine-grouping.test.ts rename to apps/cli/src/commands/__tests__/sessions-machine-grouping.test.ts diff --git a/src/commands/__tests__/sessions-tail.test.ts b/apps/cli/src/commands/__tests__/sessions-tail.test.ts similarity index 100% rename from src/commands/__tests__/sessions-tail.test.ts rename to apps/cli/src/commands/__tests__/sessions-tail.test.ts diff --git a/src/commands/__tests__/sessions.test.ts b/apps/cli/src/commands/__tests__/sessions.test.ts similarity index 100% rename from src/commands/__tests__/sessions.test.ts rename to apps/cli/src/commands/__tests__/sessions.test.ts diff --git a/src/commands/alias.ts b/apps/cli/src/commands/alias.ts similarity index 100% rename from src/commands/alias.ts rename to apps/cli/src/commands/alias.ts diff --git a/src/commands/audit.ts b/apps/cli/src/commands/audit.ts similarity index 100% rename from src/commands/audit.ts rename to apps/cli/src/commands/audit.ts diff --git a/src/commands/beta.ts b/apps/cli/src/commands/beta.ts similarity index 100% rename from src/commands/beta.ts rename to apps/cli/src/commands/beta.ts diff --git a/src/commands/browser-picker.ts b/apps/cli/src/commands/browser-picker.ts similarity index 100% rename from src/commands/browser-picker.ts rename to apps/cli/src/commands/browser-picker.ts diff --git a/src/commands/browser.pdf-har.test.ts b/apps/cli/src/commands/browser.pdf-har.test.ts similarity index 100% rename from src/commands/browser.pdf-har.test.ts rename to apps/cli/src/commands/browser.pdf-har.test.ts diff --git a/src/commands/browser.ts b/apps/cli/src/commands/browser.ts similarity index 100% rename from src/commands/browser.ts rename to apps/cli/src/commands/browser.ts diff --git a/src/commands/budget.test.ts b/apps/cli/src/commands/budget.test.ts similarity index 100% rename from src/commands/budget.test.ts rename to apps/cli/src/commands/budget.test.ts diff --git a/src/commands/budget.ts b/apps/cli/src/commands/budget.ts similarity index 100% rename from src/commands/budget.ts rename to apps/cli/src/commands/budget.ts diff --git a/src/commands/check.test.ts b/apps/cli/src/commands/check.test.ts similarity index 100% rename from src/commands/check.test.ts rename to apps/cli/src/commands/check.test.ts diff --git a/src/commands/check.ts b/apps/cli/src/commands/check.ts similarity index 100% rename from src/commands/check.ts rename to apps/cli/src/commands/check.ts diff --git a/src/commands/cli.ts b/apps/cli/src/commands/cli.ts similarity index 100% rename from src/commands/cli.ts rename to apps/cli/src/commands/cli.ts diff --git a/src/commands/cloud.ts b/apps/cli/src/commands/cloud.ts similarity index 100% rename from src/commands/cloud.ts rename to apps/cli/src/commands/cloud.ts diff --git a/src/commands/commands.ts b/apps/cli/src/commands/commands.ts similarity index 100% rename from src/commands/commands.ts rename to apps/cli/src/commands/commands.ts diff --git a/src/commands/computer-actions.test.ts b/apps/cli/src/commands/computer-actions.test.ts similarity index 100% rename from src/commands/computer-actions.test.ts rename to apps/cli/src/commands/computer-actions.test.ts diff --git a/src/commands/computer-actions.ts b/apps/cli/src/commands/computer-actions.ts similarity index 99% rename from src/commands/computer-actions.ts rename to apps/cli/src/commands/computer-actions.ts index f9f04996f..7d39af1a5 100644 --- a/src/commands/computer-actions.ts +++ b/apps/cli/src/commands/computer-actions.ts @@ -265,7 +265,7 @@ function warnIfNotFrontmost(res: Record): void { } function reportMissingHelper(): never { - console.error('helper not built. Run: ./packages/computer-helper/scripts/build.sh debug'); + console.error('helper not built. Run: ./native/computer-mac/scripts/build.sh debug'); process.exit(1); } diff --git a/src/commands/computer.test.ts b/apps/cli/src/commands/computer.test.ts similarity index 100% rename from src/commands/computer.test.ts rename to apps/cli/src/commands/computer.test.ts diff --git a/src/commands/computer.ts b/apps/cli/src/commands/computer.ts similarity index 99% rename from src/commands/computer.ts rename to apps/cli/src/commands/computer.ts index c364e4718..5fb868e99 100644 --- a/src/commands/computer.ts +++ b/apps/cli/src/commands/computer.ts @@ -77,9 +77,9 @@ export function detectImageFormat(buf: Buffer): '.png' | '.jpg' | null { * Make the screenshot filename honest about its bytes. The two helper backends * encode DIFFERENT formats and neither re-encodes to match the requested name: * the macOS helper (ScreenCaptureKit) returns JPEG - * (packages/computer-helper/Sources/ComputerHelper/Screenshot.swift:207,212), + * (native/computer-mac/Sources/ComputerHelper/Screenshot.swift:207,212), * the Windows helper returns PNG - * (packages/computer-helper-win/Screenshot.cs:33). So a fixed default extension + * (native/computer-win/Screenshot.cs:33). So a fixed default extension * cannot be correct for both — the only honest path is to sniff the real format * and swap the extension to match. Pure so it's unit-testable. * @@ -408,7 +408,7 @@ function registerSetupCommand(program: Command): void { const srcApp = resolveHelperApp(); if (!srcApp || !fs.existsSync(srcApp)) { - console.error('helper not built. Run: ./packages/computer-helper/scripts/build.sh debug'); + console.error('helper not built. Run: ./native/computer-mac/scripts/build.sh debug'); process.exit(1); } @@ -447,7 +447,7 @@ function registerSetupCommand(program: Command): void { console.log('codesign verify: OK'); } catch { console.error('codesign verify FAILED. The destination .app is unsigned or its signature was stripped.'); - console.error('rebuild the helper with a Developer ID cert: ./packages/computer-helper/scripts/build.sh release'); + console.error('rebuild the helper with a Developer ID cert: ./native/computer-mac/scripts/build.sh release'); process.exit(1); } diff --git a/src/commands/cost.test.ts b/apps/cli/src/commands/cost.test.ts similarity index 100% rename from src/commands/cost.test.ts rename to apps/cli/src/commands/cost.test.ts diff --git a/src/commands/cost.ts b/apps/cli/src/commands/cost.ts similarity index 100% rename from src/commands/cost.ts rename to apps/cli/src/commands/cost.ts diff --git a/src/commands/daemon.ts b/apps/cli/src/commands/daemon.ts similarity index 100% rename from src/commands/daemon.ts rename to apps/cli/src/commands/daemon.ts diff --git a/src/commands/defaults.test.ts b/apps/cli/src/commands/defaults.test.ts similarity index 100% rename from src/commands/defaults.test.ts rename to apps/cli/src/commands/defaults.test.ts diff --git a/src/commands/defaults.ts b/apps/cli/src/commands/defaults.ts similarity index 100% rename from src/commands/defaults.ts rename to apps/cli/src/commands/defaults.ts diff --git a/src/commands/doctor.test.ts b/apps/cli/src/commands/doctor.test.ts similarity index 100% rename from src/commands/doctor.test.ts rename to apps/cli/src/commands/doctor.test.ts diff --git a/src/commands/doctor.ts b/apps/cli/src/commands/doctor.ts similarity index 100% rename from src/commands/doctor.ts rename to apps/cli/src/commands/doctor.ts diff --git a/src/commands/drive.ts b/apps/cli/src/commands/drive.ts similarity index 100% rename from src/commands/drive.ts rename to apps/cli/src/commands/drive.ts diff --git a/src/commands/events.ts b/apps/cli/src/commands/events.ts similarity index 100% rename from src/commands/events.ts rename to apps/cli/src/commands/events.ts diff --git a/src/commands/exec-loop.test.ts b/apps/cli/src/commands/exec-loop.test.ts similarity index 100% rename from src/commands/exec-loop.test.ts rename to apps/cli/src/commands/exec-loop.test.ts diff --git a/src/commands/exec.ts b/apps/cli/src/commands/exec.ts similarity index 100% rename from src/commands/exec.ts rename to apps/cli/src/commands/exec.ts diff --git a/src/commands/factory.ts b/apps/cli/src/commands/factory.ts similarity index 100% rename from src/commands/factory.ts rename to apps/cli/src/commands/factory.ts diff --git a/src/commands/feedback.test.ts b/apps/cli/src/commands/feedback.test.ts similarity index 100% rename from src/commands/feedback.test.ts rename to apps/cli/src/commands/feedback.test.ts diff --git a/src/commands/feedback.ts b/apps/cli/src/commands/feedback.ts similarity index 100% rename from src/commands/feedback.ts rename to apps/cli/src/commands/feedback.ts diff --git a/src/commands/focus.test.ts b/apps/cli/src/commands/focus.test.ts similarity index 100% rename from src/commands/focus.test.ts rename to apps/cli/src/commands/focus.test.ts diff --git a/src/commands/focus.ts b/apps/cli/src/commands/focus.ts similarity index 100% rename from src/commands/focus.ts rename to apps/cli/src/commands/focus.ts diff --git a/src/commands/go.test.ts b/apps/cli/src/commands/go.test.ts similarity index 100% rename from src/commands/go.test.ts rename to apps/cli/src/commands/go.test.ts diff --git a/src/commands/go.ts b/apps/cli/src/commands/go.ts similarity index 100% rename from src/commands/go.ts rename to apps/cli/src/commands/go.ts diff --git a/src/commands/helper.ts b/apps/cli/src/commands/helper.ts similarity index 100% rename from src/commands/helper.ts rename to apps/cli/src/commands/helper.ts diff --git a/src/commands/hooks.ts b/apps/cli/src/commands/hooks.ts similarity index 100% rename from src/commands/hooks.ts rename to apps/cli/src/commands/hooks.ts diff --git a/src/commands/hosts.ts b/apps/cli/src/commands/hosts.ts similarity index 100% rename from src/commands/hosts.ts rename to apps/cli/src/commands/hosts.ts diff --git a/src/commands/import.ts b/apps/cli/src/commands/import.ts similarity index 100% rename from src/commands/import.ts rename to apps/cli/src/commands/import.ts diff --git a/src/commands/inspect.test.ts b/apps/cli/src/commands/inspect.test.ts similarity index 100% rename from src/commands/inspect.test.ts rename to apps/cli/src/commands/inspect.test.ts diff --git a/src/commands/inspect.ts b/apps/cli/src/commands/inspect.ts similarity index 100% rename from src/commands/inspect.ts rename to apps/cli/src/commands/inspect.ts diff --git a/src/commands/lock.ts b/apps/cli/src/commands/lock.ts similarity index 100% rename from src/commands/lock.ts rename to apps/cli/src/commands/lock.ts diff --git a/src/commands/logs.ts b/apps/cli/src/commands/logs.ts similarity index 100% rename from src/commands/logs.ts rename to apps/cli/src/commands/logs.ts diff --git a/src/commands/mcp.ts b/apps/cli/src/commands/mcp.ts similarity index 100% rename from src/commands/mcp.ts rename to apps/cli/src/commands/mcp.ts diff --git a/src/commands/menubar.ts b/apps/cli/src/commands/menubar.ts similarity index 100% rename from src/commands/menubar.ts rename to apps/cli/src/commands/menubar.ts diff --git a/src/commands/message.ts b/apps/cli/src/commands/message.ts similarity index 100% rename from src/commands/message.ts rename to apps/cli/src/commands/message.ts diff --git a/src/commands/models.test.ts b/apps/cli/src/commands/models.test.ts similarity index 100% rename from src/commands/models.test.ts rename to apps/cli/src/commands/models.test.ts diff --git a/src/commands/models.ts b/apps/cli/src/commands/models.ts similarity index 100% rename from src/commands/models.ts rename to apps/cli/src/commands/models.ts diff --git a/src/commands/packages.test.ts b/apps/cli/src/commands/packages.test.ts similarity index 100% rename from src/commands/packages.test.ts rename to apps/cli/src/commands/packages.test.ts diff --git a/src/commands/packages.ts b/apps/cli/src/commands/packages.ts similarity index 100% rename from src/commands/packages.ts rename to apps/cli/src/commands/packages.ts diff --git a/src/commands/permissions.test.ts b/apps/cli/src/commands/permissions.test.ts similarity index 100% rename from src/commands/permissions.test.ts rename to apps/cli/src/commands/permissions.test.ts diff --git a/src/commands/permissions.ts b/apps/cli/src/commands/permissions.ts similarity index 100% rename from src/commands/permissions.ts rename to apps/cli/src/commands/permissions.ts diff --git a/src/commands/plugins.test.ts b/apps/cli/src/commands/plugins.test.ts similarity index 100% rename from src/commands/plugins.test.ts rename to apps/cli/src/commands/plugins.test.ts diff --git a/src/commands/plugins.ts b/apps/cli/src/commands/plugins.ts similarity index 100% rename from src/commands/plugins.ts rename to apps/cli/src/commands/plugins.ts diff --git a/src/commands/profiles.ts b/apps/cli/src/commands/profiles.ts similarity index 100% rename from src/commands/profiles.ts rename to apps/cli/src/commands/profiles.ts diff --git a/src/commands/prune.ts b/apps/cli/src/commands/prune.ts similarity index 100% rename from src/commands/prune.ts rename to apps/cli/src/commands/prune.ts diff --git a/src/commands/pty.ts b/apps/cli/src/commands/pty.ts similarity index 100% rename from src/commands/pty.ts rename to apps/cli/src/commands/pty.ts diff --git a/src/commands/pull.ts b/apps/cli/src/commands/pull.ts similarity index 100% rename from src/commands/pull.ts rename to apps/cli/src/commands/pull.ts diff --git a/src/commands/push.ts b/apps/cli/src/commands/push.ts similarity index 100% rename from src/commands/push.ts rename to apps/cli/src/commands/push.ts diff --git a/src/commands/refresh-rules.ts b/apps/cli/src/commands/refresh-rules.ts similarity index 100% rename from src/commands/refresh-rules.ts rename to apps/cli/src/commands/refresh-rules.ts diff --git a/src/commands/repo.test.ts b/apps/cli/src/commands/repo.test.ts similarity index 100% rename from src/commands/repo.test.ts rename to apps/cli/src/commands/repo.test.ts diff --git a/src/commands/repo.ts b/apps/cli/src/commands/repo.ts similarity index 100% rename from src/commands/repo.ts rename to apps/cli/src/commands/repo.ts diff --git a/src/commands/resource-view.test.ts b/apps/cli/src/commands/resource-view.test.ts similarity index 100% rename from src/commands/resource-view.test.ts rename to apps/cli/src/commands/resource-view.test.ts diff --git a/src/commands/resource-view.ts b/apps/cli/src/commands/resource-view.ts similarity index 100% rename from src/commands/resource-view.ts rename to apps/cli/src/commands/resource-view.ts diff --git a/src/commands/routines-webhook.test.ts b/apps/cli/src/commands/routines-webhook.test.ts similarity index 100% rename from src/commands/routines-webhook.test.ts rename to apps/cli/src/commands/routines-webhook.test.ts diff --git a/src/commands/routines.ts b/apps/cli/src/commands/routines.ts similarity index 100% rename from src/commands/routines.ts rename to apps/cli/src/commands/routines.ts diff --git a/src/commands/rules.ts b/apps/cli/src/commands/rules.ts similarity index 100% rename from src/commands/rules.ts rename to apps/cli/src/commands/rules.ts diff --git a/src/commands/secrets-migrate.ts b/apps/cli/src/commands/secrets-migrate.ts similarity index 100% rename from src/commands/secrets-migrate.ts rename to apps/cli/src/commands/secrets-migrate.ts diff --git a/src/commands/secrets-sync.ts b/apps/cli/src/commands/secrets-sync.ts similarity index 100% rename from src/commands/secrets-sync.ts rename to apps/cli/src/commands/secrets-sync.ts diff --git a/src/commands/secrets.test.ts b/apps/cli/src/commands/secrets.test.ts similarity index 100% rename from src/commands/secrets.test.ts rename to apps/cli/src/commands/secrets.test.ts diff --git a/src/commands/secrets.ts b/apps/cli/src/commands/secrets.ts similarity index 100% rename from src/commands/secrets.ts rename to apps/cli/src/commands/secrets.ts diff --git a/src/commands/serve.ts b/apps/cli/src/commands/serve.ts similarity index 100% rename from src/commands/serve.ts rename to apps/cli/src/commands/serve.ts diff --git a/src/commands/sessions-inject.ts b/apps/cli/src/commands/sessions-inject.ts similarity index 100% rename from src/commands/sessions-inject.ts rename to apps/cli/src/commands/sessions-inject.ts diff --git a/src/commands/sessions-picker.ts b/apps/cli/src/commands/sessions-picker.ts similarity index 100% rename from src/commands/sessions-picker.ts rename to apps/cli/src/commands/sessions-picker.ts diff --git a/src/commands/sessions-resume.ts b/apps/cli/src/commands/sessions-resume.ts similarity index 100% rename from src/commands/sessions-resume.ts rename to apps/cli/src/commands/sessions-resume.ts diff --git a/src/commands/sessions-sync.ts b/apps/cli/src/commands/sessions-sync.ts similarity index 100% rename from src/commands/sessions-sync.ts rename to apps/cli/src/commands/sessions-sync.ts diff --git a/src/commands/sessions-tail.ts b/apps/cli/src/commands/sessions-tail.ts similarity index 100% rename from src/commands/sessions-tail.ts rename to apps/cli/src/commands/sessions-tail.ts diff --git a/src/commands/sessions.overview.test.ts b/apps/cli/src/commands/sessions.overview.test.ts similarity index 100% rename from src/commands/sessions.overview.test.ts rename to apps/cli/src/commands/sessions.overview.test.ts diff --git a/src/commands/sessions.serialize.test.ts b/apps/cli/src/commands/sessions.serialize.test.ts similarity index 100% rename from src/commands/sessions.serialize.test.ts rename to apps/cli/src/commands/sessions.serialize.test.ts diff --git a/src/commands/sessions.ts b/apps/cli/src/commands/sessions.ts similarity index 100% rename from src/commands/sessions.ts rename to apps/cli/src/commands/sessions.ts diff --git a/src/commands/setup.ts b/apps/cli/src/commands/setup.ts similarity index 100% rename from src/commands/setup.ts rename to apps/cli/src/commands/setup.ts diff --git a/src/commands/skills.ts b/apps/cli/src/commands/skills.ts similarity index 100% rename from src/commands/skills.ts rename to apps/cli/src/commands/skills.ts diff --git a/src/commands/ssh.ts b/apps/cli/src/commands/ssh.ts similarity index 100% rename from src/commands/ssh.ts rename to apps/cli/src/commands/ssh.ts diff --git a/src/commands/status.ts b/apps/cli/src/commands/status.ts similarity index 100% rename from src/commands/status.ts rename to apps/cli/src/commands/status.ts diff --git a/src/commands/subagents.ts b/apps/cli/src/commands/subagents.ts similarity index 100% rename from src/commands/subagents.ts rename to apps/cli/src/commands/subagents.ts diff --git a/src/commands/sync.ts b/apps/cli/src/commands/sync.ts similarity index 100% rename from src/commands/sync.ts rename to apps/cli/src/commands/sync.ts diff --git a/src/commands/teams-picker.ts b/apps/cli/src/commands/teams-picker.ts similarity index 100% rename from src/commands/teams-picker.ts rename to apps/cli/src/commands/teams-picker.ts diff --git a/src/commands/teams.ts b/apps/cli/src/commands/teams.ts similarity index 100% rename from src/commands/teams.ts rename to apps/cli/src/commands/teams.ts diff --git a/src/commands/tmux.ts b/apps/cli/src/commands/tmux.ts similarity index 100% rename from src/commands/tmux.ts rename to apps/cli/src/commands/tmux.ts diff --git a/src/commands/trash.ts b/apps/cli/src/commands/trash.ts similarity index 100% rename from src/commands/trash.ts rename to apps/cli/src/commands/trash.ts diff --git a/src/commands/usage.ts b/apps/cli/src/commands/usage.ts similarity index 100% rename from src/commands/usage.ts rename to apps/cli/src/commands/usage.ts diff --git a/src/commands/utils.ts b/apps/cli/src/commands/utils.ts similarity index 100% rename from src/commands/utils.ts rename to apps/cli/src/commands/utils.ts diff --git a/src/commands/versions.ts b/apps/cli/src/commands/versions.ts similarity index 100% rename from src/commands/versions.ts rename to apps/cli/src/commands/versions.ts diff --git a/src/commands/view.resources.test.ts b/apps/cli/src/commands/view.resources.test.ts similarity index 100% rename from src/commands/view.resources.test.ts rename to apps/cli/src/commands/view.resources.test.ts diff --git a/src/commands/view.ts b/apps/cli/src/commands/view.ts similarity index 100% rename from src/commands/view.ts rename to apps/cli/src/commands/view.ts diff --git a/src/commands/wallet.test.ts b/apps/cli/src/commands/wallet.test.ts similarity index 100% rename from src/commands/wallet.test.ts rename to apps/cli/src/commands/wallet.test.ts diff --git a/src/commands/wallet.ts b/apps/cli/src/commands/wallet.ts similarity index 100% rename from src/commands/wallet.ts rename to apps/cli/src/commands/wallet.ts diff --git a/src/commands/watchdog.test.ts b/apps/cli/src/commands/watchdog.test.ts similarity index 100% rename from src/commands/watchdog.test.ts rename to apps/cli/src/commands/watchdog.test.ts diff --git a/src/commands/watchdog.ts b/apps/cli/src/commands/watchdog.ts similarity index 100% rename from src/commands/watchdog.ts rename to apps/cli/src/commands/watchdog.ts diff --git a/src/commands/workflows.ts b/apps/cli/src/commands/workflows.ts similarity index 100% rename from src/commands/workflows.ts rename to apps/cli/src/commands/workflows.ts diff --git a/src/commands/worktree.ts b/apps/cli/src/commands/worktree.ts similarity index 100% rename from src/commands/worktree.ts rename to apps/cli/src/commands/worktree.ts diff --git a/src/computer.ts b/apps/cli/src/computer.ts similarity index 100% rename from src/computer.ts rename to apps/cli/src/computer.ts diff --git a/src/index.ts b/apps/cli/src/index.ts similarity index 100% rename from src/index.ts rename to apps/cli/src/index.ts diff --git a/src/lib/__tests__/add-targets-user-repo.test.ts b/apps/cli/src/lib/__tests__/add-targets-user-repo.test.ts similarity index 100% rename from src/lib/__tests__/add-targets-user-repo.test.ts rename to apps/cli/src/lib/__tests__/add-targets-user-repo.test.ts diff --git a/src/lib/__tests__/bugfixes.test.ts b/apps/cli/src/lib/__tests__/bugfixes.test.ts similarity index 100% rename from src/lib/__tests__/bugfixes.test.ts rename to apps/cli/src/lib/__tests__/bugfixes.test.ts diff --git a/src/lib/__tests__/capabilities.test.ts b/apps/cli/src/lib/__tests__/capabilities.test.ts similarity index 100% rename from src/lib/__tests__/capabilities.test.ts rename to apps/cli/src/lib/__tests__/capabilities.test.ts diff --git a/src/lib/__tests__/diff-text.test.ts b/apps/cli/src/lib/__tests__/diff-text.test.ts similarity index 100% rename from src/lib/__tests__/diff-text.test.ts rename to apps/cli/src/lib/__tests__/diff-text.test.ts diff --git a/src/lib/__tests__/discover-mcp-from-repo.test.ts b/apps/cli/src/lib/__tests__/discover-mcp-from-repo.test.ts similarity index 100% rename from src/lib/__tests__/discover-mcp-from-repo.test.ts rename to apps/cli/src/lib/__tests__/discover-mcp-from-repo.test.ts diff --git a/src/lib/__tests__/doctor-diff.test.ts b/apps/cli/src/lib/__tests__/doctor-diff.test.ts similarity index 100% rename from src/lib/__tests__/doctor-diff.test.ts rename to apps/cli/src/lib/__tests__/doctor-diff.test.ts diff --git a/src/lib/__tests__/exec.test.ts b/apps/cli/src/lib/__tests__/exec.test.ts similarity index 100% rename from src/lib/__tests__/exec.test.ts rename to apps/cli/src/lib/__tests__/exec.test.ts diff --git a/src/lib/__tests__/extra-alias-selectors.test.ts b/apps/cli/src/lib/__tests__/extra-alias-selectors.test.ts similarity index 100% rename from src/lib/__tests__/extra-alias-selectors.test.ts rename to apps/cli/src/lib/__tests__/extra-alias-selectors.test.ts diff --git a/src/lib/__tests__/extras-sync.test.ts b/apps/cli/src/lib/__tests__/extras-sync.test.ts similarity index 100% rename from src/lib/__tests__/extras-sync.test.ts rename to apps/cli/src/lib/__tests__/extras-sync.test.ts diff --git a/src/lib/__tests__/gemini-settings.test.ts b/apps/cli/src/lib/__tests__/gemini-settings.test.ts similarity index 100% rename from src/lib/__tests__/gemini-settings.test.ts rename to apps/cli/src/lib/__tests__/gemini-settings.test.ts diff --git a/src/lib/__tests__/git-sync.test.ts b/apps/cli/src/lib/__tests__/git-sync.test.ts similarity index 100% rename from src/lib/__tests__/git-sync.test.ts rename to apps/cli/src/lib/__tests__/git-sync.test.ts diff --git a/src/lib/__tests__/hooks-layering.test.ts b/apps/cli/src/lib/__tests__/hooks-layering.test.ts similarity index 100% rename from src/lib/__tests__/hooks-layering.test.ts rename to apps/cli/src/lib/__tests__/hooks-layering.test.ts diff --git a/src/lib/__tests__/hooks.test.ts b/apps/cli/src/lib/__tests__/hooks.test.ts similarity index 100% rename from src/lib/__tests__/hooks.test.ts rename to apps/cli/src/lib/__tests__/hooks.test.ts diff --git a/src/lib/__tests__/import.test.ts b/apps/cli/src/lib/__tests__/import.test.ts similarity index 100% rename from src/lib/__tests__/import.test.ts rename to apps/cli/src/lib/__tests__/import.test.ts diff --git a/src/lib/__tests__/manifest.test.ts b/apps/cli/src/lib/__tests__/manifest.test.ts similarity index 100% rename from src/lib/__tests__/manifest.test.ts rename to apps/cli/src/lib/__tests__/manifest.test.ts diff --git a/src/lib/__tests__/mcp-paths.test.ts b/apps/cli/src/lib/__tests__/mcp-paths.test.ts similarity index 100% rename from src/lib/__tests__/mcp-paths.test.ts rename to apps/cli/src/lib/__tests__/mcp-paths.test.ts diff --git a/src/lib/__tests__/migrate-system-mirror.test.ts b/apps/cli/src/lib/__tests__/migrate-system-mirror.test.ts similarity index 100% rename from src/lib/__tests__/migrate-system-mirror.test.ts rename to apps/cli/src/lib/__tests__/migrate-system-mirror.test.ts diff --git a/src/lib/__tests__/migrate.test.ts b/apps/cli/src/lib/__tests__/migrate.test.ts similarity index 100% rename from src/lib/__tests__/migrate.test.ts rename to apps/cli/src/lib/__tests__/migrate.test.ts diff --git a/src/lib/__tests__/models.test.ts b/apps/cli/src/lib/__tests__/models.test.ts similarity index 100% rename from src/lib/__tests__/models.test.ts rename to apps/cli/src/lib/__tests__/models.test.ts diff --git a/src/lib/__tests__/onepassword.test.ts b/apps/cli/src/lib/__tests__/onepassword.test.ts similarity index 100% rename from src/lib/__tests__/onepassword.test.ts rename to apps/cli/src/lib/__tests__/onepassword.test.ts diff --git a/src/lib/__tests__/plugin-marketplace.test.ts b/apps/cli/src/lib/__tests__/plugin-marketplace.test.ts similarity index 100% rename from src/lib/__tests__/plugin-marketplace.test.ts rename to apps/cli/src/lib/__tests__/plugin-marketplace.test.ts diff --git a/src/lib/__tests__/plugins-prune.test.ts b/apps/cli/src/lib/__tests__/plugins-prune.test.ts similarity index 100% rename from src/lib/__tests__/plugins-prune.test.ts rename to apps/cli/src/lib/__tests__/plugins-prune.test.ts diff --git a/src/lib/__tests__/plugins.test.ts b/apps/cli/src/lib/__tests__/plugins.test.ts similarity index 100% rename from src/lib/__tests__/plugins.test.ts rename to apps/cli/src/lib/__tests__/plugins.test.ts diff --git a/src/lib/__tests__/prompt-agent-version-selection.test.ts b/apps/cli/src/lib/__tests__/prompt-agent-version-selection.test.ts similarity index 100% rename from src/lib/__tests__/prompt-agent-version-selection.test.ts rename to apps/cli/src/lib/__tests__/prompt-agent-version-selection.test.ts diff --git a/src/lib/__tests__/promptcuts-paths.test.ts b/apps/cli/src/lib/__tests__/promptcuts-paths.test.ts similarity index 100% rename from src/lib/__tests__/promptcuts-paths.test.ts rename to apps/cli/src/lib/__tests__/promptcuts-paths.test.ts diff --git a/src/lib/__tests__/pty-server.test.ts b/apps/cli/src/lib/__tests__/pty-server.test.ts similarity index 100% rename from src/lib/__tests__/pty-server.test.ts rename to apps/cli/src/lib/__tests__/pty-server.test.ts diff --git a/src/lib/__tests__/resolve-agent-version-targets.test.ts b/apps/cli/src/lib/__tests__/resolve-agent-version-targets.test.ts similarity index 100% rename from src/lib/__tests__/resolve-agent-version-targets.test.ts rename to apps/cli/src/lib/__tests__/resolve-agent-version-targets.test.ts diff --git a/src/lib/__tests__/resolve-resource.test.ts b/apps/cli/src/lib/__tests__/resolve-resource.test.ts similarity index 100% rename from src/lib/__tests__/resolve-resource.test.ts rename to apps/cli/src/lib/__tests__/resolve-resource.test.ts diff --git a/src/lib/__tests__/resource-patterns.test.ts b/apps/cli/src/lib/__tests__/resource-patterns.test.ts similarity index 100% rename from src/lib/__tests__/resource-patterns.test.ts rename to apps/cli/src/lib/__tests__/resource-patterns.test.ts diff --git a/src/lib/__tests__/rotate.test.ts b/apps/cli/src/lib/__tests__/rotate.test.ts similarity index 100% rename from src/lib/__tests__/rotate.test.ts rename to apps/cli/src/lib/__tests__/rotate.test.ts diff --git a/src/lib/__tests__/routines-format.test.ts b/apps/cli/src/lib/__tests__/routines-format.test.ts similarity index 100% rename from src/lib/__tests__/routines-format.test.ts rename to apps/cli/src/lib/__tests__/routines-format.test.ts diff --git a/src/lib/__tests__/routines.endAt.test.ts b/apps/cli/src/lib/__tests__/routines.endAt.test.ts similarity index 100% rename from src/lib/__tests__/routines.endAt.test.ts rename to apps/cli/src/lib/__tests__/routines.endAt.test.ts diff --git a/src/lib/__tests__/routines.project-discovery.test.ts b/apps/cli/src/lib/__tests__/routines.project-discovery.test.ts similarity index 100% rename from src/lib/__tests__/routines.project-discovery.test.ts rename to apps/cli/src/lib/__tests__/routines.project-discovery.test.ts diff --git a/src/lib/__tests__/routines.timeout.test.ts b/apps/cli/src/lib/__tests__/routines.timeout.test.ts similarity index 100% rename from src/lib/__tests__/routines.timeout.test.ts rename to apps/cli/src/lib/__tests__/routines.timeout.test.ts diff --git a/src/lib/__tests__/routines.workflow.test.ts b/apps/cli/src/lib/__tests__/routines.workflow.test.ts similarity index 100% rename from src/lib/__tests__/routines.workflow.test.ts rename to apps/cli/src/lib/__tests__/routines.workflow.test.ts diff --git a/src/lib/__tests__/runner.test.ts b/apps/cli/src/lib/__tests__/runner.test.ts similarity index 100% rename from src/lib/__tests__/runner.test.ts rename to apps/cli/src/lib/__tests__/runner.test.ts diff --git a/src/lib/__tests__/sandbox.test.ts b/apps/cli/src/lib/__tests__/sandbox.test.ts similarity index 100% rename from src/lib/__tests__/sandbox.test.ts rename to apps/cli/src/lib/__tests__/sandbox.test.ts diff --git a/src/lib/__tests__/scheduler.endAt.test.ts b/apps/cli/src/lib/__tests__/scheduler.endAt.test.ts similarity index 100% rename from src/lib/__tests__/scheduler.endAt.test.ts rename to apps/cli/src/lib/__tests__/scheduler.endAt.test.ts diff --git a/src/lib/__tests__/settings-manifest.test.ts b/apps/cli/src/lib/__tests__/settings-manifest.test.ts similarity index 100% rename from src/lib/__tests__/settings-manifest.test.ts rename to apps/cli/src/lib/__tests__/settings-manifest.test.ts diff --git a/src/lib/__tests__/shims.test.ts b/apps/cli/src/lib/__tests__/shims.test.ts similarity index 100% rename from src/lib/__tests__/shims.test.ts rename to apps/cli/src/lib/__tests__/shims.test.ts diff --git a/src/lib/__tests__/state.test.ts b/apps/cli/src/lib/__tests__/state.test.ts similarity index 100% rename from src/lib/__tests__/state.test.ts rename to apps/cli/src/lib/__tests__/state.test.ts diff --git a/src/lib/__tests__/subagents-prune.test.ts b/apps/cli/src/lib/__tests__/subagents-prune.test.ts similarity index 100% rename from src/lib/__tests__/subagents-prune.test.ts rename to apps/cli/src/lib/__tests__/subagents-prune.test.ts diff --git a/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.after b/apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.after similarity index 100% rename from src/lib/__tests__/testdata/shims/bash-insert-before-node-path.after rename to apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.after diff --git a/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.before b/apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.before similarity index 100% rename from src/lib/__tests__/testdata/shims/bash-insert-before-node-path.before rename to apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.before diff --git a/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.json b/apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.json similarity index 100% rename from src/lib/__tests__/testdata/shims/bash-insert-before-node-path.json rename to apps/cli/src/lib/__tests__/testdata/shims/bash-insert-before-node-path.json diff --git a/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.after b/apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.after similarity index 100% rename from src/lib/__tests__/testdata/shims/fish-replace-legacy-path.after rename to apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.after diff --git a/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.before b/apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.before similarity index 100% rename from src/lib/__tests__/testdata/shims/fish-replace-legacy-path.before rename to apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.before diff --git a/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.json b/apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.json similarity index 100% rename from src/lib/__tests__/testdata/shims/fish-replace-legacy-path.json rename to apps/cli/src/lib/__tests__/testdata/shims/fish-replace-legacy-path.json diff --git a/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.after b/apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.after similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.after rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.after diff --git a/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.before b/apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.before similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.before rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.before diff --git a/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.json b/apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.json similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.json rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-append-after-installer-blocks.json diff --git a/src/lib/__tests__/testdata/shims/zsh-idempotent.after b/apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.after similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-idempotent.after rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.after diff --git a/src/lib/__tests__/testdata/shims/zsh-idempotent.before b/apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.before similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-idempotent.before rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.before diff --git a/src/lib/__tests__/testdata/shims/zsh-idempotent.json b/apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.json similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-idempotent.json rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-idempotent.json diff --git a/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.after b/apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.after similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.after rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.after diff --git a/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.before b/apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.before similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.before rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.before diff --git a/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.json b/apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.json similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.json rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-ignore-lookalike-paths.json diff --git a/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.after b/apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.after similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.after rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.after diff --git a/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.before b/apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.before similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.before rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.before diff --git a/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.json b/apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.json similarity index 100% rename from src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.json rename to apps/cli/src/lib/__tests__/testdata/shims/zsh-reorder-before-nvm.json diff --git a/src/lib/__tests__/unmanaged-installs.test.ts b/apps/cli/src/lib/__tests__/unmanaged-installs.test.ts similarity index 100% rename from src/lib/__tests__/unmanaged-installs.test.ts rename to apps/cli/src/lib/__tests__/unmanaged-installs.test.ts diff --git a/src/lib/__tests__/usage.test.ts b/apps/cli/src/lib/__tests__/usage.test.ts similarity index 100% rename from src/lib/__tests__/usage.test.ts rename to apps/cli/src/lib/__tests__/usage.test.ts diff --git a/src/lib/__tests__/version-duplicates.test.ts b/apps/cli/src/lib/__tests__/version-duplicates.test.ts similarity index 100% rename from src/lib/__tests__/version-duplicates.test.ts rename to apps/cli/src/lib/__tests__/version-duplicates.test.ts diff --git a/src/lib/__tests__/version-not-installed-error.test.ts b/apps/cli/src/lib/__tests__/version-not-installed-error.test.ts similarity index 100% rename from src/lib/__tests__/version-not-installed-error.test.ts rename to apps/cli/src/lib/__tests__/version-not-installed-error.test.ts diff --git a/src/lib/__tests__/versions.test.ts b/apps/cli/src/lib/__tests__/versions.test.ts similarity index 100% rename from src/lib/__tests__/versions.test.ts rename to apps/cli/src/lib/__tests__/versions.test.ts diff --git a/src/lib/__tests__/workflows.test.ts b/apps/cli/src/lib/__tests__/workflows.test.ts similarity index 100% rename from src/lib/__tests__/workflows.test.ts rename to apps/cli/src/lib/__tests__/workflows.test.ts diff --git a/src/lib/acp/client.ts b/apps/cli/src/lib/acp/client.ts similarity index 100% rename from src/lib/acp/client.ts rename to apps/cli/src/lib/acp/client.ts diff --git a/src/lib/acp/harnesses.ts b/apps/cli/src/lib/acp/harnesses.ts similarity index 100% rename from src/lib/acp/harnesses.ts rename to apps/cli/src/lib/acp/harnesses.ts diff --git a/src/lib/acp/run.ts b/apps/cli/src/lib/acp/run.ts similarity index 100% rename from src/lib/acp/run.ts rename to apps/cli/src/lib/acp/run.ts diff --git a/src/lib/agent-spec/index.ts b/apps/cli/src/lib/agent-spec/index.ts similarity index 100% rename from src/lib/agent-spec/index.ts rename to apps/cli/src/lib/agent-spec/index.ts diff --git a/src/lib/agent-spec/primitives.test.ts b/apps/cli/src/lib/agent-spec/primitives.test.ts similarity index 100% rename from src/lib/agent-spec/primitives.test.ts rename to apps/cli/src/lib/agent-spec/primitives.test.ts diff --git a/src/lib/agent-spec/primitives.ts b/apps/cli/src/lib/agent-spec/primitives.ts similarity index 100% rename from src/lib/agent-spec/primitives.ts rename to apps/cli/src/lib/agent-spec/primitives.ts diff --git a/src/lib/agent-spec/provider.ts b/apps/cli/src/lib/agent-spec/provider.ts similarity index 100% rename from src/lib/agent-spec/provider.ts rename to apps/cli/src/lib/agent-spec/provider.ts diff --git a/src/lib/agent-spec/resolve.test.ts b/apps/cli/src/lib/agent-spec/resolve.test.ts similarity index 100% rename from src/lib/agent-spec/resolve.test.ts rename to apps/cli/src/lib/agent-spec/resolve.test.ts diff --git a/src/lib/agent-spec/resolve.ts b/apps/cli/src/lib/agent-spec/resolve.ts similarity index 100% rename from src/lib/agent-spec/resolve.ts rename to apps/cli/src/lib/agent-spec/resolve.ts diff --git a/src/lib/agent-spec/types.ts b/apps/cli/src/lib/agent-spec/types.ts similarity index 100% rename from src/lib/agent-spec/types.ts rename to apps/cli/src/lib/agent-spec/types.ts diff --git a/src/lib/agents.test.ts b/apps/cli/src/lib/agents.test.ts similarity index 100% rename from src/lib/agents.test.ts rename to apps/cli/src/lib/agents.test.ts diff --git a/src/lib/agents.ts b/apps/cli/src/lib/agents.ts similarity index 100% rename from src/lib/agents.ts rename to apps/cli/src/lib/agents.ts diff --git a/src/lib/artifact-actions.ts b/apps/cli/src/lib/artifact-actions.ts similarity index 100% rename from src/lib/artifact-actions.ts rename to apps/cli/src/lib/artifact-actions.ts diff --git a/src/lib/audit/log.test.ts b/apps/cli/src/lib/audit/log.test.ts similarity index 100% rename from src/lib/audit/log.test.ts rename to apps/cli/src/lib/audit/log.test.ts diff --git a/src/lib/audit/log.ts b/apps/cli/src/lib/audit/log.ts similarity index 100% rename from src/lib/audit/log.ts rename to apps/cli/src/lib/audit/log.ts diff --git a/src/lib/auto-pull-worker.ts b/apps/cli/src/lib/auto-pull-worker.ts similarity index 100% rename from src/lib/auto-pull-worker.ts rename to apps/cli/src/lib/auto-pull-worker.ts diff --git a/src/lib/auto-pull.ts b/apps/cli/src/lib/auto-pull.ts similarity index 100% rename from src/lib/auto-pull.ts rename to apps/cli/src/lib/auto-pull.ts diff --git a/src/lib/beta.ts b/apps/cli/src/lib/beta.ts similarity index 100% rename from src/lib/beta.ts rename to apps/cli/src/lib/beta.ts diff --git a/src/lib/browser/cdp.test.ts b/apps/cli/src/lib/browser/cdp.test.ts similarity index 100% rename from src/lib/browser/cdp.test.ts rename to apps/cli/src/lib/browser/cdp.test.ts diff --git a/src/lib/browser/cdp.ts b/apps/cli/src/lib/browser/cdp.ts similarity index 100% rename from src/lib/browser/cdp.ts rename to apps/cli/src/lib/browser/cdp.ts diff --git a/src/lib/browser/chrome.test.ts b/apps/cli/src/lib/browser/chrome.test.ts similarity index 100% rename from src/lib/browser/chrome.test.ts rename to apps/cli/src/lib/browser/chrome.test.ts diff --git a/src/lib/browser/chrome.ts b/apps/cli/src/lib/browser/chrome.ts similarity index 100% rename from src/lib/browser/chrome.ts rename to apps/cli/src/lib/browser/chrome.ts diff --git a/src/lib/browser/devices.ts b/apps/cli/src/lib/browser/devices.ts similarity index 100% rename from src/lib/browser/devices.ts rename to apps/cli/src/lib/browser/devices.ts diff --git a/src/lib/browser/domain-skills.test.ts b/apps/cli/src/lib/browser/domain-skills.test.ts similarity index 100% rename from src/lib/browser/domain-skills.test.ts rename to apps/cli/src/lib/browser/domain-skills.test.ts diff --git a/src/lib/browser/domain-skills.ts b/apps/cli/src/lib/browser/domain-skills.ts similarity index 100% rename from src/lib/browser/domain-skills.ts rename to apps/cli/src/lib/browser/domain-skills.ts diff --git a/src/lib/browser/drivers/local.test.ts b/apps/cli/src/lib/browser/drivers/local.test.ts similarity index 100% rename from src/lib/browser/drivers/local.test.ts rename to apps/cli/src/lib/browser/drivers/local.test.ts diff --git a/src/lib/browser/drivers/local.ts b/apps/cli/src/lib/browser/drivers/local.ts similarity index 100% rename from src/lib/browser/drivers/local.ts rename to apps/cli/src/lib/browser/drivers/local.ts diff --git a/src/lib/browser/drivers/ssh.test.ts b/apps/cli/src/lib/browser/drivers/ssh.test.ts similarity index 100% rename from src/lib/browser/drivers/ssh.test.ts rename to apps/cli/src/lib/browser/drivers/ssh.test.ts diff --git a/src/lib/browser/drivers/ssh.ts b/apps/cli/src/lib/browser/drivers/ssh.ts similarity index 100% rename from src/lib/browser/drivers/ssh.ts rename to apps/cli/src/lib/browser/drivers/ssh.ts diff --git a/src/lib/browser/editor.ts b/apps/cli/src/lib/browser/editor.ts similarity index 100% rename from src/lib/browser/editor.ts rename to apps/cli/src/lib/browser/editor.ts diff --git a/src/lib/browser/har.test.ts b/apps/cli/src/lib/browser/har.test.ts similarity index 100% rename from src/lib/browser/har.test.ts rename to apps/cli/src/lib/browser/har.test.ts diff --git a/src/lib/browser/har.ts b/apps/cli/src/lib/browser/har.ts similarity index 100% rename from src/lib/browser/har.ts rename to apps/cli/src/lib/browser/har.ts diff --git a/src/lib/browser/index.ts b/apps/cli/src/lib/browser/index.ts similarity index 100% rename from src/lib/browser/index.ts rename to apps/cli/src/lib/browser/index.ts diff --git a/src/lib/browser/input.ts b/apps/cli/src/lib/browser/input.ts similarity index 100% rename from src/lib/browser/input.ts rename to apps/cli/src/lib/browser/input.ts diff --git a/src/lib/browser/ipc.test.ts b/apps/cli/src/lib/browser/ipc.test.ts similarity index 100% rename from src/lib/browser/ipc.test.ts rename to apps/cli/src/lib/browser/ipc.test.ts diff --git a/src/lib/browser/ipc.ts b/apps/cli/src/lib/browser/ipc.ts similarity index 100% rename from src/lib/browser/ipc.ts rename to apps/cli/src/lib/browser/ipc.ts diff --git a/src/lib/browser/local.test.ts b/apps/cli/src/lib/browser/local.test.ts similarity index 100% rename from src/lib/browser/local.test.ts rename to apps/cli/src/lib/browser/local.test.ts diff --git a/src/lib/browser/port.test.ts b/apps/cli/src/lib/browser/port.test.ts similarity index 100% rename from src/lib/browser/port.test.ts rename to apps/cli/src/lib/browser/port.test.ts diff --git a/src/lib/browser/profiles.test.ts b/apps/cli/src/lib/browser/profiles.test.ts similarity index 100% rename from src/lib/browser/profiles.test.ts rename to apps/cli/src/lib/browser/profiles.test.ts diff --git a/src/lib/browser/profiles.ts b/apps/cli/src/lib/browser/profiles.ts similarity index 100% rename from src/lib/browser/profiles.ts rename to apps/cli/src/lib/browser/profiles.ts diff --git a/src/lib/browser/refs.test.ts b/apps/cli/src/lib/browser/refs.test.ts similarity index 100% rename from src/lib/browser/refs.test.ts rename to apps/cli/src/lib/browser/refs.test.ts diff --git a/src/lib/browser/refs.ts b/apps/cli/src/lib/browser/refs.ts similarity index 100% rename from src/lib/browser/refs.ts rename to apps/cli/src/lib/browser/refs.ts diff --git a/src/lib/browser/runtime-state.test.ts b/apps/cli/src/lib/browser/runtime-state.test.ts similarity index 100% rename from src/lib/browser/runtime-state.test.ts rename to apps/cli/src/lib/browser/runtime-state.test.ts diff --git a/src/lib/browser/runtime-state.ts b/apps/cli/src/lib/browser/runtime-state.ts similarity index 100% rename from src/lib/browser/runtime-state.ts rename to apps/cli/src/lib/browser/runtime-state.ts diff --git a/src/lib/browser/service.logs.test.ts b/apps/cli/src/lib/browser/service.logs.test.ts similarity index 100% rename from src/lib/browser/service.logs.test.ts rename to apps/cli/src/lib/browser/service.logs.test.ts diff --git a/src/lib/browser/service.test.ts b/apps/cli/src/lib/browser/service.test.ts similarity index 100% rename from src/lib/browser/service.test.ts rename to apps/cli/src/lib/browser/service.test.ts diff --git a/src/lib/browser/service.ts b/apps/cli/src/lib/browser/service.ts similarity index 100% rename from src/lib/browser/service.ts rename to apps/cli/src/lib/browser/service.ts diff --git a/src/lib/browser/types.ts b/apps/cli/src/lib/browser/types.ts similarity index 100% rename from src/lib/browser/types.ts rename to apps/cli/src/lib/browser/types.ts diff --git a/src/lib/browser/upload.test.ts b/apps/cli/src/lib/browser/upload.test.ts similarity index 100% rename from src/lib/browser/upload.test.ts rename to apps/cli/src/lib/browser/upload.test.ts diff --git a/src/lib/browser/upload.ts b/apps/cli/src/lib/browser/upload.ts similarity index 100% rename from src/lib/browser/upload.ts rename to apps/cli/src/lib/browser/upload.ts diff --git a/src/lib/budget/config.test.ts b/apps/cli/src/lib/budget/config.test.ts similarity index 100% rename from src/lib/budget/config.test.ts rename to apps/cli/src/lib/budget/config.test.ts diff --git a/src/lib/budget/config.ts b/apps/cli/src/lib/budget/config.ts similarity index 100% rename from src/lib/budget/config.ts rename to apps/cli/src/lib/budget/config.ts diff --git a/src/lib/budget/enforce.test.ts b/apps/cli/src/lib/budget/enforce.test.ts similarity index 100% rename from src/lib/budget/enforce.test.ts rename to apps/cli/src/lib/budget/enforce.test.ts diff --git a/src/lib/budget/enforce.ts b/apps/cli/src/lib/budget/enforce.ts similarity index 100% rename from src/lib/budget/enforce.ts rename to apps/cli/src/lib/budget/enforce.ts diff --git a/src/lib/budget/ledger.test.ts b/apps/cli/src/lib/budget/ledger.test.ts similarity index 100% rename from src/lib/budget/ledger.test.ts rename to apps/cli/src/lib/budget/ledger.test.ts diff --git a/src/lib/budget/ledger.ts b/apps/cli/src/lib/budget/ledger.ts similarity index 100% rename from src/lib/budget/ledger.ts rename to apps/cli/src/lib/budget/ledger.ts diff --git a/src/lib/budget/live-cloud.test.ts b/apps/cli/src/lib/budget/live-cloud.test.ts similarity index 100% rename from src/lib/budget/live-cloud.test.ts rename to apps/cli/src/lib/budget/live-cloud.test.ts diff --git a/src/lib/budget/live-cloud.ts b/apps/cli/src/lib/budget/live-cloud.ts similarity index 100% rename from src/lib/budget/live-cloud.ts rename to apps/cli/src/lib/budget/live-cloud.ts diff --git a/src/lib/budget/live-team.test.ts b/apps/cli/src/lib/budget/live-team.test.ts similarity index 100% rename from src/lib/budget/live-team.test.ts rename to apps/cli/src/lib/budget/live-team.test.ts diff --git a/src/lib/budget/live-team.ts b/apps/cli/src/lib/budget/live-team.ts similarity index 100% rename from src/lib/budget/live-team.ts rename to apps/cli/src/lib/budget/live-team.ts diff --git a/src/lib/budget/preflight.test.ts b/apps/cli/src/lib/budget/preflight.test.ts similarity index 100% rename from src/lib/budget/preflight.test.ts rename to apps/cli/src/lib/budget/preflight.test.ts diff --git a/src/lib/budget/preflight.ts b/apps/cli/src/lib/budget/preflight.ts similarity index 100% rename from src/lib/budget/preflight.ts rename to apps/cli/src/lib/budget/preflight.ts diff --git a/src/lib/capabilities.ts b/apps/cli/src/lib/capabilities.ts similarity index 100% rename from src/lib/capabilities.ts rename to apps/cli/src/lib/capabilities.ts diff --git a/src/lib/checkpoint.test.ts b/apps/cli/src/lib/checkpoint.test.ts similarity index 100% rename from src/lib/checkpoint.test.ts rename to apps/cli/src/lib/checkpoint.test.ts diff --git a/src/lib/checkpoint.ts b/apps/cli/src/lib/checkpoint.ts similarity index 100% rename from src/lib/checkpoint.ts rename to apps/cli/src/lib/checkpoint.ts diff --git a/src/lib/cli-resources.test.ts b/apps/cli/src/lib/cli-resources.test.ts similarity index 100% rename from src/lib/cli-resources.test.ts rename to apps/cli/src/lib/cli-resources.test.ts diff --git a/src/lib/cli-resources.ts b/apps/cli/src/lib/cli-resources.ts similarity index 100% rename from src/lib/cli-resources.ts rename to apps/cli/src/lib/cli-resources.ts diff --git a/src/lib/cloud/agent-routing.test.ts b/apps/cli/src/lib/cloud/agent-routing.test.ts similarity index 100% rename from src/lib/cloud/agent-routing.test.ts rename to apps/cli/src/lib/cloud/agent-routing.test.ts diff --git a/src/lib/cloud/antigravity.test.ts b/apps/cli/src/lib/cloud/antigravity.test.ts similarity index 100% rename from src/lib/cloud/antigravity.test.ts rename to apps/cli/src/lib/cloud/antigravity.test.ts diff --git a/src/lib/cloud/antigravity.ts b/apps/cli/src/lib/cloud/antigravity.ts similarity index 100% rename from src/lib/cloud/antigravity.ts rename to apps/cli/src/lib/cloud/antigravity.ts diff --git a/src/lib/cloud/codex.ts b/apps/cli/src/lib/cloud/codex.ts similarity index 100% rename from src/lib/cloud/codex.ts rename to apps/cli/src/lib/cloud/codex.ts diff --git a/src/lib/cloud/factory.test.ts b/apps/cli/src/lib/cloud/factory.test.ts similarity index 100% rename from src/lib/cloud/factory.test.ts rename to apps/cli/src/lib/cloud/factory.test.ts diff --git a/src/lib/cloud/factory.ts b/apps/cli/src/lib/cloud/factory.ts similarity index 100% rename from src/lib/cloud/factory.ts rename to apps/cli/src/lib/cloud/factory.ts diff --git a/src/lib/cloud/paths.test.ts b/apps/cli/src/lib/cloud/paths.test.ts similarity index 100% rename from src/lib/cloud/paths.test.ts rename to apps/cli/src/lib/cloud/paths.test.ts diff --git a/src/lib/cloud/registry.ts b/apps/cli/src/lib/cloud/registry.ts similarity index 100% rename from src/lib/cloud/registry.ts rename to apps/cli/src/lib/cloud/registry.ts diff --git a/src/lib/cloud/rush.test.ts b/apps/cli/src/lib/cloud/rush.test.ts similarity index 100% rename from src/lib/cloud/rush.test.ts rename to apps/cli/src/lib/cloud/rush.test.ts diff --git a/src/lib/cloud/rush.ts b/apps/cli/src/lib/cloud/rush.ts similarity index 100% rename from src/lib/cloud/rush.ts rename to apps/cli/src/lib/cloud/rush.ts diff --git a/src/lib/cloud/store.ts b/apps/cli/src/lib/cloud/store.ts similarity index 100% rename from src/lib/cloud/store.ts rename to apps/cli/src/lib/cloud/store.ts diff --git a/src/lib/cloud/stream.test.ts b/apps/cli/src/lib/cloud/stream.test.ts similarity index 100% rename from src/lib/cloud/stream.test.ts rename to apps/cli/src/lib/cloud/stream.test.ts diff --git a/src/lib/cloud/stream.ts b/apps/cli/src/lib/cloud/stream.ts similarity index 100% rename from src/lib/cloud/stream.ts rename to apps/cli/src/lib/cloud/stream.ts diff --git a/src/lib/cloud/target-discovery.test.ts b/apps/cli/src/lib/cloud/target-discovery.test.ts similarity index 100% rename from src/lib/cloud/target-discovery.test.ts rename to apps/cli/src/lib/cloud/target-discovery.test.ts diff --git a/src/lib/cloud/types.test.ts b/apps/cli/src/lib/cloud/types.test.ts similarity index 100% rename from src/lib/cloud/types.test.ts rename to apps/cli/src/lib/cloud/types.test.ts diff --git a/src/lib/cloud/types.ts b/apps/cli/src/lib/cloud/types.ts similarity index 100% rename from src/lib/cloud/types.ts rename to apps/cli/src/lib/cloud/types.ts diff --git a/src/lib/command-skills.ts b/apps/cli/src/lib/command-skills.ts similarity index 100% rename from src/lib/command-skills.ts rename to apps/cli/src/lib/command-skills.ts diff --git a/src/lib/commands.test.ts b/apps/cli/src/lib/commands.test.ts similarity index 100% rename from src/lib/commands.test.ts rename to apps/cli/src/lib/commands.test.ts diff --git a/src/lib/commands.ts b/apps/cli/src/lib/commands.ts similarity index 100% rename from src/lib/commands.ts rename to apps/cli/src/lib/commands.ts diff --git a/src/lib/computer-rpc.test.ts b/apps/cli/src/lib/computer-rpc.test.ts similarity index 100% rename from src/lib/computer-rpc.test.ts rename to apps/cli/src/lib/computer-rpc.test.ts diff --git a/src/lib/computer-rpc.ts b/apps/cli/src/lib/computer-rpc.ts similarity index 97% rename from src/lib/computer-rpc.ts rename to apps/cli/src/lib/computer-rpc.ts index 9903ff1e2..5cb516802 100644 --- a/src/lib/computer-rpc.ts +++ b/apps/cli/src/lib/computer-rpc.ts @@ -187,8 +187,8 @@ export function writeComputerPeers(allowedExecPaths: string[]): void { export function resolveHelperExec(): string | null { const here = path.dirname(fileURLToPath(import.meta.url)); const candidates = [ - // Local build (running from the agents-cli checkout). - path.resolve(here, '..', '..', 'packages', 'computer-helper', 'dist', 'ComputerHelper.app', 'Contents', 'MacOS', 'ComputerHelper'), + // Local build (running from the agents-cli checkout). apps/cli/dist/lib -> repo root (4 up) -> native/computer-mac. + path.resolve(here, '..', '..', '..', '..', 'native', 'computer-mac', 'dist', 'ComputerHelper.app', 'Contents', 'MacOS', 'ComputerHelper'), // Bundled with the npm package (later: CDN download lands here). path.resolve(here, '..', 'computer-helper', 'ComputerHelper.app', 'Contents', 'MacOS', 'ComputerHelper'), ]; @@ -236,7 +236,7 @@ export function openComputerClient(): ComputerClient { } const helperExec = resolveHelperExec(); if (!helperExec) { - throw new Error('helper not built. Run: ./packages/computer-helper/scripts/build.sh debug'); + throw new Error('helper not built. Run: ./native/computer-mac/scripts/build.sh debug'); } return new StdioClient(helperExec); } diff --git a/src/lib/computer/dispatch.test.ts b/apps/cli/src/lib/computer/dispatch.test.ts similarity index 100% rename from src/lib/computer/dispatch.test.ts rename to apps/cli/src/lib/computer/dispatch.test.ts diff --git a/src/lib/computer/dispatch.ts b/apps/cli/src/lib/computer/dispatch.ts similarity index 100% rename from src/lib/computer/dispatch.ts rename to apps/cli/src/lib/computer/dispatch.ts diff --git a/src/lib/computer/loop.test.ts b/apps/cli/src/lib/computer/loop.test.ts similarity index 100% rename from src/lib/computer/loop.test.ts rename to apps/cli/src/lib/computer/loop.test.ts diff --git a/src/lib/computer/loop.ts b/apps/cli/src/lib/computer/loop.ts similarity index 100% rename from src/lib/computer/loop.ts rename to apps/cli/src/lib/computer/loop.ts diff --git a/src/lib/computer/model.ts b/apps/cli/src/lib/computer/model.ts similarity index 100% rename from src/lib/computer/model.ts rename to apps/cli/src/lib/computer/model.ts diff --git a/src/lib/concurrency.test.ts b/apps/cli/src/lib/concurrency.test.ts similarity index 100% rename from src/lib/concurrency.test.ts rename to apps/cli/src/lib/concurrency.test.ts diff --git a/src/lib/concurrency.ts b/apps/cli/src/lib/concurrency.ts similarity index 100% rename from src/lib/concurrency.ts rename to apps/cli/src/lib/concurrency.ts diff --git a/src/lib/convert.ts b/apps/cli/src/lib/convert.ts similarity index 100% rename from src/lib/convert.ts rename to apps/cli/src/lib/convert.ts diff --git a/src/lib/crabbox/cli.ts b/apps/cli/src/lib/crabbox/cli.ts similarity index 100% rename from src/lib/crabbox/cli.ts rename to apps/cli/src/lib/crabbox/cli.ts diff --git a/src/lib/crabbox/lease.test.ts b/apps/cli/src/lib/crabbox/lease.test.ts similarity index 100% rename from src/lib/crabbox/lease.test.ts rename to apps/cli/src/lib/crabbox/lease.test.ts diff --git a/src/lib/crabbox/lease.ts b/apps/cli/src/lib/crabbox/lease.ts similarity index 100% rename from src/lib/crabbox/lease.ts rename to apps/cli/src/lib/crabbox/lease.ts diff --git a/src/lib/crabbox/runtimes.test.ts b/apps/cli/src/lib/crabbox/runtimes.test.ts similarity index 100% rename from src/lib/crabbox/runtimes.test.ts rename to apps/cli/src/lib/crabbox/runtimes.test.ts diff --git a/src/lib/crabbox/runtimes.ts b/apps/cli/src/lib/crabbox/runtimes.ts similarity index 100% rename from src/lib/crabbox/runtimes.ts rename to apps/cli/src/lib/crabbox/runtimes.ts diff --git a/src/lib/daemon.test.ts b/apps/cli/src/lib/daemon.test.ts similarity index 100% rename from src/lib/daemon.test.ts rename to apps/cli/src/lib/daemon.test.ts diff --git a/src/lib/daemon.ts b/apps/cli/src/lib/daemon.ts similarity index 100% rename from src/lib/daemon.ts rename to apps/cli/src/lib/daemon.ts diff --git a/src/lib/devices/__tests__/resolve-target.test.ts b/apps/cli/src/lib/devices/__tests__/resolve-target.test.ts similarity index 100% rename from src/lib/devices/__tests__/resolve-target.test.ts rename to apps/cli/src/lib/devices/__tests__/resolve-target.test.ts diff --git a/src/lib/devices/connect.test.ts b/apps/cli/src/lib/devices/connect.test.ts similarity index 100% rename from src/lib/devices/connect.test.ts rename to apps/cli/src/lib/devices/connect.test.ts diff --git a/src/lib/devices/connect.ts b/apps/cli/src/lib/devices/connect.ts similarity index 100% rename from src/lib/devices/connect.ts rename to apps/cli/src/lib/devices/connect.ts diff --git a/src/lib/devices/ignored.test.ts b/apps/cli/src/lib/devices/ignored.test.ts similarity index 100% rename from src/lib/devices/ignored.test.ts rename to apps/cli/src/lib/devices/ignored.test.ts diff --git a/src/lib/devices/pending.test.ts b/apps/cli/src/lib/devices/pending.test.ts similarity index 100% rename from src/lib/devices/pending.test.ts rename to apps/cli/src/lib/devices/pending.test.ts diff --git a/src/lib/devices/pending.ts b/apps/cli/src/lib/devices/pending.ts similarity index 100% rename from src/lib/devices/pending.ts rename to apps/cli/src/lib/devices/pending.ts diff --git a/src/lib/devices/registry.test.ts b/apps/cli/src/lib/devices/registry.test.ts similarity index 100% rename from src/lib/devices/registry.test.ts rename to apps/cli/src/lib/devices/registry.test.ts diff --git a/src/lib/devices/registry.ts b/apps/cli/src/lib/devices/registry.ts similarity index 100% rename from src/lib/devices/registry.ts rename to apps/cli/src/lib/devices/registry.ts diff --git a/src/lib/devices/resolve-target.ts b/apps/cli/src/lib/devices/resolve-target.ts similarity index 100% rename from src/lib/devices/resolve-target.ts rename to apps/cli/src/lib/devices/resolve-target.ts diff --git a/src/lib/devices/ssh-config.test.ts b/apps/cli/src/lib/devices/ssh-config.test.ts similarity index 100% rename from src/lib/devices/ssh-config.test.ts rename to apps/cli/src/lib/devices/ssh-config.test.ts diff --git a/src/lib/devices/ssh-config.ts b/apps/cli/src/lib/devices/ssh-config.ts similarity index 100% rename from src/lib/devices/ssh-config.ts rename to apps/cli/src/lib/devices/ssh-config.ts diff --git a/src/lib/devices/sync.test.ts b/apps/cli/src/lib/devices/sync.test.ts similarity index 100% rename from src/lib/devices/sync.test.ts rename to apps/cli/src/lib/devices/sync.test.ts diff --git a/src/lib/devices/sync.ts b/apps/cli/src/lib/devices/sync.ts similarity index 100% rename from src/lib/devices/sync.ts rename to apps/cli/src/lib/devices/sync.ts diff --git a/src/lib/devices/tailscale.test.ts b/apps/cli/src/lib/devices/tailscale.test.ts similarity index 100% rename from src/lib/devices/tailscale.test.ts rename to apps/cli/src/lib/devices/tailscale.test.ts diff --git a/src/lib/devices/tailscale.ts b/apps/cli/src/lib/devices/tailscale.ts similarity index 100% rename from src/lib/devices/tailscale.ts rename to apps/cli/src/lib/devices/tailscale.ts diff --git a/src/lib/diff-text.ts b/apps/cli/src/lib/diff-text.ts similarity index 100% rename from src/lib/diff-text.ts rename to apps/cli/src/lib/diff-text.ts diff --git a/src/lib/doctor-diff.ts b/apps/cli/src/lib/doctor-diff.ts similarity index 100% rename from src/lib/doctor-diff.ts rename to apps/cli/src/lib/doctor-diff.ts diff --git a/src/lib/drift-sync.test.ts b/apps/cli/src/lib/drift-sync.test.ts similarity index 100% rename from src/lib/drift-sync.test.ts rename to apps/cli/src/lib/drift-sync.test.ts diff --git a/src/lib/drift-sync.ts b/apps/cli/src/lib/drift-sync.ts similarity index 100% rename from src/lib/drift-sync.ts rename to apps/cli/src/lib/drift-sync.ts diff --git a/src/lib/drift.ts b/apps/cli/src/lib/drift.ts similarity index 100% rename from src/lib/drift.ts rename to apps/cli/src/lib/drift.ts diff --git a/src/lib/drive-sync.test.ts b/apps/cli/src/lib/drive-sync.test.ts similarity index 100% rename from src/lib/drive-sync.test.ts rename to apps/cli/src/lib/drive-sync.test.ts diff --git a/src/lib/drive-sync.ts b/apps/cli/src/lib/drive-sync.ts similarity index 100% rename from src/lib/drive-sync.ts rename to apps/cli/src/lib/drive-sync.ts diff --git a/src/lib/events.ts b/apps/cli/src/lib/events.ts similarity index 100% rename from src/lib/events.ts rename to apps/cli/src/lib/events.ts diff --git a/src/lib/exec-shim.test.ts b/apps/cli/src/lib/exec-shim.test.ts similarity index 100% rename from src/lib/exec-shim.test.ts rename to apps/cli/src/lib/exec-shim.test.ts diff --git a/src/lib/exec.test.ts b/apps/cli/src/lib/exec.test.ts similarity index 100% rename from src/lib/exec.test.ts rename to apps/cli/src/lib/exec.test.ts diff --git a/src/lib/exec.ts b/apps/cli/src/lib/exec.ts similarity index 100% rename from src/lib/exec.ts rename to apps/cli/src/lib/exec.ts diff --git a/src/lib/fs-atomic.ts b/apps/cli/src/lib/fs-atomic.ts similarity index 100% rename from src/lib/fs-atomic.ts rename to apps/cli/src/lib/fs-atomic.ts diff --git a/src/lib/fs-walk.test.ts b/apps/cli/src/lib/fs-walk.test.ts similarity index 100% rename from src/lib/fs-walk.test.ts rename to apps/cli/src/lib/fs-walk.test.ts diff --git a/src/lib/fs-walk.ts b/apps/cli/src/lib/fs-walk.ts similarity index 100% rename from src/lib/fs-walk.ts rename to apps/cli/src/lib/fs-walk.ts diff --git a/src/lib/fuzzy.test.ts b/apps/cli/src/lib/fuzzy.test.ts similarity index 100% rename from src/lib/fuzzy.test.ts rename to apps/cli/src/lib/fuzzy.test.ts diff --git a/src/lib/fuzzy.ts b/apps/cli/src/lib/fuzzy.ts similarity index 100% rename from src/lib/fuzzy.ts rename to apps/cli/src/lib/fuzzy.ts diff --git a/src/lib/gemini-settings.ts b/apps/cli/src/lib/gemini-settings.ts similarity index 100% rename from src/lib/gemini-settings.ts rename to apps/cli/src/lib/gemini-settings.ts diff --git a/src/lib/git.test.ts b/apps/cli/src/lib/git.test.ts similarity index 100% rename from src/lib/git.test.ts rename to apps/cli/src/lib/git.test.ts diff --git a/src/lib/git.ts b/apps/cli/src/lib/git.ts similarity index 100% rename from src/lib/git.ts rename to apps/cli/src/lib/git.ts diff --git a/src/lib/heal.ts b/apps/cli/src/lib/heal.ts similarity index 100% rename from src/lib/heal.ts rename to apps/cli/src/lib/heal.ts diff --git a/src/lib/help.test.ts b/apps/cli/src/lib/help.test.ts similarity index 100% rename from src/lib/help.test.ts rename to apps/cli/src/lib/help.test.ts diff --git a/src/lib/help.ts b/apps/cli/src/lib/help.ts similarity index 100% rename from src/lib/help.ts rename to apps/cli/src/lib/help.ts diff --git a/src/lib/hooks.ts b/apps/cli/src/lib/hooks.ts similarity index 100% rename from src/lib/hooks.ts rename to apps/cli/src/lib/hooks.ts diff --git a/src/lib/hooks/__tests__/match.test.ts b/apps/cli/src/lib/hooks/__tests__/match.test.ts similarity index 100% rename from src/lib/hooks/__tests__/match.test.ts rename to apps/cli/src/lib/hooks/__tests__/match.test.ts diff --git a/src/lib/hooks/cache-integration.test.ts b/apps/cli/src/lib/hooks/cache-integration.test.ts similarity index 100% rename from src/lib/hooks/cache-integration.test.ts rename to apps/cli/src/lib/hooks/cache-integration.test.ts diff --git a/src/lib/hooks/cache.test.ts b/apps/cli/src/lib/hooks/cache.test.ts similarity index 100% rename from src/lib/hooks/cache.test.ts rename to apps/cli/src/lib/hooks/cache.test.ts diff --git a/src/lib/hooks/cache.ts b/apps/cli/src/lib/hooks/cache.ts similarity index 100% rename from src/lib/hooks/cache.ts rename to apps/cli/src/lib/hooks/cache.ts diff --git a/src/lib/hooks/match.ts b/apps/cli/src/lib/hooks/match.ts similarity index 100% rename from src/lib/hooks/match.ts rename to apps/cli/src/lib/hooks/match.ts diff --git a/src/lib/hooks/profile.test.ts b/apps/cli/src/lib/hooks/profile.test.ts similarity index 100% rename from src/lib/hooks/profile.test.ts rename to apps/cli/src/lib/hooks/profile.test.ts diff --git a/src/lib/hooks/profile.ts b/apps/cli/src/lib/hooks/profile.ts similarity index 100% rename from src/lib/hooks/profile.ts rename to apps/cli/src/lib/hooks/profile.ts diff --git a/src/lib/hosts/dispatch.test.ts b/apps/cli/src/lib/hosts/dispatch.test.ts similarity index 100% rename from src/lib/hosts/dispatch.test.ts rename to apps/cli/src/lib/hosts/dispatch.test.ts diff --git a/src/lib/hosts/dispatch.ts b/apps/cli/src/lib/hosts/dispatch.ts similarity index 100% rename from src/lib/hosts/dispatch.ts rename to apps/cli/src/lib/hosts/dispatch.ts diff --git a/src/lib/hosts/logs.test.ts b/apps/cli/src/lib/hosts/logs.test.ts similarity index 100% rename from src/lib/hosts/logs.test.ts rename to apps/cli/src/lib/hosts/logs.test.ts diff --git a/src/lib/hosts/logs.ts b/apps/cli/src/lib/hosts/logs.ts similarity index 100% rename from src/lib/hosts/logs.ts rename to apps/cli/src/lib/hosts/logs.ts diff --git a/src/lib/hosts/option.test.ts b/apps/cli/src/lib/hosts/option.test.ts similarity index 100% rename from src/lib/hosts/option.test.ts rename to apps/cli/src/lib/hosts/option.test.ts diff --git a/src/lib/hosts/option.ts b/apps/cli/src/lib/hosts/option.ts similarity index 100% rename from src/lib/hosts/option.ts rename to apps/cli/src/lib/hosts/option.ts diff --git a/src/lib/hosts/passthrough.test.ts b/apps/cli/src/lib/hosts/passthrough.test.ts similarity index 100% rename from src/lib/hosts/passthrough.test.ts rename to apps/cli/src/lib/hosts/passthrough.test.ts diff --git a/src/lib/hosts/passthrough.ts b/apps/cli/src/lib/hosts/passthrough.ts similarity index 100% rename from src/lib/hosts/passthrough.ts rename to apps/cli/src/lib/hosts/passthrough.ts diff --git a/src/lib/hosts/progress.test.ts b/apps/cli/src/lib/hosts/progress.test.ts similarity index 100% rename from src/lib/hosts/progress.test.ts rename to apps/cli/src/lib/hosts/progress.test.ts diff --git a/src/lib/hosts/progress.ts b/apps/cli/src/lib/hosts/progress.ts similarity index 100% rename from src/lib/hosts/progress.ts rename to apps/cli/src/lib/hosts/progress.ts diff --git a/src/lib/hosts/providers/local.test.ts b/apps/cli/src/lib/hosts/providers/local.test.ts similarity index 100% rename from src/lib/hosts/providers/local.test.ts rename to apps/cli/src/lib/hosts/providers/local.test.ts diff --git a/src/lib/hosts/providers/local.ts b/apps/cli/src/lib/hosts/providers/local.ts similarity index 100% rename from src/lib/hosts/providers/local.ts rename to apps/cli/src/lib/hosts/providers/local.ts diff --git a/src/lib/hosts/ready.test.ts b/apps/cli/src/lib/hosts/ready.test.ts similarity index 100% rename from src/lib/hosts/ready.test.ts rename to apps/cli/src/lib/hosts/ready.test.ts diff --git a/src/lib/hosts/ready.ts b/apps/cli/src/lib/hosts/ready.ts similarity index 100% rename from src/lib/hosts/ready.ts rename to apps/cli/src/lib/hosts/ready.ts diff --git a/src/lib/hosts/reconcile.test.ts b/apps/cli/src/lib/hosts/reconcile.test.ts similarity index 100% rename from src/lib/hosts/reconcile.test.ts rename to apps/cli/src/lib/hosts/reconcile.test.ts diff --git a/src/lib/hosts/reconcile.ts b/apps/cli/src/lib/hosts/reconcile.ts similarity index 100% rename from src/lib/hosts/reconcile.ts rename to apps/cli/src/lib/hosts/reconcile.ts diff --git a/src/lib/hosts/registry.test.ts b/apps/cli/src/lib/hosts/registry.test.ts similarity index 100% rename from src/lib/hosts/registry.test.ts rename to apps/cli/src/lib/hosts/registry.test.ts diff --git a/src/lib/hosts/registry.ts b/apps/cli/src/lib/hosts/registry.ts similarity index 100% rename from src/lib/hosts/registry.ts rename to apps/cli/src/lib/hosts/registry.ts diff --git a/src/lib/hosts/remote-cmd.test.ts b/apps/cli/src/lib/hosts/remote-cmd.test.ts similarity index 100% rename from src/lib/hosts/remote-cmd.test.ts rename to apps/cli/src/lib/hosts/remote-cmd.test.ts diff --git a/src/lib/hosts/remote-cmd.ts b/apps/cli/src/lib/hosts/remote-cmd.ts similarity index 100% rename from src/lib/hosts/remote-cmd.ts rename to apps/cli/src/lib/hosts/remote-cmd.ts diff --git a/src/lib/hosts/remote-os.ts b/apps/cli/src/lib/hosts/remote-os.ts similarity index 100% rename from src/lib/hosts/remote-os.ts rename to apps/cli/src/lib/hosts/remote-os.ts diff --git a/src/lib/hosts/session-index.test.ts b/apps/cli/src/lib/hosts/session-index.test.ts similarity index 100% rename from src/lib/hosts/session-index.test.ts rename to apps/cli/src/lib/hosts/session-index.test.ts diff --git a/src/lib/hosts/session-index.ts b/apps/cli/src/lib/hosts/session-index.ts similarity index 100% rename from src/lib/hosts/session-index.ts rename to apps/cli/src/lib/hosts/session-index.ts diff --git a/src/lib/hosts/ssh-config.test.ts b/apps/cli/src/lib/hosts/ssh-config.test.ts similarity index 100% rename from src/lib/hosts/ssh-config.test.ts rename to apps/cli/src/lib/hosts/ssh-config.test.ts diff --git a/src/lib/hosts/ssh-config.ts b/apps/cli/src/lib/hosts/ssh-config.ts similarity index 100% rename from src/lib/hosts/ssh-config.ts rename to apps/cli/src/lib/hosts/ssh-config.ts diff --git a/src/lib/hosts/tasks.test.ts b/apps/cli/src/lib/hosts/tasks.test.ts similarity index 100% rename from src/lib/hosts/tasks.test.ts rename to apps/cli/src/lib/hosts/tasks.test.ts diff --git a/src/lib/hosts/tasks.ts b/apps/cli/src/lib/hosts/tasks.ts similarity index 100% rename from src/lib/hosts/tasks.ts rename to apps/cli/src/lib/hosts/tasks.ts diff --git a/src/lib/hosts/types.ts b/apps/cli/src/lib/hosts/types.ts similarity index 100% rename from src/lib/hosts/types.ts rename to apps/cli/src/lib/hosts/types.ts diff --git a/src/lib/import.test.ts b/apps/cli/src/lib/import.test.ts similarity index 100% rename from src/lib/import.test.ts rename to apps/cli/src/lib/import.test.ts diff --git a/src/lib/import.ts b/apps/cli/src/lib/import.ts similarity index 100% rename from src/lib/import.ts rename to apps/cli/src/lib/import.ts diff --git a/src/lib/lock.test.ts b/apps/cli/src/lib/lock.test.ts similarity index 100% rename from src/lib/lock.test.ts rename to apps/cli/src/lib/lock.test.ts diff --git a/src/lib/lock.ts b/apps/cli/src/lib/lock.ts similarity index 100% rename from src/lib/lock.ts rename to apps/cli/src/lib/lock.ts diff --git a/src/lib/log-follow.test.ts b/apps/cli/src/lib/log-follow.test.ts similarity index 100% rename from src/lib/log-follow.test.ts rename to apps/cli/src/lib/log-follow.test.ts diff --git a/src/lib/log-follow.ts b/apps/cli/src/lib/log-follow.ts similarity index 100% rename from src/lib/log-follow.ts rename to apps/cli/src/lib/log-follow.ts diff --git a/src/lib/loop-integration.test.ts b/apps/cli/src/lib/loop-integration.test.ts similarity index 100% rename from src/lib/loop-integration.test.ts rename to apps/cli/src/lib/loop-integration.test.ts diff --git a/src/lib/loop.test.ts b/apps/cli/src/lib/loop.test.ts similarity index 100% rename from src/lib/loop.test.ts rename to apps/cli/src/lib/loop.test.ts diff --git a/src/lib/loop.ts b/apps/cli/src/lib/loop.ts similarity index 100% rename from src/lib/loop.ts rename to apps/cli/src/lib/loop.ts diff --git a/src/lib/machine-id.ts b/apps/cli/src/lib/machine-id.ts similarity index 100% rename from src/lib/machine-id.ts rename to apps/cli/src/lib/machine-id.ts diff --git a/src/lib/mailbox-target.test.ts b/apps/cli/src/lib/mailbox-target.test.ts similarity index 100% rename from src/lib/mailbox-target.test.ts rename to apps/cli/src/lib/mailbox-target.test.ts diff --git a/src/lib/mailbox-target.ts b/apps/cli/src/lib/mailbox-target.ts similarity index 100% rename from src/lib/mailbox-target.ts rename to apps/cli/src/lib/mailbox-target.ts diff --git a/src/lib/mailbox.test.ts b/apps/cli/src/lib/mailbox.test.ts similarity index 100% rename from src/lib/mailbox.test.ts rename to apps/cli/src/lib/mailbox.test.ts diff --git a/src/lib/mailbox.ts b/apps/cli/src/lib/mailbox.ts similarity index 100% rename from src/lib/mailbox.ts rename to apps/cli/src/lib/mailbox.ts diff --git a/src/lib/manifest.ts b/apps/cli/src/lib/manifest.ts similarity index 100% rename from src/lib/manifest.ts rename to apps/cli/src/lib/manifest.ts diff --git a/src/lib/markdown.ts b/apps/cli/src/lib/markdown.ts similarity index 100% rename from src/lib/markdown.ts rename to apps/cli/src/lib/markdown.ts diff --git a/src/lib/mcp.test.ts b/apps/cli/src/lib/mcp.test.ts similarity index 100% rename from src/lib/mcp.test.ts rename to apps/cli/src/lib/mcp.test.ts diff --git a/src/lib/mcp.ts b/apps/cli/src/lib/mcp.ts similarity index 100% rename from src/lib/mcp.ts rename to apps/cli/src/lib/mcp.ts diff --git a/src/lib/menubar/install-menubar.test.ts b/apps/cli/src/lib/menubar/install-menubar.test.ts similarity index 100% rename from src/lib/menubar/install-menubar.test.ts rename to apps/cli/src/lib/menubar/install-menubar.test.ts diff --git a/src/lib/menubar/install-menubar.ts b/apps/cli/src/lib/menubar/install-menubar.ts similarity index 98% rename from src/lib/menubar/install-menubar.ts rename to apps/cli/src/lib/menubar/install-menubar.ts index 439f39ece..166aa5fc6 100644 --- a/src/lib/menubar/install-menubar.ts +++ b/apps/cli/src/lib/menubar/install-menubar.ts @@ -89,7 +89,7 @@ export function menubarServiceInstalled(): boolean { * Locate the source `.app` shipped alongside the compiled JS. * 1. dist/lib/menubar/MenubarHelper.app — npm install layout (sibling of this file) * 2. /bin/MenubarHelper.app — raw working tree (tsx/dev) - * 3. /packages/menubar-helper/dist/MenubarHelper.app — fresh local build + * 3. apps/cli/menubar/dist/MenubarHelper.app — fresh local build */ function sourceAppPath(): string | null { const candidates: string[] = []; @@ -98,7 +98,7 @@ function sourceAppPath(): string | null { candidates.push(path.join(here, APP_BUNDLE_NAME)); candidates.push(path.resolve(here, '..', '..', '..', 'bin', APP_BUNDLE_NAME)); candidates.push( - path.resolve(here, '..', '..', '..', 'packages', 'menubar-helper', 'dist', APP_BUNDLE_NAME) + path.resolve(here, '..', '..', '..', 'menubar', 'dist', APP_BUNDLE_NAME) ); } catch { /* import.meta.url unavailable */ diff --git a/src/lib/migrate.test.ts b/apps/cli/src/lib/migrate.test.ts similarity index 100% rename from src/lib/migrate.test.ts rename to apps/cli/src/lib/migrate.test.ts diff --git a/src/lib/migrate.ts b/apps/cli/src/lib/migrate.ts similarity index 100% rename from src/lib/migrate.ts rename to apps/cli/src/lib/migrate.ts diff --git a/src/lib/models.ts b/apps/cli/src/lib/models.ts similarity index 100% rename from src/lib/models.ts rename to apps/cli/src/lib/models.ts diff --git a/src/lib/onepassword.ts b/apps/cli/src/lib/onepassword.ts similarity index 100% rename from src/lib/onepassword.ts rename to apps/cli/src/lib/onepassword.ts diff --git a/src/lib/overdue.ts b/apps/cli/src/lib/overdue.ts similarity index 100% rename from src/lib/overdue.ts rename to apps/cli/src/lib/overdue.ts diff --git a/src/lib/paths.ts b/apps/cli/src/lib/paths.ts similarity index 100% rename from src/lib/paths.ts rename to apps/cli/src/lib/paths.ts diff --git a/src/lib/permissions.test.ts b/apps/cli/src/lib/permissions.test.ts similarity index 100% rename from src/lib/permissions.test.ts rename to apps/cli/src/lib/permissions.test.ts diff --git a/src/lib/permissions.ts b/apps/cli/src/lib/permissions.ts similarity index 100% rename from src/lib/permissions.ts rename to apps/cli/src/lib/permissions.ts diff --git a/src/lib/picker.test.ts b/apps/cli/src/lib/picker.test.ts similarity index 100% rename from src/lib/picker.test.ts rename to apps/cli/src/lib/picker.test.ts diff --git a/src/lib/picker.ts b/apps/cli/src/lib/picker.ts similarity index 100% rename from src/lib/picker.ts rename to apps/cli/src/lib/picker.ts diff --git a/src/lib/platform/exec.test.ts b/apps/cli/src/lib/platform/exec.test.ts similarity index 100% rename from src/lib/platform/exec.test.ts rename to apps/cli/src/lib/platform/exec.test.ts diff --git a/src/lib/platform/exec.ts b/apps/cli/src/lib/platform/exec.ts similarity index 100% rename from src/lib/platform/exec.ts rename to apps/cli/src/lib/platform/exec.ts diff --git a/src/lib/platform/index.ts b/apps/cli/src/lib/platform/index.ts similarity index 100% rename from src/lib/platform/index.ts rename to apps/cli/src/lib/platform/index.ts diff --git a/src/lib/platform/ipc.test.ts b/apps/cli/src/lib/platform/ipc.test.ts similarity index 100% rename from src/lib/platform/ipc.test.ts rename to apps/cli/src/lib/platform/ipc.test.ts diff --git a/src/lib/platform/ipc.ts b/apps/cli/src/lib/platform/ipc.ts similarity index 100% rename from src/lib/platform/ipc.ts rename to apps/cli/src/lib/platform/ipc.ts diff --git a/src/lib/platform/links.test.ts b/apps/cli/src/lib/platform/links.test.ts similarity index 100% rename from src/lib/platform/links.test.ts rename to apps/cli/src/lib/platform/links.test.ts diff --git a/src/lib/platform/links.ts b/apps/cli/src/lib/platform/links.ts similarity index 100% rename from src/lib/platform/links.ts rename to apps/cli/src/lib/platform/links.ts diff --git a/src/lib/platform/paths.test.ts b/apps/cli/src/lib/platform/paths.test.ts similarity index 100% rename from src/lib/platform/paths.test.ts rename to apps/cli/src/lib/platform/paths.test.ts diff --git a/src/lib/platform/paths.ts b/apps/cli/src/lib/platform/paths.ts similarity index 100% rename from src/lib/platform/paths.ts rename to apps/cli/src/lib/platform/paths.ts diff --git a/src/lib/platform/posixpath.test.ts b/apps/cli/src/lib/platform/posixpath.test.ts similarity index 100% rename from src/lib/platform/posixpath.test.ts rename to apps/cli/src/lib/platform/posixpath.test.ts diff --git a/src/lib/platform/posixpath.ts b/apps/cli/src/lib/platform/posixpath.ts similarity index 100% rename from src/lib/platform/posixpath.ts rename to apps/cli/src/lib/platform/posixpath.ts diff --git a/src/lib/platform/process.test.ts b/apps/cli/src/lib/platform/process.test.ts similarity index 100% rename from src/lib/platform/process.test.ts rename to apps/cli/src/lib/platform/process.test.ts diff --git a/src/lib/platform/process.ts b/apps/cli/src/lib/platform/process.ts similarity index 100% rename from src/lib/platform/process.ts rename to apps/cli/src/lib/platform/process.ts diff --git a/src/lib/platform/winpath.test.ts b/apps/cli/src/lib/platform/winpath.test.ts similarity index 100% rename from src/lib/platform/winpath.test.ts rename to apps/cli/src/lib/platform/winpath.test.ts diff --git a/src/lib/platform/winpath.ts b/apps/cli/src/lib/platform/winpath.ts similarity index 100% rename from src/lib/platform/winpath.ts rename to apps/cli/src/lib/platform/winpath.ts diff --git a/src/lib/plugin-marketplace.test.ts b/apps/cli/src/lib/plugin-marketplace.test.ts similarity index 100% rename from src/lib/plugin-marketplace.test.ts rename to apps/cli/src/lib/plugin-marketplace.test.ts diff --git a/src/lib/plugin-marketplace.ts b/apps/cli/src/lib/plugin-marketplace.ts similarity index 100% rename from src/lib/plugin-marketplace.ts rename to apps/cli/src/lib/plugin-marketplace.ts diff --git a/src/lib/plugins.test.ts b/apps/cli/src/lib/plugins.test.ts similarity index 100% rename from src/lib/plugins.test.ts rename to apps/cli/src/lib/plugins.test.ts diff --git a/src/lib/plugins.ts b/apps/cli/src/lib/plugins.ts similarity index 100% rename from src/lib/plugins.ts rename to apps/cli/src/lib/plugins.ts diff --git a/src/lib/pricing/cost.test.ts b/apps/cli/src/lib/pricing/cost.test.ts similarity index 100% rename from src/lib/pricing/cost.test.ts rename to apps/cli/src/lib/pricing/cost.test.ts diff --git a/src/lib/pricing/cost.ts b/apps/cli/src/lib/pricing/cost.ts similarity index 100% rename from src/lib/pricing/cost.ts rename to apps/cli/src/lib/pricing/cost.ts diff --git a/src/lib/pricing/index.ts b/apps/cli/src/lib/pricing/index.ts similarity index 100% rename from src/lib/pricing/index.ts rename to apps/cli/src/lib/pricing/index.ts diff --git a/src/lib/pricing/prices.json b/apps/cli/src/lib/pricing/prices.json similarity index 100% rename from src/lib/pricing/prices.json rename to apps/cli/src/lib/pricing/prices.json diff --git a/src/lib/pricing/table.test.ts b/apps/cli/src/lib/pricing/table.test.ts similarity index 100% rename from src/lib/pricing/table.test.ts rename to apps/cli/src/lib/pricing/table.test.ts diff --git a/src/lib/pricing/table.ts b/apps/cli/src/lib/pricing/table.ts similarity index 100% rename from src/lib/pricing/table.ts rename to apps/cli/src/lib/pricing/table.ts diff --git a/src/lib/profiles-presets.test.ts b/apps/cli/src/lib/profiles-presets.test.ts similarity index 100% rename from src/lib/profiles-presets.test.ts rename to apps/cli/src/lib/profiles-presets.test.ts diff --git a/src/lib/profiles-presets.ts b/apps/cli/src/lib/profiles-presets.ts similarity index 100% rename from src/lib/profiles-presets.ts rename to apps/cli/src/lib/profiles-presets.ts diff --git a/src/lib/profiles.test.ts b/apps/cli/src/lib/profiles.test.ts similarity index 100% rename from src/lib/profiles.test.ts rename to apps/cli/src/lib/profiles.test.ts diff --git a/src/lib/profiles.ts b/apps/cli/src/lib/profiles.ts similarity index 100% rename from src/lib/profiles.ts rename to apps/cli/src/lib/profiles.ts diff --git a/src/lib/project-launch.test.ts b/apps/cli/src/lib/project-launch.test.ts similarity index 100% rename from src/lib/project-launch.test.ts rename to apps/cli/src/lib/project-launch.test.ts diff --git a/src/lib/project-launch.ts b/apps/cli/src/lib/project-launch.ts similarity index 100% rename from src/lib/project-launch.ts rename to apps/cli/src/lib/project-launch.ts diff --git a/src/lib/pty-client.ts b/apps/cli/src/lib/pty-client.ts similarity index 100% rename from src/lib/pty-client.ts rename to apps/cli/src/lib/pty-client.ts diff --git a/src/lib/pty-server.ts b/apps/cli/src/lib/pty-server.ts similarity index 100% rename from src/lib/pty-server.ts rename to apps/cli/src/lib/pty-server.ts diff --git a/src/lib/pwsh.ts b/apps/cli/src/lib/pwsh.ts similarity index 100% rename from src/lib/pwsh.ts rename to apps/cli/src/lib/pwsh.ts diff --git a/src/lib/redact.ts b/apps/cli/src/lib/redact.ts similarity index 100% rename from src/lib/redact.ts rename to apps/cli/src/lib/redact.ts diff --git a/src/lib/refresh.ts b/apps/cli/src/lib/refresh.ts similarity index 100% rename from src/lib/refresh.ts rename to apps/cli/src/lib/refresh.ts diff --git a/src/lib/registry.test.ts b/apps/cli/src/lib/registry.test.ts similarity index 100% rename from src/lib/registry.test.ts rename to apps/cli/src/lib/registry.test.ts diff --git a/src/lib/registry.ts b/apps/cli/src/lib/registry.ts similarity index 100% rename from src/lib/registry.ts rename to apps/cli/src/lib/registry.ts diff --git a/src/lib/resource-patterns.ts b/apps/cli/src/lib/resource-patterns.ts similarity index 100% rename from src/lib/resource-patterns.ts rename to apps/cli/src/lib/resource-patterns.ts diff --git a/src/lib/resources.ts b/apps/cli/src/lib/resources.ts similarity index 100% rename from src/lib/resources.ts rename to apps/cli/src/lib/resources.ts diff --git a/src/lib/resources/commands.test.ts b/apps/cli/src/lib/resources/commands.test.ts similarity index 100% rename from src/lib/resources/commands.test.ts rename to apps/cli/src/lib/resources/commands.test.ts diff --git a/src/lib/resources/commands.ts b/apps/cli/src/lib/resources/commands.ts similarity index 100% rename from src/lib/resources/commands.ts rename to apps/cli/src/lib/resources/commands.ts diff --git a/src/lib/resources/hooks.test.ts b/apps/cli/src/lib/resources/hooks.test.ts similarity index 100% rename from src/lib/resources/hooks.test.ts rename to apps/cli/src/lib/resources/hooks.test.ts diff --git a/src/lib/resources/hooks.ts b/apps/cli/src/lib/resources/hooks.ts similarity index 100% rename from src/lib/resources/hooks.ts rename to apps/cli/src/lib/resources/hooks.ts diff --git a/src/lib/resources/index.ts b/apps/cli/src/lib/resources/index.ts similarity index 100% rename from src/lib/resources/index.ts rename to apps/cli/src/lib/resources/index.ts diff --git a/src/lib/resources/mcp.test.ts b/apps/cli/src/lib/resources/mcp.test.ts similarity index 100% rename from src/lib/resources/mcp.test.ts rename to apps/cli/src/lib/resources/mcp.test.ts diff --git a/src/lib/resources/mcp.ts b/apps/cli/src/lib/resources/mcp.ts similarity index 100% rename from src/lib/resources/mcp.ts rename to apps/cli/src/lib/resources/mcp.ts diff --git a/src/lib/resources/permissions.test.ts b/apps/cli/src/lib/resources/permissions.test.ts similarity index 100% rename from src/lib/resources/permissions.test.ts rename to apps/cli/src/lib/resources/permissions.test.ts diff --git a/src/lib/resources/permissions.ts b/apps/cli/src/lib/resources/permissions.ts similarity index 100% rename from src/lib/resources/permissions.ts rename to apps/cli/src/lib/resources/permissions.ts diff --git a/src/lib/resources/rules.test.ts b/apps/cli/src/lib/resources/rules.test.ts similarity index 100% rename from src/lib/resources/rules.test.ts rename to apps/cli/src/lib/resources/rules.test.ts diff --git a/src/lib/resources/rules.ts b/apps/cli/src/lib/resources/rules.ts similarity index 100% rename from src/lib/resources/rules.ts rename to apps/cli/src/lib/resources/rules.ts diff --git a/src/lib/resources/skills.test.ts b/apps/cli/src/lib/resources/skills.test.ts similarity index 100% rename from src/lib/resources/skills.test.ts rename to apps/cli/src/lib/resources/skills.test.ts diff --git a/src/lib/resources/skills.ts b/apps/cli/src/lib/resources/skills.ts similarity index 100% rename from src/lib/resources/skills.ts rename to apps/cli/src/lib/resources/skills.ts diff --git a/src/lib/resources/subagents.test.ts b/apps/cli/src/lib/resources/subagents.test.ts similarity index 100% rename from src/lib/resources/subagents.test.ts rename to apps/cli/src/lib/resources/subagents.test.ts diff --git a/src/lib/resources/subagents.ts b/apps/cli/src/lib/resources/subagents.ts similarity index 100% rename from src/lib/resources/subagents.ts rename to apps/cli/src/lib/resources/subagents.ts diff --git a/src/lib/resources/types.ts b/apps/cli/src/lib/resources/types.ts similarity index 100% rename from src/lib/resources/types.ts rename to apps/cli/src/lib/resources/types.ts diff --git a/src/lib/resources/workflows.test.ts b/apps/cli/src/lib/resources/workflows.test.ts similarity index 100% rename from src/lib/resources/workflows.test.ts rename to apps/cli/src/lib/resources/workflows.test.ts diff --git a/src/lib/resources/workflows.ts b/apps/cli/src/lib/resources/workflows.ts similarity index 100% rename from src/lib/resources/workflows.ts rename to apps/cli/src/lib/resources/workflows.ts diff --git a/src/lib/rotate.test.ts b/apps/cli/src/lib/rotate.test.ts similarity index 100% rename from src/lib/rotate.test.ts rename to apps/cli/src/lib/rotate.test.ts diff --git a/src/lib/rotate.ts b/apps/cli/src/lib/rotate.ts similarity index 100% rename from src/lib/rotate.ts rename to apps/cli/src/lib/rotate.ts diff --git a/src/lib/routines-format.ts b/apps/cli/src/lib/routines-format.ts similarity index 100% rename from src/lib/routines-format.ts rename to apps/cli/src/lib/routines-format.ts diff --git a/src/lib/routines.test.ts b/apps/cli/src/lib/routines.test.ts similarity index 100% rename from src/lib/routines.test.ts rename to apps/cli/src/lib/routines.test.ts diff --git a/src/lib/routines.ts b/apps/cli/src/lib/routines.ts similarity index 100% rename from src/lib/routines.ts rename to apps/cli/src/lib/routines.ts diff --git a/src/lib/rules/compile.test.ts b/apps/cli/src/lib/rules/compile.test.ts similarity index 100% rename from src/lib/rules/compile.test.ts rename to apps/cli/src/lib/rules/compile.test.ts diff --git a/src/lib/rules/compile.ts b/apps/cli/src/lib/rules/compile.ts similarity index 100% rename from src/lib/rules/compile.ts rename to apps/cli/src/lib/rules/compile.ts diff --git a/src/lib/rules/compose.test.ts b/apps/cli/src/lib/rules/compose.test.ts similarity index 100% rename from src/lib/rules/compose.test.ts rename to apps/cli/src/lib/rules/compose.test.ts diff --git a/src/lib/rules/compose.ts b/apps/cli/src/lib/rules/compose.ts similarity index 100% rename from src/lib/rules/compose.ts rename to apps/cli/src/lib/rules/compose.ts diff --git a/src/lib/rules/rules.test.ts b/apps/cli/src/lib/rules/rules.test.ts similarity index 100% rename from src/lib/rules/rules.test.ts rename to apps/cli/src/lib/rules/rules.test.ts diff --git a/src/lib/rules/rules.ts b/apps/cli/src/lib/rules/rules.ts similarity index 100% rename from src/lib/rules/rules.ts rename to apps/cli/src/lib/rules/rules.ts diff --git a/src/lib/run-config.test.ts b/apps/cli/src/lib/run-config.test.ts similarity index 100% rename from src/lib/run-config.test.ts rename to apps/cli/src/lib/run-config.test.ts diff --git a/src/lib/run-config.ts b/apps/cli/src/lib/run-config.ts similarity index 100% rename from src/lib/run-config.ts rename to apps/cli/src/lib/run-config.ts diff --git a/src/lib/run-defaults.test.ts b/apps/cli/src/lib/run-defaults.test.ts similarity index 100% rename from src/lib/run-defaults.test.ts rename to apps/cli/src/lib/run-defaults.test.ts diff --git a/src/lib/run-defaults.ts b/apps/cli/src/lib/run-defaults.ts similarity index 100% rename from src/lib/run-defaults.ts rename to apps/cli/src/lib/run-defaults.ts diff --git a/src/lib/runner.ts b/apps/cli/src/lib/runner.ts similarity index 100% rename from src/lib/runner.ts rename to apps/cli/src/lib/runner.ts diff --git a/src/lib/sandbox.test.ts b/apps/cli/src/lib/sandbox.test.ts similarity index 100% rename from src/lib/sandbox.test.ts rename to apps/cli/src/lib/sandbox.test.ts diff --git a/src/lib/sandbox.ts b/apps/cli/src/lib/sandbox.ts similarity index 100% rename from src/lib/sandbox.ts rename to apps/cli/src/lib/sandbox.ts diff --git a/src/lib/scheduler.ts b/apps/cli/src/lib/scheduler.ts similarity index 100% rename from src/lib/scheduler.ts rename to apps/cli/src/lib/scheduler.ts diff --git a/src/lib/secrets/__tests__/bundles-file-backend.test.ts b/apps/cli/src/lib/secrets/__tests__/bundles-file-backend.test.ts similarity index 100% rename from src/lib/secrets/__tests__/bundles-file-backend.test.ts rename to apps/cli/src/lib/secrets/__tests__/bundles-file-backend.test.ts diff --git a/src/lib/secrets/__tests__/bundles-linux-fallback.test.ts b/apps/cli/src/lib/secrets/__tests__/bundles-linux-fallback.test.ts similarity index 100% rename from src/lib/secrets/__tests__/bundles-linux-fallback.test.ts rename to apps/cli/src/lib/secrets/__tests__/bundles-linux-fallback.test.ts diff --git a/src/lib/secrets/__tests__/bundles-storage.test.ts b/apps/cli/src/lib/secrets/__tests__/bundles-storage.test.ts similarity index 100% rename from src/lib/secrets/__tests__/bundles-storage.test.ts rename to apps/cli/src/lib/secrets/__tests__/bundles-storage.test.ts diff --git a/src/lib/secrets/__tests__/bundles.test.ts b/apps/cli/src/lib/secrets/__tests__/bundles.test.ts similarity index 100% rename from src/lib/secrets/__tests__/bundles.test.ts rename to apps/cli/src/lib/secrets/__tests__/bundles.test.ts diff --git a/src/lib/secrets/__tests__/install-helper.test.ts b/apps/cli/src/lib/secrets/__tests__/install-helper.test.ts similarity index 100% rename from src/lib/secrets/__tests__/install-helper.test.ts rename to apps/cli/src/lib/secrets/__tests__/install-helper.test.ts diff --git a/src/lib/secrets/__tests__/keychain-helper.test.ts b/apps/cli/src/lib/secrets/__tests__/keychain-helper.test.ts similarity index 100% rename from src/lib/secrets/__tests__/keychain-helper.test.ts rename to apps/cli/src/lib/secrets/__tests__/keychain-helper.test.ts diff --git a/src/lib/secrets/__tests__/linux.test.ts b/apps/cli/src/lib/secrets/__tests__/linux.test.ts similarity index 100% rename from src/lib/secrets/__tests__/linux.test.ts rename to apps/cli/src/lib/secrets/__tests__/linux.test.ts diff --git a/src/lib/secrets/__tests__/meta.test.ts b/apps/cli/src/lib/secrets/__tests__/meta.test.ts similarity index 100% rename from src/lib/secrets/__tests__/meta.test.ts rename to apps/cli/src/lib/secrets/__tests__/meta.test.ts diff --git a/src/lib/secrets/__tests__/raw-item.test.ts b/apps/cli/src/lib/secrets/__tests__/raw-item.test.ts similarity index 100% rename from src/lib/secrets/__tests__/raw-item.test.ts rename to apps/cli/src/lib/secrets/__tests__/raw-item.test.ts diff --git a/src/lib/secrets/__tests__/secrets.test.ts b/apps/cli/src/lib/secrets/__tests__/secrets.test.ts similarity index 100% rename from src/lib/secrets/__tests__/secrets.test.ts rename to apps/cli/src/lib/secrets/__tests__/secrets.test.ts diff --git a/src/lib/secrets/__tests__/sync-backend.test.ts b/apps/cli/src/lib/secrets/__tests__/sync-backend.test.ts similarity index 100% rename from src/lib/secrets/__tests__/sync-backend.test.ts rename to apps/cli/src/lib/secrets/__tests__/sync-backend.test.ts diff --git a/src/lib/secrets/__tests__/sync.test.ts b/apps/cli/src/lib/secrets/__tests__/sync.test.ts similarity index 100% rename from src/lib/secrets/__tests__/sync.test.ts rename to apps/cli/src/lib/secrets/__tests__/sync.test.ts diff --git a/src/lib/secrets/agent.test.ts b/apps/cli/src/lib/secrets/agent.test.ts similarity index 100% rename from src/lib/secrets/agent.test.ts rename to apps/cli/src/lib/secrets/agent.test.ts diff --git a/src/lib/secrets/agent.ts b/apps/cli/src/lib/secrets/agent.ts similarity index 100% rename from src/lib/secrets/agent.ts rename to apps/cli/src/lib/secrets/agent.ts diff --git a/src/lib/secrets/bundles.test.ts b/apps/cli/src/lib/secrets/bundles.test.ts similarity index 100% rename from src/lib/secrets/bundles.test.ts rename to apps/cli/src/lib/secrets/bundles.test.ts diff --git a/src/lib/secrets/bundles.ts b/apps/cli/src/lib/secrets/bundles.ts similarity index 100% rename from src/lib/secrets/bundles.ts rename to apps/cli/src/lib/secrets/bundles.ts diff --git a/src/lib/secrets/drivers/rush.ts b/apps/cli/src/lib/secrets/drivers/rush.ts similarity index 100% rename from src/lib/secrets/drivers/rush.ts rename to apps/cli/src/lib/secrets/drivers/rush.ts diff --git a/src/lib/secrets/filestore.test.ts b/apps/cli/src/lib/secrets/filestore.test.ts similarity index 100% rename from src/lib/secrets/filestore.test.ts rename to apps/cli/src/lib/secrets/filestore.test.ts diff --git a/src/lib/secrets/filestore.ts b/apps/cli/src/lib/secrets/filestore.ts similarity index 100% rename from src/lib/secrets/filestore.ts rename to apps/cli/src/lib/secrets/filestore.ts diff --git a/src/lib/secrets/index.test.ts b/apps/cli/src/lib/secrets/index.test.ts similarity index 100% rename from src/lib/secrets/index.test.ts rename to apps/cli/src/lib/secrets/index.test.ts diff --git a/src/lib/secrets/index.ts b/apps/cli/src/lib/secrets/index.ts similarity index 100% rename from src/lib/secrets/index.ts rename to apps/cli/src/lib/secrets/index.ts diff --git a/src/lib/secrets/install-helper.ts b/apps/cli/src/lib/secrets/install-helper.ts similarity index 100% rename from src/lib/secrets/install-helper.ts rename to apps/cli/src/lib/secrets/install-helper.ts diff --git a/src/lib/secrets/keychain-helper.swift b/apps/cli/src/lib/secrets/keychain-helper.swift similarity index 100% rename from src/lib/secrets/keychain-helper.swift rename to apps/cli/src/lib/secrets/keychain-helper.swift diff --git a/src/lib/secrets/linux.test.ts b/apps/cli/src/lib/secrets/linux.test.ts similarity index 100% rename from src/lib/secrets/linux.test.ts rename to apps/cli/src/lib/secrets/linux.test.ts diff --git a/src/lib/secrets/linux.ts b/apps/cli/src/lib/secrets/linux.ts similarity index 100% rename from src/lib/secrets/linux.ts rename to apps/cli/src/lib/secrets/linux.ts diff --git a/src/lib/secrets/mcp.test.ts b/apps/cli/src/lib/secrets/mcp.test.ts similarity index 100% rename from src/lib/secrets/mcp.test.ts rename to apps/cli/src/lib/secrets/mcp.test.ts diff --git a/src/lib/secrets/mcp.ts b/apps/cli/src/lib/secrets/mcp.ts similarity index 100% rename from src/lib/secrets/mcp.ts rename to apps/cli/src/lib/secrets/mcp.ts diff --git a/src/lib/secrets/policy.test.ts b/apps/cli/src/lib/secrets/policy.test.ts similarity index 100% rename from src/lib/secrets/policy.test.ts rename to apps/cli/src/lib/secrets/policy.test.ts diff --git a/src/lib/secrets/profiles.ts b/apps/cli/src/lib/secrets/profiles.ts similarity index 100% rename from src/lib/secrets/profiles.ts rename to apps/cli/src/lib/secrets/profiles.ts diff --git a/src/lib/secrets/remote.test.ts b/apps/cli/src/lib/secrets/remote.test.ts similarity index 100% rename from src/lib/secrets/remote.test.ts rename to apps/cli/src/lib/secrets/remote.test.ts diff --git a/src/lib/secrets/remote.ts b/apps/cli/src/lib/secrets/remote.ts similarity index 100% rename from src/lib/secrets/remote.ts rename to apps/cli/src/lib/secrets/remote.ts diff --git a/src/lib/secrets/sync-backend.ts b/apps/cli/src/lib/secrets/sync-backend.ts similarity index 100% rename from src/lib/secrets/sync-backend.ts rename to apps/cli/src/lib/secrets/sync-backend.ts diff --git a/src/lib/secrets/sync.test.ts b/apps/cli/src/lib/secrets/sync.test.ts similarity index 100% rename from src/lib/secrets/sync.test.ts rename to apps/cli/src/lib/secrets/sync.test.ts diff --git a/src/lib/secrets/sync.ts b/apps/cli/src/lib/secrets/sync.ts similarity index 100% rename from src/lib/secrets/sync.ts rename to apps/cli/src/lib/secrets/sync.ts diff --git a/src/lib/secrets/windows.test.ts b/apps/cli/src/lib/secrets/windows.test.ts similarity index 100% rename from src/lib/secrets/windows.test.ts rename to apps/cli/src/lib/secrets/windows.test.ts diff --git a/src/lib/secrets/windows.ts b/apps/cli/src/lib/secrets/windows.ts similarity index 100% rename from src/lib/secrets/windows.ts rename to apps/cli/src/lib/secrets/windows.ts diff --git a/src/lib/self-update.test.ts b/apps/cli/src/lib/self-update.test.ts similarity index 100% rename from src/lib/self-update.test.ts rename to apps/cli/src/lib/self-update.test.ts diff --git a/src/lib/self-update.ts b/apps/cli/src/lib/self-update.ts similarity index 100% rename from src/lib/self-update.ts rename to apps/cli/src/lib/self-update.ts diff --git a/src/lib/serve/data.test.ts b/apps/cli/src/lib/serve/data.test.ts similarity index 100% rename from src/lib/serve/data.test.ts rename to apps/cli/src/lib/serve/data.test.ts diff --git a/src/lib/serve/data.ts b/apps/cli/src/lib/serve/data.ts similarity index 100% rename from src/lib/serve/data.ts rename to apps/cli/src/lib/serve/data.ts diff --git a/src/lib/serve/page.ts b/apps/cli/src/lib/serve/page.ts similarity index 100% rename from src/lib/serve/page.ts rename to apps/cli/src/lib/serve/page.ts diff --git a/src/lib/serve/server.test.ts b/apps/cli/src/lib/serve/server.test.ts similarity index 100% rename from src/lib/serve/server.test.ts rename to apps/cli/src/lib/serve/server.test.ts diff --git a/src/lib/serve/server.ts b/apps/cli/src/lib/serve/server.ts similarity index 100% rename from src/lib/serve/server.ts rename to apps/cli/src/lib/serve/server.ts diff --git a/src/lib/session/__tests__/active.test.ts b/apps/cli/src/lib/session/__tests__/active.test.ts similarity index 100% rename from src/lib/session/__tests__/active.test.ts rename to apps/cli/src/lib/session/__tests__/active.test.ts diff --git a/src/lib/session/__tests__/db.test.ts b/apps/cli/src/lib/session/__tests__/db.test.ts similarity index 100% rename from src/lib/session/__tests__/db.test.ts rename to apps/cli/src/lib/session/__tests__/db.test.ts diff --git a/src/lib/session/__tests__/discover.test.ts b/apps/cli/src/lib/session/__tests__/discover.test.ts similarity index 100% rename from src/lib/session/__tests__/discover.test.ts rename to apps/cli/src/lib/session/__tests__/discover.test.ts diff --git a/src/lib/session/__tests__/parse-antigravity.test.ts b/apps/cli/src/lib/session/__tests__/parse-antigravity.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-antigravity.test.ts rename to apps/cli/src/lib/session/__tests__/parse-antigravity.test.ts diff --git a/src/lib/session/__tests__/parse-codex.test.ts b/apps/cli/src/lib/session/__tests__/parse-codex.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-codex.test.ts rename to apps/cli/src/lib/session/__tests__/parse-codex.test.ts diff --git a/src/lib/session/__tests__/parse-droid.test.ts b/apps/cli/src/lib/session/__tests__/parse-droid.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-droid.test.ts rename to apps/cli/src/lib/session/__tests__/parse-droid.test.ts diff --git a/src/lib/session/__tests__/parse-kimi.test.ts b/apps/cli/src/lib/session/__tests__/parse-kimi.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-kimi.test.ts rename to apps/cli/src/lib/session/__tests__/parse-kimi.test.ts diff --git a/src/lib/session/__tests__/parse-opencode-subprocess.test.ts b/apps/cli/src/lib/session/__tests__/parse-opencode-subprocess.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-opencode-subprocess.test.ts rename to apps/cli/src/lib/session/__tests__/parse-opencode-subprocess.test.ts diff --git a/src/lib/session/__tests__/parse-rush.test.ts b/apps/cli/src/lib/session/__tests__/parse-rush.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-rush.test.ts rename to apps/cli/src/lib/session/__tests__/parse-rush.test.ts diff --git a/src/lib/session/__tests__/parse-security.test.ts b/apps/cli/src/lib/session/__tests__/parse-security.test.ts similarity index 100% rename from src/lib/session/__tests__/parse-security.test.ts rename to apps/cli/src/lib/session/__tests__/parse-security.test.ts diff --git a/src/lib/session/__tests__/prompt.test.ts b/apps/cli/src/lib/session/__tests__/prompt.test.ts similarity index 100% rename from src/lib/session/__tests__/prompt.test.ts rename to apps/cli/src/lib/session/__tests__/prompt.test.ts diff --git a/src/lib/session/__tests__/remote-active.test.ts b/apps/cli/src/lib/session/__tests__/remote-active.test.ts similarity index 100% rename from src/lib/session/__tests__/remote-active.test.ts rename to apps/cli/src/lib/session/__tests__/remote-active.test.ts diff --git a/src/lib/session/__tests__/remote-list.test.ts b/apps/cli/src/lib/session/__tests__/remote-list.test.ts similarity index 100% rename from src/lib/session/__tests__/remote-list.test.ts rename to apps/cli/src/lib/session/__tests__/remote-list.test.ts diff --git a/src/lib/session/__tests__/render.test.ts b/apps/cli/src/lib/session/__tests__/render.test.ts similarity index 100% rename from src/lib/session/__tests__/render.test.ts rename to apps/cli/src/lib/session/__tests__/render.test.ts diff --git a/src/lib/session/__tests__/testdata/session-screenshots.jsonl b/apps/cli/src/lib/session/__tests__/testdata/session-screenshots.jsonl similarity index 100% rename from src/lib/session/__tests__/testdata/session-screenshots.jsonl rename to apps/cli/src/lib/session/__tests__/testdata/session-screenshots.jsonl diff --git a/src/lib/session/__tests__/testdata/session-ssh-heavy.jsonl b/apps/cli/src/lib/session/__tests__/testdata/session-ssh-heavy.jsonl similarity index 100% rename from src/lib/session/__tests__/testdata/session-ssh-heavy.jsonl rename to apps/cli/src/lib/session/__tests__/testdata/session-ssh-heavy.jsonl diff --git a/src/lib/session/__tests__/testdata/session-subagents-todos.jsonl b/apps/cli/src/lib/session/__tests__/testdata/session-subagents-todos.jsonl similarity index 100% rename from src/lib/session/__tests__/testdata/session-subagents-todos.jsonl rename to apps/cli/src/lib/session/__tests__/testdata/session-subagents-todos.jsonl diff --git a/src/lib/session/active.test.ts b/apps/cli/src/lib/session/active.test.ts similarity index 100% rename from src/lib/session/active.test.ts rename to apps/cli/src/lib/session/active.test.ts diff --git a/src/lib/session/active.ts b/apps/cli/src/lib/session/active.ts similarity index 100% rename from src/lib/session/active.ts rename to apps/cli/src/lib/session/active.ts diff --git a/src/lib/session/artifacts.ts b/apps/cli/src/lib/session/artifacts.ts similarity index 100% rename from src/lib/session/artifacts.ts rename to apps/cli/src/lib/session/artifacts.ts diff --git a/src/lib/session/cloud.test.ts b/apps/cli/src/lib/session/cloud.test.ts similarity index 100% rename from src/lib/session/cloud.test.ts rename to apps/cli/src/lib/session/cloud.test.ts diff --git a/src/lib/session/cloud.ts b/apps/cli/src/lib/session/cloud.ts similarity index 100% rename from src/lib/session/cloud.ts rename to apps/cli/src/lib/session/cloud.ts diff --git a/src/lib/session/db.ts b/apps/cli/src/lib/session/db.ts similarity index 100% rename from src/lib/session/db.ts rename to apps/cli/src/lib/session/db.ts diff --git a/src/lib/session/digest.test.ts b/apps/cli/src/lib/session/digest.test.ts similarity index 100% rename from src/lib/session/digest.test.ts rename to apps/cli/src/lib/session/digest.test.ts diff --git a/src/lib/session/digest.ts b/apps/cli/src/lib/session/digest.ts similarity index 100% rename from src/lib/session/digest.ts rename to apps/cli/src/lib/session/digest.ts diff --git a/src/lib/session/discover.test.ts b/apps/cli/src/lib/session/discover.test.ts similarity index 100% rename from src/lib/session/discover.test.ts rename to apps/cli/src/lib/session/discover.test.ts diff --git a/src/lib/session/discover.ts b/apps/cli/src/lib/session/discover.ts similarity index 100% rename from src/lib/session/discover.ts rename to apps/cli/src/lib/session/discover.ts diff --git a/src/lib/session/ghostty-tabs.test.ts b/apps/cli/src/lib/session/ghostty-tabs.test.ts similarity index 100% rename from src/lib/session/ghostty-tabs.test.ts rename to apps/cli/src/lib/session/ghostty-tabs.test.ts diff --git a/src/lib/session/ghostty-tabs.ts b/apps/cli/src/lib/session/ghostty-tabs.ts similarity index 100% rename from src/lib/session/ghostty-tabs.ts rename to apps/cli/src/lib/session/ghostty-tabs.ts diff --git a/src/lib/session/inject.test.ts b/apps/cli/src/lib/session/inject.test.ts similarity index 100% rename from src/lib/session/inject.test.ts rename to apps/cli/src/lib/session/inject.test.ts diff --git a/src/lib/session/inject.ts b/apps/cli/src/lib/session/inject.ts similarity index 100% rename from src/lib/session/inject.ts rename to apps/cli/src/lib/session/inject.ts diff --git a/src/lib/session/parse.ts b/apps/cli/src/lib/session/parse.ts similarity index 100% rename from src/lib/session/parse.ts rename to apps/cli/src/lib/session/parse.ts diff --git a/src/lib/session/pid-registry.test.ts b/apps/cli/src/lib/session/pid-registry.test.ts similarity index 100% rename from src/lib/session/pid-registry.test.ts rename to apps/cli/src/lib/session/pid-registry.test.ts diff --git a/src/lib/session/pid-registry.ts b/apps/cli/src/lib/session/pid-registry.ts similarity index 100% rename from src/lib/session/pid-registry.ts rename to apps/cli/src/lib/session/pid-registry.ts diff --git a/src/lib/session/prompt.test.ts b/apps/cli/src/lib/session/prompt.test.ts similarity index 100% rename from src/lib/session/prompt.test.ts rename to apps/cli/src/lib/session/prompt.test.ts diff --git a/src/lib/session/prompt.ts b/apps/cli/src/lib/session/prompt.ts similarity index 100% rename from src/lib/session/prompt.ts rename to apps/cli/src/lib/session/prompt.ts diff --git a/src/lib/session/provenance.test.ts b/apps/cli/src/lib/session/provenance.test.ts similarity index 100% rename from src/lib/session/provenance.test.ts rename to apps/cli/src/lib/session/provenance.test.ts diff --git a/src/lib/session/provenance.ts b/apps/cli/src/lib/session/provenance.ts similarity index 100% rename from src/lib/session/provenance.ts rename to apps/cli/src/lib/session/provenance.ts diff --git a/src/lib/session/relative-time.test.ts b/apps/cli/src/lib/session/relative-time.test.ts similarity index 100% rename from src/lib/session/relative-time.test.ts rename to apps/cli/src/lib/session/relative-time.test.ts diff --git a/src/lib/session/relative-time.ts b/apps/cli/src/lib/session/relative-time.ts similarity index 100% rename from src/lib/session/relative-time.ts rename to apps/cli/src/lib/session/relative-time.ts diff --git a/src/lib/session/remote-active.ts b/apps/cli/src/lib/session/remote-active.ts similarity index 100% rename from src/lib/session/remote-active.ts rename to apps/cli/src/lib/session/remote-active.ts diff --git a/src/lib/session/remote-list.ts b/apps/cli/src/lib/session/remote-list.ts similarity index 100% rename from src/lib/session/remote-list.ts rename to apps/cli/src/lib/session/remote-list.ts diff --git a/src/lib/session/remote.test.ts b/apps/cli/src/lib/session/remote.test.ts similarity index 100% rename from src/lib/session/remote.test.ts rename to apps/cli/src/lib/session/remote.test.ts diff --git a/src/lib/session/remote.ts b/apps/cli/src/lib/session/remote.ts similarity index 100% rename from src/lib/session/remote.ts rename to apps/cli/src/lib/session/remote.ts diff --git a/src/lib/session/render.ts b/apps/cli/src/lib/session/render.ts similarity index 100% rename from src/lib/session/render.ts rename to apps/cli/src/lib/session/render.ts diff --git a/src/lib/session/state.test.ts b/apps/cli/src/lib/session/state.test.ts similarity index 100% rename from src/lib/session/state.test.ts rename to apps/cli/src/lib/session/state.test.ts diff --git a/src/lib/session/state.ts b/apps/cli/src/lib/session/state.ts similarity index 100% rename from src/lib/session/state.ts rename to apps/cli/src/lib/session/state.ts diff --git a/src/lib/session/sync/agents.ts b/apps/cli/src/lib/session/sync/agents.ts similarity index 100% rename from src/lib/session/sync/agents.ts rename to apps/cli/src/lib/session/sync/agents.ts diff --git a/src/lib/session/sync/config.test.ts b/apps/cli/src/lib/session/sync/config.test.ts similarity index 100% rename from src/lib/session/sync/config.test.ts rename to apps/cli/src/lib/session/sync/config.test.ts diff --git a/src/lib/session/sync/config.ts b/apps/cli/src/lib/session/sync/config.ts similarity index 100% rename from src/lib/session/sync/config.ts rename to apps/cli/src/lib/session/sync/config.ts diff --git a/src/lib/session/sync/crdt.test.ts b/apps/cli/src/lib/session/sync/crdt.test.ts similarity index 100% rename from src/lib/session/sync/crdt.test.ts rename to apps/cli/src/lib/session/sync/crdt.test.ts diff --git a/src/lib/session/sync/crdt.ts b/apps/cli/src/lib/session/sync/crdt.ts similarity index 100% rename from src/lib/session/sync/crdt.ts rename to apps/cli/src/lib/session/sync/crdt.ts diff --git a/src/lib/session/sync/manifest.ts b/apps/cli/src/lib/session/sync/manifest.ts similarity index 100% rename from src/lib/session/sync/manifest.ts rename to apps/cli/src/lib/session/sync/manifest.ts diff --git a/src/lib/session/sync/r2.ts b/apps/cli/src/lib/session/sync/r2.ts similarity index 100% rename from src/lib/session/sync/r2.ts rename to apps/cli/src/lib/session/sync/r2.ts diff --git a/src/lib/session/sync/sync.test.ts b/apps/cli/src/lib/session/sync/sync.test.ts similarity index 100% rename from src/lib/session/sync/sync.test.ts rename to apps/cli/src/lib/session/sync/sync.test.ts diff --git a/src/lib/session/sync/sync.ts b/apps/cli/src/lib/session/sync/sync.ts similarity index 100% rename from src/lib/session/sync/sync.ts rename to apps/cli/src/lib/session/sync/sync.ts diff --git a/src/lib/session/tail.test.ts b/apps/cli/src/lib/session/tail.test.ts similarity index 100% rename from src/lib/session/tail.test.ts rename to apps/cli/src/lib/session/tail.test.ts diff --git a/src/lib/session/tail.ts b/apps/cli/src/lib/session/tail.ts similarity index 100% rename from src/lib/session/tail.ts rename to apps/cli/src/lib/session/tail.ts diff --git a/src/lib/session/team-filter.test.ts b/apps/cli/src/lib/session/team-filter.test.ts similarity index 100% rename from src/lib/session/team-filter.test.ts rename to apps/cli/src/lib/session/team-filter.test.ts diff --git a/src/lib/session/team-filter.ts b/apps/cli/src/lib/session/team-filter.ts similarity index 100% rename from src/lib/session/team-filter.ts rename to apps/cli/src/lib/session/team-filter.ts diff --git a/src/lib/session/testdata/codex-custom-tools.jsonl b/apps/cli/src/lib/session/testdata/codex-custom-tools.jsonl similarity index 100% rename from src/lib/session/testdata/codex-custom-tools.jsonl rename to apps/cli/src/lib/session/testdata/codex-custom-tools.jsonl diff --git a/src/lib/session/testdata/codex-fixture.jsonl b/apps/cli/src/lib/session/testdata/codex-fixture.jsonl similarity index 100% rename from src/lib/session/testdata/codex-fixture.jsonl rename to apps/cli/src/lib/session/testdata/codex-fixture.jsonl diff --git a/src/lib/session/testdata/droid-execute-create.jsonl b/apps/cli/src/lib/session/testdata/droid-execute-create.jsonl similarity index 100% rename from src/lib/session/testdata/droid-execute-create.jsonl rename to apps/cli/src/lib/session/testdata/droid-execute-create.jsonl diff --git a/src/lib/session/testdata/kimi-tool-args.jsonl b/apps/cli/src/lib/session/testdata/kimi-tool-args.jsonl similarity index 100% rename from src/lib/session/testdata/kimi-tool-args.jsonl rename to apps/cli/src/lib/session/testdata/kimi-tool-args.jsonl diff --git a/src/lib/session/testdata/tail-sample-claude.jsonl b/apps/cli/src/lib/session/testdata/tail-sample-claude.jsonl similarity index 100% rename from src/lib/session/testdata/tail-sample-claude.jsonl rename to apps/cli/src/lib/session/testdata/tail-sample-claude.jsonl diff --git a/src/lib/session/types.ts b/apps/cli/src/lib/session/types.ts similarity index 100% rename from src/lib/session/types.ts rename to apps/cli/src/lib/session/types.ts diff --git a/src/lib/session/width.test.ts b/apps/cli/src/lib/session/width.test.ts similarity index 100% rename from src/lib/session/width.test.ts rename to apps/cli/src/lib/session/width.test.ts diff --git a/src/lib/session/width.ts b/apps/cli/src/lib/session/width.ts similarity index 100% rename from src/lib/session/width.ts rename to apps/cli/src/lib/session/width.ts diff --git a/src/lib/settings-manifest.ts b/apps/cli/src/lib/settings-manifest.ts similarity index 100% rename from src/lib/settings-manifest.ts rename to apps/cli/src/lib/settings-manifest.ts diff --git a/src/lib/shims.adoption.test.ts b/apps/cli/src/lib/shims.adoption.test.ts similarity index 100% rename from src/lib/shims.adoption.test.ts rename to apps/cli/src/lib/shims.adoption.test.ts diff --git a/src/lib/shims.auth-carry.test.ts b/apps/cli/src/lib/shims.auth-carry.test.ts similarity index 100% rename from src/lib/shims.auth-carry.test.ts rename to apps/cli/src/lib/shims.auth-carry.test.ts diff --git a/src/lib/shims.device-pins.test.ts b/apps/cli/src/lib/shims.device-pins.test.ts similarity index 100% rename from src/lib/shims.device-pins.test.ts rename to apps/cli/src/lib/shims.device-pins.test.ts diff --git a/src/lib/shims.openclaw-migration.test.ts b/apps/cli/src/lib/shims.openclaw-migration.test.ts similarity index 100% rename from src/lib/shims.openclaw-migration.test.ts rename to apps/cli/src/lib/shims.openclaw-migration.test.ts diff --git a/src/lib/shims.session-rewrite.test.ts b/apps/cli/src/lib/shims.session-rewrite.test.ts similarity index 100% rename from src/lib/shims.session-rewrite.test.ts rename to apps/cli/src/lib/shims.session-rewrite.test.ts diff --git a/src/lib/shims.test.ts b/apps/cli/src/lib/shims.test.ts similarity index 100% rename from src/lib/shims.test.ts rename to apps/cli/src/lib/shims.test.ts diff --git a/src/lib/shims.ts b/apps/cli/src/lib/shims.ts similarity index 100% rename from src/lib/shims.ts rename to apps/cli/src/lib/shims.ts diff --git a/src/lib/skills.test.ts b/apps/cli/src/lib/skills.test.ts similarity index 100% rename from src/lib/skills.test.ts rename to apps/cli/src/lib/skills.test.ts diff --git a/src/lib/skills.ts b/apps/cli/src/lib/skills.ts similarity index 100% rename from src/lib/skills.ts rename to apps/cli/src/lib/skills.ts diff --git a/src/lib/sqlite.ts b/apps/cli/src/lib/sqlite.ts similarity index 100% rename from src/lib/sqlite.ts rename to apps/cli/src/lib/sqlite.ts diff --git a/src/lib/ssh-exec.test.ts b/apps/cli/src/lib/ssh-exec.test.ts similarity index 100% rename from src/lib/ssh-exec.test.ts rename to apps/cli/src/lib/ssh-exec.test.ts diff --git a/src/lib/ssh-exec.ts b/apps/cli/src/lib/ssh-exec.ts similarity index 100% rename from src/lib/ssh-exec.ts rename to apps/cli/src/lib/ssh-exec.ts diff --git a/src/lib/ssh-tunnel.test.ts b/apps/cli/src/lib/ssh-tunnel.test.ts similarity index 100% rename from src/lib/ssh-tunnel.test.ts rename to apps/cli/src/lib/ssh-tunnel.test.ts diff --git a/src/lib/ssh-tunnel.ts b/apps/cli/src/lib/ssh-tunnel.ts similarity index 98% rename from src/lib/ssh-tunnel.ts rename to apps/cli/src/lib/ssh-tunnel.ts index 09c16965f..d808a05de 100644 --- a/src/lib/ssh-tunnel.ts +++ b/apps/cli/src/lib/ssh-tunnel.ts @@ -121,7 +121,7 @@ export const REMOTE_HELPER_PORT = 8765; /** Task Scheduler task name for the daemon. Stable so setup/stop pair up. */ export const REMOTE_TASK_NAME = 'AgentsComputerHelper'; -/** Basename of the cross-published exe under packages/computer-helper-win/dist. */ +/** Basename of the cross-published exe under native/computer-win/dist. */ export const WIN_HELPER_EXE = 'computer-helper-win.exe'; /** @@ -131,8 +131,8 @@ export const WIN_HELPER_EXE = 'computer-helper-win.exe'; export function resolveWinHelperExe(): string | null { const here = path.dirname(fileURLToPath(import.meta.url)); const candidates = [ - // Running from the agents-cli checkout (src/lib -> repo root). - path.resolve(here, '..', '..', 'packages', 'computer-helper-win', 'dist', WIN_HELPER_EXE), + // Running from the agents-cli checkout. apps/cli/dist/lib -> repo root (4 up) -> native/computer-win. + path.resolve(here, '..', '..', '..', '..', 'native', 'computer-win', 'dist', WIN_HELPER_EXE), // Bundled with the npm package (dist/lib -> package root). path.resolve(here, '..', 'computer-helper-win', WIN_HELPER_EXE), ]; diff --git a/src/lib/staleness/__tests__/_fixtures.ts b/apps/cli/src/lib/staleness/__tests__/_fixtures.ts similarity index 100% rename from src/lib/staleness/__tests__/_fixtures.ts rename to apps/cli/src/lib/staleness/__tests__/_fixtures.ts diff --git a/src/lib/staleness/__tests__/_harness.ts b/apps/cli/src/lib/staleness/__tests__/_harness.ts similarity index 100% rename from src/lib/staleness/__tests__/_harness.ts rename to apps/cli/src/lib/staleness/__tests__/_harness.ts diff --git a/src/lib/staleness/__tests__/commands.test.ts b/apps/cli/src/lib/staleness/__tests__/commands.test.ts similarity index 100% rename from src/lib/staleness/__tests__/commands.test.ts rename to apps/cli/src/lib/staleness/__tests__/commands.test.ts diff --git a/src/lib/staleness/__tests__/hooks.test.ts b/apps/cli/src/lib/staleness/__tests__/hooks.test.ts similarity index 100% rename from src/lib/staleness/__tests__/hooks.test.ts rename to apps/cli/src/lib/staleness/__tests__/hooks.test.ts diff --git a/src/lib/staleness/__tests__/integration.test.ts b/apps/cli/src/lib/staleness/__tests__/integration.test.ts similarity index 100% rename from src/lib/staleness/__tests__/integration.test.ts rename to apps/cli/src/lib/staleness/__tests__/integration.test.ts diff --git a/src/lib/staleness/__tests__/mcp.test.ts b/apps/cli/src/lib/staleness/__tests__/mcp.test.ts similarity index 100% rename from src/lib/staleness/__tests__/mcp.test.ts rename to apps/cli/src/lib/staleness/__tests__/mcp.test.ts diff --git a/src/lib/staleness/__tests__/permissions.test.ts b/apps/cli/src/lib/staleness/__tests__/permissions.test.ts similarity index 100% rename from src/lib/staleness/__tests__/permissions.test.ts rename to apps/cli/src/lib/staleness/__tests__/permissions.test.ts diff --git a/src/lib/staleness/__tests__/plugins.test.ts b/apps/cli/src/lib/staleness/__tests__/plugins.test.ts similarity index 100% rename from src/lib/staleness/__tests__/plugins.test.ts rename to apps/cli/src/lib/staleness/__tests__/plugins.test.ts diff --git a/src/lib/staleness/__tests__/rules.test.ts b/apps/cli/src/lib/staleness/__tests__/rules.test.ts similarity index 100% rename from src/lib/staleness/__tests__/rules.test.ts rename to apps/cli/src/lib/staleness/__tests__/rules.test.ts diff --git a/src/lib/staleness/__tests__/skills.test.ts b/apps/cli/src/lib/staleness/__tests__/skills.test.ts similarity index 100% rename from src/lib/staleness/__tests__/skills.test.ts rename to apps/cli/src/lib/staleness/__tests__/skills.test.ts diff --git a/src/lib/staleness/__tests__/subagents.test.ts b/apps/cli/src/lib/staleness/__tests__/subagents.test.ts similarity index 100% rename from src/lib/staleness/__tests__/subagents.test.ts rename to apps/cli/src/lib/staleness/__tests__/subagents.test.ts diff --git a/src/lib/staleness/__tests__/workflows.test.ts b/apps/cli/src/lib/staleness/__tests__/workflows.test.ts similarity index 100% rename from src/lib/staleness/__tests__/workflows.test.ts rename to apps/cli/src/lib/staleness/__tests__/workflows.test.ts diff --git a/src/lib/staleness/checkers/commands.ts b/apps/cli/src/lib/staleness/checkers/commands.ts similarity index 100% rename from src/lib/staleness/checkers/commands.ts rename to apps/cli/src/lib/staleness/checkers/commands.ts diff --git a/src/lib/staleness/checkers/hooks.ts b/apps/cli/src/lib/staleness/checkers/hooks.ts similarity index 100% rename from src/lib/staleness/checkers/hooks.ts rename to apps/cli/src/lib/staleness/checkers/hooks.ts diff --git a/src/lib/staleness/checkers/mcp.ts b/apps/cli/src/lib/staleness/checkers/mcp.ts similarity index 100% rename from src/lib/staleness/checkers/mcp.ts rename to apps/cli/src/lib/staleness/checkers/mcp.ts diff --git a/src/lib/staleness/checkers/permissions.ts b/apps/cli/src/lib/staleness/checkers/permissions.ts similarity index 100% rename from src/lib/staleness/checkers/permissions.ts rename to apps/cli/src/lib/staleness/checkers/permissions.ts diff --git a/src/lib/staleness/checkers/plugins.ts b/apps/cli/src/lib/staleness/checkers/plugins.ts similarity index 100% rename from src/lib/staleness/checkers/plugins.ts rename to apps/cli/src/lib/staleness/checkers/plugins.ts diff --git a/src/lib/staleness/checkers/rules.ts b/apps/cli/src/lib/staleness/checkers/rules.ts similarity index 100% rename from src/lib/staleness/checkers/rules.ts rename to apps/cli/src/lib/staleness/checkers/rules.ts diff --git a/src/lib/staleness/checkers/skills.ts b/apps/cli/src/lib/staleness/checkers/skills.ts similarity index 100% rename from src/lib/staleness/checkers/skills.ts rename to apps/cli/src/lib/staleness/checkers/skills.ts diff --git a/src/lib/staleness/checkers/subagents.ts b/apps/cli/src/lib/staleness/checkers/subagents.ts similarity index 100% rename from src/lib/staleness/checkers/subagents.ts rename to apps/cli/src/lib/staleness/checkers/subagents.ts diff --git a/src/lib/staleness/checkers/types.ts b/apps/cli/src/lib/staleness/checkers/types.ts similarity index 100% rename from src/lib/staleness/checkers/types.ts rename to apps/cli/src/lib/staleness/checkers/types.ts diff --git a/src/lib/staleness/checkers/workflows.ts b/apps/cli/src/lib/staleness/checkers/workflows.ts similarity index 100% rename from src/lib/staleness/checkers/workflows.ts rename to apps/cli/src/lib/staleness/checkers/workflows.ts diff --git a/src/lib/staleness/detectors/commands.ts b/apps/cli/src/lib/staleness/detectors/commands.ts similarity index 100% rename from src/lib/staleness/detectors/commands.ts rename to apps/cli/src/lib/staleness/detectors/commands.ts diff --git a/src/lib/staleness/detectors/hooks.ts b/apps/cli/src/lib/staleness/detectors/hooks.ts similarity index 100% rename from src/lib/staleness/detectors/hooks.ts rename to apps/cli/src/lib/staleness/detectors/hooks.ts diff --git a/src/lib/staleness/detectors/mcp.ts b/apps/cli/src/lib/staleness/detectors/mcp.ts similarity index 100% rename from src/lib/staleness/detectors/mcp.ts rename to apps/cli/src/lib/staleness/detectors/mcp.ts diff --git a/src/lib/staleness/detectors/permissions.ts b/apps/cli/src/lib/staleness/detectors/permissions.ts similarity index 100% rename from src/lib/staleness/detectors/permissions.ts rename to apps/cli/src/lib/staleness/detectors/permissions.ts diff --git a/src/lib/staleness/detectors/plugins.ts b/apps/cli/src/lib/staleness/detectors/plugins.ts similarity index 100% rename from src/lib/staleness/detectors/plugins.ts rename to apps/cli/src/lib/staleness/detectors/plugins.ts diff --git a/src/lib/staleness/detectors/rules.ts b/apps/cli/src/lib/staleness/detectors/rules.ts similarity index 100% rename from src/lib/staleness/detectors/rules.ts rename to apps/cli/src/lib/staleness/detectors/rules.ts diff --git a/src/lib/staleness/detectors/skills.ts b/apps/cli/src/lib/staleness/detectors/skills.ts similarity index 100% rename from src/lib/staleness/detectors/skills.ts rename to apps/cli/src/lib/staleness/detectors/skills.ts diff --git a/src/lib/staleness/detectors/subagents.ts b/apps/cli/src/lib/staleness/detectors/subagents.ts similarity index 100% rename from src/lib/staleness/detectors/subagents.ts rename to apps/cli/src/lib/staleness/detectors/subagents.ts diff --git a/src/lib/staleness/detectors/types.ts b/apps/cli/src/lib/staleness/detectors/types.ts similarity index 100% rename from src/lib/staleness/detectors/types.ts rename to apps/cli/src/lib/staleness/detectors/types.ts diff --git a/src/lib/staleness/detectors/workflows.ts b/apps/cli/src/lib/staleness/detectors/workflows.ts similarity index 100% rename from src/lib/staleness/detectors/workflows.ts rename to apps/cli/src/lib/staleness/detectors/workflows.ts diff --git a/src/lib/staleness/fingerprint.ts b/apps/cli/src/lib/staleness/fingerprint.ts similarity index 100% rename from src/lib/staleness/fingerprint.ts rename to apps/cli/src/lib/staleness/fingerprint.ts diff --git a/src/lib/staleness/index.ts b/apps/cli/src/lib/staleness/index.ts similarity index 100% rename from src/lib/staleness/index.ts rename to apps/cli/src/lib/staleness/index.ts diff --git a/src/lib/staleness/layers.ts b/apps/cli/src/lib/staleness/layers.ts similarity index 100% rename from src/lib/staleness/layers.ts rename to apps/cli/src/lib/staleness/layers.ts diff --git a/src/lib/staleness/registry.test.ts b/apps/cli/src/lib/staleness/registry.test.ts similarity index 100% rename from src/lib/staleness/registry.test.ts rename to apps/cli/src/lib/staleness/registry.test.ts diff --git a/src/lib/staleness/registry.ts b/apps/cli/src/lib/staleness/registry.ts similarity index 100% rename from src/lib/staleness/registry.ts rename to apps/cli/src/lib/staleness/registry.ts diff --git a/src/lib/staleness/types.ts b/apps/cli/src/lib/staleness/types.ts similarity index 100% rename from src/lib/staleness/types.ts rename to apps/cli/src/lib/staleness/types.ts diff --git a/src/lib/staleness/writers/commands.test.ts b/apps/cli/src/lib/staleness/writers/commands.test.ts similarity index 100% rename from src/lib/staleness/writers/commands.test.ts rename to apps/cli/src/lib/staleness/writers/commands.test.ts diff --git a/src/lib/staleness/writers/commands.ts b/apps/cli/src/lib/staleness/writers/commands.ts similarity index 100% rename from src/lib/staleness/writers/commands.ts rename to apps/cli/src/lib/staleness/writers/commands.ts diff --git a/src/lib/staleness/writers/hooks.ts b/apps/cli/src/lib/staleness/writers/hooks.ts similarity index 100% rename from src/lib/staleness/writers/hooks.ts rename to apps/cli/src/lib/staleness/writers/hooks.ts diff --git a/src/lib/staleness/writers/kinds.ts b/apps/cli/src/lib/staleness/writers/kinds.ts similarity index 100% rename from src/lib/staleness/writers/kinds.ts rename to apps/cli/src/lib/staleness/writers/kinds.ts diff --git a/src/lib/staleness/writers/lazy-map.ts b/apps/cli/src/lib/staleness/writers/lazy-map.ts similarity index 100% rename from src/lib/staleness/writers/lazy-map.ts rename to apps/cli/src/lib/staleness/writers/lazy-map.ts diff --git a/src/lib/staleness/writers/mcp.ts b/apps/cli/src/lib/staleness/writers/mcp.ts similarity index 100% rename from src/lib/staleness/writers/mcp.ts rename to apps/cli/src/lib/staleness/writers/mcp.ts diff --git a/src/lib/staleness/writers/permissions.ts b/apps/cli/src/lib/staleness/writers/permissions.ts similarity index 100% rename from src/lib/staleness/writers/permissions.ts rename to apps/cli/src/lib/staleness/writers/permissions.ts diff --git a/src/lib/staleness/writers/plugins.ts b/apps/cli/src/lib/staleness/writers/plugins.ts similarity index 100% rename from src/lib/staleness/writers/plugins.ts rename to apps/cli/src/lib/staleness/writers/plugins.ts diff --git a/src/lib/staleness/writers/rules.ts b/apps/cli/src/lib/staleness/writers/rules.ts similarity index 100% rename from src/lib/staleness/writers/rules.ts rename to apps/cli/src/lib/staleness/writers/rules.ts diff --git a/src/lib/staleness/writers/skills.ts b/apps/cli/src/lib/staleness/writers/skills.ts similarity index 100% rename from src/lib/staleness/writers/skills.ts rename to apps/cli/src/lib/staleness/writers/skills.ts diff --git a/src/lib/staleness/writers/sources.ts b/apps/cli/src/lib/staleness/writers/sources.ts similarity index 100% rename from src/lib/staleness/writers/sources.ts rename to apps/cli/src/lib/staleness/writers/sources.ts diff --git a/src/lib/staleness/writers/subagents.ts b/apps/cli/src/lib/staleness/writers/subagents.ts similarity index 100% rename from src/lib/staleness/writers/subagents.ts rename to apps/cli/src/lib/staleness/writers/subagents.ts diff --git a/src/lib/staleness/writers/types.ts b/apps/cli/src/lib/staleness/writers/types.ts similarity index 100% rename from src/lib/staleness/writers/types.ts rename to apps/cli/src/lib/staleness/writers/types.ts diff --git a/src/lib/staleness/writers/workflows.ts b/apps/cli/src/lib/staleness/writers/workflows.ts similarity index 100% rename from src/lib/staleness/writers/workflows.ts rename to apps/cli/src/lib/staleness/writers/workflows.ts diff --git a/src/lib/startup/command-registry.ts b/apps/cli/src/lib/startup/command-registry.ts similarity index 100% rename from src/lib/startup/command-registry.ts rename to apps/cli/src/lib/startup/command-registry.ts diff --git a/src/lib/startup/dev-build.test.ts b/apps/cli/src/lib/startup/dev-build.test.ts similarity index 100% rename from src/lib/startup/dev-build.test.ts rename to apps/cli/src/lib/startup/dev-build.test.ts diff --git a/src/lib/startup/dev-build.ts b/apps/cli/src/lib/startup/dev-build.ts similarity index 100% rename from src/lib/startup/dev-build.ts rename to apps/cli/src/lib/startup/dev-build.ts diff --git a/src/lib/state.ts b/apps/cli/src/lib/state.ts similarity index 100% rename from src/lib/state.ts rename to apps/cli/src/lib/state.ts diff --git a/src/lib/subagents.ts b/apps/cli/src/lib/subagents.ts similarity index 100% rename from src/lib/subagents.ts rename to apps/cli/src/lib/subagents.ts diff --git a/src/lib/sync-status.test.ts b/apps/cli/src/lib/sync-status.test.ts similarity index 100% rename from src/lib/sync-status.test.ts rename to apps/cli/src/lib/sync-status.test.ts diff --git a/src/lib/sync-status.ts b/apps/cli/src/lib/sync-status.ts similarity index 100% rename from src/lib/sync-status.ts rename to apps/cli/src/lib/sync-status.ts diff --git a/src/lib/sync-umbrella.test.ts b/apps/cli/src/lib/sync-umbrella.test.ts similarity index 100% rename from src/lib/sync-umbrella.test.ts rename to apps/cli/src/lib/sync-umbrella.test.ts diff --git a/src/lib/sync-umbrella.ts b/apps/cli/src/lib/sync-umbrella.ts similarity index 100% rename from src/lib/sync-umbrella.ts rename to apps/cli/src/lib/sync-umbrella.ts diff --git a/src/lib/teams/__tests__/agents.test.ts b/apps/cli/src/lib/teams/__tests__/agents.test.ts similarity index 100% rename from src/lib/teams/__tests__/agents.test.ts rename to apps/cli/src/lib/teams/__tests__/agents.test.ts diff --git a/src/lib/teams/__tests__/api-summary.test.ts b/apps/cli/src/lib/teams/__tests__/api-summary.test.ts similarity index 100% rename from src/lib/teams/__tests__/api-summary.test.ts rename to apps/cli/src/lib/teams/__tests__/api-summary.test.ts diff --git a/src/lib/teams/__tests__/forEach.test.ts b/apps/cli/src/lib/teams/__tests__/forEach.test.ts similarity index 100% rename from src/lib/teams/__tests__/forEach.test.ts rename to apps/cli/src/lib/teams/__tests__/forEach.test.ts diff --git a/src/lib/teams/__tests__/parsers-antigravity.test.ts b/apps/cli/src/lib/teams/__tests__/parsers-antigravity.test.ts similarity index 100% rename from src/lib/teams/__tests__/parsers-antigravity.test.ts rename to apps/cli/src/lib/teams/__tests__/parsers-antigravity.test.ts diff --git a/src/lib/teams/__tests__/parsers-grok.test.ts b/apps/cli/src/lib/teams/__tests__/parsers-grok.test.ts similarity index 100% rename from src/lib/teams/__tests__/parsers-grok.test.ts rename to apps/cli/src/lib/teams/__tests__/parsers-grok.test.ts diff --git a/src/lib/teams/__tests__/parsers-kimi.test.ts b/apps/cli/src/lib/teams/__tests__/parsers-kimi.test.ts similarity index 100% rename from src/lib/teams/__tests__/parsers-kimi.test.ts rename to apps/cli/src/lib/teams/__tests__/parsers-kimi.test.ts diff --git a/src/lib/teams/__tests__/persistence.test.ts b/apps/cli/src/lib/teams/__tests__/persistence.test.ts similarity index 100% rename from src/lib/teams/__tests__/persistence.test.ts rename to apps/cli/src/lib/teams/__tests__/persistence.test.ts diff --git a/src/lib/teams/__tests__/registry.test.ts b/apps/cli/src/lib/teams/__tests__/registry.test.ts similarity index 100% rename from src/lib/teams/__tests__/registry.test.ts rename to apps/cli/src/lib/teams/__tests__/registry.test.ts diff --git a/src/lib/teams/__tests__/stop-pid-reuse.test.ts b/apps/cli/src/lib/teams/__tests__/stop-pid-reuse.test.ts similarity index 100% rename from src/lib/teams/__tests__/stop-pid-reuse.test.ts rename to apps/cli/src/lib/teams/__tests__/stop-pid-reuse.test.ts diff --git a/src/lib/teams/__tests__/supervisor.test.ts b/apps/cli/src/lib/teams/__tests__/supervisor.test.ts similarity index 100% rename from src/lib/teams/__tests__/supervisor.test.ts rename to apps/cli/src/lib/teams/__tests__/supervisor.test.ts diff --git a/src/lib/teams/__tests__/testdata/kimi-stream-notool.jsonl b/apps/cli/src/lib/teams/__tests__/testdata/kimi-stream-notool.jsonl similarity index 100% rename from src/lib/teams/__tests__/testdata/kimi-stream-notool.jsonl rename to apps/cli/src/lib/teams/__tests__/testdata/kimi-stream-notool.jsonl diff --git a/src/lib/teams/__tests__/testdata/kimi-stream-tool.jsonl b/apps/cli/src/lib/teams/__tests__/testdata/kimi-stream-tool.jsonl similarity index 100% rename from src/lib/teams/__tests__/testdata/kimi-stream-tool.jsonl rename to apps/cli/src/lib/teams/__tests__/testdata/kimi-stream-tool.jsonl diff --git a/src/lib/teams/agents.cli-detection.test.ts b/apps/cli/src/lib/teams/agents.cli-detection.test.ts similarity index 100% rename from src/lib/teams/agents.cli-detection.test.ts rename to apps/cli/src/lib/teams/agents.cli-detection.test.ts diff --git a/src/lib/teams/agents.exit-code.test.ts b/apps/cli/src/lib/teams/agents.exit-code.test.ts similarity index 100% rename from src/lib/teams/agents.exit-code.test.ts rename to apps/cli/src/lib/teams/agents.exit-code.test.ts diff --git a/src/lib/teams/agents.kimi-status.test.ts b/apps/cli/src/lib/teams/agents.kimi-status.test.ts similarity index 100% rename from src/lib/teams/agents.kimi-status.test.ts rename to apps/cli/src/lib/teams/agents.kimi-status.test.ts diff --git a/src/lib/teams/agents.sign-in.test.ts b/apps/cli/src/lib/teams/agents.sign-in.test.ts similarity index 100% rename from src/lib/teams/agents.sign-in.test.ts rename to apps/cli/src/lib/teams/agents.sign-in.test.ts diff --git a/src/lib/teams/agents.ts b/apps/cli/src/lib/teams/agents.ts similarity index 100% rename from src/lib/teams/agents.ts rename to apps/cli/src/lib/teams/agents.ts diff --git a/src/lib/teams/api.ts b/apps/cli/src/lib/teams/api.ts similarity index 100% rename from src/lib/teams/api.ts rename to apps/cli/src/lib/teams/api.ts diff --git a/src/lib/teams/debug.ts b/apps/cli/src/lib/teams/debug.ts similarity index 100% rename from src/lib/teams/debug.ts rename to apps/cli/src/lib/teams/debug.ts diff --git a/src/lib/teams/file_ops.ts b/apps/cli/src/lib/teams/file_ops.ts similarity index 100% rename from src/lib/teams/file_ops.ts rename to apps/cli/src/lib/teams/file_ops.ts diff --git a/src/lib/teams/forEach.ts b/apps/cli/src/lib/teams/forEach.ts similarity index 100% rename from src/lib/teams/forEach.ts rename to apps/cli/src/lib/teams/forEach.ts diff --git a/src/lib/teams/index.ts b/apps/cli/src/lib/teams/index.ts similarity index 100% rename from src/lib/teams/index.ts rename to apps/cli/src/lib/teams/index.ts diff --git a/src/lib/teams/parsers.ts b/apps/cli/src/lib/teams/parsers.ts similarity index 100% rename from src/lib/teams/parsers.ts rename to apps/cli/src/lib/teams/parsers.ts diff --git a/src/lib/teams/persistence.ts b/apps/cli/src/lib/teams/persistence.ts similarity index 100% rename from src/lib/teams/persistence.ts rename to apps/cli/src/lib/teams/persistence.ts diff --git a/src/lib/teams/pr-watch.test.ts b/apps/cli/src/lib/teams/pr-watch.test.ts similarity index 100% rename from src/lib/teams/pr-watch.test.ts rename to apps/cli/src/lib/teams/pr-watch.test.ts diff --git a/src/lib/teams/pr-watch.ts b/apps/cli/src/lib/teams/pr-watch.ts similarity index 100% rename from src/lib/teams/pr-watch.ts rename to apps/cli/src/lib/teams/pr-watch.ts diff --git a/src/lib/teams/registry.ts b/apps/cli/src/lib/teams/registry.ts similarity index 100% rename from src/lib/teams/registry.ts rename to apps/cli/src/lib/teams/registry.ts diff --git a/src/lib/teams/summarizer.ts b/apps/cli/src/lib/teams/summarizer.ts similarity index 100% rename from src/lib/teams/summarizer.ts rename to apps/cli/src/lib/teams/summarizer.ts diff --git a/src/lib/teams/supervisor.ts b/apps/cli/src/lib/teams/supervisor.ts similarity index 100% rename from src/lib/teams/supervisor.ts rename to apps/cli/src/lib/teams/supervisor.ts diff --git a/src/lib/teams/worktree.ts b/apps/cli/src/lib/teams/worktree.ts similarity index 100% rename from src/lib/teams/worktree.ts rename to apps/cli/src/lib/teams/worktree.ts diff --git a/src/lib/template.ts b/apps/cli/src/lib/template.ts similarity index 100% rename from src/lib/template.ts rename to apps/cli/src/lib/template.ts diff --git a/src/lib/terminal/backends/backends.test.ts b/apps/cli/src/lib/terminal/backends/backends.test.ts similarity index 100% rename from src/lib/terminal/backends/backends.test.ts rename to apps/cli/src/lib/terminal/backends/backends.test.ts diff --git a/src/lib/terminal/backends/ghostty.ts b/apps/cli/src/lib/terminal/backends/ghostty.ts similarity index 100% rename from src/lib/terminal/backends/ghostty.ts rename to apps/cli/src/lib/terminal/backends/ghostty.ts diff --git a/src/lib/terminal/backends/index.ts b/apps/cli/src/lib/terminal/backends/index.ts similarity index 100% rename from src/lib/terminal/backends/index.ts rename to apps/cli/src/lib/terminal/backends/index.ts diff --git a/src/lib/terminal/backends/iterm.ts b/apps/cli/src/lib/terminal/backends/iterm.ts similarity index 100% rename from src/lib/terminal/backends/iterm.ts rename to apps/cli/src/lib/terminal/backends/iterm.ts diff --git a/src/lib/terminal/backends/tmux.ts b/apps/cli/src/lib/terminal/backends/tmux.ts similarity index 100% rename from src/lib/terminal/backends/tmux.ts rename to apps/cli/src/lib/terminal/backends/tmux.ts diff --git a/src/lib/terminal/backends/vscodium-agent.ts b/apps/cli/src/lib/terminal/backends/vscodium-agent.ts similarity index 100% rename from src/lib/terminal/backends/vscodium-agent.ts rename to apps/cli/src/lib/terminal/backends/vscodium-agent.ts diff --git a/src/lib/terminal/engine.test.ts b/apps/cli/src/lib/terminal/engine.test.ts similarity index 100% rename from src/lib/terminal/engine.test.ts rename to apps/cli/src/lib/terminal/engine.test.ts diff --git a/src/lib/terminal/engine.ts b/apps/cli/src/lib/terminal/engine.ts similarity index 100% rename from src/lib/terminal/engine.ts rename to apps/cli/src/lib/terminal/engine.ts diff --git a/src/lib/terminal/index.ts b/apps/cli/src/lib/terminal/index.ts similarity index 100% rename from src/lib/terminal/index.ts rename to apps/cli/src/lib/terminal/index.ts diff --git a/src/lib/terminal/inject.test.ts b/apps/cli/src/lib/terminal/inject.test.ts similarity index 100% rename from src/lib/terminal/inject.test.ts rename to apps/cli/src/lib/terminal/inject.test.ts diff --git a/src/lib/terminal/inject.ts b/apps/cli/src/lib/terminal/inject.ts similarity index 100% rename from src/lib/terminal/inject.ts rename to apps/cli/src/lib/terminal/inject.ts diff --git a/src/lib/terminal/policy.ts b/apps/cli/src/lib/terminal/policy.ts similarity index 100% rename from src/lib/terminal/policy.ts rename to apps/cli/src/lib/terminal/policy.ts diff --git a/src/lib/terminal/quote.ts b/apps/cli/src/lib/terminal/quote.ts similarity index 100% rename from src/lib/terminal/quote.ts rename to apps/cli/src/lib/terminal/quote.ts diff --git a/src/lib/terminal/resolve.test.ts b/apps/cli/src/lib/terminal/resolve.test.ts similarity index 100% rename from src/lib/terminal/resolve.test.ts rename to apps/cli/src/lib/terminal/resolve.test.ts diff --git a/src/lib/terminal/resolve.ts b/apps/cli/src/lib/terminal/resolve.ts similarity index 100% rename from src/lib/terminal/resolve.ts rename to apps/cli/src/lib/terminal/resolve.ts diff --git a/src/lib/terminal/shell.ts b/apps/cli/src/lib/terminal/shell.ts similarity index 100% rename from src/lib/terminal/shell.ts rename to apps/cli/src/lib/terminal/shell.ts diff --git a/src/lib/terminal/transport.ts b/apps/cli/src/lib/terminal/transport.ts similarity index 100% rename from src/lib/terminal/transport.ts rename to apps/cli/src/lib/terminal/transport.ts diff --git a/src/lib/terminal/types.ts b/apps/cli/src/lib/terminal/types.ts similarity index 100% rename from src/lib/terminal/types.ts rename to apps/cli/src/lib/terminal/types.ts diff --git a/src/lib/tmux/binary.ts b/apps/cli/src/lib/tmux/binary.ts similarity index 100% rename from src/lib/tmux/binary.ts rename to apps/cli/src/lib/tmux/binary.ts diff --git a/src/lib/tmux/index.ts b/apps/cli/src/lib/tmux/index.ts similarity index 100% rename from src/lib/tmux/index.ts rename to apps/cli/src/lib/tmux/index.ts diff --git a/src/lib/tmux/paths.ts b/apps/cli/src/lib/tmux/paths.ts similarity index 100% rename from src/lib/tmux/paths.ts rename to apps/cli/src/lib/tmux/paths.ts diff --git a/src/lib/tmux/session.test.ts b/apps/cli/src/lib/tmux/session.test.ts similarity index 100% rename from src/lib/tmux/session.test.ts rename to apps/cli/src/lib/tmux/session.test.ts diff --git a/src/lib/tmux/session.ts b/apps/cli/src/lib/tmux/session.ts similarity index 100% rename from src/lib/tmux/session.ts rename to apps/cli/src/lib/tmux/session.ts diff --git a/src/lib/triggers/webhook.test.ts b/apps/cli/src/lib/triggers/webhook.test.ts similarity index 100% rename from src/lib/triggers/webhook.test.ts rename to apps/cli/src/lib/triggers/webhook.test.ts diff --git a/src/lib/triggers/webhook.ts b/apps/cli/src/lib/triggers/webhook.ts similarity index 100% rename from src/lib/triggers/webhook.ts rename to apps/cli/src/lib/triggers/webhook.ts diff --git a/src/lib/types.ts b/apps/cli/src/lib/types.ts similarity index 100% rename from src/lib/types.ts rename to apps/cli/src/lib/types.ts diff --git a/src/lib/usage.ts b/apps/cli/src/lib/usage.ts similarity index 100% rename from src/lib/usage.ts rename to apps/cli/src/lib/usage.ts diff --git a/src/lib/version-duplicates.ts b/apps/cli/src/lib/version-duplicates.ts similarity index 100% rename from src/lib/version-duplicates.ts rename to apps/cli/src/lib/version-duplicates.ts diff --git a/src/lib/version.test.ts b/apps/cli/src/lib/version.test.ts similarity index 100% rename from src/lib/version.test.ts rename to apps/cli/src/lib/version.test.ts diff --git a/src/lib/version.ts b/apps/cli/src/lib/version.ts similarity index 100% rename from src/lib/version.ts rename to apps/cli/src/lib/version.ts diff --git a/src/lib/versions.installscripts.test.ts b/apps/cli/src/lib/versions.installscripts.test.ts similarity index 100% rename from src/lib/versions.installscripts.test.ts rename to apps/cli/src/lib/versions.installscripts.test.ts diff --git a/src/lib/versions.test.ts b/apps/cli/src/lib/versions.test.ts similarity index 100% rename from src/lib/versions.test.ts rename to apps/cli/src/lib/versions.test.ts diff --git a/src/lib/versions.ts b/apps/cli/src/lib/versions.ts similarity index 100% rename from src/lib/versions.ts rename to apps/cli/src/lib/versions.ts diff --git a/src/lib/wallet/__tests__/wallet.test.ts b/apps/cli/src/lib/wallet/__tests__/wallet.test.ts similarity index 100% rename from src/lib/wallet/__tests__/wallet.test.ts rename to apps/cli/src/lib/wallet/__tests__/wallet.test.ts diff --git a/src/lib/wallet/index.ts b/apps/cli/src/lib/wallet/index.ts similarity index 100% rename from src/lib/wallet/index.ts rename to apps/cli/src/lib/wallet/index.ts diff --git a/src/lib/watchdog/index.ts b/apps/cli/src/lib/watchdog/index.ts similarity index 100% rename from src/lib/watchdog/index.ts rename to apps/cli/src/lib/watchdog/index.ts diff --git a/src/lib/watchdog/read.test.ts b/apps/cli/src/lib/watchdog/read.test.ts similarity index 100% rename from src/lib/watchdog/read.test.ts rename to apps/cli/src/lib/watchdog/read.test.ts diff --git a/src/lib/watchdog/read.ts b/apps/cli/src/lib/watchdog/read.ts similarity index 100% rename from src/lib/watchdog/read.ts rename to apps/cli/src/lib/watchdog/read.ts diff --git a/src/lib/watchdog/runner.test.ts b/apps/cli/src/lib/watchdog/runner.test.ts similarity index 100% rename from src/lib/watchdog/runner.test.ts rename to apps/cli/src/lib/watchdog/runner.test.ts diff --git a/src/lib/watchdog/runner.ts b/apps/cli/src/lib/watchdog/runner.ts similarity index 100% rename from src/lib/watchdog/runner.ts rename to apps/cli/src/lib/watchdog/runner.ts diff --git a/src/lib/watchdog/testdata/tail-sample-claude.jsonl b/apps/cli/src/lib/watchdog/testdata/tail-sample-claude.jsonl similarity index 100% rename from src/lib/watchdog/testdata/tail-sample-claude.jsonl rename to apps/cli/src/lib/watchdog/testdata/tail-sample-claude.jsonl diff --git a/src/lib/watchdog/watchdog.test.ts b/apps/cli/src/lib/watchdog/watchdog.test.ts similarity index 100% rename from src/lib/watchdog/watchdog.test.ts rename to apps/cli/src/lib/watchdog/watchdog.test.ts diff --git a/src/lib/watchdog/watchdog.ts b/apps/cli/src/lib/watchdog/watchdog.ts similarity index 100% rename from src/lib/watchdog/watchdog.ts rename to apps/cli/src/lib/watchdog/watchdog.ts diff --git a/src/lib/watchdog/watchdogTail.test.ts b/apps/cli/src/lib/watchdog/watchdogTail.test.ts similarity index 100% rename from src/lib/watchdog/watchdogTail.test.ts rename to apps/cli/src/lib/watchdog/watchdogTail.test.ts diff --git a/src/lib/watchdog/watchdogTail.ts b/apps/cli/src/lib/watchdog/watchdogTail.ts similarity index 100% rename from src/lib/watchdog/watchdogTail.ts rename to apps/cli/src/lib/watchdog/watchdogTail.ts diff --git a/src/lib/whats-new.test.ts b/apps/cli/src/lib/whats-new.test.ts similarity index 100% rename from src/lib/whats-new.test.ts rename to apps/cli/src/lib/whats-new.test.ts diff --git a/src/lib/whats-new.ts b/apps/cli/src/lib/whats-new.ts similarity index 100% rename from src/lib/whats-new.ts rename to apps/cli/src/lib/whats-new.ts diff --git a/src/lib/workflows.test.ts b/apps/cli/src/lib/workflows.test.ts similarity index 100% rename from src/lib/workflows.test.ts rename to apps/cli/src/lib/workflows.test.ts diff --git a/src/lib/workflows.ts b/apps/cli/src/lib/workflows.ts similarity index 100% rename from src/lib/workflows.ts rename to apps/cli/src/lib/workflows.ts diff --git a/tests/agents-memory-loading.test.ts b/apps/cli/tests/agents-memory-loading.test.ts similarity index 100% rename from tests/agents-memory-loading.test.ts rename to apps/cli/tests/agents-memory-loading.test.ts diff --git a/tests/agents.test.ts b/apps/cli/tests/agents.test.ts similarity index 100% rename from tests/agents.test.ts rename to apps/cli/tests/agents.test.ts diff --git a/tests/artifact-actions.test.ts b/apps/cli/tests/artifact-actions.test.ts similarity index 100% rename from tests/artifact-actions.test.ts rename to apps/cli/tests/artifact-actions.test.ts diff --git a/tests/bare-invocation.test.ts b/apps/cli/tests/bare-invocation.test.ts similarity index 100% rename from tests/bare-invocation.test.ts rename to apps/cli/tests/bare-invocation.test.ts diff --git a/tests/bench-concurrent-writes.ts b/apps/cli/tests/bench-concurrent-writes.ts similarity index 100% rename from tests/bench-concurrent-writes.ts rename to apps/cli/tests/bench-concurrent-writes.ts diff --git a/tests/bench-concurrent-writes.worker.ts b/apps/cli/tests/bench-concurrent-writes.worker.ts similarity index 100% rename from tests/bench-concurrent-writes.worker.ts rename to apps/cli/tests/bench-concurrent-writes.worker.ts diff --git a/tests/cli-command-sync-spec.test.ts b/apps/cli/tests/cli-command-sync-spec.test.ts similarity index 100% rename from tests/cli-command-sync-spec.test.ts rename to apps/cli/tests/cli-command-sync-spec.test.ts diff --git a/tests/cli-resources/injection.test.ts b/apps/cli/tests/cli-resources/injection.test.ts similarity index 100% rename from tests/cli-resources/injection.test.ts rename to apps/cli/tests/cli-resources/injection.test.ts diff --git a/tests/daemon.test.ts b/apps/cli/tests/daemon.test.ts similarity index 100% rename from tests/daemon.test.ts rename to apps/cli/tests/daemon.test.ts diff --git a/tests/e2e/container-fresh-install.sh b/apps/cli/tests/e2e/container-fresh-install.sh similarity index 100% rename from tests/e2e/container-fresh-install.sh rename to apps/cli/tests/e2e/container-fresh-install.sh diff --git a/tests/e2e/fresh-install-settings.sh b/apps/cli/tests/e2e/fresh-install-settings.sh similarity index 100% rename from tests/e2e/fresh-install-settings.sh rename to apps/cli/tests/e2e/fresh-install-settings.sh diff --git a/tests/events-audit.test.ts b/apps/cli/tests/events-audit.test.ts similarity index 100% rename from tests/events-audit.test.ts rename to apps/cli/tests/events-audit.test.ts diff --git a/tests/events-redact.test.ts b/apps/cli/tests/events-redact.test.ts similarity index 100% rename from tests/events-redact.test.ts rename to apps/cli/tests/events-redact.test.ts diff --git a/tests/exec/sanitize-env.test.ts b/apps/cli/tests/exec/sanitize-env.test.ts similarity index 100% rename from tests/exec/sanitize-env.test.ts rename to apps/cli/tests/exec/sanitize-env.test.ts diff --git a/tests/extra-repos.test.ts b/apps/cli/tests/extra-repos.test.ts similarity index 100% rename from tests/extra-repos.test.ts rename to apps/cli/tests/extra-repos.test.ts diff --git a/tests/fixtures/cli-command-spec.json b/apps/cli/tests/fixtures/cli-command-spec.json similarity index 100% rename from tests/fixtures/cli-command-spec.json rename to apps/cli/tests/fixtures/cli-command-spec.json diff --git a/tests/fixtures/permissions/test-basic.yml b/apps/cli/tests/fixtures/permissions/test-basic.yml similarity index 100% rename from tests/fixtures/permissions/test-basic.yml rename to apps/cli/tests/fixtures/permissions/test-basic.yml diff --git a/tests/fixtures/project-resources/README.md b/apps/cli/tests/fixtures/project-resources/README.md similarity index 100% rename from tests/fixtures/project-resources/README.md rename to apps/cli/tests/fixtures/project-resources/README.md diff --git a/tests/fixtures/project-resources/repo/.agents/agents.yaml b/apps/cli/tests/fixtures/project-resources/repo/.agents/agents.yaml similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/agents.yaml rename to apps/cli/tests/fixtures/project-resources/repo/.agents/agents.yaml diff --git a/tests/fixtures/project-resources/repo/.agents/commands/myproj.md b/apps/cli/tests/fixtures/project-resources/repo/.agents/commands/myproj.md similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/commands/myproj.md rename to apps/cli/tests/fixtures/project-resources/repo/.agents/commands/myproj.md diff --git a/tests/fixtures/project-resources/repo/.agents/mcp/proj-mcp.yaml b/apps/cli/tests/fixtures/project-resources/repo/.agents/mcp/proj-mcp.yaml similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/mcp/proj-mcp.yaml rename to apps/cli/tests/fixtures/project-resources/repo/.agents/mcp/proj-mcp.yaml diff --git a/tests/fixtures/project-resources/repo/.agents/rules/rules.yaml b/apps/cli/tests/fixtures/project-resources/repo/.agents/rules/rules.yaml similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/rules/rules.yaml rename to apps/cli/tests/fixtures/project-resources/repo/.agents/rules/rules.yaml diff --git a/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-marker.md b/apps/cli/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-marker.md similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/rules/subrules/project-marker.md rename to apps/cli/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-marker.md diff --git a/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-secret.md b/apps/cli/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-secret.md similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/rules/subrules/project-secret.md rename to apps/cli/tests/fixtures/project-resources/repo/.agents/rules/subrules/project-secret.md diff --git a/tests/fixtures/project-resources/repo/.agents/skills/myskill/SKILL.md b/apps/cli/tests/fixtures/project-resources/repo/.agents/skills/myskill/SKILL.md similarity index 100% rename from tests/fixtures/project-resources/repo/.agents/skills/myskill/SKILL.md rename to apps/cli/tests/fixtures/project-resources/repo/.agents/skills/myskill/SKILL.md diff --git a/tests/fixtures/project-resources/repo/agents.yaml b/apps/cli/tests/fixtures/project-resources/repo/agents.yaml similarity index 100% rename from tests/fixtures/project-resources/repo/agents.yaml rename to apps/cli/tests/fixtures/project-resources/repo/agents.yaml diff --git a/tests/fixtures/project-resources/repo/sub/deep/.gitkeep b/apps/cli/tests/fixtures/project-resources/repo/sub/deep/.gitkeep similarity index 100% rename from tests/fixtures/project-resources/repo/sub/deep/.gitkeep rename to apps/cli/tests/fixtures/project-resources/repo/sub/deep/.gitkeep diff --git a/tests/fixtures/project-resources/sibling/.gitkeep b/apps/cli/tests/fixtures/project-resources/sibling/.gitkeep similarity index 100% rename from tests/fixtures/project-resources/sibling/.gitkeep rename to apps/cli/tests/fixtures/project-resources/sibling/.gitkeep diff --git a/tests/fixtures/teams/claude-session.jsonl b/apps/cli/tests/fixtures/teams/claude-session.jsonl similarity index 100% rename from tests/fixtures/teams/claude-session.jsonl rename to apps/cli/tests/fixtures/teams/claude-session.jsonl diff --git a/tests/fixtures/teams/codex-session.jsonl b/apps/cli/tests/fixtures/teams/codex-session.jsonl similarity index 100% rename from tests/fixtures/teams/codex-session.jsonl rename to apps/cli/tests/fixtures/teams/codex-session.jsonl diff --git a/tests/fixtures/teams/cursor-session.jsonl b/apps/cli/tests/fixtures/teams/cursor-session.jsonl similarity index 100% rename from tests/fixtures/teams/cursor-session.jsonl rename to apps/cli/tests/fixtures/teams/cursor-session.jsonl diff --git a/tests/fixtures/teams/gemini-session.jsonl b/apps/cli/tests/fixtures/teams/gemini-session.jsonl similarity index 100% rename from tests/fixtures/teams/gemini-session.jsonl rename to apps/cli/tests/fixtures/teams/gemini-session.jsonl diff --git a/tests/fixtures/teams/opencode-session.jsonl b/apps/cli/tests/fixtures/teams/opencode-session.jsonl similarity index 100% rename from tests/fixtures/teams/opencode-session.jsonl rename to apps/cli/tests/fixtures/teams/opencode-session.jsonl diff --git a/tests/git.test.ts b/apps/cli/tests/git.test.ts similarity index 100% rename from tests/git.test.ts rename to apps/cli/tests/git.test.ts diff --git a/tests/help-output.test.ts b/apps/cli/tests/help-output.test.ts similarity index 100% rename from tests/help-output.test.ts rename to apps/cli/tests/help-output.test.ts diff --git a/tests/hook-doc-sidecar.test.ts b/apps/cli/tests/hook-doc-sidecar.test.ts similarity index 100% rename from tests/hook-doc-sidecar.test.ts rename to apps/cli/tests/hook-doc-sidecar.test.ts diff --git a/tests/hooks-soft-delete.test.ts b/apps/cli/tests/hooks-soft-delete.test.ts similarity index 100% rename from tests/hooks-soft-delete.test.ts rename to apps/cli/tests/hooks-soft-delete.test.ts diff --git a/tests/jobs.test.ts b/apps/cli/tests/jobs.test.ts similarity index 100% rename from tests/jobs.test.ts rename to apps/cli/tests/jobs.test.ts diff --git a/tests/non-interactive.test.ts b/apps/cli/tests/non-interactive.test.ts similarity index 100% rename from tests/non-interactive.test.ts rename to apps/cli/tests/non-interactive.test.ts diff --git a/tests/package-name-consistency.test.ts b/apps/cli/tests/package-name-consistency.test.ts similarity index 100% rename from tests/package-name-consistency.test.ts rename to apps/cli/tests/package-name-consistency.test.ts diff --git a/tests/perf-agents.test.ts b/apps/cli/tests/perf-agents.test.ts similarity index 100% rename from tests/perf-agents.test.ts rename to apps/cli/tests/perf-agents.test.ts diff --git a/tests/permissions.test.ts b/apps/cli/tests/permissions.test.ts similarity index 100% rename from tests/permissions.test.ts rename to apps/cli/tests/permissions.test.ts diff --git a/tests/plugin-drift-detail.test.ts b/apps/cli/tests/plugin-drift-detail.test.ts similarity index 100% rename from tests/plugin-drift-detail.test.ts rename to apps/cli/tests/plugin-drift-detail.test.ts diff --git a/tests/plugin-manifest-repair.test.ts b/apps/cli/tests/plugin-manifest-repair.test.ts similarity index 100% rename from tests/plugin-manifest-repair.test.ts rename to apps/cli/tests/plugin-manifest-repair.test.ts diff --git a/tests/project-agents-dir.test.ts b/apps/cli/tests/project-agents-dir.test.ts similarity index 100% rename from tests/project-agents-dir.test.ts rename to apps/cli/tests/project-agents-dir.test.ts diff --git a/tests/project-resources-pipeline.test.ts b/apps/cli/tests/project-resources-pipeline.test.ts similarity index 100% rename from tests/project-resources-pipeline.test.ts rename to apps/cli/tests/project-resources-pipeline.test.ts diff --git a/tests/prune-command.test.ts b/apps/cli/tests/prune-command.test.ts similarity index 100% rename from tests/prune-command.test.ts rename to apps/cli/tests/prune-command.test.ts diff --git a/tests/registry.test.ts b/apps/cli/tests/registry.test.ts similarity index 100% rename from tests/registry.test.ts rename to apps/cli/tests/registry.test.ts diff --git a/tests/repo-view.test.ts b/apps/cli/tests/repo-view.test.ts similarity index 100% rename from tests/repo-view.test.ts rename to apps/cli/tests/repo-view.test.ts diff --git a/tests/run-defaults-command.test.ts b/apps/cli/tests/run-defaults-command.test.ts similarity index 100% rename from tests/run-defaults-command.test.ts rename to apps/cli/tests/run-defaults-command.test.ts diff --git a/tests/runner-loop.test.ts b/apps/cli/tests/runner-loop.test.ts similarity index 100% rename from tests/runner-loop.test.ts rename to apps/cli/tests/runner-loop.test.ts diff --git a/tests/runner.test.ts b/apps/cli/tests/runner.test.ts similarity index 100% rename from tests/runner.test.ts rename to apps/cli/tests/runner.test.ts diff --git a/tests/sandbox.test.ts b/apps/cli/tests/sandbox.test.ts similarity index 100% rename from tests/sandbox.test.ts rename to apps/cli/tests/sandbox.test.ts diff --git a/tests/scheduler.test.ts b/apps/cli/tests/scheduler.test.ts similarity index 100% rename from tests/scheduler.test.ts rename to apps/cli/tests/scheduler.test.ts diff --git a/tests/session-artifacts.test.ts b/apps/cli/tests/session-artifacts.test.ts similarity index 100% rename from tests/session-artifacts.test.ts rename to apps/cli/tests/session-artifacts.test.ts diff --git a/tests/shims.test.ts b/apps/cli/tests/shims.test.ts similarity index 100% rename from tests/shims.test.ts rename to apps/cli/tests/shims.test.ts diff --git a/tests/teams-events.test.ts b/apps/cli/tests/teams-events.test.ts similarity index 100% rename from tests/teams-events.test.ts rename to apps/cli/tests/teams-events.test.ts diff --git a/tests/teams-session-id.test.ts b/apps/cli/tests/teams-session-id.test.ts similarity index 100% rename from tests/teams-session-id.test.ts rename to apps/cli/tests/teams-session-id.test.ts diff --git a/tests/template.test.ts b/apps/cli/tests/template.test.ts similarity index 100% rename from tests/template.test.ts rename to apps/cli/tests/template.test.ts diff --git a/tests/versions-sync.test.ts b/apps/cli/tests/versions-sync.test.ts similarity index 100% rename from tests/versions-sync.test.ts rename to apps/cli/tests/versions-sync.test.ts diff --git a/tests/versions.test.ts b/apps/cli/tests/versions.test.ts similarity index 100% rename from tests/versions.test.ts rename to apps/cli/tests/versions.test.ts diff --git a/tsconfig.json b/apps/cli/tsconfig.json similarity index 100% rename from tsconfig.json rename to apps/cli/tsconfig.json diff --git a/vitest.config.ts b/apps/cli/vitest.config.ts similarity index 100% rename from vitest.config.ts rename to apps/cli/vitest.config.ts diff --git a/packages/factory/.gitignore b/apps/factory/.gitignore similarity index 100% rename from packages/factory/.gitignore rename to apps/factory/.gitignore diff --git a/packages/factory/.vscodeignore b/apps/factory/.vscodeignore similarity index 100% rename from packages/factory/.vscodeignore rename to apps/factory/.vscodeignore diff --git a/packages/factory/AGENTS.md b/apps/factory/AGENTS.md similarity index 100% rename from packages/factory/AGENTS.md rename to apps/factory/AGENTS.md diff --git a/packages/factory/README.md b/apps/factory/README.md similarity index 100% rename from packages/factory/README.md rename to apps/factory/README.md diff --git a/packages/factory/app/.gitignore b/apps/factory/app/.gitignore similarity index 100% rename from packages/factory/app/.gitignore rename to apps/factory/app/.gitignore diff --git a/packages/factory/app/bun.lock b/apps/factory/app/bun.lock similarity index 100% rename from packages/factory/app/bun.lock rename to apps/factory/app/bun.lock diff --git a/packages/factory/app/floorData.ts b/apps/factory/app/floorData.ts similarity index 100% rename from packages/factory/app/floorData.ts rename to apps/factory/app/floorData.ts diff --git a/packages/factory/app/main.ts b/apps/factory/app/main.ts similarity index 100% rename from packages/factory/app/main.ts rename to apps/factory/app/main.ts diff --git a/packages/factory/app/package.json b/apps/factory/app/package.json similarity index 100% rename from packages/factory/app/package.json rename to apps/factory/app/package.json diff --git a/packages/factory/app/preload.ts b/apps/factory/app/preload.ts similarity index 100% rename from packages/factory/app/preload.ts rename to apps/factory/app/preload.ts diff --git a/packages/factory/app/scripts/build.sh b/apps/factory/app/scripts/build.sh similarity index 100% rename from packages/factory/app/scripts/build.sh rename to apps/factory/app/scripts/build.sh diff --git a/packages/factory/app/scripts/dev.sh b/apps/factory/app/scripts/dev.sh similarity index 100% rename from packages/factory/app/scripts/dev.sh rename to apps/factory/app/scripts/dev.sh diff --git a/packages/factory/app/scripts/install.sh b/apps/factory/app/scripts/install.sh similarity index 100% rename from packages/factory/app/scripts/install.sh rename to apps/factory/app/scripts/install.sh diff --git a/packages/factory/app/scripts/release.sh b/apps/factory/app/scripts/release.sh similarity index 100% rename from packages/factory/app/scripts/release.sh rename to apps/factory/app/scripts/release.sh diff --git a/packages/factory/app/tsconfig.json b/apps/factory/app/tsconfig.json similarity index 100% rename from packages/factory/app/tsconfig.json rename to apps/factory/app/tsconfig.json diff --git a/packages/factory/assets/agents-activity.svg b/apps/factory/assets/agents-activity.svg similarity index 100% rename from packages/factory/assets/agents-activity.svg rename to apps/factory/assets/agents-activity.svg diff --git a/packages/factory/assets/agents.png b/apps/factory/assets/agents.png similarity index 100% rename from packages/factory/assets/agents.png rename to apps/factory/assets/agents.png diff --git a/packages/factory/assets/alerter b/apps/factory/assets/alerter similarity index 100% rename from packages/factory/assets/alerter rename to apps/factory/assets/alerter diff --git a/packages/factory/assets/antigravity.png b/apps/factory/assets/antigravity.png similarity index 100% rename from packages/factory/assets/antigravity.png rename to apps/factory/assets/antigravity.png diff --git a/packages/factory/assets/chatgpt-light.png b/apps/factory/assets/chatgpt-light.png similarity index 100% rename from packages/factory/assets/chatgpt-light.png rename to apps/factory/assets/chatgpt-light.png diff --git a/packages/factory/assets/chatgpt.png b/apps/factory/assets/chatgpt.png similarity index 100% rename from packages/factory/assets/chatgpt.png rename to apps/factory/assets/chatgpt.png diff --git a/packages/factory/assets/claude.png b/apps/factory/assets/claude.png similarity index 100% rename from packages/factory/assets/claude.png rename to apps/factory/assets/claude.png diff --git a/packages/factory/assets/cursor-light.png b/apps/factory/assets/cursor-light.png similarity index 100% rename from packages/factory/assets/cursor-light.png rename to apps/factory/assets/cursor-light.png diff --git a/packages/factory/assets/cursor.png b/apps/factory/assets/cursor.png similarity index 100% rename from packages/factory/assets/cursor.png rename to apps/factory/assets/cursor.png diff --git a/packages/factory/assets/design/components.png b/apps/factory/assets/design/components.png similarity index 100% rename from packages/factory/assets/design/components.png rename to apps/factory/assets/design/components.png diff --git a/packages/factory/assets/gemini.png b/apps/factory/assets/gemini.png similarity index 100% rename from packages/factory/assets/gemini.png rename to apps/factory/assets/gemini.png diff --git a/packages/factory/assets/github.png b/apps/factory/assets/github.png similarity index 100% rename from packages/factory/assets/github.png rename to apps/factory/assets/github.png diff --git a/packages/factory/assets/grok.png b/apps/factory/assets/grok.png similarity index 100% rename from packages/factory/assets/grok.png rename to apps/factory/assets/grok.png diff --git a/packages/factory/assets/linear.png b/apps/factory/assets/linear.png similarity index 100% rename from packages/factory/assets/linear.png rename to apps/factory/assets/linear.png diff --git a/packages/factory/assets/mcp.png b/apps/factory/assets/mcp.png similarity index 100% rename from packages/factory/assets/mcp.png rename to apps/factory/assets/mcp.png diff --git a/packages/factory/assets/opencode.png b/apps/factory/assets/opencode.png similarity index 100% rename from packages/factory/assets/opencode.png rename to apps/factory/assets/opencode.png diff --git a/packages/factory/assets/rush.png b/apps/factory/assets/rush.png similarity index 100% rename from packages/factory/assets/rush.png rename to apps/factory/assets/rush.png diff --git a/packages/factory/assets/vscode.png b/apps/factory/assets/vscode.png similarity index 100% rename from packages/factory/assets/vscode.png rename to apps/factory/assets/vscode.png diff --git a/packages/factory/icons/agents-icon.png b/apps/factory/icons/agents-icon.png similarity index 100% rename from packages/factory/icons/agents-icon.png rename to apps/factory/icons/agents-icon.png diff --git a/packages/factory/icons/agents-icons.json b/apps/factory/icons/agents-icons.json similarity index 100% rename from packages/factory/icons/agents-icons.json rename to apps/factory/icons/agents-icons.json diff --git a/packages/factory/icons/antigravity.png b/apps/factory/icons/antigravity.png similarity index 100% rename from packages/factory/icons/antigravity.png rename to apps/factory/icons/antigravity.png diff --git a/packages/factory/icons/claude-icon.png b/apps/factory/icons/claude-icon.png similarity index 100% rename from packages/factory/icons/claude-icon.png rename to apps/factory/icons/claude-icon.png diff --git a/packages/factory/icons/codex-icon.png b/apps/factory/icons/codex-icon.png similarity index 100% rename from packages/factory/icons/codex-icon.png rename to apps/factory/icons/codex-icon.png diff --git a/packages/factory/icons/codex-light-icon.png b/apps/factory/icons/codex-light-icon.png similarity index 100% rename from packages/factory/icons/codex-light-icon.png rename to apps/factory/icons/codex-light-icon.png diff --git a/packages/factory/icons/cursor-icon.png b/apps/factory/icons/cursor-icon.png similarity index 100% rename from packages/factory/icons/cursor-icon.png rename to apps/factory/icons/cursor-icon.png diff --git a/packages/factory/icons/cursor-light-icon.png b/apps/factory/icons/cursor-light-icon.png similarity index 100% rename from packages/factory/icons/cursor-light-icon.png rename to apps/factory/icons/cursor-light-icon.png diff --git a/packages/factory/icons/gemini-icon.png b/apps/factory/icons/gemini-icon.png similarity index 100% rename from packages/factory/icons/gemini-icon.png rename to apps/factory/icons/gemini-icon.png diff --git a/packages/factory/icons/grok.png b/apps/factory/icons/grok.png similarity index 100% rename from packages/factory/icons/grok.png rename to apps/factory/icons/grok.png diff --git a/packages/factory/icons/opencode-icon.png b/apps/factory/icons/opencode-icon.png similarity index 100% rename from packages/factory/icons/opencode-icon.png rename to apps/factory/icons/opencode-icon.png diff --git a/packages/factory/mcp/notifications/bun.lock b/apps/factory/mcp/notifications/bun.lock similarity index 100% rename from packages/factory/mcp/notifications/bun.lock rename to apps/factory/mcp/notifications/bun.lock diff --git a/packages/factory/mcp/notifications/package.json b/apps/factory/mcp/notifications/package.json similarity index 100% rename from packages/factory/mcp/notifications/package.json rename to apps/factory/mcp/notifications/package.json diff --git a/packages/factory/mcp/notifications/src/index.ts b/apps/factory/mcp/notifications/src/index.ts similarity index 100% rename from packages/factory/mcp/notifications/src/index.ts rename to apps/factory/mcp/notifications/src/index.ts diff --git a/packages/factory/mcp/notifications/src/server.ts b/apps/factory/mcp/notifications/src/server.ts similarity index 100% rename from packages/factory/mcp/notifications/src/server.ts rename to apps/factory/mcp/notifications/src/server.ts diff --git a/packages/factory/mcp/notifications/tsconfig.json b/apps/factory/mcp/notifications/tsconfig.json similarity index 100% rename from packages/factory/mcp/notifications/tsconfig.json rename to apps/factory/mcp/notifications/tsconfig.json diff --git a/packages/factory/package.json b/apps/factory/package.json similarity index 100% rename from packages/factory/package.json rename to apps/factory/package.json diff --git a/packages/factory/scripts/activate.sh b/apps/factory/scripts/activate.sh similarity index 100% rename from packages/factory/scripts/activate.sh rename to apps/factory/scripts/activate.sh diff --git a/packages/factory/scripts/bench-fs-watch.ts b/apps/factory/scripts/bench-fs-watch.ts similarity index 100% rename from packages/factory/scripts/bench-fs-watch.ts rename to apps/factory/scripts/bench-fs-watch.ts diff --git a/packages/factory/scripts/build.sh b/apps/factory/scripts/build.sh similarity index 100% rename from packages/factory/scripts/build.sh rename to apps/factory/scripts/build.sh diff --git a/packages/factory/scripts/install.sh b/apps/factory/scripts/install.sh similarity index 100% rename from packages/factory/scripts/install.sh rename to apps/factory/scripts/install.sh diff --git a/packages/factory/scripts/release.sh b/apps/factory/scripts/release.sh similarity index 100% rename from packages/factory/scripts/release.sh rename to apps/factory/scripts/release.sh diff --git a/packages/factory/src/core/agentInventory.test.ts b/apps/factory/src/core/agentInventory.test.ts similarity index 100% rename from packages/factory/src/core/agentInventory.test.ts rename to apps/factory/src/core/agentInventory.test.ts diff --git a/packages/factory/src/core/agentInventory.ts b/apps/factory/src/core/agentInventory.ts similarity index 100% rename from packages/factory/src/core/agentInventory.ts rename to apps/factory/src/core/agentInventory.ts diff --git a/packages/factory/src/core/agentModels.test.ts b/apps/factory/src/core/agentModels.test.ts similarity index 100% rename from packages/factory/src/core/agentModels.test.ts rename to apps/factory/src/core/agentModels.test.ts diff --git a/packages/factory/src/core/agentModels.ts b/apps/factory/src/core/agentModels.ts similarity index 100% rename from packages/factory/src/core/agentModels.ts rename to apps/factory/src/core/agentModels.ts diff --git a/packages/factory/src/core/agentResources.test.ts b/apps/factory/src/core/agentResources.test.ts similarity index 100% rename from packages/factory/src/core/agentResources.test.ts rename to apps/factory/src/core/agentResources.test.ts diff --git a/packages/factory/src/core/agentResources.ts b/apps/factory/src/core/agentResources.ts similarity index 100% rename from packages/factory/src/core/agentResources.ts rename to apps/factory/src/core/agentResources.ts diff --git a/packages/factory/src/core/agentlinks.test.ts b/apps/factory/src/core/agentlinks.test.ts similarity index 100% rename from packages/factory/src/core/agentlinks.test.ts rename to apps/factory/src/core/agentlinks.test.ts diff --git a/packages/factory/src/core/agentlinks.ts b/apps/factory/src/core/agentlinks.ts similarity index 100% rename from packages/factory/src/core/agentlinks.ts rename to apps/factory/src/core/agentlinks.ts diff --git a/packages/factory/src/core/agents.test.ts b/apps/factory/src/core/agents.test.ts similarity index 100% rename from packages/factory/src/core/agents.test.ts rename to apps/factory/src/core/agents.test.ts diff --git a/packages/factory/src/core/agents.ts b/apps/factory/src/core/agents.ts similarity index 100% rename from packages/factory/src/core/agents.ts rename to apps/factory/src/core/agents.ts diff --git a/packages/factory/src/core/agentsBin.test.ts b/apps/factory/src/core/agentsBin.test.ts similarity index 100% rename from packages/factory/src/core/agentsBin.test.ts rename to apps/factory/src/core/agentsBin.test.ts diff --git a/packages/factory/src/core/agentsBin.ts b/apps/factory/src/core/agentsBin.ts similarity index 100% rename from packages/factory/src/core/agentsBin.ts rename to apps/factory/src/core/agentsBin.ts diff --git a/packages/factory/src/core/binResolve.test.ts b/apps/factory/src/core/binResolve.test.ts similarity index 100% rename from packages/factory/src/core/binResolve.test.ts rename to apps/factory/src/core/binResolve.test.ts diff --git a/packages/factory/src/core/binResolve.ts b/apps/factory/src/core/binResolve.ts similarity index 100% rename from packages/factory/src/core/binResolve.ts rename to apps/factory/src/core/binResolve.ts diff --git a/packages/factory/src/core/claudemd.test.ts b/apps/factory/src/core/claudemd.test.ts similarity index 100% rename from packages/factory/src/core/claudemd.test.ts rename to apps/factory/src/core/claudemd.test.ts diff --git a/packages/factory/src/core/claudemd.ts b/apps/factory/src/core/claudemd.ts similarity index 100% rename from packages/factory/src/core/claudemd.ts rename to apps/factory/src/core/claudemd.ts diff --git a/packages/factory/src/core/commitgen.test.ts b/apps/factory/src/core/commitgen.test.ts similarity index 100% rename from packages/factory/src/core/commitgen.test.ts rename to apps/factory/src/core/commitgen.test.ts diff --git a/packages/factory/src/core/commitgen.ts b/apps/factory/src/core/commitgen.ts similarity index 100% rename from packages/factory/src/core/commitgen.ts rename to apps/factory/src/core/commitgen.ts diff --git a/packages/factory/src/core/deviceHealth.test.ts b/apps/factory/src/core/deviceHealth.test.ts similarity index 100% rename from packages/factory/src/core/deviceHealth.test.ts rename to apps/factory/src/core/deviceHealth.test.ts diff --git a/packages/factory/src/core/deviceHealth.ts b/apps/factory/src/core/deviceHealth.ts similarity index 100% rename from packages/factory/src/core/deviceHealth.ts rename to apps/factory/src/core/deviceHealth.ts diff --git a/packages/factory/src/core/dispatchRanking.test.ts b/apps/factory/src/core/dispatchRanking.test.ts similarity index 100% rename from packages/factory/src/core/dispatchRanking.test.ts rename to apps/factory/src/core/dispatchRanking.test.ts diff --git a/packages/factory/src/core/dispatchRanking.ts b/apps/factory/src/core/dispatchRanking.ts similarity index 100% rename from packages/factory/src/core/dispatchRanking.ts rename to apps/factory/src/core/dispatchRanking.ts diff --git a/packages/factory/src/core/draftPrompt.test.ts b/apps/factory/src/core/draftPrompt.test.ts similarity index 100% rename from packages/factory/src/core/draftPrompt.test.ts rename to apps/factory/src/core/draftPrompt.test.ts diff --git a/packages/factory/src/core/draftPrompt.ts b/apps/factory/src/core/draftPrompt.ts similarity index 100% rename from packages/factory/src/core/draftPrompt.ts rename to apps/factory/src/core/draftPrompt.ts diff --git a/packages/factory/src/core/foreman.config.test.ts b/apps/factory/src/core/foreman.config.test.ts similarity index 100% rename from packages/factory/src/core/foreman.config.test.ts rename to apps/factory/src/core/foreman.config.test.ts diff --git a/packages/factory/src/core/foreman.config.ts b/apps/factory/src/core/foreman.config.ts similarity index 100% rename from packages/factory/src/core/foreman.config.ts rename to apps/factory/src/core/foreman.config.ts diff --git a/packages/factory/src/core/foreman.cycle.test.ts b/apps/factory/src/core/foreman.cycle.test.ts similarity index 100% rename from packages/factory/src/core/foreman.cycle.test.ts rename to apps/factory/src/core/foreman.cycle.test.ts diff --git a/packages/factory/src/core/foreman.cycle.ts b/apps/factory/src/core/foreman.cycle.ts similarity index 100% rename from packages/factory/src/core/foreman.cycle.ts rename to apps/factory/src/core/foreman.cycle.ts diff --git a/packages/factory/src/core/foreman.digest.test.ts b/apps/factory/src/core/foreman.digest.test.ts similarity index 100% rename from packages/factory/src/core/foreman.digest.test.ts rename to apps/factory/src/core/foreman.digest.test.ts diff --git a/packages/factory/src/core/foreman.digest.ts b/apps/factory/src/core/foreman.digest.ts similarity index 100% rename from packages/factory/src/core/foreman.digest.ts rename to apps/factory/src/core/foreman.digest.ts diff --git a/packages/factory/src/core/foreman.target.test.ts b/apps/factory/src/core/foreman.target.test.ts similarity index 100% rename from packages/factory/src/core/foreman.target.test.ts rename to apps/factory/src/core/foreman.target.test.ts diff --git a/packages/factory/src/core/foreman.target.ts b/apps/factory/src/core/foreman.target.ts similarity index 100% rename from packages/factory/src/core/foreman.target.ts rename to apps/factory/src/core/foreman.target.ts diff --git a/packages/factory/src/core/foreman.windowId.test.ts b/apps/factory/src/core/foreman.windowId.test.ts similarity index 100% rename from packages/factory/src/core/foreman.windowId.test.ts rename to apps/factory/src/core/foreman.windowId.test.ts diff --git a/packages/factory/src/core/foreman.windowId.ts b/apps/factory/src/core/foreman.windowId.ts similarity index 100% rename from packages/factory/src/core/foreman.windowId.ts rename to apps/factory/src/core/foreman.windowId.ts diff --git a/packages/factory/src/core/git.test.ts b/apps/factory/src/core/git.test.ts similarity index 100% rename from packages/factory/src/core/git.test.ts rename to apps/factory/src/core/git.test.ts diff --git a/packages/factory/src/core/git.ts b/apps/factory/src/core/git.ts similarity index 100% rename from packages/factory/src/core/git.ts rename to apps/factory/src/core/git.ts diff --git a/packages/factory/src/core/handoff.ts b/apps/factory/src/core/handoff.ts similarity index 100% rename from packages/factory/src/core/handoff.ts rename to apps/factory/src/core/handoff.ts diff --git a/packages/factory/src/core/hostInventory.test.ts b/apps/factory/src/core/hostInventory.test.ts similarity index 100% rename from packages/factory/src/core/hostInventory.test.ts rename to apps/factory/src/core/hostInventory.test.ts diff --git a/packages/factory/src/core/hostInventory.ts b/apps/factory/src/core/hostInventory.ts similarity index 100% rename from packages/factory/src/core/hostInventory.ts rename to apps/factory/src/core/hostInventory.ts diff --git a/packages/factory/src/core/inject.test.ts b/apps/factory/src/core/inject.test.ts similarity index 100% rename from packages/factory/src/core/inject.test.ts rename to apps/factory/src/core/inject.test.ts diff --git a/packages/factory/src/core/inject.ts b/apps/factory/src/core/inject.ts similarity index 100% rename from packages/factory/src/core/inject.ts rename to apps/factory/src/core/inject.ts diff --git a/packages/factory/src/core/labelgen.test.ts b/apps/factory/src/core/labelgen.test.ts similarity index 100% rename from packages/factory/src/core/labelgen.test.ts rename to apps/factory/src/core/labelgen.test.ts diff --git a/packages/factory/src/core/labelgen.ts b/apps/factory/src/core/labelgen.ts similarity index 100% rename from packages/factory/src/core/labelgen.ts rename to apps/factory/src/core/labelgen.ts diff --git a/packages/factory/src/core/liveSession.ts b/apps/factory/src/core/liveSession.ts similarity index 100% rename from packages/factory/src/core/liveSession.ts rename to apps/factory/src/core/liveSession.ts diff --git a/packages/factory/src/core/liveness.ts b/apps/factory/src/core/liveness.ts similarity index 100% rename from packages/factory/src/core/liveness.ts rename to apps/factory/src/core/liveness.ts diff --git a/packages/factory/src/core/panel.helpers.ts b/apps/factory/src/core/panel.helpers.ts similarity index 100% rename from packages/factory/src/core/panel.helpers.ts rename to apps/factory/src/core/panel.helpers.ts diff --git a/packages/factory/src/core/pdfEngine.test.ts b/apps/factory/src/core/pdfEngine.test.ts similarity index 100% rename from packages/factory/src/core/pdfEngine.test.ts rename to apps/factory/src/core/pdfEngine.test.ts diff --git a/packages/factory/src/core/pdfEngine.ts b/apps/factory/src/core/pdfEngine.ts similarity index 100% rename from packages/factory/src/core/pdfEngine.ts rename to apps/factory/src/core/pdfEngine.ts diff --git a/packages/factory/src/core/peerMessaging.test.ts b/apps/factory/src/core/peerMessaging.test.ts similarity index 100% rename from packages/factory/src/core/peerMessaging.test.ts rename to apps/factory/src/core/peerMessaging.test.ts diff --git a/packages/factory/src/core/peerMessaging.ts b/apps/factory/src/core/peerMessaging.ts similarity index 100% rename from packages/factory/src/core/peerMessaging.ts rename to apps/factory/src/core/peerMessaging.ts diff --git a/packages/factory/src/core/prChecks.test.ts b/apps/factory/src/core/prChecks.test.ts similarity index 100% rename from packages/factory/src/core/prChecks.test.ts rename to apps/factory/src/core/prChecks.test.ts diff --git a/packages/factory/src/core/prChecks.ts b/apps/factory/src/core/prChecks.ts similarity index 100% rename from packages/factory/src/core/prChecks.ts rename to apps/factory/src/core/prChecks.ts diff --git a/packages/factory/src/core/prewarm.simple.test.ts b/apps/factory/src/core/prewarm.simple.test.ts similarity index 100% rename from packages/factory/src/core/prewarm.simple.test.ts rename to apps/factory/src/core/prewarm.simple.test.ts diff --git a/packages/factory/src/core/prewarm.simple.ts b/apps/factory/src/core/prewarm.simple.ts similarity index 100% rename from packages/factory/src/core/prewarm.simple.ts rename to apps/factory/src/core/prewarm.simple.ts diff --git a/packages/factory/src/core/prewarm.test.ts b/apps/factory/src/core/prewarm.test.ts similarity index 100% rename from packages/factory/src/core/prewarm.test.ts rename to apps/factory/src/core/prewarm.test.ts diff --git a/packages/factory/src/core/prewarm.ts b/apps/factory/src/core/prewarm.ts similarity index 100% rename from packages/factory/src/core/prewarm.ts rename to apps/factory/src/core/prewarm.ts diff --git a/packages/factory/src/core/processStartTime.ts b/apps/factory/src/core/processStartTime.ts similarity index 100% rename from packages/factory/src/core/processStartTime.ts rename to apps/factory/src/core/processStartTime.ts diff --git a/packages/factory/src/core/projectDetect.test.ts b/apps/factory/src/core/projectDetect.test.ts similarity index 100% rename from packages/factory/src/core/projectDetect.test.ts rename to apps/factory/src/core/projectDetect.test.ts diff --git a/packages/factory/src/core/projectDetect.ts b/apps/factory/src/core/projectDetect.ts similarity index 100% rename from packages/factory/src/core/projectDetect.ts rename to apps/factory/src/core/projectDetect.ts diff --git a/packages/factory/src/core/projectIndex.test.ts b/apps/factory/src/core/projectIndex.test.ts similarity index 100% rename from packages/factory/src/core/projectIndex.test.ts rename to apps/factory/src/core/projectIndex.test.ts diff --git a/packages/factory/src/core/projectIndex.ts b/apps/factory/src/core/projectIndex.ts similarity index 100% rename from packages/factory/src/core/projectIndex.ts rename to apps/factory/src/core/projectIndex.ts diff --git a/packages/factory/src/core/prompts.test.ts b/apps/factory/src/core/prompts.test.ts similarity index 100% rename from packages/factory/src/core/prompts.test.ts rename to apps/factory/src/core/prompts.test.ts diff --git a/packages/factory/src/core/prompts.ts b/apps/factory/src/core/prompts.ts similarity index 100% rename from packages/factory/src/core/prompts.ts rename to apps/factory/src/core/prompts.ts diff --git a/packages/factory/src/core/remoteSessions.test.ts b/apps/factory/src/core/remoteSessions.test.ts similarity index 100% rename from packages/factory/src/core/remoteSessions.test.ts rename to apps/factory/src/core/remoteSessions.test.ts diff --git a/packages/factory/src/core/remoteSessions.ts b/apps/factory/src/core/remoteSessions.ts similarity index 100% rename from packages/factory/src/core/remoteSessions.ts rename to apps/factory/src/core/remoteSessions.ts diff --git a/packages/factory/src/core/repoIndex.test.ts b/apps/factory/src/core/repoIndex.test.ts similarity index 100% rename from packages/factory/src/core/repoIndex.test.ts rename to apps/factory/src/core/repoIndex.test.ts diff --git a/packages/factory/src/core/repoIndex.ts b/apps/factory/src/core/repoIndex.ts similarity index 100% rename from packages/factory/src/core/repoIndex.ts rename to apps/factory/src/core/repoIndex.ts diff --git a/packages/factory/src/core/repoSync.test.ts b/apps/factory/src/core/repoSync.test.ts similarity index 100% rename from packages/factory/src/core/repoSync.test.ts rename to apps/factory/src/core/repoSync.test.ts diff --git a/packages/factory/src/core/repoSync.ts b/apps/factory/src/core/repoSync.ts similarity index 100% rename from packages/factory/src/core/repoSync.ts rename to apps/factory/src/core/repoSync.ts diff --git a/packages/factory/src/core/resumeInBest.test.ts b/apps/factory/src/core/resumeInBest.test.ts similarity index 100% rename from packages/factory/src/core/resumeInBest.test.ts rename to apps/factory/src/core/resumeInBest.test.ts diff --git a/packages/factory/src/core/resumeInBest.ts b/apps/factory/src/core/resumeInBest.ts similarity index 100% rename from packages/factory/src/core/resumeInBest.ts rename to apps/factory/src/core/resumeInBest.ts diff --git a/packages/factory/src/core/rushToken.ts b/apps/factory/src/core/rushToken.ts similarity index 100% rename from packages/factory/src/core/rushToken.ts rename to apps/factory/src/core/rushToken.ts diff --git a/packages/factory/src/core/session-read.test.ts b/apps/factory/src/core/session-read.test.ts similarity index 100% rename from packages/factory/src/core/session-read.test.ts rename to apps/factory/src/core/session-read.test.ts diff --git a/packages/factory/src/core/session.activity.ts b/apps/factory/src/core/session.activity.ts similarity index 100% rename from packages/factory/src/core/session.activity.ts rename to apps/factory/src/core/session.activity.ts diff --git a/packages/factory/src/core/session.summary.test.ts b/apps/factory/src/core/session.summary.test.ts similarity index 100% rename from packages/factory/src/core/session.summary.test.ts rename to apps/factory/src/core/session.summary.test.ts diff --git a/packages/factory/src/core/session.summary.ts b/apps/factory/src/core/session.summary.ts similarity index 100% rename from packages/factory/src/core/session.summary.ts rename to apps/factory/src/core/session.summary.ts diff --git a/packages/factory/src/core/sessionName.test.ts b/apps/factory/src/core/sessionName.test.ts similarity index 100% rename from packages/factory/src/core/sessionName.test.ts rename to apps/factory/src/core/sessionName.test.ts diff --git a/packages/factory/src/core/sessionName.ts b/apps/factory/src/core/sessionName.ts similarity index 100% rename from packages/factory/src/core/sessionName.ts rename to apps/factory/src/core/sessionName.ts diff --git a/packages/factory/src/core/sessions.persist.ts b/apps/factory/src/core/sessions.persist.ts similarity index 100% rename from packages/factory/src/core/sessions.persist.ts rename to apps/factory/src/core/sessions.persist.ts diff --git a/packages/factory/src/core/sessions.ts b/apps/factory/src/core/sessions.ts similarity index 100% rename from packages/factory/src/core/sessions.ts rename to apps/factory/src/core/sessions.ts diff --git a/packages/factory/src/core/settings.test.ts b/apps/factory/src/core/settings.test.ts similarity index 100% rename from packages/factory/src/core/settings.test.ts rename to apps/factory/src/core/settings.test.ts diff --git a/packages/factory/src/core/settings.ts b/apps/factory/src/core/settings.ts similarity index 100% rename from packages/factory/src/core/settings.ts rename to apps/factory/src/core/settings.ts diff --git a/packages/factory/src/core/spawn.ts b/apps/factory/src/core/spawn.ts similarity index 100% rename from packages/factory/src/core/spawn.ts rename to apps/factory/src/core/spawn.ts diff --git a/packages/factory/src/core/swarm.detect.test.ts b/apps/factory/src/core/swarm.detect.test.ts similarity index 100% rename from packages/factory/src/core/swarm.detect.test.ts rename to apps/factory/src/core/swarm.detect.test.ts diff --git a/packages/factory/src/core/swarm.detect.ts b/apps/factory/src/core/swarm.detect.ts similarity index 100% rename from packages/factory/src/core/swarm.detect.ts rename to apps/factory/src/core/swarm.detect.ts diff --git a/packages/factory/src/core/swarm.skills.test.ts b/apps/factory/src/core/swarm.skills.test.ts similarity index 100% rename from packages/factory/src/core/swarm.skills.test.ts rename to apps/factory/src/core/swarm.skills.test.ts diff --git a/packages/factory/src/core/swarmifyConfig.test.ts b/apps/factory/src/core/swarmifyConfig.test.ts similarity index 100% rename from packages/factory/src/core/swarmifyConfig.test.ts rename to apps/factory/src/core/swarmifyConfig.test.ts diff --git a/packages/factory/src/core/swarmifyConfig.ts b/apps/factory/src/core/swarmifyConfig.ts similarity index 100% rename from packages/factory/src/core/swarmifyConfig.ts rename to apps/factory/src/core/swarmifyConfig.ts diff --git a/packages/factory/src/core/tasks.test.ts b/apps/factory/src/core/tasks.test.ts similarity index 100% rename from packages/factory/src/core/tasks.test.ts rename to apps/factory/src/core/tasks.test.ts diff --git a/packages/factory/src/core/tasks.ts b/apps/factory/src/core/tasks.ts similarity index 100% rename from packages/factory/src/core/tasks.ts rename to apps/factory/src/core/tasks.ts diff --git a/packages/factory/src/core/terminalReadiness.test.ts b/apps/factory/src/core/terminalReadiness.test.ts similarity index 100% rename from packages/factory/src/core/terminalReadiness.test.ts rename to apps/factory/src/core/terminalReadiness.test.ts diff --git a/packages/factory/src/core/terminalReadiness.ts b/apps/factory/src/core/terminalReadiness.ts similarity index 100% rename from packages/factory/src/core/terminalReadiness.ts rename to apps/factory/src/core/terminalReadiness.ts diff --git a/packages/factory/src/core/terminals.test.ts b/apps/factory/src/core/terminals.test.ts similarity index 100% rename from packages/factory/src/core/terminals.test.ts rename to apps/factory/src/core/terminals.test.ts diff --git a/packages/factory/src/core/terminals.ts b/apps/factory/src/core/terminals.ts similarity index 100% rename from packages/factory/src/core/terminals.ts rename to apps/factory/src/core/terminals.ts diff --git a/packages/factory/src/core/testdata/active-sessions.json b/apps/factory/src/core/testdata/active-sessions.json similarity index 100% rename from packages/factory/src/core/testdata/active-sessions.json rename to apps/factory/src/core/testdata/active-sessions.json diff --git a/packages/factory/src/core/testdata/agentlinks/AGENTS.md b/apps/factory/src/core/testdata/agentlinks/AGENTS.md similarity index 100% rename from packages/factory/src/core/testdata/agentlinks/AGENTS.md rename to apps/factory/src/core/testdata/agentlinks/AGENTS.md diff --git a/packages/factory/src/core/testdata/agentlinks/CLAUDE.md b/apps/factory/src/core/testdata/agentlinks/CLAUDE.md similarity index 100% rename from packages/factory/src/core/testdata/agentlinks/CLAUDE.md rename to apps/factory/src/core/testdata/agentlinks/CLAUDE.md diff --git a/packages/factory/src/core/testdata/agentlinks/GEMINI.md b/apps/factory/src/core/testdata/agentlinks/GEMINI.md similarity index 100% rename from packages/factory/src/core/testdata/agentlinks/GEMINI.md rename to apps/factory/src/core/testdata/agentlinks/GEMINI.md diff --git a/packages/factory/src/core/testdata/claude-session.jsonl b/apps/factory/src/core/testdata/claude-session.jsonl similarity index 100% rename from packages/factory/src/core/testdata/claude-session.jsonl rename to apps/factory/src/core/testdata/claude-session.jsonl diff --git a/packages/factory/src/core/testdata/claude-waiting.jsonl b/apps/factory/src/core/testdata/claude-waiting.jsonl similarity index 100% rename from packages/factory/src/core/testdata/claude-waiting.jsonl rename to apps/factory/src/core/testdata/claude-waiting.jsonl diff --git a/packages/factory/src/core/testdata/hostInventory/hosts-list.json b/apps/factory/src/core/testdata/hostInventory/hosts-list.json similarity index 100% rename from packages/factory/src/core/testdata/hostInventory/hosts-list.json rename to apps/factory/src/core/testdata/hostInventory/hosts-list.json diff --git a/packages/factory/src/core/testdata/hostInventory/view-host.json b/apps/factory/src/core/testdata/hostInventory/view-host.json similarity index 100% rename from packages/factory/src/core/testdata/hostInventory/view-host.json rename to apps/factory/src/core/testdata/hostInventory/view-host.json diff --git a/packages/factory/src/core/testdata/narrative-claude.jsonl b/apps/factory/src/core/testdata/narrative-claude.jsonl similarity index 100% rename from packages/factory/src/core/testdata/narrative-claude.jsonl rename to apps/factory/src/core/testdata/narrative-claude.jsonl diff --git a/packages/factory/src/core/testdata/narrative-codex.jsonl b/apps/factory/src/core/testdata/narrative-codex.jsonl similarity index 100% rename from packages/factory/src/core/testdata/narrative-codex.jsonl rename to apps/factory/src/core/testdata/narrative-codex.jsonl diff --git a/packages/factory/src/core/testdata/narrative-gemini.jsonl b/apps/factory/src/core/testdata/narrative-gemini.jsonl similarity index 100% rename from packages/factory/src/core/testdata/narrative-gemini.jsonl rename to apps/factory/src/core/testdata/narrative-gemini.jsonl diff --git a/packages/factory/src/core/testdata/view-claude.json b/apps/factory/src/core/testdata/view-claude.json similarity index 100% rename from packages/factory/src/core/testdata/view-claude.json rename to apps/factory/src/core/testdata/view-claude.json diff --git a/packages/factory/src/core/utils.test.ts b/apps/factory/src/core/utils.test.ts similarity index 100% rename from packages/factory/src/core/utils.test.ts rename to apps/factory/src/core/utils.test.ts diff --git a/packages/factory/src/core/utils.ts b/apps/factory/src/core/utils.ts similarity index 100% rename from packages/factory/src/core/utils.ts rename to apps/factory/src/core/utils.ts diff --git a/packages/factory/src/core/watchdog.test.ts b/apps/factory/src/core/watchdog.test.ts similarity index 100% rename from packages/factory/src/core/watchdog.test.ts rename to apps/factory/src/core/watchdog.test.ts diff --git a/packages/factory/src/core/watchdog.ts b/apps/factory/src/core/watchdog.ts similarity index 100% rename from packages/factory/src/core/watchdog.ts rename to apps/factory/src/core/watchdog.ts diff --git a/packages/factory/src/core/watchdogLog.test.ts b/apps/factory/src/core/watchdogLog.test.ts similarity index 100% rename from packages/factory/src/core/watchdogLog.test.ts rename to apps/factory/src/core/watchdogLog.test.ts diff --git a/packages/factory/src/core/watchdogLog.ts b/apps/factory/src/core/watchdogLog.ts similarity index 100% rename from packages/factory/src/core/watchdogLog.ts rename to apps/factory/src/core/watchdogLog.ts diff --git a/packages/factory/src/core/watchdogTail.test.ts b/apps/factory/src/core/watchdogTail.test.ts similarity index 100% rename from packages/factory/src/core/watchdogTail.test.ts rename to apps/factory/src/core/watchdogTail.test.ts diff --git a/packages/factory/src/core/watchdogTail.ts b/apps/factory/src/core/watchdogTail.ts similarity index 100% rename from packages/factory/src/core/watchdogTail.ts rename to apps/factory/src/core/watchdogTail.ts diff --git a/packages/factory/src/core/worktree.ts b/apps/factory/src/core/worktree.ts similarity index 100% rename from packages/factory/src/core/worktree.ts rename to apps/factory/src/core/worktree.ts diff --git a/packages/factory/src/mcp/watchdog-bridge.ts b/apps/factory/src/mcp/watchdog-bridge.ts similarity index 100% rename from packages/factory/src/mcp/watchdog-bridge.ts rename to apps/factory/src/mcp/watchdog-bridge.ts diff --git a/packages/factory/src/mcp/watchdog-server.ts b/apps/factory/src/mcp/watchdog-server.ts similarity index 100% rename from packages/factory/src/mcp/watchdog-server.ts rename to apps/factory/src/mcp/watchdog-server.ts diff --git a/packages/factory/src/mcp/watchdogInstall.ts b/apps/factory/src/mcp/watchdogInstall.ts similarity index 100% rename from packages/factory/src/mcp/watchdogInstall.ts rename to apps/factory/src/mcp/watchdogInstall.ts diff --git a/packages/factory/src/monitor/broadcast.test.ts b/apps/factory/src/monitor/broadcast.test.ts similarity index 100% rename from packages/factory/src/monitor/broadcast.test.ts rename to apps/factory/src/monitor/broadcast.test.ts diff --git a/packages/factory/src/monitor/broadcast.ts b/apps/factory/src/monitor/broadcast.ts similarity index 100% rename from packages/factory/src/monitor/broadcast.ts rename to apps/factory/src/monitor/broadcast.ts diff --git a/packages/factory/src/monitor/broadcastTypes.ts b/apps/factory/src/monitor/broadcastTypes.ts similarity index 100% rename from packages/factory/src/monitor/broadcastTypes.ts rename to apps/factory/src/monitor/broadcastTypes.ts diff --git a/packages/factory/src/monitor/follower.test.ts b/apps/factory/src/monitor/follower.test.ts similarity index 100% rename from packages/factory/src/monitor/follower.test.ts rename to apps/factory/src/monitor/follower.test.ts diff --git a/packages/factory/src/monitor/follower.ts b/apps/factory/src/monitor/follower.ts similarity index 100% rename from packages/factory/src/monitor/follower.ts rename to apps/factory/src/monitor/follower.ts diff --git a/packages/factory/src/monitor/gate.test.ts b/apps/factory/src/monitor/gate.test.ts similarity index 100% rename from packages/factory/src/monitor/gate.test.ts rename to apps/factory/src/monitor/gate.test.ts diff --git a/packages/factory/src/monitor/gate.ts b/apps/factory/src/monitor/gate.ts similarity index 100% rename from packages/factory/src/monitor/gate.ts rename to apps/factory/src/monitor/gate.ts diff --git a/packages/factory/src/monitor/host.ts b/apps/factory/src/monitor/host.ts similarity index 100% rename from packages/factory/src/monitor/host.ts rename to apps/factory/src/monitor/host.ts diff --git a/packages/factory/src/monitor/leader.test.ts b/apps/factory/src/monitor/leader.test.ts similarity index 100% rename from packages/factory/src/monitor/leader.test.ts rename to apps/factory/src/monitor/leader.test.ts diff --git a/packages/factory/src/monitor/leader.ts b/apps/factory/src/monitor/leader.ts similarity index 100% rename from packages/factory/src/monitor/leader.ts rename to apps/factory/src/monitor/leader.ts diff --git a/packages/factory/src/monitor/lease.ts b/apps/factory/src/monitor/lease.ts similarity index 100% rename from packages/factory/src/monitor/lease.ts rename to apps/factory/src/monitor/lease.ts diff --git a/packages/factory/src/monitor/panelSnapshotBroadcast.test.ts b/apps/factory/src/monitor/panelSnapshotBroadcast.test.ts similarity index 100% rename from packages/factory/src/monitor/panelSnapshotBroadcast.test.ts rename to apps/factory/src/monitor/panelSnapshotBroadcast.test.ts diff --git a/packages/factory/src/monitor/probes.ts b/apps/factory/src/monitor/probes.ts similarity index 100% rename from packages/factory/src/monitor/probes.ts rename to apps/factory/src/monitor/probes.ts diff --git a/packages/factory/src/monitor/protocol.ts b/apps/factory/src/monitor/protocol.ts similarity index 100% rename from packages/factory/src/monitor/protocol.ts rename to apps/factory/src/monitor/protocol.ts diff --git a/packages/factory/src/monitor/readinessBroadcast.test.ts b/apps/factory/src/monitor/readinessBroadcast.test.ts similarity index 100% rename from packages/factory/src/monitor/readinessBroadcast.test.ts rename to apps/factory/src/monitor/readinessBroadcast.test.ts diff --git a/packages/factory/src/monitor/readinessDetector.test.ts b/apps/factory/src/monitor/readinessDetector.test.ts similarity index 100% rename from packages/factory/src/monitor/readinessDetector.test.ts rename to apps/factory/src/monitor/readinessDetector.test.ts diff --git a/packages/factory/src/monitor/readinessDetector.ts b/apps/factory/src/monitor/readinessDetector.ts similarity index 100% rename from packages/factory/src/monitor/readinessDetector.ts rename to apps/factory/src/monitor/readinessDetector.ts diff --git a/packages/factory/src/monitor/sessionParse.ts b/apps/factory/src/monitor/sessionParse.ts similarity index 100% rename from packages/factory/src/monitor/sessionParse.ts rename to apps/factory/src/monitor/sessionParse.ts diff --git a/packages/factory/src/monitor/sessionWatcher.test.ts b/apps/factory/src/monitor/sessionWatcher.test.ts similarity index 100% rename from packages/factory/src/monitor/sessionWatcher.test.ts rename to apps/factory/src/monitor/sessionWatcher.test.ts diff --git a/packages/factory/src/monitor/sessionWatcher.ts b/apps/factory/src/monitor/sessionWatcher.ts similarity index 100% rename from packages/factory/src/monitor/sessionWatcher.ts rename to apps/factory/src/monitor/sessionWatcher.ts diff --git a/packages/factory/src/monitor/snapshotDetector.test.ts b/apps/factory/src/monitor/snapshotDetector.test.ts similarity index 100% rename from packages/factory/src/monitor/snapshotDetector.test.ts rename to apps/factory/src/monitor/snapshotDetector.test.ts diff --git a/packages/factory/src/monitor/snapshotDetector.ts b/apps/factory/src/monitor/snapshotDetector.ts similarity index 100% rename from packages/factory/src/monitor/snapshotDetector.ts rename to apps/factory/src/monitor/snapshotDetector.ts diff --git a/packages/factory/src/monitor/watchdogBroadcast.test.ts b/apps/factory/src/monitor/watchdogBroadcast.test.ts similarity index 100% rename from packages/factory/src/monitor/watchdogBroadcast.test.ts rename to apps/factory/src/monitor/watchdogBroadcast.test.ts diff --git a/packages/factory/src/monitor/watchdogDetector.test.ts b/apps/factory/src/monitor/watchdogDetector.test.ts similarity index 100% rename from packages/factory/src/monitor/watchdogDetector.test.ts rename to apps/factory/src/monitor/watchdogDetector.test.ts diff --git a/packages/factory/src/monitor/watchdogDetector.ts b/apps/factory/src/monitor/watchdogDetector.ts similarity index 100% rename from packages/factory/src/monitor/watchdogDetector.ts rename to apps/factory/src/monitor/watchdogDetector.ts diff --git a/packages/factory/src/vscode/agentPanel.vscode.ts b/apps/factory/src/vscode/agentPanel.vscode.ts similarity index 100% rename from packages/factory/src/vscode/agentPanel.vscode.ts rename to apps/factory/src/vscode/agentPanel.vscode.ts diff --git a/packages/factory/src/vscode/agentlinks.vscode.test.ts b/apps/factory/src/vscode/agentlinks.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/agentlinks.vscode.test.ts rename to apps/factory/src/vscode/agentlinks.vscode.test.ts diff --git a/packages/factory/src/vscode/agentlinks.vscode.ts b/apps/factory/src/vscode/agentlinks.vscode.ts similarity index 100% rename from packages/factory/src/vscode/agentlinks.vscode.ts rename to apps/factory/src/vscode/agentlinks.vscode.ts diff --git a/packages/factory/src/vscode/agents.vscode.ts b/apps/factory/src/vscode/agents.vscode.ts similarity index 100% rename from packages/factory/src/vscode/agents.vscode.ts rename to apps/factory/src/vscode/agents.vscode.ts diff --git a/packages/factory/src/vscode/claudemd.vscode.ts b/apps/factory/src/vscode/claudemd.vscode.ts similarity index 100% rename from packages/factory/src/vscode/claudemd.vscode.ts rename to apps/factory/src/vscode/claudemd.vscode.ts diff --git a/packages/factory/src/vscode/contextFiles.ts b/apps/factory/src/vscode/contextFiles.ts similarity index 100% rename from packages/factory/src/vscode/contextFiles.ts rename to apps/factory/src/vscode/contextFiles.ts diff --git a/packages/factory/src/vscode/customEditor.ts b/apps/factory/src/vscode/customEditor.ts similarity index 100% rename from packages/factory/src/vscode/customEditor.ts rename to apps/factory/src/vscode/customEditor.ts diff --git a/packages/factory/src/vscode/deviceHealth.vscode.ts b/apps/factory/src/vscode/deviceHealth.vscode.ts similarity index 100% rename from packages/factory/src/vscode/deviceHealth.vscode.ts rename to apps/factory/src/vscode/deviceHealth.vscode.ts diff --git a/packages/factory/src/vscode/extension.ts b/apps/factory/src/vscode/extension.ts similarity index 100% rename from packages/factory/src/vscode/extension.ts rename to apps/factory/src/vscode/extension.ts diff --git a/packages/factory/src/vscode/foreman.audio.ts b/apps/factory/src/vscode/foreman.audio.ts similarity index 100% rename from packages/factory/src/vscode/foreman.audio.ts rename to apps/factory/src/vscode/foreman.audio.ts diff --git a/packages/factory/src/vscode/foreman.registry.ts b/apps/factory/src/vscode/foreman.registry.ts similarity index 100% rename from packages/factory/src/vscode/foreman.registry.ts rename to apps/factory/src/vscode/foreman.registry.ts diff --git a/packages/factory/src/vscode/foreman.smart.ts b/apps/factory/src/vscode/foreman.smart.ts similarity index 100% rename from packages/factory/src/vscode/foreman.smart.ts rename to apps/factory/src/vscode/foreman.smart.ts diff --git a/packages/factory/src/vscode/foreman.sources.ts b/apps/factory/src/vscode/foreman.sources.ts similarity index 100% rename from packages/factory/src/vscode/foreman.sources.ts rename to apps/factory/src/vscode/foreman.sources.ts diff --git a/packages/factory/src/vscode/foreman.vscode.ts b/apps/factory/src/vscode/foreman.vscode.ts similarity index 100% rename from packages/factory/src/vscode/foreman.vscode.ts rename to apps/factory/src/vscode/foreman.vscode.ts diff --git a/packages/factory/src/vscode/git.integration.test.ts b/apps/factory/src/vscode/git.integration.test.ts similarity index 100% rename from packages/factory/src/vscode/git.integration.test.ts rename to apps/factory/src/vscode/git.integration.test.ts diff --git a/packages/factory/src/vscode/git.vscode.ts b/apps/factory/src/vscode/git.vscode.ts similarity index 100% rename from packages/factory/src/vscode/git.vscode.ts rename to apps/factory/src/vscode/git.vscode.ts diff --git a/packages/factory/src/vscode/github.vscode.ts b/apps/factory/src/vscode/github.vscode.ts similarity index 100% rename from packages/factory/src/vscode/github.vscode.ts rename to apps/factory/src/vscode/github.vscode.ts diff --git a/packages/factory/src/vscode/issuesPanel.vscode.ts b/apps/factory/src/vscode/issuesPanel.vscode.ts similarity index 100% rename from packages/factory/src/vscode/issuesPanel.vscode.ts rename to apps/factory/src/vscode/issuesPanel.vscode.ts diff --git a/packages/factory/src/vscode/linear.vscode.ts b/apps/factory/src/vscode/linear.vscode.ts similarity index 100% rename from packages/factory/src/vscode/linear.vscode.ts rename to apps/factory/src/vscode/linear.vscode.ts diff --git a/packages/factory/src/vscode/notifications.vscode.ts b/apps/factory/src/vscode/notifications.vscode.ts similarity index 100% rename from packages/factory/src/vscode/notifications.vscode.ts rename to apps/factory/src/vscode/notifications.vscode.ts diff --git a/packages/factory/src/vscode/prewarm.e2e.test.ts b/apps/factory/src/vscode/prewarm.e2e.test.ts similarity index 100% rename from packages/factory/src/vscode/prewarm.e2e.test.ts rename to apps/factory/src/vscode/prewarm.e2e.test.ts diff --git a/packages/factory/src/vscode/prewarm.vscode.ts b/apps/factory/src/vscode/prewarm.vscode.ts similarity index 100% rename from packages/factory/src/vscode/prewarm.vscode.ts rename to apps/factory/src/vscode/prewarm.vscode.ts diff --git a/packages/factory/src/vscode/recap.vscode.test.ts b/apps/factory/src/vscode/recap.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/recap.vscode.test.ts rename to apps/factory/src/vscode/recap.vscode.test.ts diff --git a/packages/factory/src/vscode/recap.vscode.ts b/apps/factory/src/vscode/recap.vscode.ts similarity index 100% rename from packages/factory/src/vscode/recap.vscode.ts rename to apps/factory/src/vscode/recap.vscode.ts diff --git a/packages/factory/src/vscode/remoteSessions.vscode.test.ts b/apps/factory/src/vscode/remoteSessions.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/remoteSessions.vscode.test.ts rename to apps/factory/src/vscode/remoteSessions.vscode.test.ts diff --git a/packages/factory/src/vscode/remoteSessions.vscode.ts b/apps/factory/src/vscode/remoteSessions.vscode.ts similarity index 100% rename from packages/factory/src/vscode/remoteSessions.vscode.ts rename to apps/factory/src/vscode/remoteSessions.vscode.ts diff --git a/packages/factory/src/vscode/sessionTracker.followerRouting.test.ts b/apps/factory/src/vscode/sessionTracker.followerRouting.test.ts similarity index 100% rename from packages/factory/src/vscode/sessionTracker.followerRouting.test.ts rename to apps/factory/src/vscode/sessionTracker.followerRouting.test.ts diff --git a/packages/factory/src/vscode/sessionTracker.test.ts b/apps/factory/src/vscode/sessionTracker.test.ts similarity index 100% rename from packages/factory/src/vscode/sessionTracker.test.ts rename to apps/factory/src/vscode/sessionTracker.test.ts diff --git a/packages/factory/src/vscode/sessionTracker.ts b/apps/factory/src/vscode/sessionTracker.ts similarity index 100% rename from packages/factory/src/vscode/sessionTracker.ts rename to apps/factory/src/vscode/sessionTracker.ts diff --git a/packages/factory/src/vscode/sessions.vscode.test.ts b/apps/factory/src/vscode/sessions.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/sessions.vscode.test.ts rename to apps/factory/src/vscode/sessions.vscode.test.ts diff --git a/packages/factory/src/vscode/sessions.vscode.ts b/apps/factory/src/vscode/sessions.vscode.ts similarity index 100% rename from packages/factory/src/vscode/sessions.vscode.ts rename to apps/factory/src/vscode/sessions.vscode.ts diff --git a/packages/factory/src/vscode/settings.vscode.ts b/apps/factory/src/vscode/settings.vscode.ts similarity index 100% rename from packages/factory/src/vscode/settings.vscode.ts rename to apps/factory/src/vscode/settings.vscode.ts diff --git a/packages/factory/src/vscode/swarm.vscode.ts b/apps/factory/src/vscode/swarm.vscode.ts similarity index 100% rename from packages/factory/src/vscode/swarm.vscode.ts rename to apps/factory/src/vscode/swarm.vscode.ts diff --git a/packages/factory/src/vscode/swarmifyConfig.vscode.test.ts b/apps/factory/src/vscode/swarmifyConfig.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/swarmifyConfig.vscode.test.ts rename to apps/factory/src/vscode/swarmifyConfig.vscode.test.ts diff --git a/packages/factory/src/vscode/swarmifyConfig.vscode.ts b/apps/factory/src/vscode/swarmifyConfig.vscode.ts similarity index 100% rename from packages/factory/src/vscode/swarmifyConfig.vscode.ts rename to apps/factory/src/vscode/swarmifyConfig.vscode.ts diff --git a/packages/factory/src/vscode/tasks.vscode.ts b/apps/factory/src/vscode/tasks.vscode.ts similarity index 100% rename from packages/factory/src/vscode/tasks.vscode.ts rename to apps/factory/src/vscode/tasks.vscode.ts diff --git a/packages/factory/src/vscode/terminalReadiness.followerRouting.test.ts b/apps/factory/src/vscode/terminalReadiness.followerRouting.test.ts similarity index 100% rename from packages/factory/src/vscode/terminalReadiness.followerRouting.test.ts rename to apps/factory/src/vscode/terminalReadiness.followerRouting.test.ts diff --git a/packages/factory/src/vscode/terminalReadiness.integration.test.ts b/apps/factory/src/vscode/terminalReadiness.integration.test.ts similarity index 100% rename from packages/factory/src/vscode/terminalReadiness.integration.test.ts rename to apps/factory/src/vscode/terminalReadiness.integration.test.ts diff --git a/packages/factory/src/vscode/terminalReadiness.ts b/apps/factory/src/vscode/terminalReadiness.ts similarity index 100% rename from packages/factory/src/vscode/terminalReadiness.ts rename to apps/factory/src/vscode/terminalReadiness.ts diff --git a/packages/factory/src/vscode/terminals.vscode.test.ts b/apps/factory/src/vscode/terminals.vscode.test.ts similarity index 100% rename from packages/factory/src/vscode/terminals.vscode.test.ts rename to apps/factory/src/vscode/terminals.vscode.test.ts diff --git a/packages/factory/src/vscode/terminals.vscode.ts b/apps/factory/src/vscode/terminals.vscode.ts similarity index 100% rename from packages/factory/src/vscode/terminals.vscode.ts rename to apps/factory/src/vscode/terminals.vscode.ts diff --git a/packages/factory/src/vscode/theme.vscode.ts b/apps/factory/src/vscode/theme.vscode.ts similarity index 100% rename from packages/factory/src/vscode/theme.vscode.ts rename to apps/factory/src/vscode/theme.vscode.ts diff --git a/packages/factory/src/vscode/tmux.ts b/apps/factory/src/vscode/tmux.ts similarity index 100% rename from packages/factory/src/vscode/tmux.ts rename to apps/factory/src/vscode/tmux.ts diff --git a/packages/factory/src/vscode/watchdog.vscode.ts b/apps/factory/src/vscode/watchdog.vscode.ts similarity index 100% rename from packages/factory/src/vscode/watchdog.vscode.ts rename to apps/factory/src/vscode/watchdog.vscode.ts diff --git a/packages/factory/src/vscode/workbench.vscode.ts b/apps/factory/src/vscode/workbench.vscode.ts similarity index 100% rename from packages/factory/src/vscode/workbench.vscode.ts rename to apps/factory/src/vscode/workbench.vscode.ts diff --git a/packages/factory/tsconfig.json b/apps/factory/tsconfig.json similarity index 100% rename from packages/factory/tsconfig.json rename to apps/factory/tsconfig.json diff --git a/packages/factory/ui/.gitignore b/apps/factory/ui/.gitignore similarity index 100% rename from packages/factory/ui/.gitignore rename to apps/factory/ui/.gitignore diff --git a/packages/factory/ui/AGENTS.md b/apps/factory/ui/AGENTS.md similarity index 100% rename from packages/factory/ui/AGENTS.md rename to apps/factory/ui/AGENTS.md diff --git a/packages/factory/ui/CLAUDE.md b/apps/factory/ui/CLAUDE.md similarity index 100% rename from packages/factory/ui/CLAUDE.md rename to apps/factory/ui/CLAUDE.md diff --git a/packages/factory/ui/GEMINI.md b/apps/factory/ui/GEMINI.md similarity index 100% rename from packages/factory/ui/GEMINI.md rename to apps/factory/ui/GEMINI.md diff --git a/packages/factory/ui/bun.lock b/apps/factory/ui/bun.lock similarity index 100% rename from packages/factory/ui/bun.lock rename to apps/factory/ui/bun.lock diff --git a/packages/factory/ui/design-explorations/layout-1-mission-control.html b/apps/factory/ui/design-explorations/layout-1-mission-control.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-1-mission-control.html rename to apps/factory/ui/design-explorations/layout-1-mission-control.html diff --git a/packages/factory/ui/design-explorations/layout-2-split-ops.html b/apps/factory/ui/design-explorations/layout-2-split-ops.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-2-split-ops.html rename to apps/factory/ui/design-explorations/layout-2-split-ops.html diff --git a/packages/factory/ui/design-explorations/layout-3-grid-matrix.html b/apps/factory/ui/design-explorations/layout-3-grid-matrix.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-3-grid-matrix.html rename to apps/factory/ui/design-explorations/layout-3-grid-matrix.html diff --git a/packages/factory/ui/design-explorations/layout-4-timeline-rail.html b/apps/factory/ui/design-explorations/layout-4-timeline-rail.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-4-timeline-rail.html rename to apps/factory/ui/design-explorations/layout-4-timeline-rail.html diff --git a/packages/factory/ui/design-explorations/layout-5-dashboard-gauges.html b/apps/factory/ui/design-explorations/layout-5-dashboard-gauges.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-5-dashboard-gauges.html rename to apps/factory/ui/design-explorations/layout-5-dashboard-gauges.html diff --git a/packages/factory/ui/design-explorations/layout-6-kanban-flow.html b/apps/factory/ui/design-explorations/layout-6-kanban-flow.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-6-kanban-flow.html rename to apps/factory/ui/design-explorations/layout-6-kanban-flow.html diff --git a/packages/factory/ui/design-explorations/layout-7-task-staleness.html b/apps/factory/ui/design-explorations/layout-7-task-staleness.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-7-task-staleness.html rename to apps/factory/ui/design-explorations/layout-7-task-staleness.html diff --git a/packages/factory/ui/design-explorations/layout-8-calendar-gradient.html b/apps/factory/ui/design-explorations/layout-8-calendar-gradient.html similarity index 100% rename from packages/factory/ui/design-explorations/layout-8-calendar-gradient.html rename to apps/factory/ui/design-explorations/layout-8-calendar-gradient.html diff --git a/packages/factory/ui/editor/App.tsx b/apps/factory/ui/editor/App.tsx similarity index 100% rename from packages/factory/ui/editor/App.tsx rename to apps/factory/ui/editor/App.tsx diff --git a/packages/factory/ui/editor/components/BubbleMenu.tsx b/apps/factory/ui/editor/components/BubbleMenu.tsx similarity index 100% rename from packages/factory/ui/editor/components/BubbleMenu.tsx rename to apps/factory/ui/editor/components/BubbleMenu.tsx diff --git a/packages/factory/ui/editor/components/Editor.tsx b/apps/factory/ui/editor/components/Editor.tsx similarity index 100% rename from packages/factory/ui/editor/components/Editor.tsx rename to apps/factory/ui/editor/components/Editor.tsx diff --git a/packages/factory/ui/editor/components/FrontmatterPanel.tsx b/apps/factory/ui/editor/components/FrontmatterPanel.tsx similarity index 100% rename from packages/factory/ui/editor/components/FrontmatterPanel.tsx rename to apps/factory/ui/editor/components/FrontmatterPanel.tsx diff --git a/packages/factory/ui/editor/components/Outline.tsx b/apps/factory/ui/editor/components/Outline.tsx similarity index 100% rename from packages/factory/ui/editor/components/Outline.tsx rename to apps/factory/ui/editor/components/Outline.tsx diff --git a/packages/factory/ui/editor/components/SlashCommandsList.tsx b/apps/factory/ui/editor/components/SlashCommandsList.tsx similarity index 100% rename from packages/factory/ui/editor/components/SlashCommandsList.tsx rename to apps/factory/ui/editor/components/SlashCommandsList.tsx diff --git a/packages/factory/ui/editor/components/Toolbar.tsx b/apps/factory/ui/editor/components/Toolbar.tsx similarity index 100% rename from packages/factory/ui/editor/components/Toolbar.tsx rename to apps/factory/ui/editor/components/Toolbar.tsx diff --git a/packages/factory/ui/editor/extensions/Callout.ts b/apps/factory/ui/editor/extensions/Callout.ts similarity index 100% rename from packages/factory/ui/editor/extensions/Callout.ts rename to apps/factory/ui/editor/extensions/Callout.ts diff --git a/packages/factory/ui/editor/extensions/FileAttachment.ts b/apps/factory/ui/editor/extensions/FileAttachment.ts similarity index 100% rename from packages/factory/ui/editor/extensions/FileAttachment.ts rename to apps/factory/ui/editor/extensions/FileAttachment.ts diff --git a/packages/factory/ui/editor/extensions/KeyboardShortcuts.ts b/apps/factory/ui/editor/extensions/KeyboardShortcuts.ts similarity index 100% rename from packages/factory/ui/editor/extensions/KeyboardShortcuts.ts rename to apps/factory/ui/editor/extensions/KeyboardShortcuts.ts diff --git a/packages/factory/ui/editor/extensions/SlashCommands.ts b/apps/factory/ui/editor/extensions/SlashCommands.ts similarity index 100% rename from packages/factory/ui/editor/extensions/SlashCommands.ts rename to apps/factory/ui/editor/extensions/SlashCommands.ts diff --git a/packages/factory/ui/editor/extensions/Toggle.ts b/apps/factory/ui/editor/extensions/Toggle.ts similarity index 100% rename from packages/factory/ui/editor/extensions/Toggle.ts rename to apps/factory/ui/editor/extensions/Toggle.ts diff --git a/packages/factory/ui/editor/extensions/VideoBlock.ts b/apps/factory/ui/editor/extensions/VideoBlock.ts similarity index 100% rename from packages/factory/ui/editor/extensions/VideoBlock.ts rename to apps/factory/ui/editor/extensions/VideoBlock.ts diff --git a/packages/factory/ui/editor/frontmatter.test.ts b/apps/factory/ui/editor/frontmatter.test.ts similarity index 100% rename from packages/factory/ui/editor/frontmatter.test.ts rename to apps/factory/ui/editor/frontmatter.test.ts diff --git a/packages/factory/ui/editor/frontmatter.ts b/apps/factory/ui/editor/frontmatter.ts similarity index 100% rename from packages/factory/ui/editor/frontmatter.ts rename to apps/factory/ui/editor/frontmatter.ts diff --git a/packages/factory/ui/editor/index.html b/apps/factory/ui/editor/index.html similarity index 100% rename from packages/factory/ui/editor/index.html rename to apps/factory/ui/editor/index.html diff --git a/packages/factory/ui/editor/main.tsx b/apps/factory/ui/editor/main.tsx similarity index 100% rename from packages/factory/ui/editor/main.tsx rename to apps/factory/ui/editor/main.tsx diff --git a/packages/factory/ui/editor/styles.css b/apps/factory/ui/editor/styles.css similarity index 100% rename from packages/factory/ui/editor/styles.css rename to apps/factory/ui/editor/styles.css diff --git a/packages/factory/ui/package.json b/apps/factory/ui/package.json similarity index 100% rename from packages/factory/ui/package.json rename to apps/factory/ui/package.json diff --git a/packages/factory/ui/settings/App.tsx b/apps/factory/ui/settings/App.tsx similarity index 100% rename from packages/factory/ui/settings/App.tsx rename to apps/factory/ui/settings/App.tsx diff --git a/packages/factory/ui/settings/components/FactorySection.tsx b/apps/factory/ui/settings/components/FactorySection.tsx similarity index 100% rename from packages/factory/ui/settings/components/FactorySection.tsx rename to apps/factory/ui/settings/components/FactorySection.tsx diff --git a/packages/factory/ui/settings/components/bench/BenchTab.tsx b/apps/factory/ui/settings/components/bench/BenchTab.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/BenchTab.tsx rename to apps/factory/ui/settings/components/bench/BenchTab.tsx diff --git a/packages/factory/ui/settings/components/bench/CycleBar.tsx b/apps/factory/ui/settings/components/bench/CycleBar.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/CycleBar.tsx rename to apps/factory/ui/settings/components/bench/CycleBar.tsx diff --git a/packages/factory/ui/settings/components/bench/DeadlineView.tsx b/apps/factory/ui/settings/components/bench/DeadlineView.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/DeadlineView.tsx rename to apps/factory/ui/settings/components/bench/DeadlineView.tsx diff --git a/packages/factory/ui/settings/components/bench/KanbanBoard.tsx b/apps/factory/ui/settings/components/bench/KanbanBoard.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/KanbanBoard.tsx rename to apps/factory/ui/settings/components/bench/KanbanBoard.tsx diff --git a/packages/factory/ui/settings/components/bench/TaskCalendar.tsx b/apps/factory/ui/settings/components/bench/TaskCalendar.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/TaskCalendar.tsx rename to apps/factory/ui/settings/components/bench/TaskCalendar.tsx diff --git a/packages/factory/ui/settings/components/bench/TaskCard.tsx b/apps/factory/ui/settings/components/bench/TaskCard.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/TaskCard.tsx rename to apps/factory/ui/settings/components/bench/TaskCard.tsx diff --git a/packages/factory/ui/settings/components/bench/TaskDetail.tsx b/apps/factory/ui/settings/components/bench/TaskDetail.tsx similarity index 100% rename from packages/factory/ui/settings/components/bench/TaskDetail.tsx rename to apps/factory/ui/settings/components/bench/TaskDetail.tsx diff --git a/packages/factory/ui/settings/components/bench/bench.css b/apps/factory/ui/settings/components/bench/bench.css similarity index 100% rename from packages/factory/ui/settings/components/bench/bench.css rename to apps/factory/ui/settings/components/bench/bench.css diff --git a/packages/factory/ui/settings/components/bench/index.ts b/apps/factory/ui/settings/components/bench/index.ts similarity index 100% rename from packages/factory/ui/settings/components/bench/index.ts rename to apps/factory/ui/settings/components/bench/index.ts diff --git a/packages/factory/ui/settings/components/common/CheckboxField.tsx b/apps/factory/ui/settings/components/common/CheckboxField.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/CheckboxField.tsx rename to apps/factory/ui/settings/components/common/CheckboxField.tsx diff --git a/packages/factory/ui/settings/components/common/ExtLink.tsx b/apps/factory/ui/settings/components/common/ExtLink.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/ExtLink.tsx rename to apps/factory/ui/settings/components/common/ExtLink.tsx diff --git a/packages/factory/ui/settings/components/common/OAuthButtons.tsx b/apps/factory/ui/settings/components/common/OAuthButtons.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/OAuthButtons.tsx rename to apps/factory/ui/settings/components/common/OAuthButtons.tsx diff --git a/packages/factory/ui/settings/components/common/OAuthDialog.tsx b/apps/factory/ui/settings/components/common/OAuthDialog.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/OAuthDialog.tsx rename to apps/factory/ui/settings/components/common/OAuthDialog.tsx diff --git a/packages/factory/ui/settings/components/common/SectionHeader.tsx b/apps/factory/ui/settings/components/common/SectionHeader.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/SectionHeader.tsx rename to apps/factory/ui/settings/components/common/SectionHeader.tsx diff --git a/packages/factory/ui/settings/components/common/StatusBadge.tsx b/apps/factory/ui/settings/components/common/StatusBadge.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/StatusBadge.tsx rename to apps/factory/ui/settings/components/common/StatusBadge.tsx diff --git a/packages/factory/ui/settings/components/common/WorkspaceConfigSection.tsx b/apps/factory/ui/settings/components/common/WorkspaceConfigSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/common/WorkspaceConfigSection.tsx rename to apps/factory/ui/settings/components/common/WorkspaceConfigSection.tsx diff --git a/packages/factory/ui/settings/components/common/index.ts b/apps/factory/ui/settings/components/common/index.ts similarity index 100% rename from packages/factory/ui/settings/components/common/index.ts rename to apps/factory/ui/settings/components/common/index.ts diff --git a/packages/factory/ui/settings/components/dashboard/AgentTerminalsSection.tsx b/apps/factory/ui/settings/components/dashboard/AgentTerminalsSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/AgentTerminalsSection.tsx rename to apps/factory/ui/settings/components/dashboard/AgentTerminalsSection.tsx diff --git a/packages/factory/ui/settings/components/dashboard/ApprovalQueueSection.tsx b/apps/factory/ui/settings/components/dashboard/ApprovalQueueSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/ApprovalQueueSection.tsx rename to apps/factory/ui/settings/components/dashboard/ApprovalQueueSection.tsx diff --git a/packages/factory/ui/settings/components/dashboard/DashboardIntro.tsx b/apps/factory/ui/settings/components/dashboard/DashboardIntro.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/DashboardIntro.tsx rename to apps/factory/ui/settings/components/dashboard/DashboardIntro.tsx diff --git a/packages/factory/ui/settings/components/dashboard/RecentSwarmsSection.tsx b/apps/factory/ui/settings/components/dashboard/RecentSwarmsSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/RecentSwarmsSection.tsx rename to apps/factory/ui/settings/components/dashboard/RecentSwarmsSection.tsx diff --git a/packages/factory/ui/settings/components/dashboard/RunningAgentsSection.tsx b/apps/factory/ui/settings/components/dashboard/RunningAgentsSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/RunningAgentsSection.tsx rename to apps/factory/ui/settings/components/dashboard/RunningAgentsSection.tsx diff --git a/packages/factory/ui/settings/components/dashboard/ShortcutsSection.tsx b/apps/factory/ui/settings/components/dashboard/ShortcutsSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/dashboard/ShortcutsSection.tsx rename to apps/factory/ui/settings/components/dashboard/ShortcutsSection.tsx diff --git a/packages/factory/ui/settings/components/dashboard/helpers.test.ts b/apps/factory/ui/settings/components/dashboard/helpers.test.ts similarity index 100% rename from packages/factory/ui/settings/components/dashboard/helpers.test.ts rename to apps/factory/ui/settings/components/dashboard/helpers.test.ts diff --git a/packages/factory/ui/settings/components/dashboard/helpers.ts b/apps/factory/ui/settings/components/dashboard/helpers.ts similarity index 100% rename from packages/factory/ui/settings/components/dashboard/helpers.ts rename to apps/factory/ui/settings/components/dashboard/helpers.ts diff --git a/packages/factory/ui/settings/components/foreman/ForemanCursor.tsx b/apps/factory/ui/settings/components/foreman/ForemanCursor.tsx similarity index 100% rename from packages/factory/ui/settings/components/foreman/ForemanCursor.tsx rename to apps/factory/ui/settings/components/foreman/ForemanCursor.tsx diff --git a/packages/factory/ui/settings/components/foreman/ForemanOrb.tsx b/apps/factory/ui/settings/components/foreman/ForemanOrb.tsx similarity index 100% rename from packages/factory/ui/settings/components/foreman/ForemanOrb.tsx rename to apps/factory/ui/settings/components/foreman/ForemanOrb.tsx diff --git a/packages/factory/ui/settings/components/foreman/index.ts b/apps/factory/ui/settings/components/foreman/index.ts similarity index 100% rename from packages/factory/ui/settings/components/foreman/index.ts rename to apps/factory/ui/settings/components/foreman/index.ts diff --git a/packages/factory/ui/settings/components/mission-control/ActiveSwarmsPane.tsx b/apps/factory/ui/settings/components/mission-control/ActiveSwarmsPane.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/ActiveSwarmsPane.tsx rename to apps/factory/ui/settings/components/mission-control/ActiveSwarmsPane.tsx diff --git a/packages/factory/ui/settings/components/mission-control/AgentAvatar.test.ts b/apps/factory/ui/settings/components/mission-control/AgentAvatar.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/AgentAvatar.test.ts rename to apps/factory/ui/settings/components/mission-control/AgentAvatar.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/AgentAvatar.tsx b/apps/factory/ui/settings/components/mission-control/AgentAvatar.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/AgentAvatar.tsx rename to apps/factory/ui/settings/components/mission-control/AgentAvatar.tsx diff --git a/packages/factory/ui/settings/components/mission-control/AgentSelect.tsx b/apps/factory/ui/settings/components/mission-control/AgentSelect.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/AgentSelect.tsx rename to apps/factory/ui/settings/components/mission-control/AgentSelect.tsx diff --git a/packages/factory/ui/settings/components/mission-control/AgentTerminalsPane.tsx b/apps/factory/ui/settings/components/mission-control/AgentTerminalsPane.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/AgentTerminalsPane.tsx rename to apps/factory/ui/settings/components/mission-control/AgentTerminalsPane.tsx diff --git a/packages/factory/ui/settings/components/mission-control/BacklogCenter.tsx b/apps/factory/ui/settings/components/mission-control/BacklogCenter.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/BacklogCenter.tsx rename to apps/factory/ui/settings/components/mission-control/BacklogCenter.tsx diff --git a/packages/factory/ui/settings/components/mission-control/BatchToggle.tsx b/apps/factory/ui/settings/components/mission-control/BatchToggle.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/BatchToggle.tsx rename to apps/factory/ui/settings/components/mission-control/BatchToggle.tsx diff --git a/packages/factory/ui/settings/components/mission-control/CloudActivityFeed.tsx b/apps/factory/ui/settings/components/mission-control/CloudActivityFeed.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/CloudActivityFeed.tsx rename to apps/factory/ui/settings/components/mission-control/CloudActivityFeed.tsx diff --git a/packages/factory/ui/settings/components/mission-control/CommandPalette.tsx b/apps/factory/ui/settings/components/mission-control/CommandPalette.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/CommandPalette.tsx rename to apps/factory/ui/settings/components/mission-control/CommandPalette.tsx diff --git a/packages/factory/ui/settings/components/mission-control/CompletedSwarmsPane.tsx b/apps/factory/ui/settings/components/mission-control/CompletedSwarmsPane.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/CompletedSwarmsPane.tsx rename to apps/factory/ui/settings/components/mission-control/CompletedSwarmsPane.tsx diff --git a/packages/factory/ui/settings/components/mission-control/DispatchPanel.tsx b/apps/factory/ui/settings/components/mission-control/DispatchPanel.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/DispatchPanel.tsx rename to apps/factory/ui/settings/components/mission-control/DispatchPanel.tsx diff --git a/packages/factory/ui/settings/components/mission-control/FailureCard.tsx b/apps/factory/ui/settings/components/mission-control/FailureCard.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/FailureCard.tsx rename to apps/factory/ui/settings/components/mission-control/FailureCard.tsx diff --git a/packages/factory/ui/settings/components/mission-control/FeedItem.tsx b/apps/factory/ui/settings/components/mission-control/FeedItem.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/FeedItem.tsx rename to apps/factory/ui/settings/components/mission-control/FeedItem.tsx diff --git a/packages/factory/ui/settings/components/mission-control/FloorControls.tsx b/apps/factory/ui/settings/components/mission-control/FloorControls.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/FloorControls.tsx rename to apps/factory/ui/settings/components/mission-control/FloorControls.tsx diff --git a/packages/factory/ui/settings/components/mission-control/FloorSidebar.tsx b/apps/factory/ui/settings/components/mission-control/FloorSidebar.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/FloorSidebar.tsx rename to apps/factory/ui/settings/components/mission-control/FloorSidebar.tsx diff --git a/packages/factory/ui/settings/components/mission-control/HostDetail.tsx b/apps/factory/ui/settings/components/mission-control/HostDetail.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/HostDetail.tsx rename to apps/factory/ui/settings/components/mission-control/HostDetail.tsx diff --git a/packages/factory/ui/settings/components/mission-control/HostSelect.tsx b/apps/factory/ui/settings/components/mission-control/HostSelect.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/HostSelect.tsx rename to apps/factory/ui/settings/components/mission-control/HostSelect.tsx diff --git a/packages/factory/ui/settings/components/mission-control/MissionControlTab.tsx b/apps/factory/ui/settings/components/mission-control/MissionControlTab.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/MissionControlTab.tsx rename to apps/factory/ui/settings/components/mission-control/MissionControlTab.tsx diff --git a/packages/factory/ui/settings/components/mission-control/ModeSeg.tsx b/apps/factory/ui/settings/components/mission-control/ModeSeg.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/ModeSeg.tsx rename to apps/factory/ui/settings/components/mission-control/ModeSeg.tsx diff --git a/packages/factory/ui/settings/components/mission-control/NeedsYouClusters.tsx b/apps/factory/ui/settings/components/mission-control/NeedsYouClusters.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/NeedsYouClusters.tsx rename to apps/factory/ui/settings/components/mission-control/NeedsYouClusters.tsx diff --git a/packages/factory/ui/settings/components/mission-control/NotifyBell.tsx b/apps/factory/ui/settings/components/mission-control/NotifyBell.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/NotifyBell.tsx rename to apps/factory/ui/settings/components/mission-control/NotifyBell.tsx diff --git a/packages/factory/ui/settings/components/mission-control/PlanReview.tsx b/apps/factory/ui/settings/components/mission-control/PlanReview.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/PlanReview.tsx rename to apps/factory/ui/settings/components/mission-control/PlanReview.tsx diff --git a/packages/factory/ui/settings/components/mission-control/ProjectSelect.tsx b/apps/factory/ui/settings/components/mission-control/ProjectSelect.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/ProjectSelect.tsx rename to apps/factory/ui/settings/components/mission-control/ProjectSelect.tsx diff --git a/packages/factory/ui/settings/components/mission-control/SavedViewsBar.tsx b/apps/factory/ui/settings/components/mission-control/SavedViewsBar.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/SavedViewsBar.tsx rename to apps/factory/ui/settings/components/mission-control/SavedViewsBar.tsx diff --git a/packages/factory/ui/settings/components/mission-control/StatusBar.tsx b/apps/factory/ui/settings/components/mission-control/StatusBar.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/StatusBar.tsx rename to apps/factory/ui/settings/components/mission-control/StatusBar.tsx diff --git a/packages/factory/ui/settings/components/mission-control/StructuredReply.tsx b/apps/factory/ui/settings/components/mission-control/StructuredReply.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/StructuredReply.tsx rename to apps/factory/ui/settings/components/mission-control/StructuredReply.tsx diff --git a/packages/factory/ui/settings/components/mission-control/SwarmDetailPane.tsx b/apps/factory/ui/settings/components/mission-control/SwarmDetailPane.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/SwarmDetailPane.tsx rename to apps/factory/ui/settings/components/mission-control/SwarmDetailPane.tsx diff --git a/packages/factory/ui/settings/components/mission-control/TicketDetail.tsx b/apps/factory/ui/settings/components/mission-control/TicketDetail.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/TicketDetail.tsx rename to apps/factory/ui/settings/components/mission-control/TicketDetail.tsx diff --git a/packages/factory/ui/settings/components/mission-control/TodoChecklist.tsx b/apps/factory/ui/settings/components/mission-control/TodoChecklist.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/TodoChecklist.tsx rename to apps/factory/ui/settings/components/mission-control/TodoChecklist.tsx diff --git a/packages/factory/ui/settings/components/mission-control/TopBar.tsx b/apps/factory/ui/settings/components/mission-control/TopBar.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/TopBar.tsx rename to apps/factory/ui/settings/components/mission-control/TopBar.tsx diff --git a/packages/factory/ui/settings/components/mission-control/UnifiedAgentsPane.tsx b/apps/factory/ui/settings/components/mission-control/UnifiedAgentsPane.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/UnifiedAgentsPane.tsx rename to apps/factory/ui/settings/components/mission-control/UnifiedAgentsPane.tsx diff --git a/packages/factory/ui/settings/components/mission-control/WatchdogSeg.tsx b/apps/factory/ui/settings/components/mission-control/WatchdogSeg.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/WatchdogSeg.tsx rename to apps/factory/ui/settings/components/mission-control/WatchdogSeg.tsx diff --git a/packages/factory/ui/settings/components/mission-control/cloudActivity.test.ts b/apps/factory/ui/settings/components/mission-control/cloudActivity.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/cloudActivity.test.ts rename to apps/factory/ui/settings/components/mission-control/cloudActivity.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/cloudActivity.ts b/apps/factory/ui/settings/components/mission-control/cloudActivity.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/cloudActivity.ts rename to apps/factory/ui/settings/components/mission-control/cloudActivity.ts diff --git a/packages/factory/ui/settings/components/mission-control/design-system.css b/apps/factory/ui/settings/components/mission-control/design-system.css similarity index 100% rename from packages/factory/ui/settings/components/mission-control/design-system.css rename to apps/factory/ui/settings/components/mission-control/design-system.css diff --git a/packages/factory/ui/settings/components/mission-control/dispatch.css b/apps/factory/ui/settings/components/mission-control/dispatch.css similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatch.css rename to apps/factory/ui/settings/components/mission-control/dispatch.css diff --git a/packages/factory/ui/settings/components/mission-control/dispatch.test.ts b/apps/factory/ui/settings/components/mission-control/dispatch.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatch.test.ts rename to apps/factory/ui/settings/components/mission-control/dispatch.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/dispatch.ts b/apps/factory/ui/settings/components/mission-control/dispatch.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatch.ts rename to apps/factory/ui/settings/components/mission-control/dispatch.ts diff --git a/packages/factory/ui/settings/components/mission-control/dispatch.types.ts b/apps/factory/ui/settings/components/mission-control/dispatch.types.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatch.types.ts rename to apps/factory/ui/settings/components/mission-control/dispatch.types.ts diff --git a/packages/factory/ui/settings/components/mission-control/dispatchIcons.tsx b/apps/factory/ui/settings/components/mission-control/dispatchIcons.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatchIcons.tsx rename to apps/factory/ui/settings/components/mission-control/dispatchIcons.tsx diff --git a/packages/factory/ui/settings/components/mission-control/dispatchInput.tsx b/apps/factory/ui/settings/components/mission-control/dispatchInput.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/dispatchInput.tsx rename to apps/factory/ui/settings/components/mission-control/dispatchInput.tsx diff --git a/packages/factory/ui/settings/components/mission-control/floor.css b/apps/factory/ui/settings/components/mission-control/floor.css similarity index 100% rename from packages/factory/ui/settings/components/mission-control/floor.css rename to apps/factory/ui/settings/components/mission-control/floor.css diff --git a/packages/factory/ui/settings/components/mission-control/floorAdapter.test.ts b/apps/factory/ui/settings/components/mission-control/floorAdapter.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/floorAdapter.test.ts rename to apps/factory/ui/settings/components/mission-control/floorAdapter.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/floorAdapter.ts b/apps/factory/ui/settings/components/mission-control/floorAdapter.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/floorAdapter.ts rename to apps/factory/ui/settings/components/mission-control/floorAdapter.ts diff --git a/packages/factory/ui/settings/components/mission-control/floorModel.test.ts b/apps/factory/ui/settings/components/mission-control/floorModel.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/floorModel.test.ts rename to apps/factory/ui/settings/components/mission-control/floorModel.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/floorModel.ts b/apps/factory/ui/settings/components/mission-control/floorModel.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/floorModel.ts rename to apps/factory/ui/settings/components/mission-control/floorModel.ts diff --git a/packages/factory/ui/settings/components/mission-control/icons.tsx b/apps/factory/ui/settings/components/mission-control/icons.tsx similarity index 100% rename from packages/factory/ui/settings/components/mission-control/icons.tsx rename to apps/factory/ui/settings/components/mission-control/icons.tsx diff --git a/packages/factory/ui/settings/components/mission-control/index.ts b/apps/factory/ui/settings/components/mission-control/index.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/index.ts rename to apps/factory/ui/settings/components/mission-control/index.ts diff --git a/packages/factory/ui/settings/components/mission-control/savedViews.test.ts b/apps/factory/ui/settings/components/mission-control/savedViews.test.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/savedViews.test.ts rename to apps/factory/ui/settings/components/mission-control/savedViews.test.ts diff --git a/packages/factory/ui/settings/components/mission-control/savedViews.ts b/apps/factory/ui/settings/components/mission-control/savedViews.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/savedViews.ts rename to apps/factory/ui/settings/components/mission-control/savedViews.ts diff --git a/packages/factory/ui/settings/components/mission-control/testdata/cloud-summary-zavknykt.txt b/apps/factory/ui/settings/components/mission-control/testdata/cloud-summary-zavknykt.txt similarity index 100% rename from packages/factory/ui/settings/components/mission-control/testdata/cloud-summary-zavknykt.txt rename to apps/factory/ui/settings/components/mission-control/testdata/cloud-summary-zavknykt.txt diff --git a/packages/factory/ui/settings/components/mission-control/types.ts b/apps/factory/ui/settings/components/mission-control/types.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/types.ts rename to apps/factory/ui/settings/components/mission-control/types.ts diff --git a/packages/factory/ui/settings/components/mission-control/useNow.ts b/apps/factory/ui/settings/components/mission-control/useNow.ts similarity index 100% rename from packages/factory/ui/settings/components/mission-control/useNow.ts rename to apps/factory/ui/settings/components/mission-control/useNow.ts diff --git a/packages/factory/ui/settings/components/panel/AgentDial.tsx b/apps/factory/ui/settings/components/panel/AgentDial.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/AgentDial.tsx rename to apps/factory/ui/settings/components/panel/AgentDial.tsx diff --git a/packages/factory/ui/settings/components/panel/AgentResources.tsx b/apps/factory/ui/settings/components/panel/AgentResources.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/AgentResources.tsx rename to apps/factory/ui/settings/components/panel/AgentResources.tsx diff --git a/packages/factory/ui/settings/components/panel/ChannelSelect.tsx b/apps/factory/ui/settings/components/panel/ChannelSelect.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/ChannelSelect.tsx rename to apps/factory/ui/settings/components/panel/ChannelSelect.tsx diff --git a/packages/factory/ui/settings/components/panel/DisplayControls.tsx b/apps/factory/ui/settings/components/panel/DisplayControls.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/DisplayControls.tsx rename to apps/factory/ui/settings/components/panel/DisplayControls.tsx diff --git a/packages/factory/ui/settings/components/panel/HarnessRoster.tsx b/apps/factory/ui/settings/components/panel/HarnessRoster.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/HarnessRoster.tsx rename to apps/factory/ui/settings/components/panel/HarnessRoster.tsx diff --git a/packages/factory/ui/settings/components/panel/LaunchMatrix.tsx b/apps/factory/ui/settings/components/panel/LaunchMatrix.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/LaunchMatrix.tsx rename to apps/factory/ui/settings/components/panel/LaunchMatrix.tsx diff --git a/packages/factory/ui/settings/components/panel/MachineStatus.tsx b/apps/factory/ui/settings/components/panel/MachineStatus.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/MachineStatus.tsx rename to apps/factory/ui/settings/components/panel/MachineStatus.tsx diff --git a/packages/factory/ui/settings/components/panel/PanelTab.tsx b/apps/factory/ui/settings/components/panel/PanelTab.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/PanelTab.tsx rename to apps/factory/ui/settings/components/panel/PanelTab.tsx diff --git a/packages/factory/ui/settings/components/panel/PatchBay.tsx b/apps/factory/ui/settings/components/panel/PatchBay.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/PatchBay.tsx rename to apps/factory/ui/settings/components/panel/PatchBay.tsx diff --git a/packages/factory/ui/settings/components/panel/ProjectRulesSection.tsx b/apps/factory/ui/settings/components/panel/ProjectRulesSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/ProjectRulesSection.tsx rename to apps/factory/ui/settings/components/panel/ProjectRulesSection.tsx diff --git a/packages/factory/ui/settings/components/panel/StatusBank.tsx b/apps/factory/ui/settings/components/panel/StatusBank.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/StatusBank.tsx rename to apps/factory/ui/settings/components/panel/StatusBank.tsx diff --git a/packages/factory/ui/settings/components/panel/TuneSection.tsx b/apps/factory/ui/settings/components/panel/TuneSection.tsx similarity index 100% rename from packages/factory/ui/settings/components/panel/TuneSection.tsx rename to apps/factory/ui/settings/components/panel/TuneSection.tsx diff --git a/packages/factory/ui/settings/components/panel/index.ts b/apps/factory/ui/settings/components/panel/index.ts similarity index 100% rename from packages/factory/ui/settings/components/panel/index.ts rename to apps/factory/ui/settings/components/panel/index.ts diff --git a/packages/factory/ui/settings/components/panel/panel.css b/apps/factory/ui/settings/components/panel/panel.css similarity index 100% rename from packages/factory/ui/settings/components/panel/panel.css rename to apps/factory/ui/settings/components/panel/panel.css diff --git a/packages/factory/ui/settings/components/tabs/GuideTab.tsx b/apps/factory/ui/settings/components/tabs/GuideTab.tsx similarity index 100% rename from packages/factory/ui/settings/components/tabs/GuideTab.tsx rename to apps/factory/ui/settings/components/tabs/GuideTab.tsx diff --git a/packages/factory/ui/settings/components/tabs/index.ts b/apps/factory/ui/settings/components/tabs/index.ts similarity index 100% rename from packages/factory/ui/settings/components/tabs/index.ts rename to apps/factory/ui/settings/components/tabs/index.ts diff --git a/packages/factory/ui/settings/components/ui/badge.tsx b/apps/factory/ui/settings/components/ui/badge.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/badge.tsx rename to apps/factory/ui/settings/components/ui/badge.tsx diff --git a/packages/factory/ui/settings/components/ui/button.tsx b/apps/factory/ui/settings/components/ui/button.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/button.tsx rename to apps/factory/ui/settings/components/ui/button.tsx diff --git a/packages/factory/ui/settings/components/ui/card.tsx b/apps/factory/ui/settings/components/ui/card.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/card.tsx rename to apps/factory/ui/settings/components/ui/card.tsx diff --git a/packages/factory/ui/settings/components/ui/checkbox.tsx b/apps/factory/ui/settings/components/ui/checkbox.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/checkbox.tsx rename to apps/factory/ui/settings/components/ui/checkbox.tsx diff --git a/packages/factory/ui/settings/components/ui/dropdown-menu.tsx b/apps/factory/ui/settings/components/ui/dropdown-menu.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/dropdown-menu.tsx rename to apps/factory/ui/settings/components/ui/dropdown-menu.tsx diff --git a/packages/factory/ui/settings/components/ui/input.tsx b/apps/factory/ui/settings/components/ui/input.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/input.tsx rename to apps/factory/ui/settings/components/ui/input.tsx diff --git a/packages/factory/ui/settings/components/ui/scroll-area.tsx b/apps/factory/ui/settings/components/ui/scroll-area.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/scroll-area.tsx rename to apps/factory/ui/settings/components/ui/scroll-area.tsx diff --git a/packages/factory/ui/settings/components/ui/tabs.tsx b/apps/factory/ui/settings/components/ui/tabs.tsx similarity index 100% rename from packages/factory/ui/settings/components/ui/tabs.tsx rename to apps/factory/ui/settings/components/ui/tabs.tsx diff --git a/packages/factory/ui/settings/constants/index.ts b/apps/factory/ui/settings/constants/index.ts similarity index 100% rename from packages/factory/ui/settings/constants/index.ts rename to apps/factory/ui/settings/constants/index.ts diff --git a/packages/factory/ui/settings/hooks/index.ts b/apps/factory/ui/settings/hooks/index.ts similarity index 100% rename from packages/factory/ui/settings/hooks/index.ts rename to apps/factory/ui/settings/hooks/index.ts diff --git a/packages/factory/ui/settings/hooks/usePanelVisibility.ts b/apps/factory/ui/settings/hooks/usePanelVisibility.ts similarity index 100% rename from packages/factory/ui/settings/hooks/usePanelVisibility.ts rename to apps/factory/ui/settings/hooks/usePanelVisibility.ts diff --git a/packages/factory/ui/settings/hooks/useTheme.ts b/apps/factory/ui/settings/hooks/useTheme.ts similarity index 100% rename from packages/factory/ui/settings/hooks/useTheme.ts rename to apps/factory/ui/settings/hooks/useTheme.ts diff --git a/packages/factory/ui/settings/hooks/useVscodeApi.ts b/apps/factory/ui/settings/hooks/useVscodeApi.ts similarity index 100% rename from packages/factory/ui/settings/hooks/useVscodeApi.ts rename to apps/factory/ui/settings/hooks/useVscodeApi.ts diff --git a/packages/factory/ui/settings/host/bridge.test.ts b/apps/factory/ui/settings/host/bridge.test.ts similarity index 100% rename from packages/factory/ui/settings/host/bridge.test.ts rename to apps/factory/ui/settings/host/bridge.test.ts diff --git a/packages/factory/ui/settings/host/bridge.ts b/apps/factory/ui/settings/host/bridge.ts similarity index 100% rename from packages/factory/ui/settings/host/bridge.ts rename to apps/factory/ui/settings/host/bridge.ts diff --git a/packages/factory/ui/settings/index.css b/apps/factory/ui/settings/index.css similarity index 100% rename from packages/factory/ui/settings/index.css rename to apps/factory/ui/settings/index.css diff --git a/packages/factory/ui/settings/index.html b/apps/factory/ui/settings/index.html similarity index 100% rename from packages/factory/ui/settings/index.html rename to apps/factory/ui/settings/index.html diff --git a/packages/factory/ui/settings/lib/utils.ts b/apps/factory/ui/settings/lib/utils.ts similarity index 100% rename from packages/factory/ui/settings/lib/utils.ts rename to apps/factory/ui/settings/lib/utils.ts diff --git a/packages/factory/ui/settings/main.tsx b/apps/factory/ui/settings/main.tsx similarity index 100% rename from packages/factory/ui/settings/main.tsx rename to apps/factory/ui/settings/main.tsx diff --git a/packages/factory/ui/settings/preview/index.html b/apps/factory/ui/settings/preview/index.html similarity index 100% rename from packages/factory/ui/settings/preview/index.html rename to apps/factory/ui/settings/preview/index.html diff --git a/packages/factory/ui/settings/preview/preview.tsx b/apps/factory/ui/settings/preview/preview.tsx similarity index 100% rename from packages/factory/ui/settings/preview/preview.tsx rename to apps/factory/ui/settings/preview/preview.tsx diff --git a/packages/factory/ui/settings/reference/bench.html b/apps/factory/ui/settings/reference/bench.html similarity index 100% rename from packages/factory/ui/settings/reference/bench.html rename to apps/factory/ui/settings/reference/bench.html diff --git a/packages/factory/ui/settings/reference/panel.html b/apps/factory/ui/settings/reference/panel.html similarity index 100% rename from packages/factory/ui/settings/reference/panel.html rename to apps/factory/ui/settings/reference/panel.html diff --git a/packages/factory/ui/settings/reference/settings.css b/apps/factory/ui/settings/reference/settings.css similarity index 100% rename from packages/factory/ui/settings/reference/settings.css rename to apps/factory/ui/settings/reference/settings.css diff --git a/packages/factory/ui/settings/reference/settings.html b/apps/factory/ui/settings/reference/settings.html similarity index 100% rename from packages/factory/ui/settings/reference/settings.html rename to apps/factory/ui/settings/reference/settings.html diff --git a/packages/factory/ui/settings/reference/variant-a.css b/apps/factory/ui/settings/reference/variant-a.css similarity index 100% rename from packages/factory/ui/settings/reference/variant-a.css rename to apps/factory/ui/settings/reference/variant-a.css diff --git a/packages/factory/ui/settings/reference/variant-a.html b/apps/factory/ui/settings/reference/variant-a.html similarity index 100% rename from packages/factory/ui/settings/reference/variant-a.html rename to apps/factory/ui/settings/reference/variant-a.html diff --git a/packages/factory/ui/settings/shared/protocol.ts b/apps/factory/ui/settings/shared/protocol.ts similarity index 100% rename from packages/factory/ui/settings/shared/protocol.ts rename to apps/factory/ui/settings/shared/protocol.ts diff --git a/packages/factory/ui/settings/types/index.ts b/apps/factory/ui/settings/types/index.ts similarity index 100% rename from packages/factory/ui/settings/types/index.ts rename to apps/factory/ui/settings/types/index.ts diff --git a/packages/factory/ui/settings/utils/formatting.test.ts b/apps/factory/ui/settings/utils/formatting.test.ts similarity index 100% rename from packages/factory/ui/settings/utils/formatting.test.ts rename to apps/factory/ui/settings/utils/formatting.test.ts diff --git a/packages/factory/ui/settings/utils/formatting.ts b/apps/factory/ui/settings/utils/formatting.ts similarity index 100% rename from packages/factory/ui/settings/utils/formatting.ts rename to apps/factory/ui/settings/utils/formatting.ts diff --git a/packages/factory/ui/settings/utils/icons.test.ts b/apps/factory/ui/settings/utils/icons.test.ts similarity index 100% rename from packages/factory/ui/settings/utils/icons.test.ts rename to apps/factory/ui/settings/utils/icons.test.ts diff --git a/packages/factory/ui/settings/utils/icons.ts b/apps/factory/ui/settings/utils/icons.ts similarity index 100% rename from packages/factory/ui/settings/utils/icons.ts rename to apps/factory/ui/settings/utils/icons.ts diff --git a/packages/factory/ui/settings/utils/index.ts b/apps/factory/ui/settings/utils/index.ts similarity index 100% rename from packages/factory/ui/settings/utils/index.ts rename to apps/factory/ui/settings/utils/index.ts diff --git a/packages/factory/ui/settings/utils/markdown.ts b/apps/factory/ui/settings/utils/markdown.ts similarity index 100% rename from packages/factory/ui/settings/utils/markdown.ts rename to apps/factory/ui/settings/utils/markdown.ts diff --git a/packages/factory/ui/settings/utils/tree.ts b/apps/factory/ui/settings/utils/tree.ts similarity index 100% rename from packages/factory/ui/settings/utils/tree.ts rename to apps/factory/ui/settings/utils/tree.ts diff --git a/packages/factory/ui/settings/utils/validation.ts b/apps/factory/ui/settings/utils/validation.ts similarity index 100% rename from packages/factory/ui/settings/utils/validation.ts rename to apps/factory/ui/settings/utils/validation.ts diff --git a/packages/factory/ui/tsconfig.json b/apps/factory/ui/tsconfig.json similarity index 100% rename from packages/factory/ui/tsconfig.json rename to apps/factory/ui/tsconfig.json diff --git a/packages/factory/ui/vite.editor.config.ts b/apps/factory/ui/vite.editor.config.ts similarity index 100% rename from packages/factory/ui/vite.editor.config.ts rename to apps/factory/ui/vite.editor.config.ts diff --git a/packages/factory/ui/vite.preview.config.ts b/apps/factory/ui/vite.preview.config.ts similarity index 100% rename from packages/factory/ui/vite.preview.config.ts rename to apps/factory/ui/vite.preview.config.ts diff --git a/packages/factory/ui/vite.settings.config.ts b/apps/factory/ui/vite.settings.config.ts similarity index 100% rename from packages/factory/ui/vite.settings.config.ts rename to apps/factory/ui/vite.settings.config.ts diff --git a/packages/factory/ui/vite.standalone.config.ts b/apps/factory/ui/vite.standalone.config.ts similarity index 100% rename from packages/factory/ui/vite.standalone.config.ts rename to apps/factory/ui/vite.standalone.config.ts diff --git a/packages/menubar-helper/.gitignore b/native/computer-mac/.gitignore similarity index 100% rename from packages/menubar-helper/.gitignore rename to native/computer-mac/.gitignore diff --git a/packages/computer-helper/Package.swift b/native/computer-mac/Package.swift similarity index 100% rename from packages/computer-helper/Package.swift rename to native/computer-mac/Package.swift diff --git a/packages/computer-helper/README.md b/native/computer-mac/README.md similarity index 100% rename from packages/computer-helper/README.md rename to native/computer-mac/README.md diff --git a/packages/computer-helper/Sources/ComputerHelper/AX.swift b/native/computer-mac/Sources/ComputerHelper/AX.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/AX.swift rename to native/computer-mac/Sources/ComputerHelper/AX.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Apps.swift b/native/computer-mac/Sources/ComputerHelper/Apps.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Apps.swift rename to native/computer-mac/Sources/ComputerHelper/Apps.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/CursorSprite.swift b/native/computer-mac/Sources/ComputerHelper/CursorSprite.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/CursorSprite.swift rename to native/computer-mac/Sources/ComputerHelper/CursorSprite.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/ElementCache.swift b/native/computer-mac/Sources/ComputerHelper/ElementCache.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/ElementCache.swift rename to native/computer-mac/Sources/ComputerHelper/ElementCache.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/EventSynth.swift b/native/computer-mac/Sources/ComputerHelper/EventSynth.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/EventSynth.swift rename to native/computer-mac/Sources/ComputerHelper/EventSynth.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Events.swift b/native/computer-mac/Sources/ComputerHelper/Events.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Events.swift rename to native/computer-mac/Sources/ComputerHelper/Events.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Mouse.swift b/native/computer-mac/Sources/ComputerHelper/Mouse.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Mouse.swift rename to native/computer-mac/Sources/ComputerHelper/Mouse.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Notify.swift b/native/computer-mac/Sources/ComputerHelper/Notify.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Notify.swift rename to native/computer-mac/Sources/ComputerHelper/Notify.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/RPC.swift b/native/computer-mac/Sources/ComputerHelper/RPC.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/RPC.swift rename to native/computer-mac/Sources/ComputerHelper/RPC.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Screenshot.swift b/native/computer-mac/Sources/ComputerHelper/Screenshot.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Screenshot.swift rename to native/computer-mac/Sources/ComputerHelper/Screenshot.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/Wait.swift b/native/computer-mac/Sources/ComputerHelper/Wait.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/Wait.swift rename to native/computer-mac/Sources/ComputerHelper/Wait.swift diff --git a/packages/computer-helper/Sources/ComputerHelper/main.swift b/native/computer-mac/Sources/ComputerHelper/main.swift similarity index 100% rename from packages/computer-helper/Sources/ComputerHelper/main.swift rename to native/computer-mac/Sources/ComputerHelper/main.swift diff --git a/packages/computer-helper/scripts/build.sh b/native/computer-mac/scripts/build.sh similarity index 100% rename from packages/computer-helper/scripts/build.sh rename to native/computer-mac/scripts/build.sh diff --git a/packages/computer-helper-win/.gitignore b/native/computer-win/.gitignore similarity index 100% rename from packages/computer-helper-win/.gitignore rename to native/computer-win/.gitignore diff --git a/packages/computer-helper-win/Apps.cs b/native/computer-win/Apps.cs similarity index 100% rename from packages/computer-helper-win/Apps.cs rename to native/computer-win/Apps.cs diff --git a/packages/computer-helper-win/Automation.cs b/native/computer-win/Automation.cs similarity index 100% rename from packages/computer-helper-win/Automation.cs rename to native/computer-win/Automation.cs diff --git a/packages/computer-helper-win/ElementCache.cs b/native/computer-win/ElementCache.cs similarity index 100% rename from packages/computer-helper-win/ElementCache.cs rename to native/computer-win/ElementCache.cs diff --git a/packages/computer-helper-win/Program.cs b/native/computer-win/Program.cs similarity index 100% rename from packages/computer-helper-win/Program.cs rename to native/computer-win/Program.cs diff --git a/packages/computer-helper-win/Rpc.cs b/native/computer-win/Rpc.cs similarity index 100% rename from packages/computer-helper-win/Rpc.cs rename to native/computer-win/Rpc.cs diff --git a/packages/computer-helper-win/Screenshot.cs b/native/computer-win/Screenshot.cs similarity index 100% rename from packages/computer-helper-win/Screenshot.cs rename to native/computer-win/Screenshot.cs diff --git a/packages/computer-helper-win/computer-helper-win.csproj b/native/computer-win/computer-helper-win.csproj similarity index 100% rename from packages/computer-helper-win/computer-helper-win.csproj rename to native/computer-win/computer-helper-win.csproj diff --git a/packages/computer-helper-win/smoke/smoke.mjs b/native/computer-win/smoke/smoke.mjs similarity index 100% rename from packages/computer-helper-win/smoke/smoke.mjs rename to native/computer-win/smoke/smoke.mjs diff --git a/package.json b/package.json index 3926f40aa..2ba1edff1 100644 --- a/package.json +++ b/package.json @@ -1,111 +1,15 @@ { - "name": "@phnx-labs/agents-cli", - "version": "1.20.40", - "description": "One CLI for all your AI coding agents - versions, config, cloud dispatch, sessions, and teams (now with first-class Grok Build CLI support)", - "type": "module", - "main": "dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - }, - "./teams": { - "types": "./dist/lib/teams/index.d.ts", - "import": "./dist/lib/teams/index.js" - } - }, - "bin": { - "agents": "dist/index.js", - "ag": "dist/index.js", - "browser": "dist/browser.js", - "computer": "dist/computer.js" - }, - "files": [ - "dist/**/*.js", - "dist/**/*.d.ts", - "dist/**/*.json", - "dist/lib/secrets/Agents CLI.app/**", - "dist/lib/menubar/MenubarHelper.app/**", - "scripts/postinstall.js", - "scripts/install-helper.js", - "CHANGELOG.md", - "README.md", - "LICENSE" - ], - "publishConfig": { - "provenance": true + "name": "agents-cli-monorepo", + "private": true, + "description": "Monorepo: the agents-cli (apps/cli), the Factory GUI (apps/factory), native daemons (native/), and shared libs (packages/). Each package installs and builds independently.", + "scripts": { + "build:cli": "cd apps/cli && bun install && bun run build", + "test:cli": "cd apps/cli && bun run test", + "build:factory": "cd apps/factory && bun install && bun run compile" }, "repository": { "type": "git", "url": "git+https://github.com/phnx-labs/agents-cli.git" }, - "homepage": "https://agents-cli.sh", - "bugs": { - "url": "https://github.com/phnx-labs/agents-cli/issues" - }, - "scripts": { - "build": "tsc && rm -rf 'dist/lib/secrets/AgentsKeychain.app' 'dist/lib/secrets/Agents CLI.app' 'dist/lib/menubar/MenubarHelper.app' && ([ \"$(uname)\" = \"Darwin\" ] && cp -R 'bin/Agents CLI.app' 'dist/lib/secrets/Agents CLI.app' || true) && ([ \"$(uname)\" = \"Darwin\" ] && [ -d 'bin/MenubarHelper.app' ] && mkdir -p 'dist/lib/menubar' && cp -R 'bin/MenubarHelper.app' 'dist/lib/menubar/MenubarHelper.app' || true)", - "build:bin": "scripts/build-bin.sh", - "prepare": "npm run build", - "prepack": "scripts/verify-keychain-helper.sh && scripts/verify-menubar-helper.sh", - "postinstall": "node scripts/postinstall.js", - "dev": "tsx src/index.ts", - "start": "node dist/index.js", - "test": "node ./node_modules/vitest/vitest.mjs run", - "test:remote": "scripts/sandbox.sh 'bun install && bun run build && bun run test'", - "test:watch": "node ./node_modules/vitest/vitest.mjs" - }, - "keywords": [ - "agents", - "cli", - "dotfiles", - "claude", - "codex", - "gemini", - "cursor", - "opencode", - "grok", - "xai", - "mcp", - "skills", - "ai", - "sync", - "multi-agent" - ], - "author": "Phoenix Labs", - "license": "Apache-2.0", - "engines": { - "node": ">=22.5.0", - "npm": ">=9" - }, - "trustedDependencies": [ - "@homebridge/node-pty-prebuilt-multiarch" - ], - "dependencies": { - "@homebridge/node-pty-prebuilt-multiarch": "0.13.1", - "@inquirer/prompts": "8.5.2", - "@types/proper-lockfile": "4.1.4", - "@xterm/headless": "6.0.0", - "@zed-industries/agent-client-protocol": "0.4.5", - "aws4fetch": "1.0.20", - "chalk": "5.6.2", - "commander": "15.0.0", - "croner": "10.0.1", - "diff": "9.0.0", - "marked": "15.0.12", - "marked-terminal": "7.3.0", - "ora": "9.4.1", - "proper-lockfile": "4.1.2", - "simple-git": "3.36.0", - "smol-toml": "1.7.0", - "yaml": "2.9.0" - }, - "devDependencies": { - "@types/diff": "8.0.0", - "@types/marked-terminal": "6.1.1", - "@types/node": "26.1.0", - "tsx": "4.23.0", - "typescript": "6.0.3", - "vitest": "4.1.9" - } + "license": "Apache-2.0" }