@creativeintelligence/abbie 0.1.3 → 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 +13 -7
- 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,181 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Socket discovery for Neovim instances.
|
|
3
|
-
* Finds nvim processes and discovers their RPC server addresses.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { spawn } from "node:child_process";
|
|
7
|
-
import { findDeepestDescendant, isNvimProcess, type ProcessInfo } from "../process/snapshot.js";
|
|
8
|
-
|
|
9
|
-
export interface NvimInstance {
|
|
10
|
-
pid: number;
|
|
11
|
-
serverAddr: string | null;
|
|
12
|
-
discoveryMethod: "argv" | "lsof" | null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Execute a command and return stdout.
|
|
17
|
-
*/
|
|
18
|
-
async function exec(command: string, args: string[]): Promise<string> {
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
const proc = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
21
|
-
let stdout = "";
|
|
22
|
-
|
|
23
|
-
proc.stdout.on("data", (data) => {
|
|
24
|
-
stdout += data.toString();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
proc.on("close", (code) => {
|
|
28
|
-
if (code === 0) {
|
|
29
|
-
resolve(stdout);
|
|
30
|
-
} else {
|
|
31
|
-
reject(new Error(`${command} failed with code ${code}`));
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
proc.on("error", reject);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Find the nvim PID running under a pane (prefer deepest nested).
|
|
41
|
-
*/
|
|
42
|
-
export function findNvimPidForWindow(
|
|
43
|
-
panePid: number,
|
|
44
|
-
snapshot: Map<number, ProcessInfo>,
|
|
45
|
-
tree: Map<number, number[]>,
|
|
46
|
-
): number | null {
|
|
47
|
-
return findDeepestDescendant(panePid, tree, snapshot, isNvimProcess);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Parse --listen argument from nvim command line.
|
|
52
|
-
* Handles both `--listen <addr>` and `--listen=<addr>` forms.
|
|
53
|
-
*/
|
|
54
|
-
function parseListenFromArgs(args: string): string | null {
|
|
55
|
-
// Match --listen followed by space and address
|
|
56
|
-
const spaceMatch = args.match(/--listen\s+([^\s]+)/);
|
|
57
|
-
if (spaceMatch) return spaceMatch[1];
|
|
58
|
-
|
|
59
|
-
// Match --listen=address
|
|
60
|
-
const eqMatch = args.match(/--listen=([^\s]+)/);
|
|
61
|
-
if (eqMatch) return eqMatch[1];
|
|
62
|
-
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Discover nvim server address from process argv.
|
|
68
|
-
* This is the most reliable method when nvim was started with --listen.
|
|
69
|
-
*/
|
|
70
|
-
export function discoverFromArgv(
|
|
71
|
-
nvimPid: number,
|
|
72
|
-
snapshot: Map<number, ProcessInfo>,
|
|
73
|
-
): string | null {
|
|
74
|
-
const info = snapshot.get(nvimPid);
|
|
75
|
-
if (!info) return null;
|
|
76
|
-
|
|
77
|
-
return parseListenFromArgs(info.args);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Discover nvim server address using lsof to find UNIX sockets.
|
|
82
|
-
* Fallback when --listen wasn't used but nvim created a socket.
|
|
83
|
-
*/
|
|
84
|
-
export async function discoverFromLsof(nvimPid: number): Promise<string | null> {
|
|
85
|
-
try {
|
|
86
|
-
// lsof -a -p PID -U shows UNIX sockets for the process
|
|
87
|
-
const output = await exec("lsof", ["-a", "-p", String(nvimPid), "-U", "-F", "n"]);
|
|
88
|
-
|
|
89
|
-
// Parse lsof output - lines starting with 'n' contain the socket path
|
|
90
|
-
const lines = output.split("\n");
|
|
91
|
-
for (const line of lines) {
|
|
92
|
-
if (line.startsWith("n")) {
|
|
93
|
-
const path = line.slice(1); // Remove 'n' prefix
|
|
94
|
-
|
|
95
|
-
// Look for nvim-like socket paths
|
|
96
|
-
// Common patterns:
|
|
97
|
-
// - /tmp/nvim.USER/XXXXX/nvim.PID.0
|
|
98
|
-
// - /var/folders/.../nvim.USER/.../nvim.PID.0
|
|
99
|
-
// - ~/.local/state/nvim/...
|
|
100
|
-
if (
|
|
101
|
-
path.includes("nvim") &&
|
|
102
|
-
(path.startsWith("/tmp/") ||
|
|
103
|
-
path.startsWith("/var/folders/") ||
|
|
104
|
-
path.includes(".local/state/nvim") ||
|
|
105
|
-
path.includes("/run/"))
|
|
106
|
-
) {
|
|
107
|
-
return path;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
} catch {
|
|
112
|
-
// lsof failed, return null
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Discover the server address for an nvim PID.
|
|
120
|
-
* Tries multiple strategies in order of reliability:
|
|
121
|
-
* 1. Parse --listen from argv
|
|
122
|
-
* 2. Find UNIX socket via lsof
|
|
123
|
-
*/
|
|
124
|
-
export async function discoverNvimServerAddress(
|
|
125
|
-
nvimPid: number,
|
|
126
|
-
snapshot: Map<number, ProcessInfo>,
|
|
127
|
-
): Promise<{ addr: string; method: "argv" | "lsof" } | null> {
|
|
128
|
-
// Strategy 1: Check argv for --listen
|
|
129
|
-
const argvAddr = discoverFromArgv(nvimPid, snapshot);
|
|
130
|
-
if (argvAddr) {
|
|
131
|
-
return { addr: argvAddr, method: "argv" };
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// Strategy 2: Find UNIX socket via lsof
|
|
135
|
-
const lsofAddr = await discoverFromLsof(nvimPid);
|
|
136
|
-
if (lsofAddr) {
|
|
137
|
-
return { addr: lsofAddr, method: "lsof" };
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Get the nvim instance for a window (pane).
|
|
145
|
-
* Combines process discovery and server address discovery.
|
|
146
|
-
*/
|
|
147
|
-
export async function getNvimInstanceForWindow(
|
|
148
|
-
panePid: number,
|
|
149
|
-
snapshot: Map<number, ProcessInfo>,
|
|
150
|
-
tree: Map<number, number[]>,
|
|
151
|
-
): Promise<NvimInstance | null> {
|
|
152
|
-
// Find nvim PID under the pane
|
|
153
|
-
const nvimPid = findNvimPidForWindow(panePid, snapshot, tree);
|
|
154
|
-
if (!nvimPid) {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Discover server address
|
|
159
|
-
const discovery = await discoverNvimServerAddress(nvimPid, snapshot);
|
|
160
|
-
|
|
161
|
-
return {
|
|
162
|
-
pid: nvimPid,
|
|
163
|
-
serverAddr: discovery?.addr ?? null,
|
|
164
|
-
discoveryMethod: discovery?.method ?? null,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Find all nvim instances in the process snapshot.
|
|
170
|
-
*/
|
|
171
|
-
export function findAllNvimInstances(snapshot: Map<number, ProcessInfo>): number[] {
|
|
172
|
-
const nvimPids: number[] = [];
|
|
173
|
-
|
|
174
|
-
for (const [pid, info] of snapshot) {
|
|
175
|
-
if (isNvimProcess(info)) {
|
|
176
|
-
nvimPids.push(pid);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return nvimPids;
|
|
181
|
-
}
|
package/src/lib/nvim/index.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Neovim integration module.
|
|
3
|
-
* Provides RPC communication and socket discovery.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// Socket discovery
|
|
7
|
-
export {
|
|
8
|
-
discoverFromArgv,
|
|
9
|
-
discoverFromLsof,
|
|
10
|
-
discoverNvimServerAddress,
|
|
11
|
-
findAllNvimInstances,
|
|
12
|
-
findNvimPidForWindow,
|
|
13
|
-
getNvimInstanceForWindow,
|
|
14
|
-
type NvimInstance,
|
|
15
|
-
} from "./discovery.js";
|
|
16
|
-
// RPC layer
|
|
17
|
-
export {
|
|
18
|
-
getBufferLines,
|
|
19
|
-
getCurrentBuffer,
|
|
20
|
-
getCurrentBufferInfo,
|
|
21
|
-
getVisibleRange,
|
|
22
|
-
isServerReachable,
|
|
23
|
-
listBuffers,
|
|
24
|
-
type NvimBufferInfo,
|
|
25
|
-
remoteExpr,
|
|
26
|
-
remoteExprJson,
|
|
27
|
-
type WindowRange,
|
|
28
|
-
} from "./remote.js";
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "bun:test";
|
|
2
|
-
import { isServerReachable } from "./remote.js";
|
|
3
|
-
|
|
4
|
-
// Note: Full mocking of spawn is complex in bun:test.
|
|
5
|
-
// These tests focus on integration behavior with actual nvim when available,
|
|
6
|
-
// or graceful degradation when not.
|
|
7
|
-
|
|
8
|
-
describe("nvim remote", () => {
|
|
9
|
-
describe("isServerReachable", () => {
|
|
10
|
-
it("returns false for non-existent server", async () => {
|
|
11
|
-
// Non-existent socket should return false
|
|
12
|
-
const result = await isServerReachable("/tmp/nonexistent-nvim-socket-12345.sock");
|
|
13
|
-
expect(result).toBe(false);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("returns false for invalid address", async () => {
|
|
17
|
-
const result = await isServerReachable("");
|
|
18
|
-
expect(result).toBe(false);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
package/src/lib/nvim/remote.ts
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Neovim RPC layer using nvim CLI (no msgpack dependency).
|
|
3
|
-
* Uses `nvim --server <addr> --remote-expr <expr>` for communication.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { spawn } from "node:child_process";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Execute a command and return stdout.
|
|
10
|
-
*/
|
|
11
|
-
async function exec(
|
|
12
|
-
command: string,
|
|
13
|
-
args: string[],
|
|
14
|
-
options?: { timeout?: number },
|
|
15
|
-
): Promise<{ stdout: string; stderr: string; exitCode: number }> {
|
|
16
|
-
const { timeout = 5000 } = options || {};
|
|
17
|
-
|
|
18
|
-
return new Promise((resolve) => {
|
|
19
|
-
const proc = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
20
|
-
let stdout = "";
|
|
21
|
-
let stderr = "";
|
|
22
|
-
let killed = false;
|
|
23
|
-
|
|
24
|
-
const timer = setTimeout(() => {
|
|
25
|
-
killed = true;
|
|
26
|
-
proc.kill("SIGTERM");
|
|
27
|
-
}, timeout);
|
|
28
|
-
|
|
29
|
-
proc.stdout.on("data", (data) => {
|
|
30
|
-
stdout += data.toString();
|
|
31
|
-
});
|
|
32
|
-
proc.stderr.on("data", (data) => {
|
|
33
|
-
stderr += data.toString();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
proc.on("close", (code) => {
|
|
37
|
-
clearTimeout(timer);
|
|
38
|
-
resolve({
|
|
39
|
-
stdout: stdout.trim(),
|
|
40
|
-
stderr: stderr.trim(),
|
|
41
|
-
exitCode: killed ? -1 : (code ?? 1),
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
proc.on("error", () => {
|
|
46
|
-
clearTimeout(timer);
|
|
47
|
-
resolve({ stdout: "", stderr: "spawn error", exitCode: 1 });
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Execute a Vim expression on a remote nvim server.
|
|
54
|
-
*
|
|
55
|
-
* @param serverAddr - The nvim server address (socket path or host:port)
|
|
56
|
-
* @param expr - The Vim expression to evaluate
|
|
57
|
-
* @returns The result as a string, or null on error
|
|
58
|
-
*/
|
|
59
|
-
export async function remoteExpr(serverAddr: string, expr: string): Promise<string | null> {
|
|
60
|
-
const result = await exec("nvim", ["--server", serverAddr, "--remote-expr", expr], {
|
|
61
|
-
timeout: 5000,
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
if (result.exitCode !== 0) {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return result.stdout;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Send keystrokes to a remote nvim server.
|
|
73
|
-
* Uses `nvim --server <addr> --remote-send <keys>`.
|
|
74
|
-
*/
|
|
75
|
-
export async function remoteSend(serverAddr: string, keys: string): Promise<boolean> {
|
|
76
|
-
const result = await exec("nvim", ["--server", serverAddr, "--remote-send", keys], {
|
|
77
|
-
timeout: 5000,
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
return result.exitCode === 0;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Execute a Vim expression and parse the result as JSON.
|
|
85
|
-
*
|
|
86
|
-
* The expression should use json_encode() to return JSON, e.g.:
|
|
87
|
-
* `json_encode(nvim_list_bufs())`
|
|
88
|
-
*
|
|
89
|
-
* @param serverAddr - The nvim server address
|
|
90
|
-
* @param expr - The Vim expression (should return JSON via json_encode)
|
|
91
|
-
* @returns The parsed JSON, or null on error
|
|
92
|
-
*/
|
|
93
|
-
export async function remoteExprJson<T>(serverAddr: string, expr: string): Promise<T | null> {
|
|
94
|
-
const result = await remoteExpr(serverAddr, expr);
|
|
95
|
-
if (result === null) return null;
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
return JSON.parse(result) as T;
|
|
99
|
-
} catch {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Check if an nvim server is reachable.
|
|
106
|
-
*/
|
|
107
|
-
export async function isServerReachable(serverAddr: string): Promise<boolean> {
|
|
108
|
-
const result = await remoteExpr(serverAddr, "1+1");
|
|
109
|
-
return result === "2";
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Get the current buffer info from nvim.
|
|
114
|
-
*/
|
|
115
|
-
export interface NvimBufferInfo {
|
|
116
|
-
bufnr: number;
|
|
117
|
-
name: string;
|
|
118
|
-
filetype: string;
|
|
119
|
-
modified: boolean;
|
|
120
|
-
loaded: boolean;
|
|
121
|
-
listed: boolean;
|
|
122
|
-
cursor?: { line: number; col: number };
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* List all buffers in the nvim instance.
|
|
127
|
-
*/
|
|
128
|
-
export async function listBuffers(serverAddr: string): Promise<NvimBufferInfo[] | null> {
|
|
129
|
-
const expr = `json_encode(map(filter(getbufinfo(), 'v:val.listed'), {_, b -> {'bufnr': b.bufnr, 'name': b.name, 'loaded': b.loaded, 'listed': b.listed, 'modified': b.changed}}))`;
|
|
130
|
-
return remoteExprJson<NvimBufferInfo[]>(serverAddr, expr);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Get the current buffer number.
|
|
135
|
-
*/
|
|
136
|
-
export async function getCurrentBuffer(serverAddr: string): Promise<number | null> {
|
|
137
|
-
const result = await remoteExpr(serverAddr, "bufnr()");
|
|
138
|
-
if (result === null) return null;
|
|
139
|
-
const num = parseInt(result, 10);
|
|
140
|
-
return Number.isNaN(num) ? null : num;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Get buffer content for a specific buffer.
|
|
145
|
-
*
|
|
146
|
-
* @param serverAddr - The nvim server address
|
|
147
|
-
* @param bufnr - Buffer number (use 0 or omit for current buffer)
|
|
148
|
-
* @param startLine - Start line (1-indexed, inclusive)
|
|
149
|
-
* @param endLine - End line (1-indexed, inclusive, use '$' for last)
|
|
150
|
-
*/
|
|
151
|
-
export async function getBufferLines(
|
|
152
|
-
serverAddr: string,
|
|
153
|
-
bufnr = 0,
|
|
154
|
-
startLine = 1,
|
|
155
|
-
endLine: number | "$" = "$",
|
|
156
|
-
): Promise<string[] | null> {
|
|
157
|
-
const bufnrExpr = bufnr === 0 ? "bufnr()" : String(bufnr);
|
|
158
|
-
const endExpr = endLine === "$" ? `line('$', bufwinid(${bufnrExpr}))` : String(endLine);
|
|
159
|
-
const expr = `json_encode(getbufline(${bufnrExpr}, ${startLine}, ${endExpr}))`;
|
|
160
|
-
return remoteExprJson<string[]>(serverAddr, expr);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Get visible window range for a buffer.
|
|
165
|
-
*/
|
|
166
|
-
export interface WindowRange {
|
|
167
|
-
topLine: number;
|
|
168
|
-
bottomLine: number;
|
|
169
|
-
cursor: { line: number; col: number };
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export async function getVisibleRange(serverAddr: string, bufnr = 0): Promise<WindowRange | null> {
|
|
173
|
-
const bufnrExpr = bufnr === 0 ? "bufnr()" : String(bufnr);
|
|
174
|
-
const expr = `json_encode({'topLine': line('w0', bufwinid(${bufnrExpr})), 'bottomLine': line('w$', bufwinid(${bufnrExpr})), 'cursor': {'line': line('.', bufwinid(${bufnrExpr})), 'col': col('.', bufwinid(${bufnrExpr}))}})`;
|
|
175
|
-
return remoteExprJson<WindowRange>(serverAddr, expr);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Get current buffer info including name, filetype, and cursor position.
|
|
180
|
-
*/
|
|
181
|
-
export async function getCurrentBufferInfo(serverAddr: string): Promise<NvimBufferInfo | null> {
|
|
182
|
-
const expr = `json_encode({'bufnr': bufnr(), 'name': expand('%:p'), 'filetype': &filetype, 'modified': &modified, 'loaded': 1, 'listed': 1, 'cursor': {'line': line('.'), 'col': col('.')}})`;
|
|
183
|
-
return remoteExprJson<NvimBufferInfo>(serverAddr, expr);
|
|
184
|
-
}
|
package/src/lib/panes/README.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Panes Broker (Local Fanout)
|
|
2
|
-
|
|
3
|
-
This directory defines the **local panes broker protocol** used to stream tmux pane output to multiple clients (TUI, tools, etc.) without each client mutating tmux.
|
|
4
|
-
|
|
5
|
-
## Transport
|
|
6
|
-
|
|
7
|
-
- Unix domain socket
|
|
8
|
-
- Newline-delimited JSON (NDJSON)
|
|
9
|
-
- Default path: `~/.abbie/run/panes-broker.sock` (or `$XDG_RUNTIME_DIR/abbie-panes-broker.sock`)
|
|
10
|
-
|
|
11
|
-
## Model
|
|
12
|
-
|
|
13
|
-
- A **single owner process** (typically `abbie daemon`) owns tmux integration and any `tmux pipe-pane` lifecycle.
|
|
14
|
-
- Clients connect and send `panes.subscribe` / `panes.unsubscribe`.
|
|
15
|
-
- Server emits `panes.snapshot` (initial) and `panes.delta` (stream).
|
|
16
|
-
|
|
17
|
-
## Security
|
|
18
|
-
|
|
19
|
-
For cross-device mirroring (Convex), use `redaction=default` (redacted-by-default). Local TUI can request `redaction=raw`.
|
|
20
|
-
|
package/src/lib/panes/broker.ts
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { mkdirSync } from "node:fs";
|
|
3
|
-
import { createConnection, type Socket } from "node:net";
|
|
4
|
-
import { homedir } from "node:os";
|
|
5
|
-
import { dirname, join } from "node:path";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Panes broker protocol (local fanout).
|
|
9
|
-
*
|
|
10
|
-
* Transport: Unix domain socket (newline-delimited JSON).
|
|
11
|
-
* - Client → server: control messages (subscribe/unsubscribe, ping)
|
|
12
|
-
* - Server → client: pane snapshots + deltas + status
|
|
13
|
-
*
|
|
14
|
-
* Goal: enable multiple clients (TUI + tools) to subscribe without each
|
|
15
|
-
* attaching to tmux / mutating pane state.
|
|
16
|
-
*
|
|
17
|
-
* This file defines the protocol + a minimal client helper. The daemon/broker
|
|
18
|
-
* implementation lives elsewhere and can be integrated later.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export type PanesBrokerRedactionMode = "raw" | "default";
|
|
22
|
-
export type PanesBrokerContentEncoding = "text" | "ansi";
|
|
23
|
-
|
|
24
|
-
export type PanesBrokerPaneTarget =
|
|
25
|
-
| { paneId: string; ref?: string }
|
|
26
|
-
| { ref: string; paneId?: string };
|
|
27
|
-
|
|
28
|
-
export type PanesBrokerSubscribeOptions = {
|
|
29
|
-
requestId?: string;
|
|
30
|
-
target: PanesBrokerPaneTarget;
|
|
31
|
-
redaction?: PanesBrokerRedactionMode;
|
|
32
|
-
encoding?: PanesBrokerContentEncoding;
|
|
33
|
-
history?: { lines: number };
|
|
34
|
-
follow?: boolean;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export type PanesBrokerClientHello = {
|
|
38
|
-
type: "client.hello";
|
|
39
|
-
at: string;
|
|
40
|
-
clientId: string;
|
|
41
|
-
version: 1;
|
|
42
|
-
pid: number;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export type PanesBrokerSubscribe = {
|
|
46
|
-
type: "panes.subscribe";
|
|
47
|
-
at: string;
|
|
48
|
-
requestId: string;
|
|
49
|
-
target: PanesBrokerPaneTarget;
|
|
50
|
-
redaction: PanesBrokerRedactionMode;
|
|
51
|
-
encoding: PanesBrokerContentEncoding;
|
|
52
|
-
history?: { lines: number };
|
|
53
|
-
follow: boolean;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export type PanesBrokerUnsubscribe = {
|
|
57
|
-
type: "panes.unsubscribe";
|
|
58
|
-
at: string;
|
|
59
|
-
requestId: string;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export type PanesBrokerPing = {
|
|
63
|
-
type: "client.ping";
|
|
64
|
-
at: string;
|
|
65
|
-
nonce: string;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export type PanesBrokerClientMessage =
|
|
69
|
-
| PanesBrokerClientHello
|
|
70
|
-
| PanesBrokerSubscribe
|
|
71
|
-
| PanesBrokerUnsubscribe
|
|
72
|
-
| PanesBrokerPing;
|
|
73
|
-
|
|
74
|
-
export type PanesBrokerServerHello = {
|
|
75
|
-
type: "broker.hello";
|
|
76
|
-
at: string;
|
|
77
|
-
version: 1;
|
|
78
|
-
pid: number;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export type PanesBrokerPong = {
|
|
82
|
-
type: "broker.pong";
|
|
83
|
-
at: string;
|
|
84
|
-
nonce: string;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export type PanesBrokerPanesSnapshot = {
|
|
88
|
-
type: "panes.snapshot";
|
|
89
|
-
at: string;
|
|
90
|
-
requestId: string;
|
|
91
|
-
paneId: string;
|
|
92
|
-
ref?: string;
|
|
93
|
-
encoding: PanesBrokerContentEncoding;
|
|
94
|
-
redaction: PanesBrokerRedactionMode;
|
|
95
|
-
cols?: number;
|
|
96
|
-
rows?: number;
|
|
97
|
-
truncated?: boolean;
|
|
98
|
-
content: string;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export type PanesBrokerPanesDelta = {
|
|
102
|
-
type: "panes.delta";
|
|
103
|
-
at: string;
|
|
104
|
-
requestId: string;
|
|
105
|
-
paneId: string;
|
|
106
|
-
ref?: string;
|
|
107
|
-
encoding: PanesBrokerContentEncoding;
|
|
108
|
-
redaction: PanesBrokerRedactionMode;
|
|
109
|
-
chunk: string;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export type PanesBrokerPanesStatus = {
|
|
113
|
-
type: "panes.status";
|
|
114
|
-
at: string;
|
|
115
|
-
requestId?: string;
|
|
116
|
-
paneId?: string;
|
|
117
|
-
level: "info" | "warn" | "error";
|
|
118
|
-
message: string;
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export type PanesBrokerServerMessage =
|
|
122
|
-
| PanesBrokerServerHello
|
|
123
|
-
| PanesBrokerPong
|
|
124
|
-
| PanesBrokerPanesSnapshot
|
|
125
|
-
| PanesBrokerPanesDelta
|
|
126
|
-
| PanesBrokerPanesStatus;
|
|
127
|
-
|
|
128
|
-
export type PanesBrokerConnectOptions = {
|
|
129
|
-
socketPath?: string;
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
export function getDefaultPanesBrokerSocketPath(): string {
|
|
133
|
-
const runtimeDir = process.env.XDG_RUNTIME_DIR;
|
|
134
|
-
if (runtimeDir) return join(runtimeDir, "abbie-panes-broker.sock");
|
|
135
|
-
|
|
136
|
-
const home = homedir() || process.env.HOME || "~";
|
|
137
|
-
return join(home, ".abbie", "run", "panes-broker.sock");
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function ensureSocketDir(path: string): void {
|
|
141
|
-
const dir = dirname(path);
|
|
142
|
-
mkdirSync(dir, { recursive: true });
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function nowIso(): string {
|
|
146
|
-
return new Date().toISOString();
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export type LineParser<T> = {
|
|
150
|
-
pushChunk: (chunk: Buffer | string) => void;
|
|
151
|
-
onMessage: (fn: (msg: T) => void) => void;
|
|
152
|
-
onError: (fn: (err: Error) => void) => void;
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
export function createNdjsonLineParser<T>(): LineParser<T> {
|
|
156
|
-
let buf = "";
|
|
157
|
-
let onMessageFn: ((msg: T) => void) | null = null;
|
|
158
|
-
let onErrorFn: ((err: Error) => void) | null = null;
|
|
159
|
-
|
|
160
|
-
return {
|
|
161
|
-
pushChunk(chunk) {
|
|
162
|
-
buf += chunk.toString();
|
|
163
|
-
for (;;) {
|
|
164
|
-
const idx = buf.indexOf("\n");
|
|
165
|
-
if (idx === -1) break;
|
|
166
|
-
const line = buf.slice(0, idx).trimEnd();
|
|
167
|
-
buf = buf.slice(idx + 1);
|
|
168
|
-
if (!line) continue;
|
|
169
|
-
try {
|
|
170
|
-
const msg = JSON.parse(line) as T;
|
|
171
|
-
onMessageFn?.(msg);
|
|
172
|
-
} catch (err) {
|
|
173
|
-
onErrorFn?.(
|
|
174
|
-
new Error(err instanceof Error ? err.message : "Failed to parse NDJSON line"),
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
onMessage(fn) {
|
|
180
|
-
onMessageFn = fn;
|
|
181
|
-
},
|
|
182
|
-
onError(fn) {
|
|
183
|
-
onErrorFn = fn;
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export type PanesBrokerClient = {
|
|
189
|
-
socket: Socket;
|
|
190
|
-
clientId: string;
|
|
191
|
-
send: (msg: PanesBrokerClientMessage) => void;
|
|
192
|
-
subscribe: (opts: PanesBrokerSubscribeOptions) => string;
|
|
193
|
-
unsubscribe: (requestId: string) => void;
|
|
194
|
-
ping: () => string;
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
export function connectPanesBroker(
|
|
198
|
-
opts: PanesBrokerConnectOptions = {},
|
|
199
|
-
handlers?: {
|
|
200
|
-
onMessage?: (msg: PanesBrokerServerMessage) => void;
|
|
201
|
-
onError?: (err: Error) => void;
|
|
202
|
-
onClose?: () => void;
|
|
203
|
-
},
|
|
204
|
-
): PanesBrokerClient {
|
|
205
|
-
const socketPath = opts.socketPath ?? getDefaultPanesBrokerSocketPath();
|
|
206
|
-
ensureSocketDir(socketPath);
|
|
207
|
-
|
|
208
|
-
const socket = createConnection({ path: socketPath });
|
|
209
|
-
const parser = createNdjsonLineParser<PanesBrokerServerMessage>();
|
|
210
|
-
|
|
211
|
-
parser.onMessage((msg) => handlers?.onMessage?.(msg));
|
|
212
|
-
parser.onError((err) => handlers?.onError?.(err));
|
|
213
|
-
|
|
214
|
-
socket.on("data", (chunk) => parser.pushChunk(chunk));
|
|
215
|
-
socket.on("error", (err) =>
|
|
216
|
-
handlers?.onError?.(err instanceof Error ? err : new Error(String(err))),
|
|
217
|
-
);
|
|
218
|
-
socket.on("close", () => handlers?.onClose?.());
|
|
219
|
-
|
|
220
|
-
const clientId = randomUUID();
|
|
221
|
-
|
|
222
|
-
const send = (msg: PanesBrokerClientMessage) => {
|
|
223
|
-
socket.write(`${JSON.stringify(msg)}\n`);
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
// Send hello immediately; server can ignore if not required.
|
|
227
|
-
send({
|
|
228
|
-
type: "client.hello",
|
|
229
|
-
at: nowIso(),
|
|
230
|
-
clientId,
|
|
231
|
-
version: 1,
|
|
232
|
-
pid: process.pid,
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
const subscribe = (sub: PanesBrokerSubscribeOptions): string => {
|
|
236
|
-
const requestId = sub.requestId ?? randomUUID();
|
|
237
|
-
send({
|
|
238
|
-
type: "panes.subscribe",
|
|
239
|
-
at: nowIso(),
|
|
240
|
-
requestId,
|
|
241
|
-
target: sub.target,
|
|
242
|
-
redaction: sub.redaction ?? "raw",
|
|
243
|
-
encoding: sub.encoding ?? "text",
|
|
244
|
-
history: sub.history,
|
|
245
|
-
follow: sub.follow ?? true,
|
|
246
|
-
});
|
|
247
|
-
return requestId;
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
const unsubscribe = (requestId: string) => {
|
|
251
|
-
send({ type: "panes.unsubscribe", at: nowIso(), requestId });
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const ping = (): string => {
|
|
255
|
-
const nonce = randomUUID();
|
|
256
|
-
send({ type: "client.ping", at: nowIso(), nonce });
|
|
257
|
-
return nonce;
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
return { socket, clientId, send, subscribe, unsubscribe, ping };
|
|
261
|
-
}
|
package/src/lib/panes/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./broker.js";
|