@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
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Args, Flags } from "@oclif/core";
|
|
2
|
-
import { getActiveSessionManager } from "../../../lib/active-sessions.js";
|
|
3
|
-
import { BaseCommand } from "../../base-command.js";
|
|
4
|
-
|
|
5
|
-
export default class SessionAwait extends BaseCommand {
|
|
6
|
-
static override description = "Wait for a session to complete and return output";
|
|
7
|
-
static override hidden = false;
|
|
8
|
-
|
|
9
|
-
static override examples = [
|
|
10
|
-
"<%= config.bin %> session await hostagent-20241225-120000-abc1",
|
|
11
|
-
"<%= config.bin %> session await hostagent-20241225-120000-abc1 --timeout 120",
|
|
12
|
-
"<%= config.bin %> session await hostagent-20241225-120000-abc1 --poll-interval 1 --json",
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
static override args = {
|
|
16
|
-
session_id: Args.string({
|
|
17
|
-
description: "Session ID to wait for",
|
|
18
|
-
required: true,
|
|
19
|
-
}),
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
static override flags = {
|
|
23
|
-
...BaseCommand.baseFlags,
|
|
24
|
-
timeout: Flags.integer({
|
|
25
|
-
description: "Maximum wait time in seconds",
|
|
26
|
-
default: 300,
|
|
27
|
-
}),
|
|
28
|
-
"poll-interval": Flags.integer({
|
|
29
|
-
description: "Seconds between status checks",
|
|
30
|
-
default: 2,
|
|
31
|
-
}),
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
protected async execute(): Promise<unknown> {
|
|
35
|
-
const { args, flags } = await this.parse(SessionAwait);
|
|
36
|
-
this.parsedFlags = flags;
|
|
37
|
-
|
|
38
|
-
const manager = getActiveSessionManager();
|
|
39
|
-
const session = await manager.getAsync(args.session_id);
|
|
40
|
-
|
|
41
|
-
if (!session) {
|
|
42
|
-
this.error(`Session not found: ${args.session_id}`);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const timeoutMs = flags.timeout * 1000;
|
|
46
|
-
const pollIntervalMs = flags["poll-interval"] * 1000;
|
|
47
|
-
const isJson = flags.json || flags.format === "json";
|
|
48
|
-
|
|
49
|
-
if (!isJson) {
|
|
50
|
-
this.logInfo(
|
|
51
|
-
`Waiting for session ${args.session_id} (timeout ${flags.timeout}s, poll ${flags["poll-interval"]}s)...`,
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const result = await manager.await(args.session_id, {
|
|
56
|
-
pollIntervalMs,
|
|
57
|
-
timeoutMs,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
if (isJson) {
|
|
61
|
-
return { session_id: args.session_id, ...result };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (result.status === "timeout") {
|
|
65
|
-
this.logInfo(`Timeout waiting for session ${args.session_id}`);
|
|
66
|
-
return { session_id: args.session_id, ...result };
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (result.status === "stopped") {
|
|
70
|
-
this.logInfo(`Session ${args.session_id} was stopped`);
|
|
71
|
-
} else if (result.error && result.status === "failed") {
|
|
72
|
-
this.logInfo(result.error);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (typeof result.output === "string") {
|
|
76
|
-
this.log(result.output);
|
|
77
|
-
} else if (result.output !== undefined) {
|
|
78
|
-
this.log(JSON.stringify(result.output, null, 2));
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return { session_id: args.session_id, ...result };
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { Args, Flags } from "@oclif/core";
|
|
2
|
-
import { createEvent, EventStore } from "../../../lib/events.js";
|
|
3
|
-
import { HeartbeatManager } from "../../../lib/heartbeat.js";
|
|
4
|
-
import { BaseCommand } from "../../base-command.js";
|
|
5
|
-
|
|
6
|
-
export default class SessionComplete extends BaseCommand {
|
|
7
|
-
static override description = "Mark a session as complete";
|
|
8
|
-
static override hidden = false;
|
|
9
|
-
|
|
10
|
-
static override examples = [
|
|
11
|
-
'<%= config.bin %> session complete SESSION_ID --summary "implemented auth flow"',
|
|
12
|
-
'<%= config.bin %> session complete SESSION_ID --summary "fixed bug" --status success',
|
|
13
|
-
'<%= config.bin %> session complete SESSION_ID --summary "blocked on API" --status blocked',
|
|
14
|
-
];
|
|
15
|
-
|
|
16
|
-
static override args = {
|
|
17
|
-
session_id: Args.string({
|
|
18
|
-
description: "Session ID to complete",
|
|
19
|
-
required: true,
|
|
20
|
-
}),
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
static override flags = {
|
|
24
|
-
...BaseCommand.baseFlags,
|
|
25
|
-
summary: Flags.string({
|
|
26
|
-
char: "s",
|
|
27
|
-
description: "Summary of work completed",
|
|
28
|
-
required: true,
|
|
29
|
-
}),
|
|
30
|
-
status: Flags.string({
|
|
31
|
-
description: "Completion status",
|
|
32
|
-
options: ["success", "partial", "blocked", "failed"],
|
|
33
|
-
default: "success",
|
|
34
|
-
}),
|
|
35
|
-
artifacts: Flags.string({
|
|
36
|
-
char: "a",
|
|
37
|
-
description: "Comma-separated list of artifact paths",
|
|
38
|
-
}),
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
protected async execute(): Promise<unknown> {
|
|
42
|
-
const { args, flags } = await this.parse(SessionComplete);
|
|
43
|
-
this.parsedFlags = flags;
|
|
44
|
-
|
|
45
|
-
const heartbeat = new HeartbeatManager();
|
|
46
|
-
const events = new EventStore();
|
|
47
|
-
|
|
48
|
-
const session = heartbeat.get(args.session_id);
|
|
49
|
-
if (!session) {
|
|
50
|
-
this.error(`Session not found: ${args.session_id}`);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Remove from active sessions
|
|
54
|
-
heartbeat.deregister(args.session_id);
|
|
55
|
-
|
|
56
|
-
// Parse artifacts - convert paths to artifact objects
|
|
57
|
-
const artifactPaths = flags.artifacts ? flags.artifacts.split(",").map((a) => a.trim()) : [];
|
|
58
|
-
const artifacts = artifactPaths.map((ref) => ({
|
|
59
|
-
type: "file" as const,
|
|
60
|
-
ref,
|
|
61
|
-
}));
|
|
62
|
-
|
|
63
|
-
// Calculate duration
|
|
64
|
-
const durationMs = Date.now() - new Date(session.started_at).getTime();
|
|
65
|
-
|
|
66
|
-
// Emit completion event (or blocked if status indicates blocking)
|
|
67
|
-
if (flags.status === "blocked") {
|
|
68
|
-
events.append(
|
|
69
|
-
createEvent.blocked(args.session_id, session.agent, {
|
|
70
|
-
reason: flags.summary,
|
|
71
|
-
blocker_type: "hil",
|
|
72
|
-
}),
|
|
73
|
-
);
|
|
74
|
-
} else {
|
|
75
|
-
events.append(
|
|
76
|
-
createEvent.complete(args.session_id, session.agent, {
|
|
77
|
-
summary: flags.summary,
|
|
78
|
-
artifacts,
|
|
79
|
-
duration_ms: durationMs,
|
|
80
|
-
}),
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const result = {
|
|
85
|
-
session_id: args.session_id,
|
|
86
|
-
status: flags.status,
|
|
87
|
-
summary: flags.summary,
|
|
88
|
-
artifacts: artifactPaths,
|
|
89
|
-
duration_ms: durationMs,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
if (flags.json || flags.format === "json") {
|
|
93
|
-
return result;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
this.logInfo(`Session ${args.session_id} completed (${flags.status})`);
|
|
97
|
-
this.log(`Summary: ${flags.summary}`);
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Flags } from "@oclif/core";
|
|
2
|
-
import { createEvent, EventStore } from "../../../lib/events.js";
|
|
3
|
-
import { HeartbeatManager } from "../../../lib/heartbeat.js";
|
|
4
|
-
import { AGENTS } from "../../../lib/types.js";
|
|
5
|
-
import { BaseCommand } from "../../base-command.js";
|
|
6
|
-
|
|
7
|
-
export default class SessionCreate extends BaseCommand {
|
|
8
|
-
static override description = "Create and register a new agent session";
|
|
9
|
-
static override hidden = false;
|
|
10
|
-
|
|
11
|
-
static override examples = [
|
|
12
|
-
"<%= config.bin %> session create --project hostagent --agent claude",
|
|
13
|
-
"<%= config.bin %> session create --project hostagent --agent codex --issue ZO-123",
|
|
14
|
-
"<%= config.bin %> session create --json",
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
static override flags = {
|
|
18
|
-
...BaseCommand.baseFlags,
|
|
19
|
-
project: Flags.string({
|
|
20
|
-
char: "p",
|
|
21
|
-
description: "Project name",
|
|
22
|
-
required: true,
|
|
23
|
-
}),
|
|
24
|
-
agent: Flags.string({
|
|
25
|
-
char: "a",
|
|
26
|
-
description: "Agent type (claude, codex, copilot, gemini)",
|
|
27
|
-
required: true,
|
|
28
|
-
options: [...AGENTS],
|
|
29
|
-
}),
|
|
30
|
-
issue: Flags.string({
|
|
31
|
-
char: "i",
|
|
32
|
-
description: "Linear issue reference (e.g., ZO-123)",
|
|
33
|
-
}),
|
|
34
|
-
worktree: Flags.string({
|
|
35
|
-
char: "w",
|
|
36
|
-
description: "Git worktree path",
|
|
37
|
-
}),
|
|
38
|
-
task: Flags.string({
|
|
39
|
-
char: "t",
|
|
40
|
-
description: "Initial task description",
|
|
41
|
-
}),
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
protected async execute(): Promise<unknown> {
|
|
45
|
-
const { flags } = await this.parse(SessionCreate);
|
|
46
|
-
this.parsedFlags = flags;
|
|
47
|
-
|
|
48
|
-
const heartbeat = new HeartbeatManager();
|
|
49
|
-
const events = new EventStore();
|
|
50
|
-
|
|
51
|
-
// Generate session ID with project prefix for easier lookup
|
|
52
|
-
const sessionId = this.generateSessionId(flags.project);
|
|
53
|
-
|
|
54
|
-
// Register with heartbeat manager
|
|
55
|
-
const session = heartbeat.register(
|
|
56
|
-
sessionId,
|
|
57
|
-
flags.agent as "claude" | "codex" | "copilot" | "gemini",
|
|
58
|
-
{
|
|
59
|
-
project: flags.project,
|
|
60
|
-
issue: flags.issue,
|
|
61
|
-
worktree: flags.worktree,
|
|
62
|
-
},
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
// Set initial task if provided
|
|
66
|
-
if (flags.task) {
|
|
67
|
-
heartbeat.heartbeat(sessionId, { current_task: flags.task });
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Emit session:start event
|
|
71
|
-
events.append(
|
|
72
|
-
createEvent.sessionStart(sessionId, flags.agent, {
|
|
73
|
-
project: flags.project,
|
|
74
|
-
issue: flags.issue,
|
|
75
|
-
worktree: flags.worktree,
|
|
76
|
-
}),
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
if (flags.json || flags.format === "json") {
|
|
80
|
-
return session;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
this.log(sessionId);
|
|
84
|
-
return { session_id: sessionId };
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
private generateSessionId(project: string): string {
|
|
88
|
-
const timestamp = Date.now().toString(36);
|
|
89
|
-
const random = Math.random().toString(36).slice(2, 7);
|
|
90
|
-
return `${project}-${timestamp}-${random}`;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Args, Flags } from "@oclif/core";
|
|
2
|
-
import { createEvent, EventStore } from "../../../lib/events.js";
|
|
3
|
-
import { HeartbeatManager } from "../../../lib/heartbeat.js";
|
|
4
|
-
import { BaseCommand } from "../../base-command.js";
|
|
5
|
-
|
|
6
|
-
export default class SessionHeartbeat extends BaseCommand {
|
|
7
|
-
static override description = "Send heartbeat for an active session";
|
|
8
|
-
static override hidden = false;
|
|
9
|
-
|
|
10
|
-
static override examples = [
|
|
11
|
-
"<%= config.bin %> session heartbeat SESSION_ID",
|
|
12
|
-
'<%= config.bin %> session heartbeat SESSION_ID --task "implementing auth"',
|
|
13
|
-
"<%= config.bin %> session heartbeat SESSION_ID --json",
|
|
14
|
-
];
|
|
15
|
-
|
|
16
|
-
static override args = {
|
|
17
|
-
session_id: Args.string({
|
|
18
|
-
description: "Session ID to heartbeat",
|
|
19
|
-
required: true,
|
|
20
|
-
}),
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
static override flags = {
|
|
24
|
-
...BaseCommand.baseFlags,
|
|
25
|
-
task: Flags.string({
|
|
26
|
-
char: "t",
|
|
27
|
-
description: "Current task description",
|
|
28
|
-
}),
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
protected async execute(): Promise<unknown> {
|
|
32
|
-
const { args, flags } = await this.parse(SessionHeartbeat);
|
|
33
|
-
this.parsedFlags = flags;
|
|
34
|
-
|
|
35
|
-
const heartbeat = new HeartbeatManager();
|
|
36
|
-
const events = new EventStore();
|
|
37
|
-
|
|
38
|
-
const session = heartbeat.heartbeat(args.session_id, {
|
|
39
|
-
current_task: flags.task,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (!session) {
|
|
43
|
-
this.error(`Session not found: ${args.session_id}`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Emit heartbeat event - only emit active/idle status
|
|
47
|
-
const eventStatus =
|
|
48
|
-
session.status === "active" || session.status === "idle" ? session.status : "active";
|
|
49
|
-
events.append(
|
|
50
|
-
createEvent.heartbeat(args.session_id, session.agent, {
|
|
51
|
-
current_task: flags.task,
|
|
52
|
-
status: eventStatus,
|
|
53
|
-
}),
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
if (flags.json || flags.format === "json") {
|
|
57
|
-
return session;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
this.logInfo(`Heartbeat sent for ${args.session_id} (status: ${session.status})`);
|
|
61
|
-
return session;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { getHttpClient, api, type Session } from "@creativeintelligence/sdk/convex";
|
|
3
|
-
import { Flags } from "@oclif/core";
|
|
4
|
-
import { type ActiveSession, getActiveSessionManager } from "../../../lib/active-sessions.js";
|
|
5
|
-
import { getDeviceId } from "../../../lib/device.js";
|
|
6
|
-
import { BaseCommand } from "../../base-command.js";
|
|
7
|
-
|
|
8
|
-
export default class SessionList extends BaseCommand {
|
|
9
|
-
static override description = "List agent sessions (spawned via session start)";
|
|
10
|
-
static override hidden = false;
|
|
11
|
-
|
|
12
|
-
static override examples = [
|
|
13
|
-
"<%= config.bin %> session list",
|
|
14
|
-
"<%= config.bin %> session list --running",
|
|
15
|
-
"<%= config.bin %> session list --active",
|
|
16
|
-
"<%= config.bin %> session list --project hostagent",
|
|
17
|
-
"<%= config.bin %> session list --all",
|
|
18
|
-
"<%= config.bin %> session list --json",
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
static override flags = {
|
|
22
|
-
...BaseCommand.baseFlags,
|
|
23
|
-
project: Flags.string({
|
|
24
|
-
char: "p",
|
|
25
|
-
description: "Filter by project",
|
|
26
|
-
}),
|
|
27
|
-
running: Flags.boolean({
|
|
28
|
-
char: "r",
|
|
29
|
-
description: "Show only running sessions",
|
|
30
|
-
default: false,
|
|
31
|
-
}),
|
|
32
|
-
active: Flags.boolean({
|
|
33
|
-
description: "Alias for --running (compat with older docs/skills)",
|
|
34
|
-
default: false,
|
|
35
|
-
}),
|
|
36
|
-
completed: Flags.boolean({
|
|
37
|
-
description: "Show only completed sessions",
|
|
38
|
-
default: false,
|
|
39
|
-
}),
|
|
40
|
-
failed: Flags.boolean({
|
|
41
|
-
description: "Show only failed sessions",
|
|
42
|
-
default: false,
|
|
43
|
-
}),
|
|
44
|
-
all: Flags.boolean({
|
|
45
|
-
char: "a",
|
|
46
|
-
description: "Show all sessions (default shows recent 20)",
|
|
47
|
-
default: false,
|
|
48
|
-
}),
|
|
49
|
-
limit: Flags.integer({
|
|
50
|
-
char: "n",
|
|
51
|
-
description: "Maximum sessions to show",
|
|
52
|
-
default: 20,
|
|
53
|
-
}),
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
protected async execute(): Promise<unknown> {
|
|
57
|
-
const { flags } = await this.parse(SessionList);
|
|
58
|
-
this.parsedFlags = flags;
|
|
59
|
-
|
|
60
|
-
// Determine status filter
|
|
61
|
-
let statusFilter: ActiveSession["status"] | undefined;
|
|
62
|
-
if (flags.running || flags.active) statusFilter = "running";
|
|
63
|
-
else if (flags.completed) statusFilter = "completed";
|
|
64
|
-
else if (flags.failed) statusFilter = "failed";
|
|
65
|
-
|
|
66
|
-
let sessions: ActiveSession[] = [];
|
|
67
|
-
|
|
68
|
-
const deviceId = getDeviceId();
|
|
69
|
-
const queryLimit = flags.all ? 500 : Math.max(flags.limit, 50);
|
|
70
|
-
|
|
71
|
-
const client = getHttpClient();
|
|
72
|
-
|
|
73
|
-
let storeSessions: Session[] = [];
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
const rawSessions = await client.query(api.sessions.list, { deviceId, limit: queryLimit });
|
|
77
|
-
storeSessions = rawSessions as unknown as Session[];
|
|
78
|
-
} catch (error) {
|
|
79
|
-
this.logWarn(`Store read failed: ${(error as Error).message}`);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const toActiveSession = (s: (typeof storeSessions)[number]): ActiveSession => {
|
|
83
|
-
const status =
|
|
84
|
-
s.status === "spawned" ? "running" : (s.status as unknown as ActiveSession["status"]);
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
session_id: s.sessionId,
|
|
88
|
-
agent: s.agent as ActiveSession["agent"],
|
|
89
|
-
project: s.project,
|
|
90
|
-
goal: s.goal ?? "",
|
|
91
|
-
issue: s.issue ?? undefined,
|
|
92
|
-
cwd: s.cwd,
|
|
93
|
-
pid: s.pid ?? 0,
|
|
94
|
-
started_at: new Date(s.startedAt).toISOString(),
|
|
95
|
-
status,
|
|
96
|
-
prompt_path: s.promptPath ?? undefined,
|
|
97
|
-
output_path: s.outputPath ?? undefined,
|
|
98
|
-
trace_id: s.traceId ?? undefined,
|
|
99
|
-
parent_session_id: s.parentSessionId ?? undefined,
|
|
100
|
-
read_only: (s.metadata as { readOnly?: boolean } | undefined)?.readOnly ?? undefined,
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const applyFilters = (s: ActiveSession): boolean => {
|
|
105
|
-
if (flags.project && s.project !== flags.project) return false;
|
|
106
|
-
if (statusFilter && s.status !== statusFilter) return false;
|
|
107
|
-
return true;
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
sessions = storeSessions
|
|
111
|
-
.map(toActiveSession)
|
|
112
|
-
.filter(applyFilters)
|
|
113
|
-
.sort((a, b) => new Date(b.started_at).getTime() - new Date(a.started_at).getTime());
|
|
114
|
-
|
|
115
|
-
// Detect and mark stale "running" sessions whose process/pane is dead.
|
|
116
|
-
// Cross-reference local active-sessions JSON which mark-done updates.
|
|
117
|
-
const manager = getActiveSessionManager();
|
|
118
|
-
for (const session of sessions) {
|
|
119
|
-
if (session.status !== "running") continue;
|
|
120
|
-
|
|
121
|
-
// Check if local JSON already has a terminal status (mark-done ran but store wasn't updated)
|
|
122
|
-
const localSession = manager.get(session.session_id);
|
|
123
|
-
if (localSession && localSession.status !== "running") {
|
|
124
|
-
session.status = localSession.status;
|
|
125
|
-
session.exit_code = localSession.exit_code;
|
|
126
|
-
try {
|
|
127
|
-
await client.mutation(api.sessions.update, {
|
|
128
|
-
sessionId: session.session_id,
|
|
129
|
-
status: localSession.status === "stopped" ? "stopped" : localSession.status,
|
|
130
|
-
endedAt: Date.now(),
|
|
131
|
-
});
|
|
132
|
-
} catch {}
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Process/pane liveness check
|
|
137
|
-
let dead = false;
|
|
138
|
-
|
|
139
|
-
if (session.pid > 0) {
|
|
140
|
-
try {
|
|
141
|
-
process.kill(session.pid, 0);
|
|
142
|
-
} catch {
|
|
143
|
-
dead = true;
|
|
144
|
-
}
|
|
145
|
-
} else if (localSession?.pane_id && localSession.spawn_mode === "terminal") {
|
|
146
|
-
const result = spawnSync("tmux", ["list-panes", "-t", localSession.pane_id], {
|
|
147
|
-
stdio: ["ignore", "ignore", "ignore"],
|
|
148
|
-
});
|
|
149
|
-
if (result.status !== 0) {
|
|
150
|
-
dead = true;
|
|
151
|
-
}
|
|
152
|
-
} else if (localSession && localSession.pid <= 0 && !localSession.pane_id) {
|
|
153
|
-
// No PID and no pane â cannot verify liveness
|
|
154
|
-
dead = true;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (dead) {
|
|
158
|
-
session.status = "failed";
|
|
159
|
-
try {
|
|
160
|
-
await client.mutation(api.sessions.update, {
|
|
161
|
-
sessionId: session.session_id,
|
|
162
|
-
status: "failed",
|
|
163
|
-
endedAt: Date.now(),
|
|
164
|
-
});
|
|
165
|
-
} catch {}
|
|
166
|
-
if (localSession && localSession.status === "running") {
|
|
167
|
-
localSession.status = "failed";
|
|
168
|
-
const { writeFileSync } = await import("node:fs");
|
|
169
|
-
const { join } = await import("node:path");
|
|
170
|
-
const { homedir } = await import("node:os");
|
|
171
|
-
const sessionPath = join(
|
|
172
|
-
homedir(),
|
|
173
|
-
".abbie",
|
|
174
|
-
"active-sessions",
|
|
175
|
-
`${session.session_id}.json`,
|
|
176
|
-
);
|
|
177
|
-
writeFileSync(sessionPath, JSON.stringify(localSession, null, 2));
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Apply limit unless --all
|
|
183
|
-
if (!flags.all && sessions.length > flags.limit) {
|
|
184
|
-
sessions = sessions.slice(0, flags.limit);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// JSON output
|
|
188
|
-
if (flags.json || flags.format === "json") {
|
|
189
|
-
return sessions;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// NDJSON output
|
|
193
|
-
if (this.ndjsonEnabled()) {
|
|
194
|
-
this.outputNdjson(sessions);
|
|
195
|
-
return sessions;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Text output
|
|
199
|
-
if (sessions.length === 0) {
|
|
200
|
-
this.logInfo("No sessions found");
|
|
201
|
-
return [];
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const total = storeSessions.length;
|
|
205
|
-
const showing = sessions.length;
|
|
206
|
-
const limitNote =
|
|
207
|
-
!flags.all && total > showing ? ` (showing ${showing}/${total}, use --all for more)` : "";
|
|
208
|
-
|
|
209
|
-
this.logInfo(`Sessions${limitNote}:\n`);
|
|
210
|
-
|
|
211
|
-
for (const session of sessions) {
|
|
212
|
-
const statusIcon = this.getStatusIcon(session.status);
|
|
213
|
-
const duration = this.getDuration(session);
|
|
214
|
-
const age = this.getAge(session.started_at);
|
|
215
|
-
|
|
216
|
-
this.log(`${statusIcon} ${session.session_id}`);
|
|
217
|
-
this.log(` Agent: ${session.agent}`);
|
|
218
|
-
this.log(` Project: ${session.project}`);
|
|
219
|
-
this.log(` Goal: ${this.truncate(session.goal, 60)}`);
|
|
220
|
-
if (session.issue) {
|
|
221
|
-
this.log(` Issue: ${session.issue}`);
|
|
222
|
-
}
|
|
223
|
-
this.log(
|
|
224
|
-
` Status: ${session.status}${session.exit_code !== undefined ? ` (exit ${session.exit_code})` : ""}`,
|
|
225
|
-
);
|
|
226
|
-
this.log(` Started: ${age}${duration ? ` (${duration})` : ""}`);
|
|
227
|
-
this.log(` PID: ${session.pid}`);
|
|
228
|
-
this.log("");
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
return sessions;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
private getStatusIcon(status: ActiveSession["status"]): string {
|
|
235
|
-
switch (status) {
|
|
236
|
-
case "running":
|
|
237
|
-
return "đĸ";
|
|
238
|
-
case "completed":
|
|
239
|
-
return "â
";
|
|
240
|
-
case "failed":
|
|
241
|
-
return "â";
|
|
242
|
-
case "stopped":
|
|
243
|
-
return "âšī¸";
|
|
244
|
-
default:
|
|
245
|
-
return "âĒ";
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
private getAge(timestamp: string): string {
|
|
250
|
-
const ms = Date.now() - new Date(timestamp).getTime();
|
|
251
|
-
const seconds = Math.floor(ms / 1000);
|
|
252
|
-
const minutes = Math.floor(seconds / 60);
|
|
253
|
-
const hours = Math.floor(minutes / 60);
|
|
254
|
-
const days = Math.floor(hours / 24);
|
|
255
|
-
|
|
256
|
-
if (days > 0) {
|
|
257
|
-
return `${days}d ${hours % 24}h ago`;
|
|
258
|
-
}
|
|
259
|
-
if (hours > 0) {
|
|
260
|
-
return `${hours}h ${minutes % 60}m ago`;
|
|
261
|
-
}
|
|
262
|
-
if (minutes > 0) {
|
|
263
|
-
return `${minutes}m ago`;
|
|
264
|
-
}
|
|
265
|
-
return `${seconds}s ago`;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
private getDuration(session: ActiveSession): string | null {
|
|
269
|
-
if (session.status === "running") {
|
|
270
|
-
return null;
|
|
271
|
-
}
|
|
272
|
-
// Estimate from started_at to now for completed sessions
|
|
273
|
-
// (we don't have completed_at in the interface, could add later)
|
|
274
|
-
return null;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
private truncate(str: string, maxLength: number): string {
|
|
278
|
-
if (str.length <= maxLength) return str;
|
|
279
|
-
return `${str.slice(0, maxLength - 3)}...`;
|
|
280
|
-
}
|
|
281
|
-
}
|