@creativeintelligence/abbie 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/login.js +26 -0
- package/dist/cli/commands/start.js +2 -1
- package/oclif.manifest.json +1 -1
- package/package.json +9 -5
- package/dist/cli/base-command.d.ts.map +0 -1
- package/dist/cli/commands/agent/list.d.ts.map +0 -1
- package/dist/cli/commands/annotation/ack.d.ts.map +0 -1
- package/dist/cli/commands/annotation/create.d.ts.map +0 -1
- package/dist/cli/commands/annotation/events.d.ts.map +0 -1
- package/dist/cli/commands/annotation/export.d.ts.map +0 -1
- package/dist/cli/commands/annotation/import.d.ts.map +0 -1
- package/dist/cli/commands/annotation/ingest.d.ts.map +0 -1
- package/dist/cli/commands/annotation/list.d.ts.map +0 -1
- package/dist/cli/commands/annotation/reply.d.ts.map +0 -1
- package/dist/cli/commands/annotation/resolve.d.ts.map +0 -1
- package/dist/cli/commands/auto/index.d.ts.map +0 -1
- package/dist/cli/commands/backlog/add.d.ts.map +0 -1
- package/dist/cli/commands/backlog/claim.d.ts.map +0 -1
- package/dist/cli/commands/backlog/complete.d.ts.map +0 -1
- package/dist/cli/commands/backlog/list.d.ts.map +0 -1
- package/dist/cli/commands/backlog/pick.d.ts.map +0 -1
- package/dist/cli/commands/backlog/sync.d.ts.map +0 -1
- package/dist/cli/commands/bootstrap.d.ts.map +0 -1
- package/dist/cli/commands/bridge.d.ts.map +0 -1
- package/dist/cli/commands/context/inject.d.ts.map +0 -1
- package/dist/cli/commands/context/list.d.ts.map +0 -1
- package/dist/cli/commands/context/publish.d.ts.map +0 -1
- package/dist/cli/commands/context/read.d.ts.map +0 -1
- package/dist/cli/commands/daemon.d.ts.map +0 -1
- package/dist/cli/commands/digest/index.d.ts.map +0 -1
- package/dist/cli/commands/docs/lint.d.ts.map +0 -1
- package/dist/cli/commands/docs/sync.d.ts.map +0 -1
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/find/index.d.ts.map +0 -1
- package/dist/cli/commands/gc.d.ts.map +0 -1
- package/dist/cli/commands/history/index.d.ts.map +0 -1
- package/dist/cli/commands/hooks/guard.d.ts.map +0 -1
- package/dist/cli/commands/hooks/list.d.ts.map +0 -1
- package/dist/cli/commands/hooks/lock.d.ts.map +0 -1
- package/dist/cli/commands/hooks/status.d.ts.map +0 -1
- package/dist/cli/commands/hooks/test.d.ts.map +0 -1
- package/dist/cli/commands/hooks/unlock.d.ts.map +0 -1
- package/dist/cli/commands/index.d.ts.map +0 -1
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.e2e.test.d.ts +0 -1
- package/dist/cli/commands/list.e2e.test.js +0 -47
- package/dist/cli/commands/login.d.ts.map +0 -1
- package/dist/cli/commands/logout.d.ts.map +0 -1
- package/dist/cli/commands/panes/broker.d.ts.map +0 -1
- package/dist/cli/commands/panes/pipe-sink.d.ts.map +0 -1
- package/dist/cli/commands/panes/snapshot.d.ts.map +0 -1
- package/dist/cli/commands/plan.d.ts.map +0 -1
- package/dist/cli/commands/plan.e2e.test.d.ts +0 -1
- package/dist/cli/commands/plan.e2e.test.js +0 -74
- package/dist/cli/commands/preview/index.d.ts.map +0 -1
- package/dist/cli/commands/preview/init.d.ts.map +0 -1
- package/dist/cli/commands/preview/list.d.ts.map +0 -1
- package/dist/cli/commands/preview/status.d.ts.map +0 -1
- package/dist/cli/commands/preview/stop.d.ts.map +0 -1
- package/dist/cli/commands/preview/sync.d.ts.map +0 -1
- package/dist/cli/commands/preview/watch.d.ts.map +0 -1
- package/dist/cli/commands/project/add.d.ts.map +0 -1
- package/dist/cli/commands/project/list.d.ts.map +0 -1
- package/dist/cli/commands/project/remove.d.ts.map +0 -1
- package/dist/cli/commands/push.d.ts.map +0 -1
- package/dist/cli/commands/reference/add.d.ts.map +0 -1
- package/dist/cli/commands/reference/delete.d.ts.map +0 -1
- package/dist/cli/commands/reference/extract.d.ts.map +0 -1
- package/dist/cli/commands/reference/list.d.ts.map +0 -1
- package/dist/cli/commands/reference/normalize.d.ts.map +0 -1
- package/dist/cli/commands/reference/open.d.ts.map +0 -1
- package/dist/cli/commands/reference/save.d.ts.map +0 -1
- package/dist/cli/commands/reference/search.d.ts.map +0 -1
- package/dist/cli/commands/reference/show.d.ts.map +0 -1
- package/dist/cli/commands/reference/update-index.d.ts.map +0 -1
- package/dist/cli/commands/reference/update.d.ts.map +0 -1
- package/dist/cli/commands/report/blocked.d.ts.map +0 -1
- package/dist/cli/commands/report/complete.d.ts.map +0 -1
- package/dist/cli/commands/report/progress.d.ts.map +0 -1
- package/dist/cli/commands/report/start.d.ts.map +0 -1
- package/dist/cli/commands/resource/acquire.d.ts.map +0 -1
- package/dist/cli/commands/resource/list.d.ts.map +0 -1
- package/dist/cli/commands/resource/release.d.ts.map +0 -1
- package/dist/cli/commands/resource/wait.d.ts.map +0 -1
- package/dist/cli/commands/review.d.ts.map +0 -1
- package/dist/cli/commands/session/attach.d.ts.map +0 -1
- package/dist/cli/commands/session/await.d.ts.map +0 -1
- package/dist/cli/commands/session/complete.d.ts.map +0 -1
- package/dist/cli/commands/session/create.d.ts.map +0 -1
- package/dist/cli/commands/session/heartbeat.d.ts.map +0 -1
- package/dist/cli/commands/session/list.d.ts.map +0 -1
- package/dist/cli/commands/session/mark-done.d.ts.map +0 -1
- package/dist/cli/commands/session/mine.d.ts.map +0 -1
- package/dist/cli/commands/session/replay.d.ts.map +0 -1
- package/dist/cli/commands/session/run.d.ts.map +0 -1
- package/dist/cli/commands/session/show.d.ts.map +0 -1
- package/dist/cli/commands/session/start.d.ts.map +0 -1
- package/dist/cli/commands/session/state/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/session/state/end.d.ts.map +0 -1
- package/dist/cli/commands/session/state/get.d.ts.map +0 -1
- package/dist/cli/commands/session/state/init.d.ts.map +0 -1
- package/dist/cli/commands/session/state/list.d.ts.map +0 -1
- package/dist/cli/commands/session/state/update.d.ts.map +0 -1
- package/dist/cli/commands/session/stop.d.ts.map +0 -1
- package/dist/cli/commands/session/view.d.ts.map +0 -1
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/state/dump.d.ts.map +0 -1
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/sync.d.ts.map +0 -1
- package/dist/cli/commands/trace/export.d.ts.map +0 -1
- package/dist/cli/commands/triage/claim.d.ts.map +0 -1
- package/dist/cli/commands/triage/list.d.ts.map +0 -1
- package/dist/cli/commands/triage/next.d.ts.map +0 -1
- package/dist/cli/commands/triage/pull.d.ts.map +0 -1
- package/dist/cli/commands/triage/stats.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/list.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/start.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/stop.d.ts.map +0 -1
- package/dist/cli/commands/tunnel/url.d.ts.map +0 -1
- package/dist/cli/commands/web/start.d.ts.map +0 -1
- package/dist/cli/commands/windows/context.d.ts.map +0 -1
- package/dist/cli/commands/windows/focus.d.ts.map +0 -1
- package/dist/cli/commands/windows/list.d.ts.map +0 -1
- package/dist/cli/commands/windows/map.d.ts.map +0 -1
- package/dist/cli/commands/windows/read.d.ts.map +0 -1
- package/dist/cli/commands/windows/search.d.ts.map +0 -1
- package/dist/cli/commands/windows/show.d.ts.map +0 -1
- package/dist/cli/commands/windows/watch.d.ts.map +0 -1
- package/dist/lib/active-sessions.d.ts.map +0 -1
- package/dist/lib/agent-adapters.d.ts.map +0 -1
- package/dist/lib/agent-sessions.d.ts.map +0 -1
- package/dist/lib/agent-trace.d.ts.map +0 -1
- package/dist/lib/analytics.d.ts.map +0 -1
- package/dist/lib/annotations-convex.d.ts.map +0 -1
- package/dist/lib/annotations.d.ts.map +0 -1
- package/dist/lib/auto/discover.d.ts.map +0 -1
- package/dist/lib/auto/ideate.d.ts.map +0 -1
- package/dist/lib/auto/spawn.d.ts.map +0 -1
- package/dist/lib/auto/workspace.d.ts.map +0 -1
- package/dist/lib/backlog.d.ts.map +0 -1
- package/dist/lib/backlog.test.d.ts +0 -1
- package/dist/lib/backlog.test.js +0 -162
- package/dist/lib/config-loader.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/claude.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/codex.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/copilot.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/gemini.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/index.d.ts.map +0 -1
- package/dist/lib/config-sync/adapters/opencode.d.ts.map +0 -1
- package/dist/lib/config-sync/index.d.ts.map +0 -1
- package/dist/lib/config-sync/types.d.ts.map +0 -1
- package/dist/lib/config-sync/writer.d.ts.map +0 -1
- package/dist/lib/content-sync/index.d.ts.map +0 -1
- package/dist/lib/content-sync/types.d.ts.map +0 -1
- package/dist/lib/contracts.d.ts.map +0 -1
- package/dist/lib/convex.d.ts.map +0 -1
- package/dist/lib/device.d.ts.map +0 -1
- package/dist/lib/digest/index.d.ts.map +0 -1
- package/dist/lib/docs/lint.d.ts.map +0 -1
- package/dist/lib/docs/lint.test.d.ts +0 -1
- package/dist/lib/docs/lint.test.js +0 -120
- package/dist/lib/docs/sync.d.ts.map +0 -1
- package/dist/lib/doctor/index.d.ts.map +0 -1
- package/dist/lib/doctor/repos.d.ts.map +0 -1
- package/dist/lib/doctor/templates.d.ts.map +0 -1
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/events.d.ts.map +0 -1
- package/dist/lib/heartbeat.d.ts.map +0 -1
- package/dist/lib/heartbeat.test.d.ts +0 -1
- package/dist/lib/heartbeat.test.js +0 -124
- package/dist/lib/hooks/adapters/claude.d.ts.map +0 -1
- package/dist/lib/hooks/adapters/codex.d.ts.map +0 -1
- package/dist/lib/hooks/adapters/copilot.d.ts.map +0 -1
- package/dist/lib/hooks/context.d.ts.map +0 -1
- package/dist/lib/hooks/index.d.ts.map +0 -1
- package/dist/lib/hooks/registry.d.ts.map +0 -1
- package/dist/lib/hooks/runner.d.ts.map +0 -1
- package/dist/lib/hooks/types.d.ts.map +0 -1
- package/dist/lib/index.test.d.ts +0 -1
- package/dist/lib/index.test.js +0 -334
- package/dist/lib/managed-session.d.ts.map +0 -1
- package/dist/lib/math.d.ts.map +0 -1
- package/dist/lib/math.test.d.ts +0 -1
- package/dist/lib/math.test.js +0 -238
- package/dist/lib/ngrok.d.ts.map +0 -1
- package/dist/lib/nvim/discovery.d.ts.map +0 -1
- package/dist/lib/nvim/discovery.test.d.ts +0 -1
- package/dist/lib/nvim/discovery.test.js +0 -131
- package/dist/lib/nvim/index.d.ts.map +0 -1
- package/dist/lib/nvim/remote.d.ts.map +0 -1
- package/dist/lib/nvim/remote.test.d.ts +0 -1
- package/dist/lib/nvim/remote.test.js +0 -18
- package/dist/lib/panes/broker.d.ts.map +0 -1
- package/dist/lib/panes/index.d.ts.map +0 -1
- package/dist/lib/panes/server.d.ts.map +0 -1
- package/dist/lib/preview/detect.d.ts.map +0 -1
- package/dist/lib/preview/index.d.ts.map +0 -1
- package/dist/lib/preview/manager.d.ts.map +0 -1
- package/dist/lib/preview/schema.d.ts.map +0 -1
- package/dist/lib/preview/sprite.d.ts.map +0 -1
- package/dist/lib/preview/watcher.d.ts.map +0 -1
- package/dist/lib/process/index.d.ts.map +0 -1
- package/dist/lib/process/snapshot.d.ts.map +0 -1
- package/dist/lib/process/snapshot.test.d.ts +0 -1
- package/dist/lib/process/snapshot.test.js +0 -127
- package/dist/lib/project-identity.d.ts.map +0 -1
- package/dist/lib/provider-auth.d.ts.map +0 -1
- package/dist/lib/references.d.ts.map +0 -1
- package/dist/lib/report.d.ts.map +0 -1
- package/dist/lib/resources.d.ts.map +0 -1
- package/dist/lib/resources.test.d.ts +0 -1
- package/dist/lib/resources.test.js +0 -94
- package/dist/lib/runner.d.ts.map +0 -1
- package/dist/lib/runner.test.d.ts +0 -1
- package/dist/lib/runner.test.js +0 -234
- package/dist/lib/session-artifacts.d.ts.map +0 -1
- package/dist/lib/session-manager.d.ts.map +0 -1
- package/dist/lib/session-manager.test.d.ts +0 -1
- package/dist/lib/session-manager.test.js +0 -310
- package/dist/lib/session-result.d.ts.map +0 -1
- package/dist/lib/session-state.d.ts.map +0 -1
- package/dist/lib/slack-workspace.d.ts.map +0 -1
- package/dist/lib/tmux/bridge.d.ts.map +0 -1
- package/dist/lib/tmux/context.d.ts.map +0 -1
- package/dist/lib/tmux/context.test.d.ts +0 -1
- package/dist/lib/tmux/context.test.js +0 -215
- package/dist/lib/tmux/index.d.ts.map +0 -1
- package/dist/lib/tmux/map.d.ts.map +0 -1
- package/dist/lib/tmux/map.test.d.ts +0 -1
- package/dist/lib/tmux/map.test.js +0 -80
- package/dist/lib/tmux/panes.d.ts.map +0 -1
- package/dist/lib/tmux/redaction.d.ts.map +0 -1
- package/dist/lib/tmux/redaction.test.d.ts +0 -1
- package/dist/lib/tmux/redaction.test.js +0 -183
- package/dist/lib/triage-llm.d.ts.map +0 -1
- package/dist/lib/triage-tracker.d.ts.map +0 -1
- package/dist/lib/triage.d.ts.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/windows/index.d.ts.map +0 -1
- package/dist/lib/windows/inventory.d.ts.map +0 -1
- package/dist/lib/windows/inventory.test.d.ts +0 -1
- package/dist/lib/windows/inventory.test.js +0 -292
- package/dist/lib/windows/types.d.ts.map +0 -1
- package/dist/lib.d.ts.map +0 -1
- package/dist/web/app/@overlay/default.d.ts +0 -1
- package/dist/web/app/@overlay/default.js +0 -3
- package/dist/web/app/about/page.d.ts +0 -1
- package/dist/web/app/about/page.js +0 -6
- package/dist/web/app/layout.d.ts +0 -7
- package/dist/web/app/layout.js +0 -19
- package/dist/web/app/page.d.ts +0 -1
- package/dist/web/app/page.js +0 -38
- package/dist/web/app/settings/page.d.ts +0 -1
- package/dist/web/app/settings/page.js +0 -6
- package/dist/web/app/shortcuts/page.d.ts +0 -1
- package/dist/web/app/shortcuts/page.js +0 -6
- package/dist/web/atoms/sidebar.d.ts +0 -16
- package/dist/web/atoms/sidebar.js +0 -58
- package/dist/web/atoms/state.d.ts +0 -24
- package/dist/web/atoms/state.js +0 -43
- package/dist/web/components/command-palette.d.ts +0 -6
- package/dist/web/components/command-palette.js +0 -297
- package/dist/web/components/main-view.d.ts +0 -1
- package/dist/web/components/main-view.js +0 -93
- package/dist/web/components/overlay/page-overlay.d.ts +0 -16
- package/dist/web/components/overlay/page-overlay.js +0 -84
- package/dist/web/components/pane-view.d.ts +0 -5
- package/dist/web/components/pane-view.js +0 -168
- package/dist/web/components/project-files-view.d.ts +0 -6
- package/dist/web/components/project-files-view.js +0 -205
- package/dist/web/components/project-planning-view.d.ts +0 -6
- package/dist/web/components/project-planning-view.js +0 -146
- package/dist/web/components/session-view.d.ts +0 -6
- package/dist/web/components/session-view.js +0 -211
- package/dist/web/components/sessions-list-view.d.ts +0 -1
- package/dist/web/components/sessions-list-view.js +0 -118
- package/dist/web/components/sidebar/index.d.ts +0 -9
- package/dist/web/components/sidebar/index.js +0 -29
- package/dist/web/components/sidebar/kbd.d.ts +0 -17
- package/dist/web/components/sidebar/kbd.js +0 -47
- package/dist/web/components/sidebar/nav-group.d.ts +0 -22
- package/dist/web/components/sidebar/nav-group.js +0 -43
- package/dist/web/components/sidebar/nav-item.d.ts +0 -17
- package/dist/web/components/sidebar/nav-item.js +0 -38
- package/dist/web/components/sidebar/sidebar-header.d.ts +0 -9
- package/dist/web/components/sidebar/sidebar-header.js +0 -18
- package/dist/web/components/sidebar/sidebar-nav.d.ts +0 -7
- package/dist/web/components/sidebar/sidebar-nav.js +0 -505
- package/dist/web/components/sidebar/sidebar-search.d.ts +0 -7
- package/dist/web/components/sidebar/sidebar-search.js +0 -18
- package/dist/web/components/sidebar/sidebar-settings.d.ts +0 -4
- package/dist/web/components/sidebar/sidebar-settings.js +0 -28
- package/dist/web/components/sidebar/sidebar-transition.d.ts +0 -12
- package/dist/web/components/sidebar/sidebar-transition.js +0 -58
- package/dist/web/components/status-bar.d.ts +0 -1
- package/dist/web/components/status-bar.js +0 -53
- package/dist/web/components/terminal.d.ts +0 -4
- package/dist/web/components/terminal.js +0 -324
- package/dist/web/components/toast.d.ts +0 -7
- package/dist/web/components/toast.js +0 -72
- package/dist/web/hooks/use-keybindings.d.ts +0 -30
- package/dist/web/hooks/use-keybindings.js +0 -322
- package/dist/web/hooks/use-state.d.ts +0 -11
- package/dist/web/hooks/use-state.js +0 -84
- package/dist/web/lib/api.d.ts +0 -179
- package/dist/web/lib/api.js +0 -79
- package/dist/web/lib/paths.d.ts +0 -2
- package/dist/web/lib/paths.js +0 -26
- package/dist/web/lib/utils.d.ts +0 -2
- package/dist/web/lib/utils.js +0 -5
- package/dist/web/lib/ws.d.ts +0 -18
- package/dist/web/lib/ws.js +0 -138
- package/dist/web/next.config.d.ts +0 -3
- package/dist/web/next.config.js +0 -9
- package/scripts/generate-manifest.ts +0 -44
- package/src/cli/base-command.ts +0 -233
- package/src/cli/commands/__tests__/annotations.test.ts +0 -704
- package/src/cli/commands/__tests__/bridge.test.ts +0 -101
- package/src/cli/commands/__tests__/daemon.test.ts +0 -79
- package/src/cli/commands/agent/list.ts +0 -75
- package/src/cli/commands/annotation/ack.ts +0 -37
- package/src/cli/commands/annotation/create.ts +0 -67
- package/src/cli/commands/annotation/events.ts +0 -63
- package/src/cli/commands/annotation/export.ts +0 -67
- package/src/cli/commands/annotation/import.ts +0 -98
- package/src/cli/commands/annotation/ingest.ts +0 -112
- package/src/cli/commands/annotation/list.ts +0 -57
- package/src/cli/commands/annotation/reply.ts +0 -46
- package/src/cli/commands/annotation/resolve.ts +0 -37
- package/src/cli/commands/auto/index.ts +0 -755
- package/src/cli/commands/backlog/add.ts +0 -74
- package/src/cli/commands/backlog/claim.ts +0 -53
- package/src/cli/commands/backlog/complete.ts +0 -51
- package/src/cli/commands/backlog/list.ts +0 -107
- package/src/cli/commands/backlog/pick.ts +0 -50
- package/src/cli/commands/backlog/sync.ts +0 -131
- package/src/cli/commands/bootstrap.ts +0 -205
- package/src/cli/commands/bridge.ts +0 -233
- package/src/cli/commands/context/inject.ts +0 -103
- package/src/cli/commands/context/list.ts +0 -112
- package/src/cli/commands/context/publish.ts +0 -83
- package/src/cli/commands/context/read.ts +0 -85
- package/src/cli/commands/daemon.ts +0 -1809
- package/src/cli/commands/digest/index.ts +0 -245
- package/src/cli/commands/docs/lint.ts +0 -93
- package/src/cli/commands/docs/sync.ts +0 -90
- package/src/cli/commands/doctor.ts +0 -267
- package/src/cli/commands/find/index.ts +0 -313
- package/src/cli/commands/history/index.ts +0 -269
- package/src/cli/commands/hooks/guard.ts +0 -71
- package/src/cli/commands/hooks/list.ts +0 -139
- package/src/cli/commands/hooks/lock.ts +0 -47
- package/src/cli/commands/hooks/status.ts +0 -56
- package/src/cli/commands/hooks/test.ts +0 -190
- package/src/cli/commands/hooks/unlock.ts +0 -56
- package/src/cli/commands/list.e2e.test.ts +0 -58
- package/src/cli/commands/list.ts +0 -96
- package/src/cli/commands/login.ts +0 -236
- package/src/cli/commands/logout.ts +0 -45
- package/src/cli/commands/panes/broker.ts +0 -68
- package/src/cli/commands/panes/pipe-sink.ts +0 -101
- package/src/cli/commands/panes/snapshot.ts +0 -156
- package/src/cli/commands/plan.e2e.test.ts +0 -90
- package/src/cli/commands/plan.ts +0 -68
- package/src/cli/commands/preview/index.ts +0 -282
- package/src/cli/commands/preview/list.ts +0 -116
- package/src/cli/commands/preview/status.ts +0 -137
- package/src/cli/commands/preview/stop.ts +0 -165
- package/src/cli/commands/project/add.ts +0 -110
- package/src/cli/commands/project/list.ts +0 -136
- package/src/cli/commands/project/remove.ts +0 -60
- package/src/cli/commands/push.ts +0 -115
- package/src/cli/commands/reference/add.ts +0 -266
- package/src/cli/commands/reference/delete.ts +0 -67
- package/src/cli/commands/reference/extract.ts +0 -389
- package/src/cli/commands/reference/list.ts +0 -117
- package/src/cli/commands/reference/normalize.ts +0 -90
- package/src/cli/commands/reference/open.ts +0 -92
- package/src/cli/commands/reference/save.ts +0 -103
- package/src/cli/commands/reference/search.ts +0 -85
- package/src/cli/commands/reference/show.ts +0 -174
- package/src/cli/commands/reference/update-index.ts +0 -103
- package/src/cli/commands/reference/update.ts +0 -136
- package/src/cli/commands/report/blocked.ts +0 -165
- package/src/cli/commands/report/complete.ts +0 -179
- package/src/cli/commands/report/progress.ts +0 -142
- package/src/cli/commands/report/start.ts +0 -140
- package/src/cli/commands/resource/acquire.ts +0 -116
- package/src/cli/commands/resource/list.ts +0 -77
- package/src/cli/commands/resource/release.ts +0 -64
- package/src/cli/commands/resource/wait.ts +0 -93
- package/src/cli/commands/review.ts +0 -105
- package/src/cli/commands/session/attach.ts +0 -200
- package/src/cli/commands/session/await.ts +0 -83
- package/src/cli/commands/session/complete.ts +0 -100
- package/src/cli/commands/session/create.ts +0 -92
- package/src/cli/commands/session/heartbeat.ts +0 -63
- package/src/cli/commands/session/list.ts +0 -281
- package/src/cli/commands/session/mark-done.ts +0 -132
- package/src/cli/commands/session/mine.ts +0 -189
- package/src/cli/commands/session/replay.ts +0 -659
- package/src/cli/commands/session/run.ts +0 -44
- package/src/cli/commands/session/show.ts +0 -177
- package/src/cli/commands/session/start.ts +0 -580
- package/src/cli/commands/session/state/cleanup.ts +0 -61
- package/src/cli/commands/session/state/end.ts +0 -47
- package/src/cli/commands/session/state/get.ts +0 -65
- package/src/cli/commands/session/state/init.ts +0 -50
- package/src/cli/commands/session/state/list.ts +0 -68
- package/src/cli/commands/session/state/update.ts +0 -108
- package/src/cli/commands/session/stop.ts +0 -134
- package/src/cli/commands/session/view.ts +0 -186
- package/src/cli/commands/start.ts +0 -256
- package/src/cli/commands/state/dump.ts +0 -449
- package/src/cli/commands/status.ts +0 -244
- package/src/cli/commands/sync.ts +0 -174
- package/src/cli/commands/trace/export.ts +0 -255
- package/src/cli/commands/triage/claim.ts +0 -203
- package/src/cli/commands/triage/list.ts +0 -137
- package/src/cli/commands/triage/next.ts +0 -73
- package/src/cli/commands/triage/pull.ts +0 -97
- package/src/cli/commands/triage/stats.ts +0 -82
- package/src/cli/commands/tunnel/list.ts +0 -113
- package/src/cli/commands/tunnel/start.ts +0 -122
- package/src/cli/commands/tunnel/stop.ts +0 -108
- package/src/cli/commands/tunnel/url.ts +0 -82
- package/src/cli/commands/web/start.ts +0 -125
- package/src/cli/commands/windows/context.ts +0 -439
- package/src/cli/commands/windows/focus.ts +0 -130
- package/src/cli/commands/windows/list.ts +0 -213
- package/src/cli/commands/windows/map.ts +0 -223
- package/src/cli/commands/windows/read.ts +0 -279
- package/src/cli/commands/windows/search.ts +0 -219
- package/src/cli/commands/windows/show.ts +0 -188
- package/src/cli/commands/windows/watch.ts +0 -262
- package/src/lib/__tests__/annotations-convex.test.ts +0 -104
- package/src/lib/active-sessions.ts +0 -1486
- package/src/lib/agent-adapters.ts +0 -412
- package/src/lib/agent-sessions.ts +0 -671
- package/src/lib/agent-trace.test.ts +0 -296
- package/src/lib/agent-trace.ts +0 -513
- package/src/lib/analytics.ts +0 -178
- package/src/lib/annotations-convex.ts +0 -296
- package/src/lib/annotations.test.ts +0 -274
- package/src/lib/annotations.ts +0 -836
- package/src/lib/auto/discover.ts +0 -545
- package/src/lib/auto/ideate.ts +0 -412
- package/src/lib/auto/spawn.ts +0 -549
- package/src/lib/auto/workspace.ts +0 -282
- package/src/lib/backlog.test.ts +0 -194
- package/src/lib/backlog.ts +0 -428
- package/src/lib/config-loader.ts +0 -391
- package/src/lib/config-sync/adapters/claude.ts +0 -91
- package/src/lib/config-sync/adapters/codex.ts +0 -135
- package/src/lib/config-sync/adapters/copilot.ts +0 -98
- package/src/lib/config-sync/adapters/gemini.ts +0 -86
- package/src/lib/config-sync/adapters/index.ts +0 -39
- package/src/lib/config-sync/adapters/opencode.ts +0 -94
- package/src/lib/config-sync/index.ts +0 -399
- package/src/lib/config-sync/types.ts +0 -92
- package/src/lib/config-sync/writer.ts +0 -188
- package/src/lib/content-sync/index.ts +0 -882
- package/src/lib/content-sync/types.ts +0 -104
- package/src/lib/contracts.test.ts +0 -186
- package/src/lib/contracts.ts +0 -195
- package/src/lib/convex.ts +0 -54
- package/src/lib/device.ts +0 -41
- package/src/lib/digest/index.ts +0 -529
- package/src/lib/docs/lint.test.ts +0 -135
- package/src/lib/docs/lint.ts +0 -310
- package/src/lib/docs/sync.ts +0 -184
- package/src/lib/doctor/index.ts +0 -647
- package/src/lib/doctor/repos.ts +0 -381
- package/src/lib/doctor/templates.ts +0 -191
- package/src/lib/errors.ts +0 -111
- package/src/lib/events.ts +0 -479
- package/src/lib/heartbeat.test.ts +0 -164
- package/src/lib/heartbeat.ts +0 -326
- package/src/lib/hooks/adapters/claude.ts +0 -115
- package/src/lib/hooks/adapters/codex.ts +0 -92
- package/src/lib/hooks/adapters/copilot.ts +0 -141
- package/src/lib/hooks/context.ts +0 -174
- package/src/lib/hooks/index.ts +0 -39
- package/src/lib/hooks/registry.ts +0 -101
- package/src/lib/hooks/runner.ts +0 -208
- package/src/lib/hooks/types.ts +0 -89
- package/src/lib/index.test.ts +0 -426
- package/src/lib/managed-session.ts +0 -117
- package/src/lib/math.test.ts +0 -299
- package/src/lib/math.ts +0 -120
- package/src/lib/ngrok.ts +0 -441
- package/src/lib/nvim/discovery.test.ts +0 -157
- package/src/lib/nvim/discovery.ts +0 -181
- package/src/lib/nvim/index.ts +0 -28
- package/src/lib/nvim/remote.test.ts +0 -21
- package/src/lib/nvim/remote.ts +0 -184
- package/src/lib/panes/README.md +0 -20
- package/src/lib/panes/broker.ts +0 -261
- package/src/lib/panes/index.ts +0 -1
- package/src/lib/panes/server.ts +0 -379
- package/src/lib/preview/detect.ts +0 -184
- package/src/lib/preview/index.ts +0 -1
- package/src/lib/process/index.ts +0 -16
- package/src/lib/process/snapshot.test.ts +0 -188
- package/src/lib/process/snapshot.ts +0 -257
- package/src/lib/provider-auth.ts +0 -258
- package/src/lib/references.ts +0 -481
- package/src/lib/report.ts +0 -973
- package/src/lib/resources.test.ts +0 -132
- package/src/lib/resources.ts +0 -429
- package/src/lib/runner.test.ts +0 -288
- package/src/lib/runner.ts +0 -1223
- package/src/lib/session-artifacts.test.ts +0 -107
- package/src/lib/session-artifacts.ts +0 -193
- package/src/lib/session-manager.test.ts +0 -402
- package/src/lib/session-manager.ts +0 -150
- package/src/lib/session-result.test.ts +0 -98
- package/src/lib/session-result.ts +0 -262
- package/src/lib/session-state.ts +0 -470
- package/src/lib/slack-workspace.ts +0 -25
- package/src/lib/tmux/bridge.ts +0 -439
- package/src/lib/tmux/context.test.ts +0 -242
- package/src/lib/tmux/context.ts +0 -380
- package/src/lib/tmux/index.ts +0 -46
- package/src/lib/tmux/map.test.ts +0 -99
- package/src/lib/tmux/map.ts +0 -252
- package/src/lib/tmux/panes.ts +0 -170
- package/src/lib/tmux/redaction.test.ts +0 -231
- package/src/lib/tmux/redaction.ts +0 -201
- package/src/lib/triage-llm.ts +0 -312
- package/src/lib/triage-tracker.ts +0 -400
- package/src/lib/triage.ts +0 -655
- package/src/lib/types.ts +0 -61
- package/src/lib/windows/index.ts +0 -2
- package/src/lib/windows/inventory.test.ts +0 -370
- package/src/lib/windows/inventory.ts +0 -352
- package/src/lib/windows/types.ts +0 -46
- package/src/lib.ts +0 -260
package/src/lib/ngrok.ts
DELETED
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
import { execSync, spawn } from "node:child_process";
|
|
2
|
-
import {
|
|
3
|
-
existsSync,
|
|
4
|
-
mkdirSync,
|
|
5
|
-
readdirSync,
|
|
6
|
-
readFileSync,
|
|
7
|
-
unlinkSync,
|
|
8
|
-
writeFileSync,
|
|
9
|
-
} from "node:fs";
|
|
10
|
-
import { join } from "node:path";
|
|
11
|
-
import { createEvent, EventStore } from "./events.js";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* ngrok local API base URL.
|
|
15
|
-
* The agent exposes this API with no authentication.
|
|
16
|
-
* @see https://ngrok.com/docs/agent/api
|
|
17
|
-
*/
|
|
18
|
-
const NGROK_API_BASE = "http://127.0.0.1:4040/api";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Tunnel information from ngrok API.
|
|
22
|
-
*/
|
|
23
|
-
export interface NgrokTunnel {
|
|
24
|
-
name: string;
|
|
25
|
-
public_url: string;
|
|
26
|
-
proto: string;
|
|
27
|
-
config: {
|
|
28
|
-
addr: string;
|
|
29
|
-
inspect: boolean;
|
|
30
|
-
};
|
|
31
|
-
metrics?: {
|
|
32
|
-
conns: {
|
|
33
|
-
count: number;
|
|
34
|
-
rate1: number;
|
|
35
|
-
rate5: number;
|
|
36
|
-
rate15: number;
|
|
37
|
-
};
|
|
38
|
-
http?: {
|
|
39
|
-
count: number;
|
|
40
|
-
rate1: number;
|
|
41
|
-
rate5: number;
|
|
42
|
-
rate15: number;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Tunnel list response from ngrok API.
|
|
49
|
-
*/
|
|
50
|
-
interface TunnelsResponse {
|
|
51
|
-
tunnels: NgrokTunnel[];
|
|
52
|
-
uri: string;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Agent status from ngrok API.
|
|
57
|
-
*/
|
|
58
|
-
interface AgentStatus {
|
|
59
|
-
version: string;
|
|
60
|
-
region: string;
|
|
61
|
-
status: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Stored tunnel metadata (supplements API data).
|
|
66
|
-
*/
|
|
67
|
-
export interface StoredTunnel {
|
|
68
|
-
name: string;
|
|
69
|
-
session_id: string;
|
|
70
|
-
port: number;
|
|
71
|
-
created_at: string;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Check if ngrok agent is running.
|
|
76
|
-
* Uses the status endpoint for lightweight health check.
|
|
77
|
-
*/
|
|
78
|
-
export async function isAgentRunning(): Promise<boolean> {
|
|
79
|
-
try {
|
|
80
|
-
const response = await fetch(`${NGROK_API_BASE}/status`);
|
|
81
|
-
return response.ok;
|
|
82
|
-
} catch {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Get ngrok agent status.
|
|
89
|
-
*/
|
|
90
|
-
export async function getAgentStatus(): Promise<AgentStatus | undefined> {
|
|
91
|
-
try {
|
|
92
|
-
const response = await fetch(`${NGROK_API_BASE}/status`);
|
|
93
|
-
if (!response.ok) return undefined;
|
|
94
|
-
return (await response.json()) as AgentStatus;
|
|
95
|
-
} catch {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* List all active tunnels via ngrok API.
|
|
102
|
-
* @see GET /api/tunnels
|
|
103
|
-
*/
|
|
104
|
-
export async function listTunnels(): Promise<NgrokTunnel[]> {
|
|
105
|
-
try {
|
|
106
|
-
const response = await fetch(`${NGROK_API_BASE}/tunnels`);
|
|
107
|
-
if (!response.ok) return [];
|
|
108
|
-
const data = (await response.json()) as TunnelsResponse;
|
|
109
|
-
return data.tunnels || [];
|
|
110
|
-
} catch {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Get a specific tunnel by name.
|
|
117
|
-
* @see GET /api/tunnels/:name
|
|
118
|
-
*/
|
|
119
|
-
export async function getTunnel(name: string): Promise<NgrokTunnel | undefined> {
|
|
120
|
-
try {
|
|
121
|
-
const response = await fetch(`${NGROK_API_BASE}/tunnels/${encodeURIComponent(name)}`);
|
|
122
|
-
if (!response.ok) return undefined;
|
|
123
|
-
return (await response.json()) as NgrokTunnel;
|
|
124
|
-
} catch {
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Start a new tunnel via ngrok API.
|
|
131
|
-
* Requires ngrok agent to be running.
|
|
132
|
-
* @see POST /api/tunnels
|
|
133
|
-
*/
|
|
134
|
-
export async function startTunnel(port: number, name?: string): Promise<NgrokTunnel | undefined> {
|
|
135
|
-
const tunnelName = name || `port-${port}`;
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
const response = await fetch(`${NGROK_API_BASE}/tunnels`, {
|
|
139
|
-
method: "POST",
|
|
140
|
-
headers: { "Content-Type": "application/json" },
|
|
141
|
-
body: JSON.stringify({
|
|
142
|
-
name: tunnelName,
|
|
143
|
-
addr: port.toString(),
|
|
144
|
-
proto: "http",
|
|
145
|
-
}),
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
if (response.status === 201 || response.ok) {
|
|
149
|
-
return (await response.json()) as NgrokTunnel;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return undefined;
|
|
153
|
-
} catch {
|
|
154
|
-
return undefined;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Stop a tunnel by name.
|
|
160
|
-
* @see DELETE /api/tunnels/:name
|
|
161
|
-
*/
|
|
162
|
-
export async function stopTunnel(name: string): Promise<boolean> {
|
|
163
|
-
try {
|
|
164
|
-
const response = await fetch(`${NGROK_API_BASE}/tunnels/${encodeURIComponent(name)}`, {
|
|
165
|
-
method: "DELETE",
|
|
166
|
-
});
|
|
167
|
-
return response.status === 204 || response.ok;
|
|
168
|
-
} catch {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Start ngrok agent in background if not running.
|
|
175
|
-
* This starts the agent without any tunnels - tunnels are created via API.
|
|
176
|
-
*/
|
|
177
|
-
export async function ensureAgentRunning(): Promise<boolean> {
|
|
178
|
-
if (await isAgentRunning()) {
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Start ngrok agent with no tunnels (just the API)
|
|
183
|
-
const ngrok = spawn("ngrok", ["start", "--none"], {
|
|
184
|
-
detached: true,
|
|
185
|
-
stdio: "ignore",
|
|
186
|
-
});
|
|
187
|
-
ngrok.unref();
|
|
188
|
-
|
|
189
|
-
// Wait for agent to be ready (up to 10s)
|
|
190
|
-
for (let i = 0; i < 20; i++) {
|
|
191
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
192
|
-
if (await isAgentRunning()) {
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Find tunnel by port number.
|
|
202
|
-
*/
|
|
203
|
-
export async function findTunnelByPort(port: number): Promise<NgrokTunnel | undefined> {
|
|
204
|
-
const tunnels = await listTunnels();
|
|
205
|
-
return tunnels.find((t) => {
|
|
206
|
-
const addr = t.config?.addr || "";
|
|
207
|
-
return addr === port.toString() || addr.endsWith(`:${port}`);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Get public URL for a port, creating tunnel if needed.
|
|
213
|
-
* This is the main high-level function for getting a public URL.
|
|
214
|
-
*/
|
|
215
|
-
export async function getPublicUrl(port: number): Promise<string | undefined> {
|
|
216
|
-
// Ensure agent is running
|
|
217
|
-
if (!(await ensureAgentRunning())) {
|
|
218
|
-
return undefined;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Check for existing tunnel
|
|
222
|
-
const existing = await findTunnelByPort(port);
|
|
223
|
-
if (existing) {
|
|
224
|
-
return existing.public_url;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Create new tunnel
|
|
228
|
-
const tunnel = await startTunnel(port);
|
|
229
|
-
return tunnel?.public_url;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Kill all ngrok processes.
|
|
234
|
-
*/
|
|
235
|
-
export function killNgrok(): void {
|
|
236
|
-
try {
|
|
237
|
-
execSync('pkill -f "ngrok"', { stdio: "ignore" });
|
|
238
|
-
} catch {
|
|
239
|
-
// No processes to kill
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* NgrokManager - higher-level manager with session tracking and events.
|
|
245
|
-
*/
|
|
246
|
-
export class NgrokManager {
|
|
247
|
-
private basePath: string;
|
|
248
|
-
private eventStore: EventStore;
|
|
249
|
-
|
|
250
|
-
constructor(basePath: string = "~/.abbie/ngrok", eventStore?: EventStore) {
|
|
251
|
-
this.basePath = basePath.replace("~", process.env.HOME || "");
|
|
252
|
-
this.eventStore = eventStore || new EventStore();
|
|
253
|
-
|
|
254
|
-
if (!existsSync(this.basePath)) {
|
|
255
|
-
mkdirSync(this.basePath, { recursive: true });
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Get stored tunnel metadata path.
|
|
261
|
-
*/
|
|
262
|
-
private getMetadataPath(name: string): string {
|
|
263
|
-
return join(this.basePath, `${name}.json`);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Store tunnel metadata.
|
|
268
|
-
*/
|
|
269
|
-
private storeMetadata(tunnel: StoredTunnel): void {
|
|
270
|
-
writeFileSync(this.getMetadataPath(tunnel.name), JSON.stringify(tunnel, null, 2));
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Load tunnel metadata.
|
|
275
|
-
*/
|
|
276
|
-
private loadMetadata(name: string): StoredTunnel | undefined {
|
|
277
|
-
const path = this.getMetadataPath(name);
|
|
278
|
-
if (!existsSync(path)) return undefined;
|
|
279
|
-
return JSON.parse(readFileSync(path, "utf-8")) as StoredTunnel;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Remove tunnel metadata.
|
|
284
|
-
*/
|
|
285
|
-
private removeMetadata(name: string): void {
|
|
286
|
-
const path = this.getMetadataPath(name);
|
|
287
|
-
if (existsSync(path)) {
|
|
288
|
-
unlinkSync(path);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Start a tunnel with session tracking.
|
|
294
|
-
*/
|
|
295
|
-
async start(
|
|
296
|
-
port: number,
|
|
297
|
-
sessionId: string,
|
|
298
|
-
name?: string,
|
|
299
|
-
): Promise<{ tunnel: NgrokTunnel; public_url: string } | undefined> {
|
|
300
|
-
// Ensure agent is running
|
|
301
|
-
if (!(await ensureAgentRunning())) {
|
|
302
|
-
return undefined;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
const tunnelName = name || `${sessionId.split("-")[0]}-${port}`;
|
|
306
|
-
|
|
307
|
-
// Check for existing tunnel on this port
|
|
308
|
-
const existing = await findTunnelByPort(port);
|
|
309
|
-
if (existing) {
|
|
310
|
-
return { tunnel: existing, public_url: existing.public_url };
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
// Create tunnel via API
|
|
314
|
-
const tunnel = await startTunnel(port, tunnelName);
|
|
315
|
-
if (!tunnel) {
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Store metadata
|
|
320
|
-
this.storeMetadata({
|
|
321
|
-
name: tunnel.name,
|
|
322
|
-
session_id: sessionId,
|
|
323
|
-
port,
|
|
324
|
-
created_at: new Date().toISOString(),
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
// Log event
|
|
328
|
-
this.eventStore.append(
|
|
329
|
-
createEvent.previewCreated(sessionId, "system", {
|
|
330
|
-
url: tunnel.public_url,
|
|
331
|
-
port,
|
|
332
|
-
subdomain: tunnel.name,
|
|
333
|
-
}),
|
|
334
|
-
);
|
|
335
|
-
|
|
336
|
-
return { tunnel, public_url: tunnel.public_url };
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* Stop a tunnel by name.
|
|
341
|
-
*/
|
|
342
|
-
async stop(name: string): Promise<boolean> {
|
|
343
|
-
const stopped = await stopTunnel(name);
|
|
344
|
-
if (stopped) {
|
|
345
|
-
this.removeMetadata(name);
|
|
346
|
-
}
|
|
347
|
-
return stopped;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* Stop all tunnels for a session.
|
|
352
|
-
*/
|
|
353
|
-
async stopSession(sessionId: string): Promise<number> {
|
|
354
|
-
const files = existsSync(this.basePath) ? readdirSync(this.basePath) : [];
|
|
355
|
-
let stopped = 0;
|
|
356
|
-
|
|
357
|
-
for (const file of files) {
|
|
358
|
-
if (!file.endsWith(".json")) continue;
|
|
359
|
-
|
|
360
|
-
const name = file.replace(".json", "");
|
|
361
|
-
const metadata = this.loadMetadata(name);
|
|
362
|
-
|
|
363
|
-
if (metadata?.session_id === sessionId) {
|
|
364
|
-
if (await this.stop(name)) {
|
|
365
|
-
stopped++;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
return stopped;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* List all tunnels with metadata.
|
|
375
|
-
*/
|
|
376
|
-
async list(): Promise<Array<NgrokTunnel & { metadata?: StoredTunnel }>> {
|
|
377
|
-
const tunnels = await listTunnels();
|
|
378
|
-
|
|
379
|
-
return tunnels.map((tunnel) => ({
|
|
380
|
-
...tunnel,
|
|
381
|
-
metadata: this.loadMetadata(tunnel.name),
|
|
382
|
-
}));
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* Cleanup stale metadata (tunnels that no longer exist).
|
|
387
|
-
*/
|
|
388
|
-
async cleanup(): Promise<number> {
|
|
389
|
-
if (!existsSync(this.basePath)) return 0;
|
|
390
|
-
|
|
391
|
-
const files = readdirSync(this.basePath);
|
|
392
|
-
const activeTunnels = await listTunnels();
|
|
393
|
-
const activeNames = new Set(activeTunnels.map((t) => t.name));
|
|
394
|
-
let cleaned = 0;
|
|
395
|
-
|
|
396
|
-
for (const file of files) {
|
|
397
|
-
if (!file.endsWith(".json")) continue;
|
|
398
|
-
|
|
399
|
-
const name = file.replace(".json", "");
|
|
400
|
-
if (!activeNames.has(name)) {
|
|
401
|
-
this.removeMetadata(name);
|
|
402
|
-
cleaned++;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
return cleaned;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
/**
|
|
411
|
-
* Create an NgrokManager with default path.
|
|
412
|
-
*/
|
|
413
|
-
export function createNgrokManager(eventStore?: EventStore): NgrokManager {
|
|
414
|
-
return new NgrokManager("~/.abbie/ngrok", eventStore);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Unix pipe helpers - these output to stdout for piping
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Print public URL to stdout.
|
|
421
|
-
* Usage: abbie tunnel url 3000 | xargs open
|
|
422
|
-
*/
|
|
423
|
-
export async function printPublicUrl(port: number): Promise<void> {
|
|
424
|
-
const url = await getPublicUrl(port);
|
|
425
|
-
if (url) {
|
|
426
|
-
process.stdout.write(`${url}\n`);
|
|
427
|
-
} else {
|
|
428
|
-
process.exit(1);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Print all tunnel URLs to stdout.
|
|
434
|
-
* Usage: abbie tunnel urls | xargs -I{} curl {}
|
|
435
|
-
*/
|
|
436
|
-
export async function printAllUrls(): Promise<void> {
|
|
437
|
-
const tunnels = await listTunnels();
|
|
438
|
-
for (const tunnel of tunnels) {
|
|
439
|
-
process.stdout.write(`${tunnel.public_url}\n`);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "bun:test";
|
|
2
|
-
import type { ProcessInfo } from "../process/snapshot.js";
|
|
3
|
-
import { buildProcessTree } from "../process/snapshot.js";
|
|
4
|
-
import {
|
|
5
|
-
discoverFromArgv,
|
|
6
|
-
discoverNvimServerAddress,
|
|
7
|
-
findAllNvimInstances,
|
|
8
|
-
findNvimPidForWindow,
|
|
9
|
-
} from "./discovery.js";
|
|
10
|
-
|
|
11
|
-
// Mock process snapshot for testing pure functions
|
|
12
|
-
function createMockSnapshot(): Map<number, ProcessInfo> {
|
|
13
|
-
const snapshot = new Map<number, ProcessInfo>();
|
|
14
|
-
|
|
15
|
-
// tmux(100) → zsh(200) → nvim(300) with --listen
|
|
16
|
-
snapshot.set(100, { pid: 100, ppid: 1, tty: "??", cmd: "tmux", args: "tmux new -s work" });
|
|
17
|
-
snapshot.set(200, {
|
|
18
|
-
pid: 200,
|
|
19
|
-
ppid: 100,
|
|
20
|
-
tty: "ttys001",
|
|
21
|
-
cmd: "zsh",
|
|
22
|
-
args: "-zsh",
|
|
23
|
-
});
|
|
24
|
-
snapshot.set(300, {
|
|
25
|
-
pid: 300,
|
|
26
|
-
ppid: 200,
|
|
27
|
-
tty: "ttys001",
|
|
28
|
-
cmd: "nvim",
|
|
29
|
-
args: "nvim --listen /tmp/nvim.300.sock src/app.ts",
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Another pane: zsh(250) → nvim(350) without --listen
|
|
33
|
-
snapshot.set(250, {
|
|
34
|
-
pid: 250,
|
|
35
|
-
ppid: 100,
|
|
36
|
-
tty: "ttys002",
|
|
37
|
-
cmd: "zsh",
|
|
38
|
-
args: "-zsh",
|
|
39
|
-
});
|
|
40
|
-
snapshot.set(350, {
|
|
41
|
-
pid: 350,
|
|
42
|
-
ppid: 250,
|
|
43
|
-
tty: "ttys002",
|
|
44
|
-
cmd: "nvim",
|
|
45
|
-
args: "nvim src/other.ts",
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Nested nvim: zsh(400) → nvim(410) → nvim(420)
|
|
49
|
-
snapshot.set(400, {
|
|
50
|
-
pid: 400,
|
|
51
|
-
ppid: 100,
|
|
52
|
-
tty: "ttys003",
|
|
53
|
-
cmd: "zsh",
|
|
54
|
-
args: "-zsh",
|
|
55
|
-
});
|
|
56
|
-
snapshot.set(410, {
|
|
57
|
-
pid: 410,
|
|
58
|
-
ppid: 400,
|
|
59
|
-
tty: "ttys003",
|
|
60
|
-
cmd: "nvim",
|
|
61
|
-
args: "nvim outer.ts",
|
|
62
|
-
});
|
|
63
|
-
snapshot.set(420, {
|
|
64
|
-
pid: 420,
|
|
65
|
-
ppid: 410,
|
|
66
|
-
tty: "ttys003",
|
|
67
|
-
cmd: "nvim",
|
|
68
|
-
args: "nvim --listen=/tmp/nested.sock inner.ts",
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
return snapshot;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
describe("nvim discovery", () => {
|
|
75
|
-
describe("findNvimPidForWindow", () => {
|
|
76
|
-
it("finds nvim under pane", () => {
|
|
77
|
-
const snapshot = createMockSnapshot();
|
|
78
|
-
const tree = buildProcessTree(snapshot);
|
|
79
|
-
|
|
80
|
-
const nvimPid = findNvimPidForWindow(200, snapshot, tree);
|
|
81
|
-
expect(nvimPid).toBe(300);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it("prefers deepest nested nvim", () => {
|
|
85
|
-
const snapshot = createMockSnapshot();
|
|
86
|
-
const tree = buildProcessTree(snapshot);
|
|
87
|
-
|
|
88
|
-
// Starting from zsh(400), should find the nested nvim(420), not outer nvim(410)
|
|
89
|
-
const nvimPid = findNvimPidForWindow(400, snapshot, tree);
|
|
90
|
-
expect(nvimPid).toBe(420);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it("returns null when no nvim found", () => {
|
|
94
|
-
const snapshot = createMockSnapshot();
|
|
95
|
-
const tree = buildProcessTree(snapshot);
|
|
96
|
-
|
|
97
|
-
// tmux(100) has no direct nvim child (nvim is under zsh)
|
|
98
|
-
// but findDeepestDescendant searches all descendants
|
|
99
|
-
const nvimPid = findNvimPidForWindow(100, snapshot, tree);
|
|
100
|
-
// Should find one of the nvims under tmux
|
|
101
|
-
expect(nvimPid).not.toBeNull();
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
describe("discoverFromArgv", () => {
|
|
106
|
-
it("parses --listen with space", () => {
|
|
107
|
-
const snapshot = createMockSnapshot();
|
|
108
|
-
const addr = discoverFromArgv(300, snapshot);
|
|
109
|
-
expect(addr).toBe("/tmp/nvim.300.sock");
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it("parses --listen= form", () => {
|
|
113
|
-
const snapshot = createMockSnapshot();
|
|
114
|
-
const addr = discoverFromArgv(420, snapshot);
|
|
115
|
-
expect(addr).toBe("/tmp/nested.sock");
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("returns null when no --listen", () => {
|
|
119
|
-
const snapshot = createMockSnapshot();
|
|
120
|
-
const addr = discoverFromArgv(350, snapshot);
|
|
121
|
-
expect(addr).toBeNull();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it("returns null for unknown PID", () => {
|
|
125
|
-
const snapshot = createMockSnapshot();
|
|
126
|
-
const addr = discoverFromArgv(9999, snapshot);
|
|
127
|
-
expect(addr).toBeNull();
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
describe("discoverNvimServerAddress", () => {
|
|
132
|
-
it("uses argv when --listen present", async () => {
|
|
133
|
-
const snapshot = createMockSnapshot();
|
|
134
|
-
const result = await discoverNvimServerAddress(300, snapshot);
|
|
135
|
-
|
|
136
|
-
expect(result).toEqual({ addr: "/tmp/nvim.300.sock", method: "argv" });
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
// Note: lsof fallback tests require actual system state or dependency injection.
|
|
140
|
-
// These are integration tests that would need a real nvim process.
|
|
141
|
-
// For unit testing the lsof path, we'd need to refactor discovery.ts
|
|
142
|
-
// to accept an executor function as a parameter.
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
describe("findAllNvimInstances", () => {
|
|
146
|
-
it("finds all nvim PIDs", () => {
|
|
147
|
-
const snapshot = createMockSnapshot();
|
|
148
|
-
const nvimPids = findAllNvimInstances(snapshot);
|
|
149
|
-
|
|
150
|
-
expect(nvimPids).toContain(300);
|
|
151
|
-
expect(nvimPids).toContain(350);
|
|
152
|
-
expect(nvimPids).toContain(410);
|
|
153
|
-
expect(nvimPids).toContain(420);
|
|
154
|
-
expect(nvimPids).toHaveLength(4);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
});
|