@creativeintelligence/abbie 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/start.js +2 -1
- package/oclif.manifest.json +1 -1
- package/package.json +9 -5
- package/dist/cli/base-command.d.ts.map +0 -1
- package/dist/cli/commands/agent/list.d.ts.map +0 -1
- package/dist/cli/commands/annotation/ack.d.ts.map +0 -1
- package/dist/cli/commands/annotation/create.d.ts.map +0 -1
- package/dist/cli/commands/annotation/events.d.ts.map +0 -1
- package/dist/cli/commands/annotation/export.d.ts.map +0 -1
- package/dist/cli/commands/annotation/import.d.ts.map +0 -1
- package/dist/cli/commands/annotation/ingest.d.ts.map +0 -1
- package/dist/cli/commands/annotation/list.d.ts.map +0 -1
- package/dist/cli/commands/annotation/reply.d.ts.map +0 -1
- package/dist/cli/commands/annotation/resolve.d.ts.map +0 -1
- package/dist/cli/commands/auto/index.d.ts.map +0 -1
- package/dist/cli/commands/backlog/add.d.ts.map +0 -1
- package/dist/cli/commands/backlog/claim.d.ts.map +0 -1
- package/dist/cli/commands/backlog/complete.d.ts.map +0 -1
- package/dist/cli/commands/backlog/list.d.ts.map +0 -1
- package/dist/cli/commands/backlog/pick.d.ts.map +0 -1
- package/dist/cli/commands/backlog/sync.d.ts.map +0 -1
- package/dist/cli/commands/bootstrap.d.ts.map +0 -1
- package/dist/cli/commands/bridge.d.ts.map +0 -1
- package/dist/cli/commands/context/inject.d.ts.map +0 -1
- package/dist/cli/commands/context/list.d.ts.map +0 -1
- package/dist/cli/commands/context/publish.d.ts.map +0 -1
- package/dist/cli/commands/context/read.d.ts.map +0 -1
- package/dist/cli/commands/daemon.d.ts.map +0 -1
- package/dist/cli/commands/digest/index.d.ts.map +0 -1
- package/dist/cli/commands/docs/lint.d.ts.map +0 -1
- package/dist/cli/commands/docs/sync.d.ts.map +0 -1
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/find/index.d.ts.map +0 -1
- package/dist/cli/commands/gc.d.ts.map +0 -1
- package/dist/cli/commands/history/index.d.ts.map +0 -1
- package/dist/cli/commands/hooks/guard.d.ts.map +0 -1
- package/dist/cli/commands/hooks/list.d.ts.map +0 -1
- package/dist/cli/commands/hooks/lock.d.ts.map +0 -1
- package/dist/cli/commands/hooks/status.d.ts.map +0 -1
- package/dist/cli/commands/hooks/test.d.ts.map +0 -1
- package/dist/cli/commands/hooks/unlock.d.ts.map +0 -1
- package/dist/cli/commands/index.d.ts.map +0 -1
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.e2e.test.d.ts +0 -1
- package/dist/cli/commands/list.e2e.test.js +0 -47
- package/dist/cli/commands/login.d.ts.map +0 -1
- package/dist/cli/commands/logout.d.ts.map +0 -1
- package/dist/cli/commands/panes/broker.d.ts.map +0 -1
- package/dist/cli/commands/panes/pipe-sink.d.ts.map +0 -1
- package/dist/cli/commands/panes/snapshot.d.ts.map +0 -1
- package/dist/cli/commands/plan.d.ts.map +0 -1
- package/dist/cli/commands/plan.e2e.test.d.ts +0 -1
- package/dist/cli/commands/plan.e2e.test.js +0 -74
- package/dist/cli/commands/preview/index.d.ts.map +0 -1
- package/dist/cli/commands/preview/init.d.ts.map +0 -1
- package/dist/cli/commands/preview/list.d.ts.map +0 -1
- package/dist/cli/commands/preview/status.d.ts.map +0 -1
- package/dist/cli/commands/preview/stop.d.ts.map +0 -1
- package/dist/cli/commands/preview/sync.d.ts.map +0 -1
- package/dist/cli/commands/preview/watch.d.ts.map +0 -1
- package/dist/cli/commands/project/add.d.ts.map +0 -1
- package/dist/cli/commands/project/list.d.ts.map +0 -1
- package/dist/cli/commands/project/remove.d.ts.map +0 -1
- package/dist/cli/commands/push.d.ts.map +0 -1
- package/dist/cli/commands/reference/add.d.ts.map +0 -1
- package/dist/cli/commands/reference/delete.d.ts.map +0 -1
- package/dist/cli/commands/reference/extract.d.ts.map +0 -1
- package/dist/cli/commands/reference/list.d.ts.map +0 -1
- package/dist/cli/commands/reference/normalize.d.ts.map +0 -1
- package/dist/cli/commands/reference/open.d.ts.map +0 -1
- package/dist/cli/commands/reference/save.d.ts.map +0 -1
- package/dist/cli/commands/reference/search.d.ts.map +0 -1
- package/dist/cli/commands/reference/show.d.ts.map +0 -1
- package/dist/cli/commands/reference/update-index.d.ts.map +0 -1
- package/dist/cli/commands/reference/update.d.ts.map +0 -1
- package/dist/cli/commands/report/blocked.d.ts.map +0 -1
- package/dist/cli/commands/report/complete.d.ts.map +0 -1
- package/dist/cli/commands/report/progress.d.ts.map +0 -1
- package/dist/cli/commands/report/start.d.ts.map +0 -1
- package/dist/cli/commands/resource/acquire.d.ts.map +0 -1
- package/dist/cli/commands/resource/list.d.ts.map +0 -1
- package/dist/cli/commands/resource/release.d.ts.map +0 -1
- package/dist/cli/commands/resource/wait.d.ts.map +0 -1
- package/dist/cli/commands/review.d.ts.map +0 -1
- package/dist/cli/commands/session/attach.d.ts.map +0 -1
- package/dist/cli/commands/session/await.d.ts.map +0 -1
- package/dist/cli/commands/session/complete.d.ts.map +0 -1
- package/dist/cli/commands/session/create.d.ts.map +0 -1
- package/dist/cli/commands/session/heartbeat.d.ts.map +0 -1
- package/dist/cli/commands/session/list.d.ts.map +0 -1
- package/dist/cli/commands/session/mark-done.d.ts.map +0 -1
- package/dist/cli/commands/session/mine.d.ts.map +0 -1
- package/dist/cli/commands/session/replay.d.ts.map +0 -1
- package/dist/cli/commands/session/run.d.ts.map +0 -1
- package/dist/cli/commands/session/show.d.ts.map +0 -1
- package/dist/cli/commands/session/start.d.ts.map +0 -1
- package/dist/cli/commands/session/state/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/session/state/end.d.ts.map +0 -1
- package/dist/cli/commands/session/state/get.d.ts.map +0 -1
- package/dist/cli/commands/session/state/init.d.ts.map +0 -1
- package/dist/cli/commands/session/state/list.d.ts.map +0 -1
- package/dist/cli/commands/session/state/update.d.ts.map +0 -1
- package/dist/cli/commands/session/stop.d.ts.map +0 -1
- package/dist/cli/commands/session/view.d.ts.map +0 -1
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/state/dump.d.ts.map +0 -1
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/sync.d.ts.map +0 -1
- package/dist/cli/commands/trace/export.d.ts.map +0 -1
- package/dist/cli/commands/triage/claim.d.ts.map +0 -1
- package/dist/cli/commands/triage/list.d.ts.map +0 -1
- package/dist/cli/commands/triage/next.d.ts.map +0 -1
- package/dist/cli/commands/triage/pull.d.ts.map +0 -1
- package/dist/cli/commands/triage/stats.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/list.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/start.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/stop.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/url.d.ts.map +0 -1
- package/dist/cli/commands/web/start.d.ts.map +0 -1
- package/dist/cli/commands/windows/context.d.ts.map +0 -1
- package/dist/cli/commands/windows/focus.d.ts.map +0 -1
- package/dist/cli/commands/windows/list.d.ts.map +0 -1
- package/dist/cli/commands/windows/map.d.ts.map +0 -1
- package/dist/cli/commands/windows/read.d.ts.map +0 -1
- package/dist/cli/commands/windows/search.d.ts.map +0 -1
- package/dist/cli/commands/windows/show.d.ts.map +0 -1
- package/dist/cli/commands/windows/watch.d.ts.map +0 -1
- package/dist/lib/active-sessions.d.ts.map +0 -1
- package/dist/lib/agent-adapters.d.ts.map +0 -1
- package/dist/lib/agent-sessions.d.ts.map +0 -1
- package/dist/lib/agent-trace.d.ts.map +0 -1
- package/dist/lib/analytics.d.ts.map +0 -1
- package/dist/lib/annotations-convex.d.ts.map +0 -1
- package/dist/lib/annotations.d.ts.map +0 -1
- package/dist/lib/auto/discover.d.ts.map +0 -1
- package/dist/lib/auto/ideate.d.ts.map +0 -1
- package/dist/lib/auto/spawn.d.ts.map +0 -1
- package/dist/lib/auto/workspace.d.ts.map +0 -1
- package/dist/lib/backlog.d.ts.map +0 -1
- package/dist/lib/backlog.test.d.ts +0 -1
- package/dist/lib/backlog.test.js +0 -162
- package/dist/lib/config-loader.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/claude.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/codex.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/copilot.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/gemini.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/index.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/opencode.d.ts.map +0 -1
- package/dist/lib/config-sync/index.d.ts.map +0 -1
- package/dist/lib/config-sync/types.d.ts.map +0 -1
- package/dist/lib/config-sync/writer.d.ts.map +0 -1
- package/dist/lib/content-sync/index.d.ts.map +0 -1
- package/dist/lib/content-sync/types.d.ts.map +0 -1
- package/dist/lib/contracts.d.ts.map +0 -1
- package/dist/lib/convex.d.ts.map +0 -1
- package/dist/lib/device.d.ts.map +0 -1
- package/dist/lib/digest/index.d.ts.map +0 -1
- package/dist/lib/docs/lint.d.ts.map +0 -1
- package/dist/lib/docs/lint.test.d.ts +0 -1
- package/dist/lib/docs/lint.test.js +0 -120
- package/dist/lib/docs/sync.d.ts.map +0 -1
- package/dist/lib/doctor/index.d.ts.map +0 -1
- package/dist/lib/doctor/repos.d.ts.map +0 -1
- package/dist/lib/doctor/templates.d.ts.map +0 -1
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/events.d.ts.map +0 -1
- package/dist/lib/heartbeat.d.ts.map +0 -1
- package/dist/lib/heartbeat.test.d.ts +0 -1
- package/dist/lib/heartbeat.test.js +0 -124
- package/dist/lib/hooks/adapters/claude.d.ts.map +0 -1
- package/dist/lib/hooks/adapters/codex.d.ts.map +0 -1
- package/dist/lib/hooks/adapters/copilot.d.ts.map +0 -1
- package/dist/lib/hooks/context.d.ts.map +0 -1
- package/dist/lib/hooks/index.d.ts.map +0 -1
- package/dist/lib/hooks/registry.d.ts.map +0 -1
- package/dist/lib/hooks/runner.d.ts.map +0 -1
- package/dist/lib/hooks/types.d.ts.map +0 -1
- package/dist/lib/index.test.d.ts +0 -1
- package/dist/lib/index.test.js +0 -334
- package/dist/lib/managed-session.d.ts.map +0 -1
- package/dist/lib/math.d.ts.map +0 -1
- package/dist/lib/math.test.d.ts +0 -1
- package/dist/lib/math.test.js +0 -238
- package/dist/lib/ngrok.d.ts.map +0 -1
- package/dist/lib/nvim/discovery.d.ts.map +0 -1
- package/dist/lib/nvim/discovery.test.d.ts +0 -1
- package/dist/lib/nvim/discovery.test.js +0 -131
- package/dist/lib/nvim/index.d.ts.map +0 -1
- package/dist/lib/nvim/remote.d.ts.map +0 -1
- package/dist/lib/nvim/remote.test.d.ts +0 -1
- package/dist/lib/nvim/remote.test.js +0 -18
- package/dist/lib/panes/broker.d.ts.map +0 -1
- package/dist/lib/panes/index.d.ts.map +0 -1
- package/dist/lib/panes/server.d.ts.map +0 -1
- package/dist/lib/preview/detect.d.ts.map +0 -1
- package/dist/lib/preview/index.d.ts.map +0 -1
- package/dist/lib/preview/manager.d.ts.map +0 -1
- package/dist/lib/preview/schema.d.ts.map +0 -1
- package/dist/lib/preview/sprite.d.ts.map +0 -1
- package/dist/lib/preview/watcher.d.ts.map +0 -1
- package/dist/lib/process/index.d.ts.map +0 -1
- package/dist/lib/process/snapshot.d.ts.map +0 -1
- package/dist/lib/process/snapshot.test.d.ts +0 -1
- package/dist/lib/process/snapshot.test.js +0 -127
- package/dist/lib/project-identity.d.ts.map +0 -1
- package/dist/lib/provider-auth.d.ts.map +0 -1
- package/dist/lib/references.d.ts.map +0 -1
- package/dist/lib/report.d.ts.map +0 -1
- package/dist/lib/resources.d.ts.map +0 -1
- package/dist/lib/resources.test.d.ts +0 -1
- package/dist/lib/resources.test.js +0 -94
- package/dist/lib/runner.d.ts.map +0 -1
- package/dist/lib/runner.test.d.ts +0 -1
- package/dist/lib/runner.test.js +0 -234
- package/dist/lib/session-artifacts.d.ts.map +0 -1
- package/dist/lib/session-manager.d.ts.map +0 -1
- package/dist/lib/session-manager.test.d.ts +0 -1
- package/dist/lib/session-manager.test.js +0 -310
- package/dist/lib/session-result.d.ts.map +0 -1
- package/dist/lib/session-state.d.ts.map +0 -1
- package/dist/lib/slack-workspace.d.ts.map +0 -1
- package/dist/lib/tmux/bridge.d.ts.map +0 -1
- package/dist/lib/tmux/context.d.ts.map +0 -1
- package/dist/lib/tmux/context.test.d.ts +0 -1
- package/dist/lib/tmux/context.test.js +0 -215
- package/dist/lib/tmux/index.d.ts.map +0 -1
- package/dist/lib/tmux/map.d.ts.map +0 -1
- package/dist/lib/tmux/map.test.d.ts +0 -1
- package/dist/lib/tmux/map.test.js +0 -80
- package/dist/lib/tmux/panes.d.ts.map +0 -1
- package/dist/lib/tmux/redaction.d.ts.map +0 -1
- package/dist/lib/tmux/redaction.test.d.ts +0 -1
- package/dist/lib/tmux/redaction.test.js +0 -183
- package/dist/lib/triage-llm.d.ts.map +0 -1
- package/dist/lib/triage-tracker.d.ts.map +0 -1
- package/dist/lib/triage.d.ts.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/windows/index.d.ts.map +0 -1
- package/dist/lib/windows/inventory.d.ts.map +0 -1
- package/dist/lib/windows/inventory.test.d.ts +0 -1
- package/dist/lib/windows/inventory.test.js +0 -292
- package/dist/lib/windows/types.d.ts.map +0 -1
- package/dist/lib.d.ts.map +0 -1
- package/dist/web/app/@overlay/default.d.ts +0 -1
- package/dist/web/app/@overlay/default.js +0 -3
- package/dist/web/app/about/page.d.ts +0 -1
- package/dist/web/app/about/page.js +0 -6
- package/dist/web/app/layout.d.ts +0 -7
- package/dist/web/app/layout.js +0 -19
- package/dist/web/app/page.d.ts +0 -1
- package/dist/web/app/page.js +0 -38
- package/dist/web/app/settings/page.d.ts +0 -1
- package/dist/web/app/settings/page.js +0 -6
- package/dist/web/app/shortcuts/page.d.ts +0 -1
- package/dist/web/app/shortcuts/page.js +0 -6
- package/dist/web/atoms/sidebar.d.ts +0 -16
- package/dist/web/atoms/sidebar.js +0 -58
- package/dist/web/atoms/state.d.ts +0 -24
- package/dist/web/atoms/state.js +0 -43
- package/dist/web/components/command-palette.d.ts +0 -6
- package/dist/web/components/command-palette.js +0 -297
- package/dist/web/components/main-view.d.ts +0 -1
- package/dist/web/components/main-view.js +0 -93
- package/dist/web/components/overlay/page-overlay.d.ts +0 -16
- package/dist/web/components/overlay/page-overlay.js +0 -84
- package/dist/web/components/pane-view.d.ts +0 -5
- package/dist/web/components/pane-view.js +0 -168
- package/dist/web/components/project-files-view.d.ts +0 -6
- package/dist/web/components/project-files-view.js +0 -205
- package/dist/web/components/project-planning-view.d.ts +0 -6
- package/dist/web/components/project-planning-view.js +0 -146
- package/dist/web/components/session-view.d.ts +0 -6
- package/dist/web/components/session-view.js +0 -211
- package/dist/web/components/sessions-list-view.d.ts +0 -1
- package/dist/web/components/sessions-list-view.js +0 -118
- package/dist/web/components/sidebar/index.d.ts +0 -9
- package/dist/web/components/sidebar/index.js +0 -29
- package/dist/web/components/sidebar/kbd.d.ts +0 -17
- package/dist/web/components/sidebar/kbd.js +0 -47
- package/dist/web/components/sidebar/nav-group.d.ts +0 -22
- package/dist/web/components/sidebar/nav-group.js +0 -43
- package/dist/web/components/sidebar/nav-item.d.ts +0 -17
- package/dist/web/components/sidebar/nav-item.js +0 -38
- package/dist/web/components/sidebar/sidebar-header.d.ts +0 -9
- package/dist/web/components/sidebar/sidebar-header.js +0 -18
- package/dist/web/components/sidebar/sidebar-nav.d.ts +0 -7
- package/dist/web/components/sidebar/sidebar-nav.js +0 -505
- package/dist/web/components/sidebar/sidebar-search.d.ts +0 -7
- package/dist/web/components/sidebar/sidebar-search.js +0 -18
- package/dist/web/components/sidebar/sidebar-settings.d.ts +0 -4
- package/dist/web/components/sidebar/sidebar-settings.js +0 -28
- package/dist/web/components/sidebar/sidebar-transition.d.ts +0 -12
- package/dist/web/components/sidebar/sidebar-transition.js +0 -58
- package/dist/web/components/status-bar.d.ts +0 -1
- package/dist/web/components/status-bar.js +0 -53
- package/dist/web/components/terminal.d.ts +0 -4
- package/dist/web/components/terminal.js +0 -324
- package/dist/web/components/toast.d.ts +0 -7
- package/dist/web/components/toast.js +0 -72
- package/dist/web/hooks/use-keybindings.d.ts +0 -30
- package/dist/web/hooks/use-keybindings.js +0 -322
- package/dist/web/hooks/use-state.d.ts +0 -11
- package/dist/web/hooks/use-state.js +0 -84
- package/dist/web/lib/api.d.ts +0 -179
- package/dist/web/lib/api.js +0 -79
- package/dist/web/lib/paths.d.ts +0 -2
- package/dist/web/lib/paths.js +0 -26
- package/dist/web/lib/utils.d.ts +0 -2
- package/dist/web/lib/utils.js +0 -5
- package/dist/web/lib/ws.d.ts +0 -18
- package/dist/web/lib/ws.js +0 -138
- package/dist/web/next.config.d.ts +0 -3
- package/dist/web/next.config.js +0 -9
- package/scripts/generate-manifest.ts +0 -44
- package/src/cli/base-command.ts +0 -233
- package/src/cli/commands/__tests__/annotations.test.ts +0 -704
- package/src/cli/commands/__tests__/bridge.test.ts +0 -101
- package/src/cli/commands/__tests__/daemon.test.ts +0 -79
- package/src/cli/commands/agent/list.ts +0 -75
- package/src/cli/commands/annotation/ack.ts +0 -37
- package/src/cli/commands/annotation/create.ts +0 -67
- package/src/cli/commands/annotation/events.ts +0 -63
- package/src/cli/commands/annotation/export.ts +0 -67
- package/src/cli/commands/annotation/import.ts +0 -98
- package/src/cli/commands/annotation/ingest.ts +0 -112
- package/src/cli/commands/annotation/list.ts +0 -57
- package/src/cli/commands/annotation/reply.ts +0 -46
- package/src/cli/commands/annotation/resolve.ts +0 -37
- package/src/cli/commands/auto/index.ts +0 -755
- package/src/cli/commands/backlog/add.ts +0 -74
- package/src/cli/commands/backlog/claim.ts +0 -53
- package/src/cli/commands/backlog/complete.ts +0 -51
- package/src/cli/commands/backlog/list.ts +0 -107
- package/src/cli/commands/backlog/pick.ts +0 -50
- package/src/cli/commands/backlog/sync.ts +0 -131
- package/src/cli/commands/bootstrap.ts +0 -205
- package/src/cli/commands/bridge.ts +0 -233
- package/src/cli/commands/context/inject.ts +0 -103
- package/src/cli/commands/context/list.ts +0 -112
- package/src/cli/commands/context/publish.ts +0 -83
- package/src/cli/commands/context/read.ts +0 -85
- package/src/cli/commands/daemon.ts +0 -1809
- package/src/cli/commands/digest/index.ts +0 -245
- package/src/cli/commands/docs/lint.ts +0 -93
- package/src/cli/commands/docs/sync.ts +0 -90
- package/src/cli/commands/doctor.ts +0 -267
- package/src/cli/commands/find/index.ts +0 -313
- package/src/cli/commands/history/index.ts +0 -269
- package/src/cli/commands/hooks/guard.ts +0 -71
- package/src/cli/commands/hooks/list.ts +0 -139
- package/src/cli/commands/hooks/lock.ts +0 -47
- package/src/cli/commands/hooks/status.ts +0 -56
- package/src/cli/commands/hooks/test.ts +0 -190
- package/src/cli/commands/hooks/unlock.ts +0 -56
- package/src/cli/commands/list.e2e.test.ts +0 -58
- package/src/cli/commands/list.ts +0 -96
- package/src/cli/commands/login.ts +0 -236
- package/src/cli/commands/logout.ts +0 -45
- package/src/cli/commands/panes/broker.ts +0 -68
- package/src/cli/commands/panes/pipe-sink.ts +0 -101
- package/src/cli/commands/panes/snapshot.ts +0 -156
- package/src/cli/commands/plan.e2e.test.ts +0 -90
- package/src/cli/commands/plan.ts +0 -68
- package/src/cli/commands/preview/index.ts +0 -282
- package/src/cli/commands/preview/list.ts +0 -116
- package/src/cli/commands/preview/status.ts +0 -137
- package/src/cli/commands/preview/stop.ts +0 -165
- package/src/cli/commands/project/add.ts +0 -110
- package/src/cli/commands/project/list.ts +0 -136
- package/src/cli/commands/project/remove.ts +0 -60
- package/src/cli/commands/push.ts +0 -115
- package/src/cli/commands/reference/add.ts +0 -266
- package/src/cli/commands/reference/delete.ts +0 -67
- package/src/cli/commands/reference/extract.ts +0 -389
- package/src/cli/commands/reference/list.ts +0 -117
- package/src/cli/commands/reference/normalize.ts +0 -90
- package/src/cli/commands/reference/open.ts +0 -92
- package/src/cli/commands/reference/save.ts +0 -103
- package/src/cli/commands/reference/search.ts +0 -85
- package/src/cli/commands/reference/show.ts +0 -174
- package/src/cli/commands/reference/update-index.ts +0 -103
- package/src/cli/commands/reference/update.ts +0 -136
- package/src/cli/commands/report/blocked.ts +0 -165
- package/src/cli/commands/report/complete.ts +0 -179
- package/src/cli/commands/report/progress.ts +0 -142
- package/src/cli/commands/report/start.ts +0 -140
- package/src/cli/commands/resource/acquire.ts +0 -116
- package/src/cli/commands/resource/list.ts +0 -77
- package/src/cli/commands/resource/release.ts +0 -64
- package/src/cli/commands/resource/wait.ts +0 -93
- package/src/cli/commands/review.ts +0 -105
- package/src/cli/commands/session/attach.ts +0 -200
- package/src/cli/commands/session/await.ts +0 -83
- package/src/cli/commands/session/complete.ts +0 -100
- package/src/cli/commands/session/create.ts +0 -92
- package/src/cli/commands/session/heartbeat.ts +0 -63
- package/src/cli/commands/session/list.ts +0 -281
- package/src/cli/commands/session/mark-done.ts +0 -132
- package/src/cli/commands/session/mine.ts +0 -189
- package/src/cli/commands/session/replay.ts +0 -659
- package/src/cli/commands/session/run.ts +0 -44
- package/src/cli/commands/session/show.ts +0 -177
- package/src/cli/commands/session/start.ts +0 -580
- package/src/cli/commands/session/state/cleanup.ts +0 -61
- package/src/cli/commands/session/state/end.ts +0 -47
- package/src/cli/commands/session/state/get.ts +0 -65
- package/src/cli/commands/session/state/init.ts +0 -50
- package/src/cli/commands/session/state/list.ts +0 -68
- package/src/cli/commands/session/state/update.ts +0 -108
- package/src/cli/commands/session/stop.ts +0 -134
- package/src/cli/commands/session/view.ts +0 -186
- package/src/cli/commands/start.ts +0 -256
- package/src/cli/commands/state/dump.ts +0 -449
- package/src/cli/commands/status.ts +0 -244
- package/src/cli/commands/sync.ts +0 -174
- package/src/cli/commands/trace/export.ts +0 -255
- package/src/cli/commands/triage/claim.ts +0 -203
- package/src/cli/commands/triage/list.ts +0 -137
- package/src/cli/commands/triage/next.ts +0 -73
- package/src/cli/commands/triage/pull.ts +0 -97
- package/src/cli/commands/triage/stats.ts +0 -82
- package/src/cli/commands/tunnel/list.ts +0 -113
- package/src/cli/commands/tunnel/start.ts +0 -122
- package/src/cli/commands/tunnel/stop.ts +0 -108
- package/src/cli/commands/tunnel/url.ts +0 -82
- package/src/cli/commands/web/start.ts +0 -125
- package/src/cli/commands/windows/context.ts +0 -439
- package/src/cli/commands/windows/focus.ts +0 -130
- package/src/cli/commands/windows/list.ts +0 -213
- package/src/cli/commands/windows/map.ts +0 -223
- package/src/cli/commands/windows/read.ts +0 -279
- package/src/cli/commands/windows/search.ts +0 -219
- package/src/cli/commands/windows/show.ts +0 -188
- package/src/cli/commands/windows/watch.ts +0 -262
- package/src/lib/__tests__/annotations-convex.test.ts +0 -104
- package/src/lib/active-sessions.ts +0 -1486
- package/src/lib/agent-adapters.ts +0 -412
- package/src/lib/agent-sessions.ts +0 -671
- package/src/lib/agent-trace.test.ts +0 -296
- package/src/lib/agent-trace.ts +0 -513
- package/src/lib/analytics.ts +0 -178
- package/src/lib/annotations-convex.ts +0 -296
- package/src/lib/annotations.test.ts +0 -274
- package/src/lib/annotations.ts +0 -836
- package/src/lib/auto/discover.ts +0 -545
- package/src/lib/auto/ideate.ts +0 -412
- package/src/lib/auto/spawn.ts +0 -549
- package/src/lib/auto/workspace.ts +0 -282
- package/src/lib/backlog.test.ts +0 -194
- package/src/lib/backlog.ts +0 -428
- package/src/lib/config-loader.ts +0 -391
- package/src/lib/config-sync/adapters/claude.ts +0 -91
- package/src/lib/config-sync/adapters/codex.ts +0 -135
- package/src/lib/config-sync/adapters/copilot.ts +0 -98
- package/src/lib/config-sync/adapters/gemini.ts +0 -86
- package/src/lib/config-sync/adapters/index.ts +0 -39
- package/src/lib/config-sync/adapters/opencode.ts +0 -94
- package/src/lib/config-sync/index.ts +0 -399
- package/src/lib/config-sync/types.ts +0 -92
- package/src/lib/config-sync/writer.ts +0 -188
- package/src/lib/content-sync/index.ts +0 -882
- package/src/lib/content-sync/types.ts +0 -104
- package/src/lib/contracts.test.ts +0 -186
- package/src/lib/contracts.ts +0 -195
- package/src/lib/convex.ts +0 -54
- package/src/lib/device.ts +0 -41
- package/src/lib/digest/index.ts +0 -529
- package/src/lib/docs/lint.test.ts +0 -135
- package/src/lib/docs/lint.ts +0 -310
- package/src/lib/docs/sync.ts +0 -184
- package/src/lib/doctor/index.ts +0 -647
- package/src/lib/doctor/repos.ts +0 -381
- package/src/lib/doctor/templates.ts +0 -191
- package/src/lib/errors.ts +0 -111
- package/src/lib/events.ts +0 -479
- package/src/lib/heartbeat.test.ts +0 -164
- package/src/lib/heartbeat.ts +0 -326
- package/src/lib/hooks/adapters/claude.ts +0 -115
- package/src/lib/hooks/adapters/codex.ts +0 -92
- package/src/lib/hooks/adapters/copilot.ts +0 -141
- package/src/lib/hooks/context.ts +0 -174
- package/src/lib/hooks/index.ts +0 -39
- package/src/lib/hooks/registry.ts +0 -101
- package/src/lib/hooks/runner.ts +0 -208
- package/src/lib/hooks/types.ts +0 -89
- package/src/lib/index.test.ts +0 -426
- package/src/lib/managed-session.ts +0 -117
- package/src/lib/math.test.ts +0 -299
- package/src/lib/math.ts +0 -120
- package/src/lib/ngrok.ts +0 -441
- package/src/lib/nvim/discovery.test.ts +0 -157
- package/src/lib/nvim/discovery.ts +0 -181
- package/src/lib/nvim/index.ts +0 -28
- package/src/lib/nvim/remote.test.ts +0 -21
- package/src/lib/nvim/remote.ts +0 -184
- package/src/lib/panes/README.md +0 -20
- package/src/lib/panes/broker.ts +0 -261
- package/src/lib/panes/index.ts +0 -1
- package/src/lib/panes/server.ts +0 -379
- package/src/lib/preview/detect.ts +0 -184
- package/src/lib/preview/index.ts +0 -1
- package/src/lib/process/index.ts +0 -16
- package/src/lib/process/snapshot.test.ts +0 -188
- package/src/lib/process/snapshot.ts +0 -257
- package/src/lib/provider-auth.ts +0 -258
- package/src/lib/references.ts +0 -481
- package/src/lib/report.ts +0 -973
- package/src/lib/resources.test.ts +0 -132
- package/src/lib/resources.ts +0 -429
- package/src/lib/runner.test.ts +0 -288
- package/src/lib/runner.ts +0 -1223
- package/src/lib/session-artifacts.test.ts +0 -107
- package/src/lib/session-artifacts.ts +0 -193
- package/src/lib/session-manager.test.ts +0 -402
- package/src/lib/session-manager.ts +0 -150
- package/src/lib/session-result.test.ts +0 -98
- package/src/lib/session-result.ts +0 -262
- package/src/lib/session-state.ts +0 -470
- package/src/lib/slack-workspace.ts +0 -25
- package/src/lib/tmux/bridge.ts +0 -439
- package/src/lib/tmux/context.test.ts +0 -242
- package/src/lib/tmux/context.ts +0 -380
- package/src/lib/tmux/index.ts +0 -46
- package/src/lib/tmux/map.test.ts +0 -99
- package/src/lib/tmux/map.ts +0 -252
- package/src/lib/tmux/panes.ts +0 -170
- package/src/lib/tmux/redaction.test.ts +0 -231
- package/src/lib/tmux/redaction.ts +0 -201
- package/src/lib/triage-llm.ts +0 -312
- package/src/lib/triage-tracker.ts +0 -400
- package/src/lib/triage.ts +0 -655
- package/src/lib/types.ts +0 -61
- package/src/lib/windows/index.ts +0 -2
- package/src/lib/windows/inventory.test.ts +0 -370
- package/src/lib/windows/inventory.ts +0 -352
- package/src/lib/windows/types.ts +0 -46
- package/src/lib.ts +0 -260
package/src/lib/config-loader.ts
DELETED
|
@@ -1,391 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config loader for project-level agent configurations.
|
|
3
|
-
*
|
|
4
|
-
* Loads:
|
|
5
|
-
* - .abbie/config.json (minimal: name, emoji, team, workspace)
|
|
6
|
-
* - .abbie/AGENTS.md (rich context for agents)
|
|
7
|
-
*
|
|
8
|
-
* Used by `abbie session start` to auto-configure agent sessions.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
import { basename, dirname, join } from "node:path";
|
|
14
|
-
|
|
15
|
-
// ============================================================================
|
|
16
|
-
// Types
|
|
17
|
-
// ============================================================================
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Minimal config for tooling (Linear, Slack, etc.)
|
|
21
|
-
* Rich context lives in AGENTS.md
|
|
22
|
-
*/
|
|
23
|
-
export interface ProjectConfig {
|
|
24
|
-
name: string;
|
|
25
|
-
emoji?: string;
|
|
26
|
-
team?: string;
|
|
27
|
-
workspace?: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface LoadedConfig {
|
|
31
|
-
config: ProjectConfig;
|
|
32
|
-
configPath: string;
|
|
33
|
-
projectPath: string;
|
|
34
|
-
agentsMd?: string;
|
|
35
|
-
agentsMdPath?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface ProjectDiscovery {
|
|
39
|
-
name: string;
|
|
40
|
-
path: string;
|
|
41
|
-
hasConfig: boolean;
|
|
42
|
-
configPath?: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// ============================================================================
|
|
46
|
-
// Constants
|
|
47
|
-
// ============================================================================
|
|
48
|
-
|
|
49
|
-
const DEVELOPER_PATHS = [
|
|
50
|
-
join(homedir(), "Developer", "apps"),
|
|
51
|
-
join(homedir(), "Developer", "packages"),
|
|
52
|
-
join(homedir(), "Developer", "utils"),
|
|
53
|
-
];
|
|
54
|
-
|
|
55
|
-
// ============================================================================
|
|
56
|
-
// Discovery
|
|
57
|
-
// ============================================================================
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Find all projects in developer directories.
|
|
61
|
-
*/
|
|
62
|
-
export function discoverProjects(): ProjectDiscovery[] {
|
|
63
|
-
const projects: ProjectDiscovery[] = [];
|
|
64
|
-
const seen = new Set<string>();
|
|
65
|
-
|
|
66
|
-
for (const basePath of DEVELOPER_PATHS) {
|
|
67
|
-
if (!existsSync(basePath)) continue;
|
|
68
|
-
|
|
69
|
-
const scanDepth2 = basePath.endsWith("/apps");
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
const entries = readdirSync(basePath);
|
|
73
|
-
for (const entry of entries) {
|
|
74
|
-
const fullPath = join(basePath, entry);
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
if (!statSync(fullPath).isDirectory()) continue;
|
|
78
|
-
} catch {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
let hasChildProjects = false;
|
|
83
|
-
|
|
84
|
-
// Depth-2 (apps only): Luke's canonical structure nests repos like:
|
|
85
|
-
// ~/Developer/apps/{project}/{project}-xyz
|
|
86
|
-
// Treat the first-level directory as a project folder when it contains child repos.
|
|
87
|
-
if (scanDepth2) {
|
|
88
|
-
try {
|
|
89
|
-
const children = readdirSync(fullPath);
|
|
90
|
-
for (const child of children) {
|
|
91
|
-
const childPath = join(fullPath, child);
|
|
92
|
-
try {
|
|
93
|
-
if (!statSync(childPath).isDirectory()) continue;
|
|
94
|
-
} catch {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const childProject = checkForProject(childPath, seen);
|
|
99
|
-
if (childProject) {
|
|
100
|
-
hasChildProjects = true;
|
|
101
|
-
projects.push(childProject);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
} catch {
|
|
105
|
-
// Skip unreadable directories
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Depth-1: Include the project folder itself.
|
|
110
|
-
// In apps/, this enables directory-level workflows (one "project" can contain multiple repos).
|
|
111
|
-
if (scanDepth2 && hasChildProjects) {
|
|
112
|
-
if (!seen.has(fullPath)) {
|
|
113
|
-
seen.add(fullPath);
|
|
114
|
-
const configPath = join(fullPath, ".abbie", "config.json");
|
|
115
|
-
const hasConfig = existsSync(configPath);
|
|
116
|
-
projects.push({
|
|
117
|
-
name: basename(fullPath),
|
|
118
|
-
path: fullPath,
|
|
119
|
-
hasConfig,
|
|
120
|
-
configPath: hasConfig ? configPath : undefined,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
} else {
|
|
124
|
-
const rootProject = checkForProject(fullPath, seen);
|
|
125
|
-
if (rootProject) {
|
|
126
|
-
projects.push(rootProject);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
} catch {
|
|
131
|
-
// Skip unreadable directories
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return projects;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Check if a path is a project with config.
|
|
140
|
-
*/
|
|
141
|
-
function checkForProject(fullPath: string, seen: Set<string>): ProjectDiscovery | undefined {
|
|
142
|
-
if (seen.has(fullPath)) return undefined;
|
|
143
|
-
seen.add(fullPath);
|
|
144
|
-
|
|
145
|
-
const configPath = join(fullPath, ".abbie", "config.json");
|
|
146
|
-
const hasConfig = existsSync(configPath);
|
|
147
|
-
|
|
148
|
-
// Only treat directories as projects if they look like actual repos
|
|
149
|
-
// (or are explicitly configured via .abbie/config.json).
|
|
150
|
-
if (!hasConfig && !looksLikeRepo(fullPath)) {
|
|
151
|
-
return undefined;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return {
|
|
155
|
-
name: basename(fullPath),
|
|
156
|
-
path: fullPath,
|
|
157
|
-
hasConfig,
|
|
158
|
-
configPath: hasConfig ? configPath : undefined,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function looksLikeRepo(dir: string): boolean {
|
|
163
|
-
const markers = [
|
|
164
|
-
join(dir, ".git"),
|
|
165
|
-
join(dir, "package.json"),
|
|
166
|
-
join(dir, "Cargo.toml"),
|
|
167
|
-
join(dir, "pyproject.toml"),
|
|
168
|
-
join(dir, "go.mod"),
|
|
169
|
-
join(dir, "Package.swift"),
|
|
170
|
-
join(dir, ".loop.json"),
|
|
171
|
-
];
|
|
172
|
-
|
|
173
|
-
for (const marker of markers) {
|
|
174
|
-
if (existsSync(marker)) return true;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return false;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Find a project by name.
|
|
182
|
-
*/
|
|
183
|
-
export function findProject(name: string): ProjectDiscovery | undefined {
|
|
184
|
-
const projects = discoverProjects();
|
|
185
|
-
const withConfig = projects.filter((p) => p.hasConfig);
|
|
186
|
-
const withoutConfig = projects.filter((p) => !p.hasConfig);
|
|
187
|
-
|
|
188
|
-
// Prefer the canonical web repo suffix when the user provides a short name.
|
|
189
|
-
// e.g. `webs` should resolve to `webs-xyz` over `webs-apple`.
|
|
190
|
-
const preferredName = `${name}-xyz`;
|
|
191
|
-
|
|
192
|
-
// Exact match with config
|
|
193
|
-
const exactWithConfig = withConfig.find((p) => p.name === name);
|
|
194
|
-
if (exactWithConfig) return exactWithConfig;
|
|
195
|
-
|
|
196
|
-
// Preferred suffix match with config
|
|
197
|
-
const preferredWithConfig = withConfig.find((p) => p.name === preferredName);
|
|
198
|
-
if (preferredWithConfig) return preferredWithConfig;
|
|
199
|
-
|
|
200
|
-
// Partial match with config
|
|
201
|
-
const partialWithConfig = withConfig.find(
|
|
202
|
-
(p) => p.name.startsWith(name) || p.name.includes(name),
|
|
203
|
-
);
|
|
204
|
-
if (partialWithConfig) return partialWithConfig;
|
|
205
|
-
|
|
206
|
-
// Exact match without config
|
|
207
|
-
const exactNoConfig = withoutConfig.find((p) => p.name === name);
|
|
208
|
-
if (exactNoConfig) return exactNoConfig;
|
|
209
|
-
|
|
210
|
-
// Preferred suffix match without config
|
|
211
|
-
const preferredNoConfig = withoutConfig.find((p) => p.name === preferredName);
|
|
212
|
-
if (preferredNoConfig) return preferredNoConfig;
|
|
213
|
-
|
|
214
|
-
// Partial match without config
|
|
215
|
-
return withoutConfig.find((p) => p.name.startsWith(name) || p.name.includes(name));
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Find project directory by name.
|
|
220
|
-
*/
|
|
221
|
-
export function findProjectPath(name: string): string | undefined {
|
|
222
|
-
return findProject(name)?.path;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// ============================================================================
|
|
226
|
-
// Loading
|
|
227
|
-
// ============================================================================
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Resolve tilde in path.
|
|
231
|
-
*/
|
|
232
|
-
function expandTilde(path: string): string {
|
|
233
|
-
if (path.startsWith("~/")) {
|
|
234
|
-
return join(homedir(), path.slice(2));
|
|
235
|
-
}
|
|
236
|
-
if (path === "~") {
|
|
237
|
-
return homedir();
|
|
238
|
-
}
|
|
239
|
-
return path;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Load a JSON file safely.
|
|
244
|
-
*/
|
|
245
|
-
function loadJson<T>(path: string): T | undefined {
|
|
246
|
-
try {
|
|
247
|
-
const content = readFileSync(path, "utf-8");
|
|
248
|
-
return JSON.parse(content) as T;
|
|
249
|
-
} catch {
|
|
250
|
-
return undefined;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Read AGENTS.md if it exists alongside config.json
|
|
256
|
-
*/
|
|
257
|
-
function readAgentsMd(agentsDir: string): { content?: string; path?: string } {
|
|
258
|
-
const agentsPath = join(agentsDir, "AGENTS.md");
|
|
259
|
-
if (!existsSync(agentsPath)) {
|
|
260
|
-
return {};
|
|
261
|
-
}
|
|
262
|
-
try {
|
|
263
|
-
return {
|
|
264
|
-
content: readFileSync(agentsPath, "utf-8"),
|
|
265
|
-
path: agentsPath,
|
|
266
|
-
};
|
|
267
|
-
} catch {
|
|
268
|
-
return {};
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Load config from path.
|
|
274
|
-
*/
|
|
275
|
-
export function loadConfig(configPath: string): LoadedConfig | undefined {
|
|
276
|
-
const expandedPath = expandTilde(configPath);
|
|
277
|
-
if (!existsSync(expandedPath)) {
|
|
278
|
-
return undefined;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
const rawConfig = loadJson<ProjectConfig>(expandedPath);
|
|
282
|
-
if (!rawConfig || !rawConfig.name) {
|
|
283
|
-
return undefined;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
const agentsDir = dirname(expandedPath);
|
|
287
|
-
const projectPath = dirname(agentsDir);
|
|
288
|
-
|
|
289
|
-
const { content: agentsMd, path: agentsMdPath } = readAgentsMd(agentsDir);
|
|
290
|
-
|
|
291
|
-
return {
|
|
292
|
-
config: rawConfig,
|
|
293
|
-
configPath: expandedPath,
|
|
294
|
-
projectPath,
|
|
295
|
-
agentsMd,
|
|
296
|
-
agentsMdPath,
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Load config for a project by name.
|
|
302
|
-
*/
|
|
303
|
-
export function loadProjectConfig(projectName: string): LoadedConfig | undefined {
|
|
304
|
-
const project = findProject(projectName);
|
|
305
|
-
if (!project || !project.configPath) {
|
|
306
|
-
return undefined;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return loadConfig(project.configPath);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Load config from a directory path.
|
|
314
|
-
*/
|
|
315
|
-
export function loadConfigFromPath(dirPath: string): LoadedConfig | undefined {
|
|
316
|
-
let current = expandTilde(dirPath);
|
|
317
|
-
|
|
318
|
-
// Walk up until we find `.abbie/config.json`.
|
|
319
|
-
// This supports common call sites that pass a nested cwd (e.g. apps/app/)
|
|
320
|
-
// while still loading project-level config from the repo root.
|
|
321
|
-
for (let i = 0; i < 25; i++) {
|
|
322
|
-
const configPath = join(current, ".abbie", "config.json");
|
|
323
|
-
if (existsSync(configPath)) return loadConfig(configPath);
|
|
324
|
-
|
|
325
|
-
const parent = dirname(current);
|
|
326
|
-
if (parent === current) break;
|
|
327
|
-
current = parent;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return undefined;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// ============================================================================
|
|
334
|
-
// Prompt Enhancement
|
|
335
|
-
// ============================================================================
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Generate prompt additions from loaded config.
|
|
339
|
-
* Uses AGENTS.md for rich context.
|
|
340
|
-
*/
|
|
341
|
-
export function getPromptEnhancements(loaded: LoadedConfig): string {
|
|
342
|
-
const { config, agentsMd } = loaded;
|
|
343
|
-
|
|
344
|
-
const parts: string[] = [];
|
|
345
|
-
|
|
346
|
-
// Project header
|
|
347
|
-
parts.push("<project>");
|
|
348
|
-
parts.push(`name: ${config.name}`);
|
|
349
|
-
if (config.emoji) parts.push(`emoji: ${config.emoji}`);
|
|
350
|
-
if (config.team) parts.push(`team: ${config.team}`);
|
|
351
|
-
if (config.workspace) parts.push(`workspace: ${config.workspace}`);
|
|
352
|
-
parts.push("</project>");
|
|
353
|
-
|
|
354
|
-
// AGENTS.md content
|
|
355
|
-
if (agentsMd) {
|
|
356
|
-
parts.push("");
|
|
357
|
-
parts.push("<context>");
|
|
358
|
-
parts.push(agentsMd.trim());
|
|
359
|
-
parts.push("</context>");
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
return parts.join("\n");
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// ============================================================================
|
|
366
|
-
// Environment Variables
|
|
367
|
-
// ============================================================================
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Get environment variables from config.
|
|
371
|
-
*/
|
|
372
|
-
export function getConfigEnvironment(config: ProjectConfig): Record<string, string> {
|
|
373
|
-
const env: Record<string, string> = {};
|
|
374
|
-
|
|
375
|
-
env.AGENTS_PROJECT_NAME = config.name;
|
|
376
|
-
|
|
377
|
-
if (config.team) {
|
|
378
|
-
env.AGENTS_PROJECT_TEAM = config.team;
|
|
379
|
-
}
|
|
380
|
-
if (config.workspace) {
|
|
381
|
-
env.AGENTS_LINEAR_WORKSPACE = config.workspace;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
return env;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// ============================================================================
|
|
388
|
-
// Exports
|
|
389
|
-
// ============================================================================
|
|
390
|
-
|
|
391
|
-
export { DEVELOPER_PATHS };
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code config adapter.
|
|
3
|
-
*
|
|
4
|
-
* Config: ~/.claude/.mcp.json
|
|
5
|
-
* Format: { mcpServers: { "name": { command, args } | { url, type } } }
|
|
6
|
-
*
|
|
7
|
-
* Managed entries use "abbie-{name}" keys.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
import type { ConfigAdapter, ManagedEntry } from "../types.js";
|
|
14
|
-
|
|
15
|
-
type ClaudeMcpEntry =
|
|
16
|
-
| { command: string; args?: string[]; env?: Record<string, string> }
|
|
17
|
-
| { url: string; type?: "sse" | "http" };
|
|
18
|
-
|
|
19
|
-
type ClaudeMcpConfig = {
|
|
20
|
-
mcpServers?: Record<string, ClaudeMcpEntry>;
|
|
21
|
-
[key: string]: unknown;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export class ClaudeConfigAdapter implements ConfigAdapter {
|
|
25
|
-
readonly agent = "claude" as const;
|
|
26
|
-
|
|
27
|
-
configPath(): string {
|
|
28
|
-
return join(homedir(), ".claude", ".mcp.json");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
configExists(): boolean {
|
|
32
|
-
return existsSync(this.configPath());
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
read(): ClaudeMcpConfig {
|
|
36
|
-
if (!this.configExists()) return {};
|
|
37
|
-
try {
|
|
38
|
-
return JSON.parse(readFileSync(this.configPath(), "utf-8")) as ClaudeMcpConfig;
|
|
39
|
-
} catch {
|
|
40
|
-
return {};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
merge(
|
|
45
|
-
current: Record<string, unknown>,
|
|
46
|
-
managed: ManagedEntry[],
|
|
47
|
-
previousManagedKeys: string[],
|
|
48
|
-
): ClaudeMcpConfig {
|
|
49
|
-
const config = current as ClaudeMcpConfig;
|
|
50
|
-
const servers = { ...(config.mcpServers ?? {}) };
|
|
51
|
-
|
|
52
|
-
// Remove previously managed keys that are no longer present
|
|
53
|
-
for (const key of previousManagedKeys) {
|
|
54
|
-
delete servers[key];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Add/update current managed entries
|
|
58
|
-
for (const entry of managed) {
|
|
59
|
-
servers[entry.key] = this.toClaudeEntry(entry);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return { ...config, mcpServers: servers };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
serialize(config: Record<string, unknown>): string {
|
|
66
|
-
return JSON.stringify(config, null, 2) + "\n";
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
private toClaudeEntry(entry: ManagedEntry): ClaudeMcpEntry {
|
|
70
|
-
if (entry.transport === "stdio" && entry.command) {
|
|
71
|
-
const result: ClaudeMcpEntry = { command: entry.command };
|
|
72
|
-
if (entry.commandArgs?.length) {
|
|
73
|
-
(result as { command: string; args: string[] }).args = entry.commandArgs;
|
|
74
|
-
}
|
|
75
|
-
if (entry.apiKey) {
|
|
76
|
-
(result as { command: string; env?: Record<string, string> }).env = {
|
|
77
|
-
API_KEY: entry.apiKey,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (entry.serverUrl) {
|
|
84
|
-
const type = entry.transport === "sse" ? "sse" : "http";
|
|
85
|
-
return { url: entry.serverUrl, type };
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Fallback — shouldn't happen for valid connections
|
|
89
|
-
return { url: entry.serverUrl ?? "", type: "http" };
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex config adapter.
|
|
3
|
-
*
|
|
4
|
-
* Config: ~/.codex/config.toml
|
|
5
|
-
* Format: [mcp_servers.name] with command/args or url keys.
|
|
6
|
-
*
|
|
7
|
-
* Managed entries use [mcp_servers.abbie-{name}] sections.
|
|
8
|
-
*
|
|
9
|
-
* Uses a simple line-based TOML merge to avoid needing a full TOML
|
|
10
|
-
* parser as a dependency. Reads TOML with regex, writes TOML sections
|
|
11
|
-
* as string blocks.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
-
import { join } from "node:path";
|
|
16
|
-
import { homedir } from "node:os";
|
|
17
|
-
import type { ConfigAdapter, ManagedEntry } from "../types.js";
|
|
18
|
-
|
|
19
|
-
const MCP_SECTION_RE = /^\[mcp_servers\.([^\]]+)\]/;
|
|
20
|
-
|
|
21
|
-
export class CodexConfigAdapter implements ConfigAdapter {
|
|
22
|
-
readonly agent = "codex" as const;
|
|
23
|
-
|
|
24
|
-
configPath(): string {
|
|
25
|
-
return join(homedir(), ".codex", "config.toml");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
configExists(): boolean {
|
|
29
|
-
return existsSync(this.configPath());
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
read(): Record<string, unknown> {
|
|
33
|
-
if (!this.configExists()) return {};
|
|
34
|
-
try {
|
|
35
|
-
const content = readFileSync(this.configPath(), "utf-8");
|
|
36
|
-
return { _raw: content };
|
|
37
|
-
} catch {
|
|
38
|
-
return {};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
merge(
|
|
43
|
-
current: Record<string, unknown>,
|
|
44
|
-
managed: ManagedEntry[],
|
|
45
|
-
previousManagedKeys: string[],
|
|
46
|
-
): Record<string, unknown> {
|
|
47
|
-
const raw = (current._raw as string) ?? "";
|
|
48
|
-
const lines = raw.split("\n");
|
|
49
|
-
|
|
50
|
-
// Parse into: non-mcp lines, user mcp sections, managed mcp sections
|
|
51
|
-
const nonMcpLines: string[] = [];
|
|
52
|
-
const userMcpSections: string[] = [];
|
|
53
|
-
const managedKeySet = new Set([
|
|
54
|
-
...previousManagedKeys,
|
|
55
|
-
...managed.map((e) => e.key),
|
|
56
|
-
]);
|
|
57
|
-
|
|
58
|
-
let currentSection: { name: string; lines: string[] } | null = null;
|
|
59
|
-
|
|
60
|
-
for (const line of lines) {
|
|
61
|
-
const match = MCP_SECTION_RE.exec(line);
|
|
62
|
-
if (match) {
|
|
63
|
-
// Flush previous section
|
|
64
|
-
if (currentSection) {
|
|
65
|
-
if (managedKeySet.has(currentSection.name)) {
|
|
66
|
-
// Drop — will be regenerated
|
|
67
|
-
} else {
|
|
68
|
-
userMcpSections.push(currentSection.lines.join("\n"));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
currentSection = { name: match[1], lines: [line] };
|
|
72
|
-
} else if (currentSection) {
|
|
73
|
-
// Check if this line starts a new top-level section (not mcp_servers)
|
|
74
|
-
if (/^\[(?!mcp_servers\.)/.test(line)) {
|
|
75
|
-
// Flush current section
|
|
76
|
-
if (!managedKeySet.has(currentSection.name)) {
|
|
77
|
-
userMcpSections.push(currentSection.lines.join("\n"));
|
|
78
|
-
}
|
|
79
|
-
currentSection = null;
|
|
80
|
-
nonMcpLines.push(line);
|
|
81
|
-
} else {
|
|
82
|
-
currentSection.lines.push(line);
|
|
83
|
-
}
|
|
84
|
-
} else {
|
|
85
|
-
nonMcpLines.push(line);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Flush last section
|
|
90
|
-
if (currentSection && !managedKeySet.has(currentSection.name)) {
|
|
91
|
-
userMcpSections.push(currentSection.lines.join("\n"));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Generate managed sections
|
|
95
|
-
const managedSections: string[] = managed.map((entry) => this.toTomlSection(entry));
|
|
96
|
-
|
|
97
|
-
// Reassemble: non-mcp lines, then user mcp sections, then managed sections
|
|
98
|
-
const parts = [
|
|
99
|
-
nonMcpLines.join("\n").replace(/\n{3,}/g, "\n\n").trim(),
|
|
100
|
-
...userMcpSections,
|
|
101
|
-
...managedSections,
|
|
102
|
-
].filter(Boolean);
|
|
103
|
-
|
|
104
|
-
return { _raw: parts.join("\n\n") + "\n" };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
serialize(config: Record<string, unknown>): string {
|
|
108
|
-
return (config._raw as string) ?? "";
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private toTomlSection(entry: ManagedEntry): string {
|
|
112
|
-
const lines: string[] = [`[mcp_servers.${entry.key}]`];
|
|
113
|
-
|
|
114
|
-
if (entry.transport === "stdio" && entry.command) {
|
|
115
|
-
lines.push(`command = ${toTomlString(entry.command)}`);
|
|
116
|
-
if (entry.commandArgs?.length) {
|
|
117
|
-
const args = entry.commandArgs.map(toTomlString).join(", ");
|
|
118
|
-
lines.push(`args = [${args}]`);
|
|
119
|
-
}
|
|
120
|
-
} else if (entry.serverUrl) {
|
|
121
|
-
lines.push(`url = ${toTomlString(entry.serverUrl)}`);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (entry.apiKey) {
|
|
125
|
-
lines.push(`api_key = ${toTomlString(entry.apiKey)}`);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return lines.join("\n");
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function toTomlString(value: string): string {
|
|
133
|
-
// Escape backslashes and quotes for TOML basic strings
|
|
134
|
-
return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
135
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub Copilot CLI config adapter.
|
|
3
|
-
*
|
|
4
|
-
* Config: ~/.copilot/mcp-config.json
|
|
5
|
-
* Format: { mcpServers: { "name": { type, command, args } | { type, url } } }
|
|
6
|
-
*
|
|
7
|
-
* Managed entries use "abbie-{name}" keys.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
import type { ConfigAdapter, ManagedEntry } from "../types.js";
|
|
14
|
-
|
|
15
|
-
type CopilotMcpEntry =
|
|
16
|
-
| { type: "stdio"; command: string; args?: string[]; env?: Record<string, string> }
|
|
17
|
-
| { type: "sse"; url: string }
|
|
18
|
-
| { type: "http"; url: string; tools?: string[] };
|
|
19
|
-
|
|
20
|
-
type CopilotMcpConfig = {
|
|
21
|
-
mcpServers?: Record<string, CopilotMcpEntry>;
|
|
22
|
-
[key: string]: unknown;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export class CopilotConfigAdapter implements ConfigAdapter {
|
|
26
|
-
readonly agent = "copilot" as const;
|
|
27
|
-
|
|
28
|
-
configPath(): string {
|
|
29
|
-
return join(homedir(), ".copilot", "mcp-config.json");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
configExists(): boolean {
|
|
33
|
-
return existsSync(this.configPath());
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
read(): CopilotMcpConfig {
|
|
37
|
-
if (!this.configExists()) return {};
|
|
38
|
-
try {
|
|
39
|
-
return JSON.parse(readFileSync(this.configPath(), "utf-8")) as CopilotMcpConfig;
|
|
40
|
-
} catch {
|
|
41
|
-
return {};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
merge(
|
|
46
|
-
current: Record<string, unknown>,
|
|
47
|
-
managed: ManagedEntry[],
|
|
48
|
-
previousManagedKeys: string[],
|
|
49
|
-
): CopilotMcpConfig {
|
|
50
|
-
const config = current as CopilotMcpConfig;
|
|
51
|
-
const servers = { ...(config.mcpServers ?? {}) };
|
|
52
|
-
|
|
53
|
-
// Remove previously managed keys
|
|
54
|
-
for (const key of previousManagedKeys) {
|
|
55
|
-
delete servers[key];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Add/update managed entries
|
|
59
|
-
for (const entry of managed) {
|
|
60
|
-
servers[entry.key] = this.toCopilotEntry(entry);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return { ...config, mcpServers: servers };
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
serialize(config: Record<string, unknown>): string {
|
|
67
|
-
return JSON.stringify(config, null, 2) + "\n";
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
private toCopilotEntry(entry: ManagedEntry): CopilotMcpEntry {
|
|
71
|
-
if (entry.transport === "stdio" && entry.command) {
|
|
72
|
-
const result: CopilotMcpEntry = {
|
|
73
|
-
type: "stdio",
|
|
74
|
-
command: entry.command,
|
|
75
|
-
};
|
|
76
|
-
if (entry.commandArgs?.length) {
|
|
77
|
-
(result as { type: "stdio"; command: string; args: string[] }).args = entry.commandArgs;
|
|
78
|
-
}
|
|
79
|
-
if (entry.apiKey) {
|
|
80
|
-
(result as { type: "stdio"; command: string; env?: Record<string, string> }).env = {
|
|
81
|
-
API_KEY: entry.apiKey,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (entry.transport === "sse" && entry.serverUrl) {
|
|
88
|
-
return { type: "sse", url: entry.serverUrl };
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Default: http
|
|
92
|
-
return {
|
|
93
|
-
type: "http",
|
|
94
|
-
url: entry.serverUrl ?? "",
|
|
95
|
-
tools: ["*"],
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|