@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,671 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { basename, join } from "node:path";
|
|
5
|
-
import type { AgentType } from "./active-sessions.js";
|
|
6
|
-
|
|
7
|
-
export type { AgentType };
|
|
8
|
-
|
|
9
|
-
const ISSUE_ID_REGEX = /\b[A-Z][A-Z0-9]+-\d+\b/i;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Parsed session from an agent.
|
|
13
|
-
*/
|
|
14
|
-
export interface AgentSession {
|
|
15
|
-
id: string;
|
|
16
|
-
agent: AgentType;
|
|
17
|
-
project?: string;
|
|
18
|
-
started_at: string;
|
|
19
|
-
last_activity: string;
|
|
20
|
-
path: string;
|
|
21
|
-
summary?: string;
|
|
22
|
-
files_modified?: string[];
|
|
23
|
-
commits?: string[];
|
|
24
|
-
issue?: string;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Session file info.
|
|
29
|
-
*/
|
|
30
|
-
interface SessionFile {
|
|
31
|
-
path: string;
|
|
32
|
-
mtime: Date;
|
|
33
|
-
size: number;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Claude Code session paths.
|
|
38
|
-
*/
|
|
39
|
-
const CLAUDE_PATHS = {
|
|
40
|
-
sessions: join(homedir(), ".claude", "sessions"),
|
|
41
|
-
projects: join(homedir(), ".claude", "projects"),
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Codex session paths.
|
|
46
|
-
*/
|
|
47
|
-
const CODEX_PATHS = {
|
|
48
|
-
history: join(homedir(), ".codex", "history"),
|
|
49
|
-
cache: join(homedir(), ".codex", "cache"),
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Copilot session paths.
|
|
54
|
-
*/
|
|
55
|
-
const COPILOT_PATHS = {
|
|
56
|
-
session_state: join(homedir(), ".copilot", "session-state"),
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Multi-agent session miner.
|
|
61
|
-
*/
|
|
62
|
-
export class AgentSessionMiner {
|
|
63
|
-
/**
|
|
64
|
-
* Mine sessions from all supported agents.
|
|
65
|
-
*/
|
|
66
|
-
mineAll(options: { since?: Date; project?: string } = {}): AgentSession[] {
|
|
67
|
-
const sessions: AgentSession[] = [];
|
|
68
|
-
|
|
69
|
-
sessions.push(...this.mineClaude(options));
|
|
70
|
-
sessions.push(...this.mineCopilot(options));
|
|
71
|
-
sessions.push(...this.mineCodex(options));
|
|
72
|
-
|
|
73
|
-
// Sort by last activity
|
|
74
|
-
return sessions.sort(
|
|
75
|
-
(a, b) => new Date(b.last_activity).getTime() - new Date(a.last_activity).getTime(),
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Mine Claude Code sessions.
|
|
81
|
-
*/
|
|
82
|
-
mineClaude(options: { since?: Date; project?: string } = {}): AgentSession[] {
|
|
83
|
-
const sessions: AgentSession[] = [];
|
|
84
|
-
|
|
85
|
-
// Check sessions directory
|
|
86
|
-
if (existsSync(CLAUDE_PATHS.sessions)) {
|
|
87
|
-
const files = this.findSessionFiles(CLAUDE_PATHS.sessions, ".json", options.since);
|
|
88
|
-
|
|
89
|
-
for (const file of files) {
|
|
90
|
-
try {
|
|
91
|
-
const content = readFileSync(file.path, "utf-8");
|
|
92
|
-
const data = JSON.parse(content);
|
|
93
|
-
|
|
94
|
-
const session: AgentSession = {
|
|
95
|
-
id: basename(file.path, ".json"),
|
|
96
|
-
agent: "claude",
|
|
97
|
-
started_at: data.created_at || file.mtime.toISOString(),
|
|
98
|
-
last_activity: data.updated_at || file.mtime.toISOString(),
|
|
99
|
-
path: file.path,
|
|
100
|
-
project: data.project || this.extractProjectFromPath(file.path),
|
|
101
|
-
summary: data.summary,
|
|
102
|
-
files_modified: data.files_modified,
|
|
103
|
-
issue: this.extractIssueFromSession(data),
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
if (!options.project || session.project === options.project) {
|
|
107
|
-
sessions.push(session);
|
|
108
|
-
}
|
|
109
|
-
} catch {
|
|
110
|
-
// Skip malformed sessions
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Check projects directory for recent activity
|
|
116
|
-
if (existsSync(CLAUDE_PATHS.projects)) {
|
|
117
|
-
const projects = readdirSync(CLAUDE_PATHS.projects).filter((name) => {
|
|
118
|
-
const path = join(CLAUDE_PATHS.projects, name);
|
|
119
|
-
return statSync(path).isDirectory();
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
for (const project of projects) {
|
|
123
|
-
if (options.project && project !== options.project) continue;
|
|
124
|
-
|
|
125
|
-
const projectDir = join(CLAUDE_PATHS.projects, project);
|
|
126
|
-
const files = this.findSessionFiles(projectDir, ".json", options.since);
|
|
127
|
-
|
|
128
|
-
for (const file of files) {
|
|
129
|
-
try {
|
|
130
|
-
const content = readFileSync(file.path, "utf-8");
|
|
131
|
-
const data = JSON.parse(content);
|
|
132
|
-
|
|
133
|
-
sessions.push({
|
|
134
|
-
id: `${project}-${basename(file.path, ".json")}`,
|
|
135
|
-
agent: "claude",
|
|
136
|
-
project,
|
|
137
|
-
started_at: data.created_at || file.mtime.toISOString(),
|
|
138
|
-
last_activity: file.mtime.toISOString(),
|
|
139
|
-
path: file.path,
|
|
140
|
-
summary: data.summary,
|
|
141
|
-
issue: this.extractIssueFromSession(data),
|
|
142
|
-
});
|
|
143
|
-
} catch {
|
|
144
|
-
// Skip malformed sessions
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return sessions;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Mine Copilot sessions.
|
|
155
|
-
*/
|
|
156
|
-
mineCopilot(options: { since?: Date; project?: string } = {}): AgentSession[] {
|
|
157
|
-
const sessions: AgentSession[] = [];
|
|
158
|
-
|
|
159
|
-
if (!existsSync(COPILOT_PATHS.session_state)) return sessions;
|
|
160
|
-
|
|
161
|
-
const sessionDirs = readdirSync(COPILOT_PATHS.session_state).filter((name) => {
|
|
162
|
-
const path = join(COPILOT_PATHS.session_state, name);
|
|
163
|
-
return statSync(path).isDirectory();
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
for (const dirName of sessionDirs) {
|
|
167
|
-
const sessionDir = join(COPILOT_PATHS.session_state, dirName);
|
|
168
|
-
const workspacePath = join(sessionDir, "workspace.yaml");
|
|
169
|
-
const eventsPath = join(sessionDir, "events.jsonl");
|
|
170
|
-
|
|
171
|
-
try {
|
|
172
|
-
const stat = statSync(sessionDir);
|
|
173
|
-
const workspace = existsSync(workspacePath)
|
|
174
|
-
? this.parseCopilotWorkspaceYaml(readFileSync(workspacePath, "utf-8"))
|
|
175
|
-
: {};
|
|
176
|
-
|
|
177
|
-
// Extract summary from events.jsonl, not workspace.yaml (workspace.yaml stores prompt, not response)
|
|
178
|
-
const eventsSummary = existsSync(eventsPath)
|
|
179
|
-
? this.extractCopilotSummaryFromEvents(readFileSync(eventsPath, "utf-8"))
|
|
180
|
-
: undefined;
|
|
181
|
-
|
|
182
|
-
const session: AgentSession = {
|
|
183
|
-
id: dirName,
|
|
184
|
-
agent: "copilot",
|
|
185
|
-
project: workspace.cwd ? this.extractProjectFromPath(workspace.cwd) : undefined,
|
|
186
|
-
started_at: workspace.created_at || stat.mtime.toISOString(),
|
|
187
|
-
last_activity: workspace.updated_at || stat.mtime.toISOString(),
|
|
188
|
-
path: sessionDir,
|
|
189
|
-
summary: eventsSummary?.summary,
|
|
190
|
-
files_modified: eventsSummary?.files,
|
|
191
|
-
issue:
|
|
192
|
-
eventsSummary?.issue ||
|
|
193
|
-
(workspace.cwd ? this.extractIssueFromText(workspace.cwd) : undefined),
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
if (options.since && new Date(session.last_activity) < options.since) {
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (!options.project || session.project === options.project) {
|
|
201
|
-
sessions.push(session);
|
|
202
|
-
}
|
|
203
|
-
} catch {
|
|
204
|
-
// Skip malformed sessions
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return sessions;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Extract summary from Copilot events.jsonl file.
|
|
213
|
-
* The actual session summary is in assistant.message events, not workspace.yaml.
|
|
214
|
-
*/
|
|
215
|
-
private extractCopilotSummaryFromEvents(
|
|
216
|
-
content: string,
|
|
217
|
-
): { summary?: string; files?: string[]; issue?: string } | undefined {
|
|
218
|
-
const lines = content.split("\n").filter(Boolean);
|
|
219
|
-
const result: { summary?: string; files?: string[]; issue?: string } = {};
|
|
220
|
-
|
|
221
|
-
// First pass: extract issue from session.start (usually first event)
|
|
222
|
-
for (const line of lines) {
|
|
223
|
-
try {
|
|
224
|
-
const event = JSON.parse(line);
|
|
225
|
-
|
|
226
|
-
// Get issue from session.start context (usually contains branch with issue ID)
|
|
227
|
-
if (event.type === "session.start" && event.data?.context) {
|
|
228
|
-
const issueMatch = event.data.context.branch?.match(ISSUE_ID_REGEX);
|
|
229
|
-
if (issueMatch) {
|
|
230
|
-
result.issue = issueMatch[0].toUpperCase();
|
|
231
|
-
break; // Found issue, stop looking
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
} catch {
|
|
235
|
-
// Skip malformed lines
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Second pass: look for summary and files (usually at the end)
|
|
240
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
241
|
-
try {
|
|
242
|
-
const event = JSON.parse(lines[i]);
|
|
243
|
-
|
|
244
|
-
// Look for assistant.message with actual summary content
|
|
245
|
-
if (!result.summary && event.type === "assistant.message" && event.data?.content) {
|
|
246
|
-
const messageContent = event.data.content;
|
|
247
|
-
|
|
248
|
-
// Try to parse as JSON (our hooks output JSON summaries)
|
|
249
|
-
try {
|
|
250
|
-
const parsed = JSON.parse(messageContent);
|
|
251
|
-
if (parsed.summary && typeof parsed.summary === "string") {
|
|
252
|
-
result.summary = parsed.summary;
|
|
253
|
-
}
|
|
254
|
-
} catch {
|
|
255
|
-
// Not JSON, check if it's a reasonable summary (not a prompt template)
|
|
256
|
-
if (
|
|
257
|
-
!messageContent.startsWith("#") &&
|
|
258
|
-
!messageContent.includes("<task>") &&
|
|
259
|
-
!messageContent.includes("</output_spec>") &&
|
|
260
|
-
messageContent.length < 500
|
|
261
|
-
) {
|
|
262
|
-
result.summary = messageContent.slice(0, 200);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Extract files from user.message context
|
|
268
|
-
// Match format: "Files changed (N): file1,file2,..." with explicit count to avoid matching interpretation_guide
|
|
269
|
-
if (!result.files && event.type === "user.message" && event.data?.content) {
|
|
270
|
-
const filesMatch = event.data.content.match(/Files changed \(\d+\):\s*([^\n\\]+)/);
|
|
271
|
-
if (filesMatch) {
|
|
272
|
-
result.files = filesMatch[1]
|
|
273
|
-
.split(",")
|
|
274
|
-
.map((f: string) => f.trim())
|
|
275
|
-
.filter(Boolean);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// Also extract issue from content if not found in session.start
|
|
279
|
-
if (!result.issue) {
|
|
280
|
-
const issueMatch = event.data.content.match(ISSUE_ID_REGEX);
|
|
281
|
-
if (issueMatch) {
|
|
282
|
-
result.issue = issueMatch[0].toUpperCase();
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Early exit if we have everything
|
|
288
|
-
if (result.summary && result.files) {
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
} catch {
|
|
292
|
-
// Skip malformed lines
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
return Object.keys(result).length > 0 ? result : undefined;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Mine Codex sessions.
|
|
301
|
-
*/
|
|
302
|
-
mineCodex(options: { since?: Date; project?: string } = {}): AgentSession[] {
|
|
303
|
-
const sessions: AgentSession[] = [];
|
|
304
|
-
|
|
305
|
-
// Check history directory
|
|
306
|
-
if (existsSync(CODEX_PATHS.history)) {
|
|
307
|
-
const files = this.findSessionFiles(CODEX_PATHS.history, ".jsonl", options.since);
|
|
308
|
-
|
|
309
|
-
for (const file of files) {
|
|
310
|
-
try {
|
|
311
|
-
const content = readFileSync(file.path, "utf-8");
|
|
312
|
-
const lines = content.split("\n").filter(Boolean);
|
|
313
|
-
|
|
314
|
-
if (lines.length === 0) continue;
|
|
315
|
-
|
|
316
|
-
// Parse first and last lines for timing
|
|
317
|
-
const firstEvent = JSON.parse(lines[0]);
|
|
318
|
-
const lastEvent = JSON.parse(lines[lines.length - 1]);
|
|
319
|
-
|
|
320
|
-
// Extract project from events or path
|
|
321
|
-
const project = this.extractProjectFromCodex(lines);
|
|
322
|
-
|
|
323
|
-
const session: AgentSession = {
|
|
324
|
-
id: basename(file.path, ".jsonl"),
|
|
325
|
-
agent: "codex",
|
|
326
|
-
project,
|
|
327
|
-
started_at: firstEvent.timestamp || file.mtime.toISOString(),
|
|
328
|
-
last_activity: lastEvent.timestamp || file.mtime.toISOString(),
|
|
329
|
-
path: file.path,
|
|
330
|
-
summary: this.extractCodexSummary(lines),
|
|
331
|
-
files_modified: this.extractCodexFiles(lines),
|
|
332
|
-
commits: this.extractCodexCommits(lines),
|
|
333
|
-
issue: this.extractCodexIssue(lines),
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
if (!options.project || session.project === options.project) {
|
|
337
|
-
sessions.push(session);
|
|
338
|
-
}
|
|
339
|
-
} catch {
|
|
340
|
-
// Skip malformed sessions
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
return sessions;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Find session files recursively.
|
|
350
|
-
*/
|
|
351
|
-
private findSessionFiles(dir: string, ext: string, since?: Date): SessionFile[] {
|
|
352
|
-
const files: SessionFile[] = [];
|
|
353
|
-
|
|
354
|
-
const walk = (currentDir: string) => {
|
|
355
|
-
const entries = readdirSync(currentDir, { withFileTypes: true });
|
|
356
|
-
|
|
357
|
-
for (const entry of entries) {
|
|
358
|
-
const fullPath = join(currentDir, entry.name);
|
|
359
|
-
|
|
360
|
-
if (entry.isDirectory()) {
|
|
361
|
-
walk(fullPath);
|
|
362
|
-
} else if (entry.isFile() && entry.name.endsWith(ext)) {
|
|
363
|
-
const stat = statSync(fullPath);
|
|
364
|
-
|
|
365
|
-
if (!since || stat.mtime >= since) {
|
|
366
|
-
files.push({
|
|
367
|
-
path: fullPath,
|
|
368
|
-
mtime: stat.mtime,
|
|
369
|
-
size: stat.size,
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
};
|
|
375
|
-
|
|
376
|
-
walk(dir);
|
|
377
|
-
return files;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Extract project name from path.
|
|
382
|
-
*/
|
|
383
|
-
private extractProjectFromPath(path: string): string | undefined {
|
|
384
|
-
// Look for common project directories
|
|
385
|
-
const match = path.match(/Developer\/([^/]+)\/([^/]+)/);
|
|
386
|
-
if (match) {
|
|
387
|
-
return match[2];
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// Try to extract from .claude/projects structure
|
|
391
|
-
const projectMatch = path.match(/\.claude\/projects\/([^/]+)/);
|
|
392
|
-
if (projectMatch) {
|
|
393
|
-
return projectMatch[1];
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
return undefined;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* Extract issue reference from session data.
|
|
401
|
-
*/
|
|
402
|
-
private extractIssueFromSession(data: Record<string, unknown>): string | undefined {
|
|
403
|
-
// Check common fields
|
|
404
|
-
if (typeof data.issue === "string") return data.issue;
|
|
405
|
-
if (typeof data.linear_issue === "string") return data.linear_issue;
|
|
406
|
-
|
|
407
|
-
// Check messages for issue patterns
|
|
408
|
-
if (Array.isArray(data.messages)) {
|
|
409
|
-
for (const msg of data.messages) {
|
|
410
|
-
if (typeof msg.content === "string") {
|
|
411
|
-
const match = msg.content.match(ISSUE_ID_REGEX);
|
|
412
|
-
if (match) return match[0].toUpperCase();
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
return undefined;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* Extract project from Codex events.
|
|
422
|
-
*/
|
|
423
|
-
private extractProjectFromCodex(lines: string[]): string | undefined {
|
|
424
|
-
for (const line of lines) {
|
|
425
|
-
try {
|
|
426
|
-
const event = JSON.parse(line);
|
|
427
|
-
if (event.cwd) {
|
|
428
|
-
const match = event.cwd.match(/Developer\/([^/]+)\/([^/]+)/);
|
|
429
|
-
if (match) return match[2];
|
|
430
|
-
}
|
|
431
|
-
} catch {
|
|
432
|
-
// Skip malformed lines
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
return undefined;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/**
|
|
439
|
-
* Extract summary from Codex events.
|
|
440
|
-
*/
|
|
441
|
-
private extractCodexSummary(lines: string[]): string | undefined {
|
|
442
|
-
// Look for completion or summary events
|
|
443
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
444
|
-
try {
|
|
445
|
-
const event = JSON.parse(lines[i]);
|
|
446
|
-
if (event.type === "completion" || event.type === "summary") {
|
|
447
|
-
return event.summary || event.message;
|
|
448
|
-
}
|
|
449
|
-
} catch {
|
|
450
|
-
// Skip malformed lines
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
return undefined;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
/**
|
|
457
|
-
* Extract files from Codex events.
|
|
458
|
-
*/
|
|
459
|
-
private extractCodexFiles(lines: string[]): string[] {
|
|
460
|
-
const files = new Set<string>();
|
|
461
|
-
|
|
462
|
-
for (const line of lines) {
|
|
463
|
-
try {
|
|
464
|
-
const event = JSON.parse(line);
|
|
465
|
-
if (event.file) {
|
|
466
|
-
files.add(event.file);
|
|
467
|
-
}
|
|
468
|
-
if (Array.isArray(event.files)) {
|
|
469
|
-
event.files.forEach((f: string) => {
|
|
470
|
-
files.add(f);
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
} catch {
|
|
474
|
-
// Skip malformed lines
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
return [...files];
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* Extract commits from Codex events.
|
|
483
|
-
*/
|
|
484
|
-
private extractCodexCommits(lines: string[]): string[] {
|
|
485
|
-
const commits: string[] = [];
|
|
486
|
-
|
|
487
|
-
for (const line of lines) {
|
|
488
|
-
try {
|
|
489
|
-
const event = JSON.parse(line);
|
|
490
|
-
if (event.type === "commit" && event.hash) {
|
|
491
|
-
commits.push(event.hash);
|
|
492
|
-
}
|
|
493
|
-
} catch {
|
|
494
|
-
// Skip malformed lines
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
return commits;
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
/**
|
|
502
|
-
* Extract issue from Codex events.
|
|
503
|
-
*/
|
|
504
|
-
private extractCodexIssue(lines: string[]): string | undefined {
|
|
505
|
-
for (const line of lines) {
|
|
506
|
-
try {
|
|
507
|
-
const event = JSON.parse(line);
|
|
508
|
-
if (event.issue) return event.issue;
|
|
509
|
-
|
|
510
|
-
// Check prompt for issue references
|
|
511
|
-
if (typeof event.prompt === "string") {
|
|
512
|
-
const match = event.prompt.match(ISSUE_ID_REGEX);
|
|
513
|
-
if (match) return match[0].toUpperCase();
|
|
514
|
-
}
|
|
515
|
-
} catch {
|
|
516
|
-
// Skip malformed lines
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
return undefined;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
/**
|
|
523
|
-
* Extract issue reference from text.
|
|
524
|
-
*/
|
|
525
|
-
private extractIssueFromText(text: string): string | undefined {
|
|
526
|
-
const match = text.match(ISSUE_ID_REGEX);
|
|
527
|
-
if (!match) return undefined;
|
|
528
|
-
return match[0].toUpperCase();
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
/**
|
|
532
|
-
* Parse Copilot workspace.yaml (minimal YAML subset).
|
|
533
|
-
* Note: summary field is NOT parsed - it contains the prompt template, not actual summary.
|
|
534
|
-
* Actual summaries come from events.jsonl via extractCopilotSummaryFromEvents.
|
|
535
|
-
*/
|
|
536
|
-
private parseCopilotWorkspaceYaml(content: string): {
|
|
537
|
-
cwd?: string;
|
|
538
|
-
created_at?: string;
|
|
539
|
-
updated_at?: string;
|
|
540
|
-
} {
|
|
541
|
-
const data: { cwd?: string; created_at?: string; updated_at?: string } = {};
|
|
542
|
-
const lines = content.split("\n");
|
|
543
|
-
|
|
544
|
-
for (let i = 0; i < lines.length; i++) {
|
|
545
|
-
const line = lines[i];
|
|
546
|
-
const match = line.match(/^([A-Za-z0-9_]+):\s*(.*)$/);
|
|
547
|
-
if (!match) continue;
|
|
548
|
-
|
|
549
|
-
const key = match[1];
|
|
550
|
-
const rawValue = match[2] ?? "";
|
|
551
|
-
|
|
552
|
-
// Skip multi-line values (like summary which contains the prompt template)
|
|
553
|
-
if (rawValue === "|" || rawValue === "|-" || rawValue === ">" || rawValue === ">-") {
|
|
554
|
-
// Skip the block
|
|
555
|
-
for (let j = i + 1; j < lines.length; j++) {
|
|
556
|
-
const next = lines[j];
|
|
557
|
-
if (/^[A-Za-z0-9_]+:/.test(next)) {
|
|
558
|
-
i = j - 1;
|
|
559
|
-
break;
|
|
560
|
-
}
|
|
561
|
-
i = j;
|
|
562
|
-
}
|
|
563
|
-
continue;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
let value = rawValue.trim();
|
|
567
|
-
if (
|
|
568
|
-
(value.startsWith("'") && value.endsWith("'") && value.length >= 2) ||
|
|
569
|
-
(value.startsWith('"') && value.endsWith('"') && value.length >= 2)
|
|
570
|
-
) {
|
|
571
|
-
value = value.slice(1, -1);
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
if (key === "cwd") data.cwd = value;
|
|
575
|
-
if (key === "created_at") data.created_at = value;
|
|
576
|
-
if (key === "updated_at") data.updated_at = value;
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
return data;
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
/**
|
|
583
|
-
* Get sessions for the current user across all agents.
|
|
584
|
-
*/
|
|
585
|
-
getMySessions(options: { since?: Date; project?: string } = {}): AgentSession[] {
|
|
586
|
-
return this.mineAll(options);
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
/**
|
|
590
|
-
* Get sessions related to a specific issue.
|
|
591
|
-
*/
|
|
592
|
-
getSessionsByIssue(issue: string): AgentSession[] {
|
|
593
|
-
return this.mineAll().filter((s) => s.issue === issue);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
/**
|
|
597
|
-
* Get recent sessions (last 24 hours).
|
|
598
|
-
*/
|
|
599
|
-
getRecentSessions(project?: string): AgentSession[] {
|
|
600
|
-
const since = new Date();
|
|
601
|
-
since.setHours(since.getHours() - 24);
|
|
602
|
-
return this.mineAll({ since, project });
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
/**
|
|
606
|
-
* Get sessions from today.
|
|
607
|
-
*/
|
|
608
|
-
getTodaySessions(project?: string): AgentSession[] {
|
|
609
|
-
const since = new Date();
|
|
610
|
-
since.setHours(0, 0, 0, 0);
|
|
611
|
-
return this.mineAll({ since, project });
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
/**
|
|
615
|
-
* Check git for recent commits by the user.
|
|
616
|
-
*/
|
|
617
|
-
getRecentCommits(repoPath: string, since?: Date): string[] {
|
|
618
|
-
try {
|
|
619
|
-
const sinceStr = since ? `--since="${since.toISOString()}"` : '--since="24 hours ago"';
|
|
620
|
-
const result = execSync(
|
|
621
|
-
`git -C "${repoPath}" log ${sinceStr} --format="%H %s" --author="$(git config user.email)"`,
|
|
622
|
-
{ encoding: "utf-8" },
|
|
623
|
-
);
|
|
624
|
-
return result.trim().split("\n").filter(Boolean);
|
|
625
|
-
} catch {
|
|
626
|
-
return [];
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
/**
|
|
631
|
-
* Correlate sessions with commits.
|
|
632
|
-
*/
|
|
633
|
-
correlateSessions(repoPath: string): AgentSession[] {
|
|
634
|
-
const sessions = this.mineAll();
|
|
635
|
-
const commits = this.getRecentCommits(repoPath);
|
|
636
|
-
|
|
637
|
-
// Cross-reference sessions with commits
|
|
638
|
-
for (const session of sessions) {
|
|
639
|
-
if (!session.commits) {
|
|
640
|
-
session.commits = [];
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
// Check if any commit message references this session
|
|
644
|
-
for (const commitLine of commits) {
|
|
645
|
-
const [hash, ...msgParts] = commitLine.split(" ");
|
|
646
|
-
const msg = msgParts.join(" ");
|
|
647
|
-
|
|
648
|
-
// Check for issue reference
|
|
649
|
-
if (session.issue && msg.includes(session.issue)) {
|
|
650
|
-
if (!session.commits.includes(hash)) {
|
|
651
|
-
session.commits.push(hash);
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
return sessions;
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
/**
|
|
662
|
-
* Create a singleton session miner.
|
|
663
|
-
*/
|
|
664
|
-
let _miner: AgentSessionMiner | undefined;
|
|
665
|
-
|
|
666
|
-
export function getSessionMiner(): AgentSessionMiner {
|
|
667
|
-
if (!_miner) {
|
|
668
|
-
_miner = new AgentSessionMiner();
|
|
669
|
-
}
|
|
670
|
-
return _miner;
|
|
671
|
-
}
|