@creativeintelligence/abbie 0.1.4 → 0.1.6
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/login.js +26 -0
- 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
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import {
|
|
3
|
-
type AgentPlatform,
|
|
4
|
-
discoverAllHooks,
|
|
5
|
-
getConfigPaths,
|
|
6
|
-
HOOK_PLATFORMS,
|
|
7
|
-
type HookRegistry,
|
|
8
|
-
} from "../../../lib/hooks/index.js";
|
|
9
|
-
import { BaseCommand } from "../../base-command.js";
|
|
10
|
-
|
|
11
|
-
interface ListOutput {
|
|
12
|
-
registry: HookRegistry;
|
|
13
|
-
configPaths: Record<AgentPlatform, string>;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export default class HooksListCommand extends BaseCommand {
|
|
17
|
-
static override summary = "List configured hooks across all agent platforms";
|
|
18
|
-
static override description = `Discovers and displays hooks from:
|
|
19
|
-
- Claude Code (~/.claude/settings.json)
|
|
20
|
-
- Codex (~/.codex/config.toml)
|
|
21
|
-
- Copilot (.github/hooks/hooks.json per-repo)`;
|
|
22
|
-
|
|
23
|
-
static override examples = [
|
|
24
|
-
"$ abbie hooks list",
|
|
25
|
-
"$ abbie hooks list --platform claude",
|
|
26
|
-
"$ abbie hooks list --json --quiet",
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
static override flags = {
|
|
30
|
-
...BaseCommand.baseFlags,
|
|
31
|
-
platform: Flags.string({
|
|
32
|
-
char: "p",
|
|
33
|
-
description: `Filter by platform (${HOOK_PLATFORMS.join(", ")})`,
|
|
34
|
-
options: [...HOOK_PLATFORMS],
|
|
35
|
-
}),
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
async execute(): Promise<ListOutput> {
|
|
39
|
-
const { flags } = await this.parse(HooksListCommand);
|
|
40
|
-
this.parsedFlags = flags;
|
|
41
|
-
|
|
42
|
-
const registry = await discoverAllHooks();
|
|
43
|
-
const configPaths = getConfigPaths();
|
|
44
|
-
|
|
45
|
-
// Filter by platform if specified
|
|
46
|
-
if (flags.platform) {
|
|
47
|
-
const platform = flags.platform as AgentPlatform;
|
|
48
|
-
// Build filtered platforms object dynamically
|
|
49
|
-
const filteredPlatforms = Object.fromEntries(
|
|
50
|
-
HOOK_PLATFORMS.map((p) => [p, p === platform ? registry.platforms[p] : []]),
|
|
51
|
-
) as Record<AgentPlatform, (typeof registry.platforms)[AgentPlatform]>;
|
|
52
|
-
|
|
53
|
-
const filtered: HookRegistry = {
|
|
54
|
-
platforms: filteredPlatforms,
|
|
55
|
-
totalCount: registry.platforms[platform].length,
|
|
56
|
-
discoveredAt: registry.discoveredAt,
|
|
57
|
-
errors: registry.errors.filter((e) => e.platform === platform),
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
if (!this.jsonEnabled?.()) {
|
|
61
|
-
this.renderTextOutput(filtered, configPaths, platform);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return { registry: filtered, configPaths };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// NDJSON: flatten all hooks, one per line
|
|
68
|
-
if (this.ndjsonEnabled()) {
|
|
69
|
-
const items: Array<{
|
|
70
|
-
platform: string;
|
|
71
|
-
event: string;
|
|
72
|
-
name: string;
|
|
73
|
-
path: string;
|
|
74
|
-
timeout?: number;
|
|
75
|
-
}> = [];
|
|
76
|
-
for (const platform of HOOK_PLATFORMS) {
|
|
77
|
-
for (const hook of registry.platforms[platform]) {
|
|
78
|
-
items.push({
|
|
79
|
-
platform,
|
|
80
|
-
event: hook.event,
|
|
81
|
-
name: hook.name,
|
|
82
|
-
path: hook.path,
|
|
83
|
-
timeout: hook.timeout,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
this.outputNdjson(items);
|
|
88
|
-
return { registry, configPaths };
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Full output
|
|
92
|
-
if (!this.jsonEnabled?.()) {
|
|
93
|
-
this.renderTextOutput(registry, configPaths);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return { registry, configPaths };
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
private renderTextOutput(
|
|
100
|
-
registry: HookRegistry,
|
|
101
|
-
configPaths: Record<AgentPlatform, string>,
|
|
102
|
-
filterPlatform?: AgentPlatform,
|
|
103
|
-
): void {
|
|
104
|
-
const platforms: AgentPlatform[] = filterPlatform ? [filterPlatform] : HOOK_PLATFORMS;
|
|
105
|
-
|
|
106
|
-
for (const platform of platforms) {
|
|
107
|
-
const hooks = registry.platforms[platform];
|
|
108
|
-
const configPath = configPaths[platform];
|
|
109
|
-
|
|
110
|
-
this.log(`\n=== ${platform} ===`);
|
|
111
|
-
this.log(`config: ${configPath}`);
|
|
112
|
-
|
|
113
|
-
if (hooks.length === 0) {
|
|
114
|
-
this.log(" (no hooks configured)");
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
for (const hook of hooks) {
|
|
119
|
-
this.log(` ${hook.event}: ${hook.name}`);
|
|
120
|
-
this.log(` path: ${hook.path}`);
|
|
121
|
-
if (hook.timeout) {
|
|
122
|
-
this.log(` timeout: ${hook.timeout}s`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Summary
|
|
128
|
-
this.log("");
|
|
129
|
-
this.logInfo(`total: ${registry.totalCount} hooks`);
|
|
130
|
-
|
|
131
|
-
// Errors
|
|
132
|
-
if (registry.errors.length > 0) {
|
|
133
|
-
this.log("\nerrors:");
|
|
134
|
-
for (const err of registry.errors) {
|
|
135
|
-
this.log(` ${err.platform}: ${err.message}`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { createLockfile } from "../../../lib/hooks/index.js";
|
|
2
|
-
import { BaseCommand } from "../../base-command.js";
|
|
3
|
-
|
|
4
|
-
interface LockOutput {
|
|
5
|
-
path: string;
|
|
6
|
-
pid: number;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default class HooksLockCommand extends BaseCommand {
|
|
10
|
-
static override summary = "Create a hook context lockfile";
|
|
11
|
-
static override description = `Creates a lockfile to signal that hooks should be skipped.
|
|
12
|
-
|
|
13
|
-
Use before spawning agents that might trigger their own hooks:
|
|
14
|
-
LOCK=$(abbie hook lock)
|
|
15
|
-
trap "abbie hook unlock $LOCK" EXIT
|
|
16
|
-
copilot ...
|
|
17
|
-
|
|
18
|
-
Lockfiles auto-expire after 2 minutes (cleaned by guard command).`;
|
|
19
|
-
|
|
20
|
-
static override examples = [
|
|
21
|
-
"# Create lockfile",
|
|
22
|
-
"LOCK=$(abbie hook lock)",
|
|
23
|
-
"",
|
|
24
|
-
"# With cleanup trap",
|
|
25
|
-
"LOCK=$(abbie hook lock)",
|
|
26
|
-
'trap "abbie hook unlock $LOCK" EXIT',
|
|
27
|
-
'copilot -p "summarize"',
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
static override flags = {
|
|
31
|
-
...BaseCommand.baseFlags,
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
async execute(): Promise<LockOutput> {
|
|
35
|
-
const path = createLockfile();
|
|
36
|
-
|
|
37
|
-
if (!this.jsonEnabled?.()) {
|
|
38
|
-
// Just output the path for shell capture
|
|
39
|
-
this.log(path);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
path,
|
|
44
|
-
pid: process.pid,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { getAllLockfiles, type LockfileInfo } from "../../../lib/hooks/index.js";
|
|
2
|
-
import { BaseCommand } from "../../base-command.js";
|
|
3
|
-
|
|
4
|
-
interface StatusOutput {
|
|
5
|
-
lockfiles: LockfileInfo[];
|
|
6
|
-
active: number;
|
|
7
|
-
stale: number;
|
|
8
|
-
envVar: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export default class HooksStatusCommand extends BaseCommand {
|
|
12
|
-
static override summary = "Show hook context status and lockfiles";
|
|
13
|
-
static override description = `Lists all lockfiles (active and stale) for debugging hook issues.
|
|
14
|
-
|
|
15
|
-
Active lockfiles are <2 minutes old and will cause 'abbie hook guard' to return 0.
|
|
16
|
-
Stale lockfiles are >2 minutes old and will be cleaned up by 'abbie hook guard'.`;
|
|
17
|
-
|
|
18
|
-
static override examples = ["$ abbie hook status", "$ abbie hook status --json --quiet"];
|
|
19
|
-
|
|
20
|
-
static override flags = {
|
|
21
|
-
...BaseCommand.baseFlags,
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
async execute(): Promise<StatusOutput> {
|
|
25
|
-
const lockfiles = getAllLockfiles();
|
|
26
|
-
const active = lockfiles.filter((l) => !l.stale);
|
|
27
|
-
const stale = lockfiles.filter((l) => l.stale);
|
|
28
|
-
const envVar = process.env.AGENTS_HOOK_CONTEXT === "true";
|
|
29
|
-
|
|
30
|
-
if (!this.jsonEnabled?.()) {
|
|
31
|
-
this.log(`AGENTS_HOOK_CONTEXT env: ${envVar ? "true" : "not set"}`);
|
|
32
|
-
this.log(`active lockfiles: ${active.length}`);
|
|
33
|
-
this.log(`stale lockfiles: ${stale.length}`);
|
|
34
|
-
|
|
35
|
-
if (lockfiles.length > 0) {
|
|
36
|
-
this.log("");
|
|
37
|
-
for (const l of lockfiles) {
|
|
38
|
-
const status = l.stale ? "(stale)" : "(active)";
|
|
39
|
-
this.log(` ${l.path} - ${l.age}s old ${status}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (active.length > 0 || envVar) {
|
|
44
|
-
this.log("");
|
|
45
|
-
this.logInfo("hooks will be skipped (guard returns 0)");
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
lockfiles,
|
|
51
|
-
active: active.length,
|
|
52
|
-
stale: stale.length,
|
|
53
|
-
envVar,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { Args, Flags } from "@oclif/core";
|
|
2
|
-
import {
|
|
3
|
-
discoverAllHooks,
|
|
4
|
-
generateMockPayload,
|
|
5
|
-
type Hook,
|
|
6
|
-
type HookTestResult,
|
|
7
|
-
runHook,
|
|
8
|
-
} from "../../../lib/hooks/index.js";
|
|
9
|
-
import { BaseCommand } from "../../base-command.js";
|
|
10
|
-
|
|
11
|
-
interface TestOutput {
|
|
12
|
-
results: HookTestResult[];
|
|
13
|
-
summary: {
|
|
14
|
-
total: number;
|
|
15
|
-
passed: number;
|
|
16
|
-
failed: number;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default class HooksTestCommand extends BaseCommand {
|
|
21
|
-
static override summary = "Test hooks by executing them with mock payloads";
|
|
22
|
-
static override description = `Runs hooks with mock payloads to verify they work correctly.
|
|
23
|
-
|
|
24
|
-
Each platform receives appropriately formatted test data:
|
|
25
|
-
- Claude Code: JSON via stdin (Stop event format)
|
|
26
|
-
- Codex: JSON as CLI argument (turn-complete format)
|
|
27
|
-
- OpenCode: JSON via stdin to JS plugin
|
|
28
|
-
|
|
29
|
-
Test mode sets HOOK_TEST_MODE=true in the environment.`;
|
|
30
|
-
|
|
31
|
-
static override examples = [
|
|
32
|
-
"$ abbie hooks test # Test all hooks",
|
|
33
|
-
"$ abbie hooks test --platform claude # Test only Claude hooks",
|
|
34
|
-
"$ abbie hooks test notify-stop.sh # Test specific hook by name",
|
|
35
|
-
"$ abbie hooks test --json --quiet # JSON output for agents",
|
|
36
|
-
];
|
|
37
|
-
|
|
38
|
-
static override args = {
|
|
39
|
-
hook: Args.string({
|
|
40
|
-
description: "Hook name or ID to test (optional, tests all if omitted)",
|
|
41
|
-
required: false,
|
|
42
|
-
}),
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
static override flags = {
|
|
46
|
-
...BaseCommand.baseFlags,
|
|
47
|
-
platform: Flags.string({
|
|
48
|
-
char: "p",
|
|
49
|
-
description: "Filter by platform (claude, codex, copilot)",
|
|
50
|
-
options: ["claude", "codex", "copilot"],
|
|
51
|
-
}),
|
|
52
|
-
"show-payload": Flags.boolean({
|
|
53
|
-
description: "Show the mock payload that will be sent",
|
|
54
|
-
default: false,
|
|
55
|
-
}),
|
|
56
|
-
"dry-run": Flags.boolean({
|
|
57
|
-
description: "Show what would be tested without executing",
|
|
58
|
-
default: false,
|
|
59
|
-
}),
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
async execute(): Promise<TestOutput> {
|
|
63
|
-
const { args, flags } = await this.parse(HooksTestCommand);
|
|
64
|
-
this.parsedFlags = flags;
|
|
65
|
-
|
|
66
|
-
const registry = await discoverAllHooks();
|
|
67
|
-
|
|
68
|
-
// Collect all hooks
|
|
69
|
-
let hooksToTest: Hook[] = [];
|
|
70
|
-
|
|
71
|
-
if (flags.platform) {
|
|
72
|
-
hooksToTest = registry.platforms[flags.platform as keyof typeof registry.platforms];
|
|
73
|
-
} else {
|
|
74
|
-
hooksToTest = [
|
|
75
|
-
...registry.platforms.claude,
|
|
76
|
-
...registry.platforms.codex,
|
|
77
|
-
...registry.platforms.copilot,
|
|
78
|
-
];
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Filter by name if specified
|
|
82
|
-
if (args.hook) {
|
|
83
|
-
const searchTerm = args.hook.toLowerCase();
|
|
84
|
-
hooksToTest = hooksToTest.filter(
|
|
85
|
-
(h) =>
|
|
86
|
-
h.name.toLowerCase().includes(searchTerm) ||
|
|
87
|
-
h.id.toLowerCase().includes(searchTerm) ||
|
|
88
|
-
h.path.toLowerCase().includes(searchTerm),
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
if (hooksToTest.length === 0) {
|
|
92
|
-
this.logInfo(`no hooks matching "${args.hook}" found`);
|
|
93
|
-
return {
|
|
94
|
-
results: [],
|
|
95
|
-
summary: { total: 0, passed: 0, failed: 0 },
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (hooksToTest.length === 0) {
|
|
101
|
-
this.logInfo("no hooks found to test");
|
|
102
|
-
return {
|
|
103
|
-
results: [],
|
|
104
|
-
summary: { total: 0, passed: 0, failed: 0 },
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Show what will be tested
|
|
109
|
-
if (!this.jsonEnabled?.()) {
|
|
110
|
-
this.log(`\ntesting ${hooksToTest.length} hook(s)...\n`);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Show payload if requested
|
|
114
|
-
if (flags["show-payload"] && !this.jsonEnabled?.()) {
|
|
115
|
-
for (const hook of hooksToTest) {
|
|
116
|
-
const payload = generateMockPayload(hook);
|
|
117
|
-
this.log(`=== ${hook.platform}:${hook.name} payload ===`);
|
|
118
|
-
this.log(JSON.stringify(payload, null, 2));
|
|
119
|
-
this.log("");
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Dry run - just show what would be tested
|
|
124
|
-
if (flags["dry-run"]) {
|
|
125
|
-
if (!this.jsonEnabled?.()) {
|
|
126
|
-
for (const hook of hooksToTest) {
|
|
127
|
-
this.log(`[dry-run] ${hook.platform}:${hook.name}`);
|
|
128
|
-
this.log(` path: ${hook.path}`);
|
|
129
|
-
this.log(` event: ${hook.event}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
results: hooksToTest.map((hook) => ({
|
|
134
|
-
hook,
|
|
135
|
-
success: true,
|
|
136
|
-
durationMs: 0,
|
|
137
|
-
})),
|
|
138
|
-
summary: {
|
|
139
|
-
total: hooksToTest.length,
|
|
140
|
-
passed: hooksToTest.length,
|
|
141
|
-
failed: 0,
|
|
142
|
-
},
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Execute tests
|
|
147
|
-
const results: HookTestResult[] = [];
|
|
148
|
-
|
|
149
|
-
for (const hook of hooksToTest) {
|
|
150
|
-
if (!this.jsonEnabled?.()) {
|
|
151
|
-
this.log(`testing ${hook.platform}:${hook.name}...`);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const result = await runHook(hook);
|
|
155
|
-
results.push(result);
|
|
156
|
-
|
|
157
|
-
if (!this.jsonEnabled?.()) {
|
|
158
|
-
if (result.success) {
|
|
159
|
-
this.log(` ✓ passed (${result.durationMs}ms)`);
|
|
160
|
-
} else {
|
|
161
|
-
this.log(` ✗ failed (${result.durationMs}ms)`);
|
|
162
|
-
if (result.error) {
|
|
163
|
-
this.log(` error: ${result.error}`);
|
|
164
|
-
}
|
|
165
|
-
if (result.stderr) {
|
|
166
|
-
this.log(` stderr: ${result.stderr.slice(0, 200)}`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Summary
|
|
173
|
-
const passed = results.filter((r) => r.success).length;
|
|
174
|
-
const failed = results.filter((r) => !r.success).length;
|
|
175
|
-
|
|
176
|
-
if (!this.jsonEnabled?.()) {
|
|
177
|
-
this.log("");
|
|
178
|
-
this.logInfo(`results: ${passed} passed, ${failed} failed`);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
results,
|
|
183
|
-
summary: {
|
|
184
|
-
total: results.length,
|
|
185
|
-
passed,
|
|
186
|
-
failed,
|
|
187
|
-
},
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Args } from "@oclif/core";
|
|
2
|
-
import { removeLockfile } from "../../../lib/hooks/index.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
|
|
5
|
-
interface UnlockOutput {
|
|
6
|
-
path: string;
|
|
7
|
-
removed: boolean;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export default class HooksUnlockCommand extends BaseCommand {
|
|
11
|
-
static override summary = "Remove a hook context lockfile";
|
|
12
|
-
static override description = `Removes a lockfile created by 'abbie hook lock'.
|
|
13
|
-
|
|
14
|
-
Usually called via trap for cleanup:
|
|
15
|
-
LOCK=$(abbie hook lock)
|
|
16
|
-
trap "abbie hook unlock $LOCK" EXIT`;
|
|
17
|
-
|
|
18
|
-
static override examples = [
|
|
19
|
-
"# Remove specific lockfile",
|
|
20
|
-
"abbie hook unlock /tmp/.abbie-hook-context-12345-abc",
|
|
21
|
-
"",
|
|
22
|
-
"# In trap",
|
|
23
|
-
'trap "abbie hook unlock $LOCK" EXIT',
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
static override args = {
|
|
27
|
-
path: Args.string({
|
|
28
|
-
description: "Path to lockfile (from abbie hook lock)",
|
|
29
|
-
required: true,
|
|
30
|
-
}),
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
static override flags = {
|
|
34
|
-
...BaseCommand.baseFlags,
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
async execute(): Promise<UnlockOutput> {
|
|
38
|
-
const { args } = await this.parse(HooksUnlockCommand);
|
|
39
|
-
const { path } = args;
|
|
40
|
-
|
|
41
|
-
const removed = removeLockfile(path);
|
|
42
|
-
|
|
43
|
-
if (!this.jsonEnabled?.()) {
|
|
44
|
-
if (removed) {
|
|
45
|
-
this.log(`removed: ${path}`);
|
|
46
|
-
} else {
|
|
47
|
-
this.log(`not found: ${path}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
path,
|
|
53
|
-
removed,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "bun:test";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* E2E tests for abbie list command.
|
|
5
|
-
* Tests the actual CLI binary using Bun.spawn().
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
describe("abbie list (E2E)", () => {
|
|
9
|
-
async function runCLI(
|
|
10
|
-
args: string[],
|
|
11
|
-
): Promise<{ stdout: string; stderr: string; exitCode: number | null }> {
|
|
12
|
-
const proc = Bun.spawn(["bun", "bin/run.js", "list", ...args], {
|
|
13
|
-
cwd: `${import.meta.dir}/../../..`,
|
|
14
|
-
stdout: "pipe",
|
|
15
|
-
stderr: "pipe",
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
const stdout = await new Response(proc.stdout).text();
|
|
19
|
-
const stderr = await new Response(proc.stderr).text();
|
|
20
|
-
await proc.exited;
|
|
21
|
-
|
|
22
|
-
return { stdout, stderr, exitCode: proc.exitCode };
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
it("lists all sessions successfully", async () => {
|
|
26
|
-
const { stdout, exitCode } = await runCLI([]);
|
|
27
|
-
expect(exitCode).toBe(0);
|
|
28
|
-
// Should list sessions (may be empty if no sessions exist)
|
|
29
|
-
expect(stdout.length).toBeGreaterThan(0);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it("filters by project", async () => {
|
|
33
|
-
const { stdout, exitCode } = await runCLI(["--project", "arbor"]);
|
|
34
|
-
expect(exitCode).toBe(0);
|
|
35
|
-
if (stdout.includes("arbor:")) {
|
|
36
|
-
expect(stdout).toContain("arbor:");
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it("outputs JSON format", async () => {
|
|
41
|
-
const { stdout, exitCode } = await runCLI(["--json"]);
|
|
42
|
-
expect(exitCode).toBe(0);
|
|
43
|
-
const data = JSON.parse(stdout);
|
|
44
|
-
expect(typeof data).toBe("object");
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("suppresses info with --quiet", async () => {
|
|
48
|
-
const { stdout, exitCode } = await runCLI(["--quiet"]);
|
|
49
|
-
expect(exitCode).toBe(0);
|
|
50
|
-
expect(stdout).not.toContain("Total:");
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it("handles non-existent project gracefully", async () => {
|
|
54
|
-
const { stderr, exitCode } = await runCLI(["--project", "nonexistent-project-12345"]);
|
|
55
|
-
expect(exitCode).toBe(0); // Not an error, just no results
|
|
56
|
-
expect(stderr).toContain("No sessions found");
|
|
57
|
-
});
|
|
58
|
-
});
|
package/src/cli/commands/list.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { Flags } from "@oclif/core";
|
|
4
|
-
import { BaseCommand } from "../base-command.js";
|
|
5
|
-
|
|
6
|
-
type SessionList = Record<string, string[]>;
|
|
7
|
-
|
|
8
|
-
export default class ListCommand extends BaseCommand {
|
|
9
|
-
static override summary = "List planning sessions";
|
|
10
|
-
static override description =
|
|
11
|
-
"Lists all planning sessions organized by project in ~/.abbie/plans/";
|
|
12
|
-
|
|
13
|
-
static override examples = [
|
|
14
|
-
"$ abbie list",
|
|
15
|
-
"$ abbie list --project arbor",
|
|
16
|
-
"$ abbie list --json",
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
static override flags = {
|
|
20
|
-
...BaseCommand.baseFlags,
|
|
21
|
-
project: Flags.string({
|
|
22
|
-
char: "p",
|
|
23
|
-
description: "Filter by project name",
|
|
24
|
-
}),
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
async execute(): Promise<SessionList> {
|
|
28
|
-
const { flags } = await this.parse(ListCommand);
|
|
29
|
-
this.parsedFlags = flags;
|
|
30
|
-
|
|
31
|
-
const plansDir = this.getPlansDir();
|
|
32
|
-
|
|
33
|
-
if (!existsSync(plansDir)) {
|
|
34
|
-
this.logWarn(`Plans directory not found: ${plansDir}`);
|
|
35
|
-
return {};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const projects = readdirSync(plansDir).filter((name) => {
|
|
39
|
-
const path = join(plansDir, name);
|
|
40
|
-
return statSync(path).isDirectory();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const filtered = flags.project ? projects.filter((p) => p === flags.project) : projects;
|
|
44
|
-
|
|
45
|
-
if (filtered.length === 0 && flags.project) {
|
|
46
|
-
this.logWarn(`No sessions found for project: ${flags.project}`);
|
|
47
|
-
return {};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const result = this.gatherSessions(plansDir, filtered);
|
|
51
|
-
|
|
52
|
-
// NDJSON: flatten to {project, session} per line
|
|
53
|
-
if (this.ndjsonEnabled()) {
|
|
54
|
-
const items: Array<{ project: string; session: string }> = [];
|
|
55
|
-
for (const [project, sessions] of Object.entries(result)) {
|
|
56
|
-
for (const session of sessions) {
|
|
57
|
-
items.push({ project, session });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
this.outputNdjson(items);
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Output human-readable format if not JSON mode
|
|
65
|
-
if (!this.jsonEnabled?.()) {
|
|
66
|
-
for (const [project, sessions] of Object.entries(result)) {
|
|
67
|
-
this.log(`${project}:`);
|
|
68
|
-
for (const session of sessions) {
|
|
69
|
-
this.log(` ${session}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const totalSessions = Object.values(result).flat().length;
|
|
74
|
-
this.logInfo(`\nTotal: ${totalSessions} sessions across ${filtered.length} projects`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Always return data for programmatic use
|
|
78
|
-
return result;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private gatherSessions(plansDir: string, projects: string[]): SessionList {
|
|
82
|
-
const result: SessionList = {};
|
|
83
|
-
|
|
84
|
-
for (const project of projects) {
|
|
85
|
-
const projectDir = join(plansDir, project);
|
|
86
|
-
const sessions = readdirSync(projectDir)
|
|
87
|
-
.filter((name) => statSync(join(projectDir, name)).isDirectory())
|
|
88
|
-
.sort()
|
|
89
|
-
.reverse(); // Most recent first
|
|
90
|
-
|
|
91
|
-
result[project] = sessions;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
}
|