@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,53 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useAtomValue } from 'jotai';
|
|
3
|
-
import { Circle, WifiHigh, WifiSlash } from '@phosphor-icons/react';
|
|
4
|
-
import { cn } from '@/lib/utils';
|
|
5
|
-
import { tmuxRunningAtom, runningSessionsAtom, tmuxWindowsAtom, wsConnectedAtom, prefixActiveAtom, } from '@/atoms/state';
|
|
6
|
-
export function StatusBar() {
|
|
7
|
-
const tmuxRunning = useAtomValue(tmuxRunningAtom);
|
|
8
|
-
const runningSessions = useAtomValue(runningSessionsAtom);
|
|
9
|
-
const windows = useAtomValue(tmuxWindowsAtom);
|
|
10
|
-
const wsConnected = useAtomValue(wsConnectedAtom);
|
|
11
|
-
const prefixActive = useAtomValue(prefixActiveAtom);
|
|
12
|
-
return (<footer className="flex h-6 items-center justify-between border-t border-border bg-background px-3 text-[11px]">
|
|
13
|
-
<div className="flex items-center gap-4">
|
|
14
|
-
{/* Prefix indicator */}
|
|
15
|
-
{prefixActive && (<div className="flex items-center gap-1.5 animate-pulse">
|
|
16
|
-
<span className="rounded bg-primary/20 px-1.5 py-0.5 font-mono text-primary">
|
|
17
|
-
C-a
|
|
18
|
-
</span>
|
|
19
|
-
<span className="text-primary">waiting...</span>
|
|
20
|
-
</div>)}
|
|
21
|
-
|
|
22
|
-
{/* tmux status */}
|
|
23
|
-
{!prefixActive && (<div className="flex items-center gap-1.5">
|
|
24
|
-
<Circle weight="fill" className={cn('h-2 w-2', tmuxRunning ? 'text-success' : 'text-destructive')}/>
|
|
25
|
-
<span className="text-foreground-secondary">
|
|
26
|
-
tmux {tmuxRunning ? 'running' : 'stopped'}
|
|
27
|
-
</span>
|
|
28
|
-
</div>)}
|
|
29
|
-
|
|
30
|
-
{/* Window count */}
|
|
31
|
-
{tmuxRunning && (<span className="text-foreground-tertiary">
|
|
32
|
-
{windows.length} windows
|
|
33
|
-
</span>)}
|
|
34
|
-
|
|
35
|
-
{/* Running sessions */}
|
|
36
|
-
{runningSessions.length > 0 && (<span className="text-foreground-secondary">
|
|
37
|
-
{runningSessions.length} running
|
|
38
|
-
</span>)}
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<div className="flex items-center gap-2">
|
|
42
|
-
{/* WebSocket status */}
|
|
43
|
-
<div className="flex items-center gap-1">
|
|
44
|
-
{wsConnected ? (<WifiHigh className="h-3.5 w-3.5 text-success"/>) : (<WifiSlash className="h-3.5 w-3.5 text-foreground-tertiary"/>)}
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
{/* Keybindings hint */}
|
|
48
|
-
<span className="text-foreground-quaternary">
|
|
49
|
-
j/k Navigate · Enter Select · / Search
|
|
50
|
-
</span>
|
|
51
|
-
</div>
|
|
52
|
-
</footer>);
|
|
53
|
-
}
|
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useEffect, useRef, useCallback, useState, forwardRef, useImperativeHandle } from 'react';
|
|
3
|
-
import { useSetAtom } from 'jotai';
|
|
4
|
-
import { cn } from '@/lib/utils';
|
|
5
|
-
import { getWSClient } from '@/lib/ws';
|
|
6
|
-
import { terminalFocusedAtom } from '@/atoms/state';
|
|
7
|
-
// Dynamic import for xterm (client-side only)
|
|
8
|
-
let Terminal;
|
|
9
|
-
let FitAddon;
|
|
10
|
-
let WebLinksAddon;
|
|
11
|
-
// Custom theme matching our design system
|
|
12
|
-
const TERMINAL_THEME = {
|
|
13
|
-
background: '#0c0c0d',
|
|
14
|
-
foreground: '#fafafa',
|
|
15
|
-
cursor: '#fafafa',
|
|
16
|
-
cursorAccent: '#0c0c0d',
|
|
17
|
-
selectionBackground: 'rgba(74, 125, 255, 0.3)',
|
|
18
|
-
selectionForeground: '#fafafa',
|
|
19
|
-
// ANSI colors
|
|
20
|
-
black: '#0c0c0d',
|
|
21
|
-
red: '#ff4d4d',
|
|
22
|
-
green: '#22c55e',
|
|
23
|
-
yellow: '#f59e0b',
|
|
24
|
-
blue: '#4a7dff',
|
|
25
|
-
magenta: '#8b5cf6',
|
|
26
|
-
cyan: '#06b6d4',
|
|
27
|
-
white: '#fafafa',
|
|
28
|
-
brightBlack: '#404040',
|
|
29
|
-
brightRed: '#ff6b6b',
|
|
30
|
-
brightGreen: '#4ade80',
|
|
31
|
-
brightYellow: '#fbbf24',
|
|
32
|
-
brightBlue: '#5d8cff',
|
|
33
|
-
brightMagenta: '#a78bfa',
|
|
34
|
-
brightCyan: '#22d3ee',
|
|
35
|
-
brightWhite: '#ffffff',
|
|
36
|
-
};
|
|
37
|
-
export const TerminalView = forwardRef(function TerminalView({ windowName, pane = 0, session, className, onScrollChange }, ref) {
|
|
38
|
-
const containerRef = useRef(null);
|
|
39
|
-
const terminalRef = useRef(null);
|
|
40
|
-
const fitAddonRef = useRef(null);
|
|
41
|
-
const onScrollChangeRef = useRef(onScrollChange);
|
|
42
|
-
const lastFullContentRef = useRef('');
|
|
43
|
-
const pendingWriteDataRef = useRef('');
|
|
44
|
-
const writeInProgressRef = useRef(false);
|
|
45
|
-
const writeRafRef = useRef(null);
|
|
46
|
-
const [initialized, setInitialized] = useState(false);
|
|
47
|
-
const [connected, setConnected] = useState(false);
|
|
48
|
-
const setTerminalFocused = useSetAtom(terminalFocusedAtom);
|
|
49
|
-
const queueTerminalWrite = useCallback((payload) => {
|
|
50
|
-
pendingWriteDataRef.current = payload;
|
|
51
|
-
if (writeRafRef.current != null)
|
|
52
|
-
return;
|
|
53
|
-
writeRafRef.current = requestAnimationFrame(() => {
|
|
54
|
-
writeRafRef.current = null;
|
|
55
|
-
if (writeInProgressRef.current)
|
|
56
|
-
return;
|
|
57
|
-
const terminal = terminalRef.current;
|
|
58
|
-
const data = pendingWriteDataRef.current;
|
|
59
|
-
if (!terminal || !data)
|
|
60
|
-
return;
|
|
61
|
-
pendingWriteDataRef.current = '';
|
|
62
|
-
writeInProgressRef.current = true;
|
|
63
|
-
terminal.write(data, () => {
|
|
64
|
-
writeInProgressRef.current = false;
|
|
65
|
-
if (pendingWriteDataRef.current) {
|
|
66
|
-
queueTerminalWrite(pendingWriteDataRef.current);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
}, []);
|
|
71
|
-
const writeFullFrame = useCallback((content) => {
|
|
72
|
-
// Single write call to avoid blank-frame flash from terminal.clear() + write()
|
|
73
|
-
// - hide cursor during repaint
|
|
74
|
-
// - reset SGR so stale colors don't leak
|
|
75
|
-
// - home + clear screen, then write new snapshot
|
|
76
|
-
queueTerminalWrite(`\x1b[?25l\x1b[0m\x1b[H\x1b[2J${content}\x1b[?25h`);
|
|
77
|
-
}, [queueTerminalWrite]);
|
|
78
|
-
// Expose scrollToBottom via ref
|
|
79
|
-
useImperativeHandle(ref, () => ({
|
|
80
|
-
scrollToBottom: () => {
|
|
81
|
-
terminalRef.current?.scrollToBottom();
|
|
82
|
-
},
|
|
83
|
-
}), []);
|
|
84
|
-
// Keep ref updated
|
|
85
|
-
onScrollChangeRef.current = onScrollChange;
|
|
86
|
-
// Initialize terminal (runs once on mount)
|
|
87
|
-
useEffect(() => {
|
|
88
|
-
if (!containerRef.current)
|
|
89
|
-
return;
|
|
90
|
-
let disposed = false;
|
|
91
|
-
// Dynamic import xterm modules
|
|
92
|
-
Promise.all([
|
|
93
|
-
import('@xterm/xterm'),
|
|
94
|
-
import('@xterm/addon-fit'),
|
|
95
|
-
import('@xterm/addon-web-links'),
|
|
96
|
-
]).then(([xtermModule, fitModule, webLinksModule]) => {
|
|
97
|
-
if (disposed || !containerRef.current)
|
|
98
|
-
return;
|
|
99
|
-
Terminal = xtermModule.Terminal;
|
|
100
|
-
FitAddon = fitModule.FitAddon;
|
|
101
|
-
WebLinksAddon = webLinksModule.WebLinksAddon;
|
|
102
|
-
const terminal = new Terminal({
|
|
103
|
-
theme: TERMINAL_THEME,
|
|
104
|
-
// Ghostty-inspired font stack: prefer SF Mono for macOS crispness
|
|
105
|
-
fontFamily: '"SF Mono", "Berkeley Mono", "JetBrains Mono", "Fira Code", Menlo, monospace',
|
|
106
|
-
fontSize: 13,
|
|
107
|
-
fontWeight: 400,
|
|
108
|
-
fontWeightBold: 600,
|
|
109
|
-
lineHeight: 1.2, // Tighter like native terminals (Ghostty uses ~1.15-1.2)
|
|
110
|
-
letterSpacing: 0,
|
|
111
|
-
cursorBlink: true,
|
|
112
|
-
cursorStyle: 'block',
|
|
113
|
-
scrollback: 0, // No local buffer - tmux owns scrollback
|
|
114
|
-
convertEol: true,
|
|
115
|
-
allowProposedApi: true,
|
|
116
|
-
minimumContrastRatio: 1, // Don't adjust colors - trust our theme
|
|
117
|
-
drawBoldTextInBrightColors: false, // Keep bold as weight, not color
|
|
118
|
-
});
|
|
119
|
-
const fitAddon = new FitAddon();
|
|
120
|
-
const webLinksAddon = new WebLinksAddon();
|
|
121
|
-
terminal.loadAddon(fitAddon);
|
|
122
|
-
terminal.loadAddon(webLinksAddon);
|
|
123
|
-
terminal.open(containerRef.current);
|
|
124
|
-
fitAddon.fit();
|
|
125
|
-
terminalRef.current = terminal;
|
|
126
|
-
fitAddonRef.current = fitAddon;
|
|
127
|
-
// No local scroll tracking - tmux owns scrollback (scrollback: 0)
|
|
128
|
-
// Scroll controls in UI chrome will send tmux copy-mode commands
|
|
129
|
-
// Handle keyboard input - send to tmux via WebSocket
|
|
130
|
-
terminal.onData((data) => {
|
|
131
|
-
// Debug: log what xterm is sending
|
|
132
|
-
const escaped = data.replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\x7f/g, '\\x7f').replace(/\x1b/g, '\\e');
|
|
133
|
-
console.log('[terminal] onData:', escaped, 'length:', data.length);
|
|
134
|
-
const ws = getWSClient();
|
|
135
|
-
ws.sendTerminalInput(data);
|
|
136
|
-
});
|
|
137
|
-
setInitialized(true);
|
|
138
|
-
});
|
|
139
|
-
// Clean up focus state on unmount
|
|
140
|
-
return () => {
|
|
141
|
-
disposed = true;
|
|
142
|
-
setTerminalFocused(false);
|
|
143
|
-
terminalRef.current?.dispose();
|
|
144
|
-
terminalRef.current = null;
|
|
145
|
-
fitAddonRef.current = null;
|
|
146
|
-
};
|
|
147
|
-
}, [setTerminalFocused]);
|
|
148
|
-
// Handle resize - fit xterm and report dimensions to server for tmux pane resize
|
|
149
|
-
useEffect(() => {
|
|
150
|
-
if (!fitAddonRef.current || !containerRef.current || !terminalRef.current)
|
|
151
|
-
return;
|
|
152
|
-
const terminal = terminalRef.current;
|
|
153
|
-
let lastCols = terminal.cols;
|
|
154
|
-
let lastRows = terminal.rows;
|
|
155
|
-
let rafId = null;
|
|
156
|
-
const applyFit = () => {
|
|
157
|
-
rafId = null;
|
|
158
|
-
if (!fitAddonRef.current || !terminalRef.current)
|
|
159
|
-
return;
|
|
160
|
-
fitAddonRef.current.fit();
|
|
161
|
-
terminalRef.current.refresh(0, Math.max(0, terminalRef.current.rows - 1));
|
|
162
|
-
const cols = terminalRef.current.cols;
|
|
163
|
-
const rows = terminalRef.current.rows;
|
|
164
|
-
if (cols === lastCols && rows === lastRows)
|
|
165
|
-
return;
|
|
166
|
-
lastCols = cols;
|
|
167
|
-
lastRows = rows;
|
|
168
|
-
// Report new dimensions to server for tmux pane resize (coalesced per frame)
|
|
169
|
-
const ws = getWSClient();
|
|
170
|
-
ws.send({
|
|
171
|
-
type: 'terminal:resize',
|
|
172
|
-
cols,
|
|
173
|
-
rows,
|
|
174
|
-
});
|
|
175
|
-
// If tmux doesn't emit new content immediately on resize, force a local repaint
|
|
176
|
-
// so the new rows/cols aren't blank until the next keystroke/output.
|
|
177
|
-
if (lastFullContentRef.current) {
|
|
178
|
-
writeFullFrame(lastFullContentRef.current);
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
182
|
-
if (rafId != null)
|
|
183
|
-
cancelAnimationFrame(rafId);
|
|
184
|
-
rafId = requestAnimationFrame(applyFit);
|
|
185
|
-
});
|
|
186
|
-
resizeObserver.observe(containerRef.current);
|
|
187
|
-
rafId = requestAnimationFrame(applyFit);
|
|
188
|
-
return () => resizeObserver.disconnect();
|
|
189
|
-
}, [initialized, writeFullFrame]);
|
|
190
|
-
// Track terminal focus state for global keybinding passthrough
|
|
191
|
-
useEffect(() => {
|
|
192
|
-
if (!containerRef.current)
|
|
193
|
-
return;
|
|
194
|
-
const container = containerRef.current;
|
|
195
|
-
const handleFocusIn = () => {
|
|
196
|
-
setTerminalFocused(true);
|
|
197
|
-
};
|
|
198
|
-
const handleFocusOut = (e) => {
|
|
199
|
-
// Only clear focus if focus is leaving the container entirely
|
|
200
|
-
if (!container.contains(e.relatedTarget)) {
|
|
201
|
-
setTerminalFocused(false);
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
container.addEventListener('focusin', handleFocusIn);
|
|
205
|
-
container.addEventListener('focusout', handleFocusOut);
|
|
206
|
-
return () => {
|
|
207
|
-
container.removeEventListener('focusin', handleFocusIn);
|
|
208
|
-
container.removeEventListener('focusout', handleFocusOut);
|
|
209
|
-
};
|
|
210
|
-
}, [setTerminalFocused]);
|
|
211
|
-
// Prevent keyboard events from bubbling UP to parent window (Claude Code CLI)
|
|
212
|
-
// IMPORTANT: Use bubble phase (not capture) so xterm.js receives the events first
|
|
213
|
-
useEffect(() => {
|
|
214
|
-
if (!containerRef.current)
|
|
215
|
-
return;
|
|
216
|
-
const container = containerRef.current;
|
|
217
|
-
const stopPropagation = (e) => {
|
|
218
|
-
// Stop propagation in bubble phase - xterm.js has already received the event
|
|
219
|
-
e.stopPropagation();
|
|
220
|
-
};
|
|
221
|
-
// Use bubble phase (false) so xterm.js captures events first, then we stop them from bubbling up
|
|
222
|
-
container.addEventListener('keydown', stopPropagation, false);
|
|
223
|
-
container.addEventListener('keyup', stopPropagation, false);
|
|
224
|
-
container.addEventListener('keypress', stopPropagation, false);
|
|
225
|
-
return () => {
|
|
226
|
-
container.removeEventListener('keydown', stopPropagation, false);
|
|
227
|
-
container.removeEventListener('keyup', stopPropagation, false);
|
|
228
|
-
container.removeEventListener('keypress', stopPropagation, false);
|
|
229
|
-
};
|
|
230
|
-
}, []);
|
|
231
|
-
// Subscribe to WebSocket terminal stream
|
|
232
|
-
useEffect(() => {
|
|
233
|
-
if (!initialized || !terminalRef.current)
|
|
234
|
-
return;
|
|
235
|
-
const ws = getWSClient();
|
|
236
|
-
const terminal = terminalRef.current;
|
|
237
|
-
// Ensure WS is connected
|
|
238
|
-
ws.connect();
|
|
239
|
-
// Subscribe to terminal content
|
|
240
|
-
const unsubContent = ws.subscribe('terminal:content', (data) => {
|
|
241
|
-
const { content, full } = data;
|
|
242
|
-
if (full) {
|
|
243
|
-
// Full refresh - replace the visible frame without a blank flash.
|
|
244
|
-
lastFullContentRef.current = content;
|
|
245
|
-
writeFullFrame(content);
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
// Incremental update - just append
|
|
249
|
-
// Note: preserve any queued full-frame repaint by appending after it.
|
|
250
|
-
pendingWriteDataRef.current = `${pendingWriteDataRef.current}${content}`;
|
|
251
|
-
queueTerminalWrite(pendingWriteDataRef.current);
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
// Subscribe to connection state - also receive pane dimensions to sync
|
|
255
|
-
const unsubSubscribed = ws.subscribe('terminal:subscribed', (data) => {
|
|
256
|
-
const { dims } = (data ?? {});
|
|
257
|
-
console.log('[terminal] received terminal:subscribed, dims:', dims);
|
|
258
|
-
setConnected(true);
|
|
259
|
-
// Source of truth is the browser container size.
|
|
260
|
-
// Always fit xterm to the container (accounting for padding), then resize tmux to match.
|
|
261
|
-
// Resizing xterm to tmux dims can make the xterm element wider than its container,
|
|
262
|
-
// causing lines to overflow instead of wrapping.
|
|
263
|
-
requestAnimationFrame(() => {
|
|
264
|
-
const fitAddon = fitAddonRef.current;
|
|
265
|
-
const term = terminalRef.current;
|
|
266
|
-
if (!fitAddon || !term)
|
|
267
|
-
return;
|
|
268
|
-
fitAddon.fit();
|
|
269
|
-
const cols = term.cols;
|
|
270
|
-
const rows = term.rows;
|
|
271
|
-
if (!dims || dims.cols !== cols || dims.rows !== rows) {
|
|
272
|
-
console.log('[terminal] resizing tmux to match xterm dims:', { cols, rows, server: dims });
|
|
273
|
-
ws.send({ type: 'terminal:resize', cols, rows });
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
// Start streaming when connected
|
|
278
|
-
const trySubscribe = () => {
|
|
279
|
-
if (ws.isConnected()) {
|
|
280
|
-
ws.subscribeTerminal(windowName, pane, session);
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
// Try immediately and also on connect
|
|
284
|
-
trySubscribe();
|
|
285
|
-
const unsubConnect = ws.onConnect(() => {
|
|
286
|
-
trySubscribe();
|
|
287
|
-
});
|
|
288
|
-
return () => {
|
|
289
|
-
unsubContent();
|
|
290
|
-
unsubSubscribed();
|
|
291
|
-
unsubConnect();
|
|
292
|
-
ws.unsubscribeTerminal();
|
|
293
|
-
setConnected(false);
|
|
294
|
-
};
|
|
295
|
-
}, [initialized, windowName, pane, session]);
|
|
296
|
-
// Scroll to bottom method
|
|
297
|
-
const scrollToBottom = useCallback(() => {
|
|
298
|
-
terminalRef.current?.scrollToBottom();
|
|
299
|
-
}, []);
|
|
300
|
-
// Focus terminal on click and track focus state
|
|
301
|
-
const handleClick = useCallback(() => {
|
|
302
|
-
terminalRef.current?.focus();
|
|
303
|
-
setTerminalFocused(true);
|
|
304
|
-
}, [setTerminalFocused]);
|
|
305
|
-
return (<div className={cn('relative h-full w-full overflow-hidden', className)} onClick={handleClick}>
|
|
306
|
-
{/* Terminal container */}
|
|
307
|
-
<div ref={containerRef} className="absolute inset-0 overflow-hidden" style={{ padding: '12px 16px' }} tabIndex={-1}/>
|
|
308
|
-
|
|
309
|
-
{/* Loading overlay */}
|
|
310
|
-
{!initialized && (<div className="absolute inset-0 flex items-center justify-center">
|
|
311
|
-
<div className="flex items-center gap-3 text-sm text-foreground-tertiary">
|
|
312
|
-
<span className="inline-block h-2 w-2 animate-pulse rounded-full bg-foreground-tertiary"/>
|
|
313
|
-
Initializing...
|
|
314
|
-
</div>
|
|
315
|
-
</div>)}
|
|
316
|
-
|
|
317
|
-
{/* Connection indicator */}
|
|
318
|
-
{initialized && !connected && (<div className="absolute inset-0 z-10 flex items-center justify-center overflow-visible">
|
|
319
|
-
<span className="whitespace-nowrap text-sm font-medium connecting-shimmer">
|
|
320
|
-
Connecting...
|
|
321
|
-
</span>
|
|
322
|
-
</div>)}
|
|
323
|
-
</div>);
|
|
324
|
-
});
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const toastManager: any;
|
|
2
|
-
export declare function ToastProvider({ children }: {
|
|
3
|
-
children: React.ReactNode;
|
|
4
|
-
}): any;
|
|
5
|
-
export declare function toast(description: string, type?: 'success' | 'error' | 'info'): any;
|
|
6
|
-
export declare function toastSuccess(description: string): any;
|
|
7
|
-
export declare function toastError(description: string): any;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { Toast } from '@base-ui-components/react/toast';
|
|
3
|
-
import { CheckCircle, X, Warning, Info } from '@phosphor-icons/react';
|
|
4
|
-
import { cn } from '@/lib/utils';
|
|
5
|
-
// Create a global toast manager for use outside React tree
|
|
6
|
-
export const toastManager = Toast.createToastManager();
|
|
7
|
-
const ICONS = {
|
|
8
|
-
success: CheckCircle,
|
|
9
|
-
error: Warning,
|
|
10
|
-
info: Info,
|
|
11
|
-
};
|
|
12
|
-
function ToastList() {
|
|
13
|
-
const { toasts } = Toast.useToastManager();
|
|
14
|
-
return toasts.map((toast) => {
|
|
15
|
-
const Icon = ICONS[toast.type] || CheckCircle;
|
|
16
|
-
return (<Toast.Root key={toast.id} toast={toast} className={cn(
|
|
17
|
-
// CSS variables for stacking math
|
|
18
|
-
'[--gap:0.75rem]', '[--peek:0.75rem]', '[--scale:calc(max(0,1-(var(--toast-index)*0.1)))]', '[--shrink:calc(1-var(--scale))]', '[--height:var(--toast-frontmost-height,var(--toast-height))]', '[--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))]',
|
|
19
|
-
// Position and stacking
|
|
20
|
-
'absolute right-0 bottom-0 left-auto', 'z-[calc(1000-var(--toast-index))]', 'w-full origin-bottom',
|
|
21
|
-
// Transform for stacked appearance
|
|
22
|
-
'[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))]',
|
|
23
|
-
// Styling
|
|
24
|
-
'rounded-xl border border-border bg-card p-4 shadow-xl', 'select-none bg-clip-padding',
|
|
25
|
-
// Height management
|
|
26
|
-
'h-[var(--height)]',
|
|
27
|
-
// Pseudo-element for gap hitbox
|
|
28
|
-
'after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-[""]',
|
|
29
|
-
// Transitions
|
|
30
|
-
'[transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.5s,height_0.15s]',
|
|
31
|
-
// Expanded state (viewport hovered/focused)
|
|
32
|
-
'data-[expanded]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--offset-y)))]', 'data-[expanded]:h-[var(--toast-height)]',
|
|
33
|
-
// Enter animation
|
|
34
|
-
'data-[starting-style]:[transform:translateY(150%)]',
|
|
35
|
-
// Exit animation (no swipe)
|
|
36
|
-
'[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]', 'data-[ending-style]:opacity-0',
|
|
37
|
-
// Limited (exceeded limit)
|
|
38
|
-
'data-[limited]:opacity-0',
|
|
39
|
-
// Swipe exit animations
|
|
40
|
-
'data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]', 'data-[expanded]:data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]', 'data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]', 'data-[expanded]:data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]', 'data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]', 'data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]', 'data-[ending-style]:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]', 'data-[expanded]:data-[ending-style]:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]')}>
|
|
41
|
-
<Toast.Content className={cn('flex items-center gap-3', 'overflow-hidden', 'transition-opacity duration-250', 'data-[behind]:pointer-events-none data-[behind]:opacity-0', 'data-[expanded]:pointer-events-auto data-[expanded]:opacity-100')}>
|
|
42
|
-
<Icon className={cn('h-5 w-5 shrink-0', toast.type === 'success' && 'text-success', toast.type === 'error' && 'text-destructive', (!toast.type || toast.type === 'info') && 'text-primary')} weight="fill"/>
|
|
43
|
-
<Toast.Description className="flex-1 text-sm text-foreground">
|
|
44
|
-
{toast.description}
|
|
45
|
-
</Toast.Description>
|
|
46
|
-
<Toast.Close className={cn('flex h-6 w-6 shrink-0 items-center justify-center rounded-md', 'text-foreground-tertiary', 'outline-none hover:bg-background-tertiary hover:text-foreground-secondary')}>
|
|
47
|
-
<X className="h-3.5 w-3.5"/>
|
|
48
|
-
</Toast.Close>
|
|
49
|
-
</Toast.Content>
|
|
50
|
-
</Toast.Root>);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
export function ToastProvider({ children }) {
|
|
54
|
-
return (<Toast.Provider toastManager={toastManager}>
|
|
55
|
-
{children}
|
|
56
|
-
<Toast.Portal>
|
|
57
|
-
<Toast.Viewport className={cn('fixed z-50', 'bottom-4 right-4 top-auto left-auto', 'mx-auto flex w-[280px]', 'sm:bottom-6 sm:right-6 sm:w-[320px]', 'outline-none')}>
|
|
58
|
-
<ToastList />
|
|
59
|
-
</Toast.Viewport>
|
|
60
|
-
</Toast.Portal>
|
|
61
|
-
</Toast.Provider>);
|
|
62
|
-
}
|
|
63
|
-
// Convenience functions
|
|
64
|
-
export function toast(description, type) {
|
|
65
|
-
return toastManager.add({ description, type, timeout: 3000 });
|
|
66
|
-
}
|
|
67
|
-
export function toastSuccess(description) {
|
|
68
|
-
return toastManager.add({ description, type: 'success', timeout: 3000 });
|
|
69
|
-
}
|
|
70
|
-
export function toastError(description) {
|
|
71
|
-
return toastManager.add({ description, type: 'error', timeout: 5000 });
|
|
72
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface KeybindingsState {
|
|
2
|
-
prefixActive: boolean;
|
|
3
|
-
commandPaletteOpen: boolean;
|
|
4
|
-
setCommandPaletteOpen: (open: boolean) => void;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Vim + tmux keybindings for the agents web UI.
|
|
8
|
-
*
|
|
9
|
-
* Navigation (vim-style):
|
|
10
|
-
* j/↓ - next item
|
|
11
|
-
* k/↑ - previous item
|
|
12
|
-
* Enter/l - select/expand
|
|
13
|
-
* h/Esc - back/collapse
|
|
14
|
-
* g - first item
|
|
15
|
-
* G - last item
|
|
16
|
-
*
|
|
17
|
-
* Commands:
|
|
18
|
-
* / or Cmd+K - open command palette
|
|
19
|
-
* Escape - close command palette
|
|
20
|
-
* 1/2 - switch to windows/sessions view
|
|
21
|
-
*
|
|
22
|
-
* tmux prefix (Ctrl+a):
|
|
23
|
-
* n - next window
|
|
24
|
-
* p - previous window
|
|
25
|
-
* c - new window (placeholder)
|
|
26
|
-
* s - toggle sessions view
|
|
27
|
-
* w - toggle windows view
|
|
28
|
-
* [ - toggle sidebar
|
|
29
|
-
*/
|
|
30
|
-
export declare function useKeybindings(): KeybindingsState;
|