@creativeintelligence/abbie 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/dist/cli/commands/login.js +26 -0
  2. package/dist/cli/commands/start.js +2 -1
  3. package/oclif.manifest.json +1 -1
  4. package/package.json +9 -5
  5. package/dist/cli/base-command.d.ts.map +0 -1
  6. package/dist/cli/commands/agent/list.d.ts.map +0 -1
  7. package/dist/cli/commands/annotation/ack.d.ts.map +0 -1
  8. package/dist/cli/commands/annotation/create.d.ts.map +0 -1
  9. package/dist/cli/commands/annotation/events.d.ts.map +0 -1
  10. package/dist/cli/commands/annotation/export.d.ts.map +0 -1
  11. package/dist/cli/commands/annotation/import.d.ts.map +0 -1
  12. package/dist/cli/commands/annotation/ingest.d.ts.map +0 -1
  13. package/dist/cli/commands/annotation/list.d.ts.map +0 -1
  14. package/dist/cli/commands/annotation/reply.d.ts.map +0 -1
  15. package/dist/cli/commands/annotation/resolve.d.ts.map +0 -1
  16. package/dist/cli/commands/auto/index.d.ts.map +0 -1
  17. package/dist/cli/commands/backlog/add.d.ts.map +0 -1
  18. package/dist/cli/commands/backlog/claim.d.ts.map +0 -1
  19. package/dist/cli/commands/backlog/complete.d.ts.map +0 -1
  20. package/dist/cli/commands/backlog/list.d.ts.map +0 -1
  21. package/dist/cli/commands/backlog/pick.d.ts.map +0 -1
  22. package/dist/cli/commands/backlog/sync.d.ts.map +0 -1
  23. package/dist/cli/commands/bootstrap.d.ts.map +0 -1
  24. package/dist/cli/commands/bridge.d.ts.map +0 -1
  25. package/dist/cli/commands/context/inject.d.ts.map +0 -1
  26. package/dist/cli/commands/context/list.d.ts.map +0 -1
  27. package/dist/cli/commands/context/publish.d.ts.map +0 -1
  28. package/dist/cli/commands/context/read.d.ts.map +0 -1
  29. package/dist/cli/commands/daemon.d.ts.map +0 -1
  30. package/dist/cli/commands/digest/index.d.ts.map +0 -1
  31. package/dist/cli/commands/docs/lint.d.ts.map +0 -1
  32. package/dist/cli/commands/docs/sync.d.ts.map +0 -1
  33. package/dist/cli/commands/doctor.d.ts.map +0 -1
  34. package/dist/cli/commands/find/index.d.ts.map +0 -1
  35. package/dist/cli/commands/gc.d.ts.map +0 -1
  36. package/dist/cli/commands/history/index.d.ts.map +0 -1
  37. package/dist/cli/commands/hooks/guard.d.ts.map +0 -1
  38. package/dist/cli/commands/hooks/list.d.ts.map +0 -1
  39. package/dist/cli/commands/hooks/lock.d.ts.map +0 -1
  40. package/dist/cli/commands/hooks/status.d.ts.map +0 -1
  41. package/dist/cli/commands/hooks/test.d.ts.map +0 -1
  42. package/dist/cli/commands/hooks/unlock.d.ts.map +0 -1
  43. package/dist/cli/commands/index.d.ts.map +0 -1
  44. package/dist/cli/commands/list.d.ts.map +0 -1
  45. package/dist/cli/commands/list.e2e.test.d.ts +0 -1
  46. package/dist/cli/commands/list.e2e.test.js +0 -47
  47. package/dist/cli/commands/login.d.ts.map +0 -1
  48. package/dist/cli/commands/logout.d.ts.map +0 -1
  49. package/dist/cli/commands/panes/broker.d.ts.map +0 -1
  50. package/dist/cli/commands/panes/pipe-sink.d.ts.map +0 -1
  51. package/dist/cli/commands/panes/snapshot.d.ts.map +0 -1
  52. package/dist/cli/commands/plan.d.ts.map +0 -1
  53. package/dist/cli/commands/plan.e2e.test.d.ts +0 -1
  54. package/dist/cli/commands/plan.e2e.test.js +0 -74
  55. package/dist/cli/commands/preview/index.d.ts.map +0 -1
  56. package/dist/cli/commands/preview/init.d.ts.map +0 -1
  57. package/dist/cli/commands/preview/list.d.ts.map +0 -1
  58. package/dist/cli/commands/preview/status.d.ts.map +0 -1
  59. package/dist/cli/commands/preview/stop.d.ts.map +0 -1
  60. package/dist/cli/commands/preview/sync.d.ts.map +0 -1
  61. package/dist/cli/commands/preview/watch.d.ts.map +0 -1
  62. package/dist/cli/commands/project/add.d.ts.map +0 -1
  63. package/dist/cli/commands/project/list.d.ts.map +0 -1
  64. package/dist/cli/commands/project/remove.d.ts.map +0 -1
  65. package/dist/cli/commands/push.d.ts.map +0 -1
  66. package/dist/cli/commands/reference/add.d.ts.map +0 -1
  67. package/dist/cli/commands/reference/delete.d.ts.map +0 -1
  68. package/dist/cli/commands/reference/extract.d.ts.map +0 -1
  69. package/dist/cli/commands/reference/list.d.ts.map +0 -1
  70. package/dist/cli/commands/reference/normalize.d.ts.map +0 -1
  71. package/dist/cli/commands/reference/open.d.ts.map +0 -1
  72. package/dist/cli/commands/reference/save.d.ts.map +0 -1
  73. package/dist/cli/commands/reference/search.d.ts.map +0 -1
  74. package/dist/cli/commands/reference/show.d.ts.map +0 -1
  75. package/dist/cli/commands/reference/update-index.d.ts.map +0 -1
  76. package/dist/cli/commands/reference/update.d.ts.map +0 -1
  77. package/dist/cli/commands/report/blocked.d.ts.map +0 -1
  78. package/dist/cli/commands/report/complete.d.ts.map +0 -1
  79. package/dist/cli/commands/report/progress.d.ts.map +0 -1
  80. package/dist/cli/commands/report/start.d.ts.map +0 -1
  81. package/dist/cli/commands/resource/acquire.d.ts.map +0 -1
  82. package/dist/cli/commands/resource/list.d.ts.map +0 -1
  83. package/dist/cli/commands/resource/release.d.ts.map +0 -1
  84. package/dist/cli/commands/resource/wait.d.ts.map +0 -1
  85. package/dist/cli/commands/review.d.ts.map +0 -1
  86. package/dist/cli/commands/session/attach.d.ts.map +0 -1
  87. package/dist/cli/commands/session/await.d.ts.map +0 -1
  88. package/dist/cli/commands/session/complete.d.ts.map +0 -1
  89. package/dist/cli/commands/session/create.d.ts.map +0 -1
  90. package/dist/cli/commands/session/heartbeat.d.ts.map +0 -1
  91. package/dist/cli/commands/session/list.d.ts.map +0 -1
  92. package/dist/cli/commands/session/mark-done.d.ts.map +0 -1
  93. package/dist/cli/commands/session/mine.d.ts.map +0 -1
  94. package/dist/cli/commands/session/replay.d.ts.map +0 -1
  95. package/dist/cli/commands/session/run.d.ts.map +0 -1
  96. package/dist/cli/commands/session/show.d.ts.map +0 -1
  97. package/dist/cli/commands/session/start.d.ts.map +0 -1
  98. package/dist/cli/commands/session/state/cleanup.d.ts.map +0 -1
  99. package/dist/cli/commands/session/state/end.d.ts.map +0 -1
  100. package/dist/cli/commands/session/state/get.d.ts.map +0 -1
  101. package/dist/cli/commands/session/state/init.d.ts.map +0 -1
  102. package/dist/cli/commands/session/state/list.d.ts.map +0 -1
  103. package/dist/cli/commands/session/state/update.d.ts.map +0 -1
  104. package/dist/cli/commands/session/stop.d.ts.map +0 -1
  105. package/dist/cli/commands/session/view.d.ts.map +0 -1
  106. package/dist/cli/commands/start.d.ts.map +0 -1
  107. package/dist/cli/commands/state/dump.d.ts.map +0 -1
  108. package/dist/cli/commands/status.d.ts.map +0 -1
  109. package/dist/cli/commands/sync.d.ts.map +0 -1
  110. package/dist/cli/commands/trace/export.d.ts.map +0 -1
  111. package/dist/cli/commands/triage/claim.d.ts.map +0 -1
  112. package/dist/cli/commands/triage/list.d.ts.map +0 -1
  113. package/dist/cli/commands/triage/next.d.ts.map +0 -1
  114. package/dist/cli/commands/triage/pull.d.ts.map +0 -1
  115. package/dist/cli/commands/triage/stats.d.ts.map +0 -1
  116. package/dist/cli/commands/tunnel/list.d.ts.map +0 -1
  117. package/dist/cli/commands/tunnel/start.d.ts.map +0 -1
  118. package/dist/cli/commands/tunnel/stop.d.ts.map +0 -1
  119. package/dist/cli/commands/tunnel/url.d.ts.map +0 -1
  120. package/dist/cli/commands/web/start.d.ts.map +0 -1
  121. package/dist/cli/commands/windows/context.d.ts.map +0 -1
  122. package/dist/cli/commands/windows/focus.d.ts.map +0 -1
  123. package/dist/cli/commands/windows/list.d.ts.map +0 -1
  124. package/dist/cli/commands/windows/map.d.ts.map +0 -1
  125. package/dist/cli/commands/windows/read.d.ts.map +0 -1
  126. package/dist/cli/commands/windows/search.d.ts.map +0 -1
  127. package/dist/cli/commands/windows/show.d.ts.map +0 -1
  128. package/dist/cli/commands/windows/watch.d.ts.map +0 -1
  129. package/dist/lib/active-sessions.d.ts.map +0 -1
  130. package/dist/lib/agent-adapters.d.ts.map +0 -1
  131. package/dist/lib/agent-sessions.d.ts.map +0 -1
  132. package/dist/lib/agent-trace.d.ts.map +0 -1
  133. package/dist/lib/analytics.d.ts.map +0 -1
  134. package/dist/lib/annotations-convex.d.ts.map +0 -1
  135. package/dist/lib/annotations.d.ts.map +0 -1
  136. package/dist/lib/auto/discover.d.ts.map +0 -1
  137. package/dist/lib/auto/ideate.d.ts.map +0 -1
  138. package/dist/lib/auto/spawn.d.ts.map +0 -1
  139. package/dist/lib/auto/workspace.d.ts.map +0 -1
  140. package/dist/lib/backlog.d.ts.map +0 -1
  141. package/dist/lib/backlog.test.d.ts +0 -1
  142. package/dist/lib/backlog.test.js +0 -162
  143. package/dist/lib/config-loader.d.ts.map +0 -1
  144. package/dist/lib/config-sync/adapters/claude.d.ts.map +0 -1
  145. package/dist/lib/config-sync/adapters/codex.d.ts.map +0 -1
  146. package/dist/lib/config-sync/adapters/copilot.d.ts.map +0 -1
  147. package/dist/lib/config-sync/adapters/gemini.d.ts.map +0 -1
  148. package/dist/lib/config-sync/adapters/index.d.ts.map +0 -1
  149. package/dist/lib/config-sync/adapters/opencode.d.ts.map +0 -1
  150. package/dist/lib/config-sync/index.d.ts.map +0 -1
  151. package/dist/lib/config-sync/types.d.ts.map +0 -1
  152. package/dist/lib/config-sync/writer.d.ts.map +0 -1
  153. package/dist/lib/content-sync/index.d.ts.map +0 -1
  154. package/dist/lib/content-sync/types.d.ts.map +0 -1
  155. package/dist/lib/contracts.d.ts.map +0 -1
  156. package/dist/lib/convex.d.ts.map +0 -1
  157. package/dist/lib/device.d.ts.map +0 -1
  158. package/dist/lib/digest/index.d.ts.map +0 -1
  159. package/dist/lib/docs/lint.d.ts.map +0 -1
  160. package/dist/lib/docs/lint.test.d.ts +0 -1
  161. package/dist/lib/docs/lint.test.js +0 -120
  162. package/dist/lib/docs/sync.d.ts.map +0 -1
  163. package/dist/lib/doctor/index.d.ts.map +0 -1
  164. package/dist/lib/doctor/repos.d.ts.map +0 -1
  165. package/dist/lib/doctor/templates.d.ts.map +0 -1
  166. package/dist/lib/errors.d.ts.map +0 -1
  167. package/dist/lib/events.d.ts.map +0 -1
  168. package/dist/lib/heartbeat.d.ts.map +0 -1
  169. package/dist/lib/heartbeat.test.d.ts +0 -1
  170. package/dist/lib/heartbeat.test.js +0 -124
  171. package/dist/lib/hooks/adapters/claude.d.ts.map +0 -1
  172. package/dist/lib/hooks/adapters/codex.d.ts.map +0 -1
  173. package/dist/lib/hooks/adapters/copilot.d.ts.map +0 -1
  174. package/dist/lib/hooks/context.d.ts.map +0 -1
  175. package/dist/lib/hooks/index.d.ts.map +0 -1
  176. package/dist/lib/hooks/registry.d.ts.map +0 -1
  177. package/dist/lib/hooks/runner.d.ts.map +0 -1
  178. package/dist/lib/hooks/types.d.ts.map +0 -1
  179. package/dist/lib/index.test.d.ts +0 -1
  180. package/dist/lib/index.test.js +0 -334
  181. package/dist/lib/managed-session.d.ts.map +0 -1
  182. package/dist/lib/math.d.ts.map +0 -1
  183. package/dist/lib/math.test.d.ts +0 -1
  184. package/dist/lib/math.test.js +0 -238
  185. package/dist/lib/ngrok.d.ts.map +0 -1
  186. package/dist/lib/nvim/discovery.d.ts.map +0 -1
  187. package/dist/lib/nvim/discovery.test.d.ts +0 -1
  188. package/dist/lib/nvim/discovery.test.js +0 -131
  189. package/dist/lib/nvim/index.d.ts.map +0 -1
  190. package/dist/lib/nvim/remote.d.ts.map +0 -1
  191. package/dist/lib/nvim/remote.test.d.ts +0 -1
  192. package/dist/lib/nvim/remote.test.js +0 -18
  193. package/dist/lib/panes/broker.d.ts.map +0 -1
  194. package/dist/lib/panes/index.d.ts.map +0 -1
  195. package/dist/lib/panes/server.d.ts.map +0 -1
  196. package/dist/lib/preview/detect.d.ts.map +0 -1
  197. package/dist/lib/preview/index.d.ts.map +0 -1
  198. package/dist/lib/preview/manager.d.ts.map +0 -1
  199. package/dist/lib/preview/schema.d.ts.map +0 -1
  200. package/dist/lib/preview/sprite.d.ts.map +0 -1
  201. package/dist/lib/preview/watcher.d.ts.map +0 -1
  202. package/dist/lib/process/index.d.ts.map +0 -1
  203. package/dist/lib/process/snapshot.d.ts.map +0 -1
  204. package/dist/lib/process/snapshot.test.d.ts +0 -1
  205. package/dist/lib/process/snapshot.test.js +0 -127
  206. package/dist/lib/project-identity.d.ts.map +0 -1
  207. package/dist/lib/provider-auth.d.ts.map +0 -1
  208. package/dist/lib/references.d.ts.map +0 -1
  209. package/dist/lib/report.d.ts.map +0 -1
  210. package/dist/lib/resources.d.ts.map +0 -1
  211. package/dist/lib/resources.test.d.ts +0 -1
  212. package/dist/lib/resources.test.js +0 -94
  213. package/dist/lib/runner.d.ts.map +0 -1
  214. package/dist/lib/runner.test.d.ts +0 -1
  215. package/dist/lib/runner.test.js +0 -234
  216. package/dist/lib/session-artifacts.d.ts.map +0 -1
  217. package/dist/lib/session-manager.d.ts.map +0 -1
  218. package/dist/lib/session-manager.test.d.ts +0 -1
  219. package/dist/lib/session-manager.test.js +0 -310
  220. package/dist/lib/session-result.d.ts.map +0 -1
  221. package/dist/lib/session-state.d.ts.map +0 -1
  222. package/dist/lib/slack-workspace.d.ts.map +0 -1
  223. package/dist/lib/tmux/bridge.d.ts.map +0 -1
  224. package/dist/lib/tmux/context.d.ts.map +0 -1
  225. package/dist/lib/tmux/context.test.d.ts +0 -1
  226. package/dist/lib/tmux/context.test.js +0 -215
  227. package/dist/lib/tmux/index.d.ts.map +0 -1
  228. package/dist/lib/tmux/map.d.ts.map +0 -1
  229. package/dist/lib/tmux/map.test.d.ts +0 -1
  230. package/dist/lib/tmux/map.test.js +0 -80
  231. package/dist/lib/tmux/panes.d.ts.map +0 -1
  232. package/dist/lib/tmux/redaction.d.ts.map +0 -1
  233. package/dist/lib/tmux/redaction.test.d.ts +0 -1
  234. package/dist/lib/tmux/redaction.test.js +0 -183
  235. package/dist/lib/triage-llm.d.ts.map +0 -1
  236. package/dist/lib/triage-tracker.d.ts.map +0 -1
  237. package/dist/lib/triage.d.ts.map +0 -1
  238. package/dist/lib/types.d.ts.map +0 -1
  239. package/dist/lib/windows/index.d.ts.map +0 -1
  240. package/dist/lib/windows/inventory.d.ts.map +0 -1
  241. package/dist/lib/windows/inventory.test.d.ts +0 -1
  242. package/dist/lib/windows/inventory.test.js +0 -292
  243. package/dist/lib/windows/types.d.ts.map +0 -1
  244. package/dist/lib.d.ts.map +0 -1
  245. package/dist/web/app/@overlay/default.d.ts +0 -1
  246. package/dist/web/app/@overlay/default.js +0 -3
  247. package/dist/web/app/about/page.d.ts +0 -1
  248. package/dist/web/app/about/page.js +0 -6
  249. package/dist/web/app/layout.d.ts +0 -7
  250. package/dist/web/app/layout.js +0 -19
  251. package/dist/web/app/page.d.ts +0 -1
  252. package/dist/web/app/page.js +0 -38
  253. package/dist/web/app/settings/page.d.ts +0 -1
  254. package/dist/web/app/settings/page.js +0 -6
  255. package/dist/web/app/shortcuts/page.d.ts +0 -1
  256. package/dist/web/app/shortcuts/page.js +0 -6
  257. package/dist/web/atoms/sidebar.d.ts +0 -16
  258. package/dist/web/atoms/sidebar.js +0 -58
  259. package/dist/web/atoms/state.d.ts +0 -24
  260. package/dist/web/atoms/state.js +0 -43
  261. package/dist/web/components/command-palette.d.ts +0 -6
  262. package/dist/web/components/command-palette.js +0 -297
  263. package/dist/web/components/main-view.d.ts +0 -1
  264. package/dist/web/components/main-view.js +0 -93
  265. package/dist/web/components/overlay/page-overlay.d.ts +0 -16
  266. package/dist/web/components/overlay/page-overlay.js +0 -84
  267. package/dist/web/components/pane-view.d.ts +0 -5
  268. package/dist/web/components/pane-view.js +0 -168
  269. package/dist/web/components/project-files-view.d.ts +0 -6
  270. package/dist/web/components/project-files-view.js +0 -205
  271. package/dist/web/components/project-planning-view.d.ts +0 -6
  272. package/dist/web/components/project-planning-view.js +0 -146
  273. package/dist/web/components/session-view.d.ts +0 -6
  274. package/dist/web/components/session-view.js +0 -211
  275. package/dist/web/components/sessions-list-view.d.ts +0 -1
  276. package/dist/web/components/sessions-list-view.js +0 -118
  277. package/dist/web/components/sidebar/index.d.ts +0 -9
  278. package/dist/web/components/sidebar/index.js +0 -29
  279. package/dist/web/components/sidebar/kbd.d.ts +0 -17
  280. package/dist/web/components/sidebar/kbd.js +0 -47
  281. package/dist/web/components/sidebar/nav-group.d.ts +0 -22
  282. package/dist/web/components/sidebar/nav-group.js +0 -43
  283. package/dist/web/components/sidebar/nav-item.d.ts +0 -17
  284. package/dist/web/components/sidebar/nav-item.js +0 -38
  285. package/dist/web/components/sidebar/sidebar-header.d.ts +0 -9
  286. package/dist/web/components/sidebar/sidebar-header.js +0 -18
  287. package/dist/web/components/sidebar/sidebar-nav.d.ts +0 -7
  288. package/dist/web/components/sidebar/sidebar-nav.js +0 -505
  289. package/dist/web/components/sidebar/sidebar-search.d.ts +0 -7
  290. package/dist/web/components/sidebar/sidebar-search.js +0 -18
  291. package/dist/web/components/sidebar/sidebar-settings.d.ts +0 -4
  292. package/dist/web/components/sidebar/sidebar-settings.js +0 -28
  293. package/dist/web/components/sidebar/sidebar-transition.d.ts +0 -12
  294. package/dist/web/components/sidebar/sidebar-transition.js +0 -58
  295. package/dist/web/components/status-bar.d.ts +0 -1
  296. package/dist/web/components/status-bar.js +0 -53
  297. package/dist/web/components/terminal.d.ts +0 -4
  298. package/dist/web/components/terminal.js +0 -324
  299. package/dist/web/components/toast.d.ts +0 -7
  300. package/dist/web/components/toast.js +0 -72
  301. package/dist/web/hooks/use-keybindings.d.ts +0 -30
  302. package/dist/web/hooks/use-keybindings.js +0 -322
  303. package/dist/web/hooks/use-state.d.ts +0 -11
  304. package/dist/web/hooks/use-state.js +0 -84
  305. package/dist/web/lib/api.d.ts +0 -179
  306. package/dist/web/lib/api.js +0 -79
  307. package/dist/web/lib/paths.d.ts +0 -2
  308. package/dist/web/lib/paths.js +0 -26
  309. package/dist/web/lib/utils.d.ts +0 -2
  310. package/dist/web/lib/utils.js +0 -5
  311. package/dist/web/lib/ws.d.ts +0 -18
  312. package/dist/web/lib/ws.js +0 -138
  313. package/dist/web/next.config.d.ts +0 -3
  314. package/dist/web/next.config.js +0 -9
  315. package/scripts/generate-manifest.ts +0 -44
  316. package/src/cli/base-command.ts +0 -233
  317. package/src/cli/commands/__tests__/annotations.test.ts +0 -704
  318. package/src/cli/commands/__tests__/bridge.test.ts +0 -101
  319. package/src/cli/commands/__tests__/daemon.test.ts +0 -79
  320. package/src/cli/commands/agent/list.ts +0 -75
  321. package/src/cli/commands/annotation/ack.ts +0 -37
  322. package/src/cli/commands/annotation/create.ts +0 -67
  323. package/src/cli/commands/annotation/events.ts +0 -63
  324. package/src/cli/commands/annotation/export.ts +0 -67
  325. package/src/cli/commands/annotation/import.ts +0 -98
  326. package/src/cli/commands/annotation/ingest.ts +0 -112
  327. package/src/cli/commands/annotation/list.ts +0 -57
  328. package/src/cli/commands/annotation/reply.ts +0 -46
  329. package/src/cli/commands/annotation/resolve.ts +0 -37
  330. package/src/cli/commands/auto/index.ts +0 -755
  331. package/src/cli/commands/backlog/add.ts +0 -74
  332. package/src/cli/commands/backlog/claim.ts +0 -53
  333. package/src/cli/commands/backlog/complete.ts +0 -51
  334. package/src/cli/commands/backlog/list.ts +0 -107
  335. package/src/cli/commands/backlog/pick.ts +0 -50
  336. package/src/cli/commands/backlog/sync.ts +0 -131
  337. package/src/cli/commands/bootstrap.ts +0 -205
  338. package/src/cli/commands/bridge.ts +0 -233
  339. package/src/cli/commands/context/inject.ts +0 -103
  340. package/src/cli/commands/context/list.ts +0 -112
  341. package/src/cli/commands/context/publish.ts +0 -83
  342. package/src/cli/commands/context/read.ts +0 -85
  343. package/src/cli/commands/daemon.ts +0 -1809
  344. package/src/cli/commands/digest/index.ts +0 -245
  345. package/src/cli/commands/docs/lint.ts +0 -93
  346. package/src/cli/commands/docs/sync.ts +0 -90
  347. package/src/cli/commands/doctor.ts +0 -267
  348. package/src/cli/commands/find/index.ts +0 -313
  349. package/src/cli/commands/history/index.ts +0 -269
  350. package/src/cli/commands/hooks/guard.ts +0 -71
  351. package/src/cli/commands/hooks/list.ts +0 -139
  352. package/src/cli/commands/hooks/lock.ts +0 -47
  353. package/src/cli/commands/hooks/status.ts +0 -56
  354. package/src/cli/commands/hooks/test.ts +0 -190
  355. package/src/cli/commands/hooks/unlock.ts +0 -56
  356. package/src/cli/commands/list.e2e.test.ts +0 -58
  357. package/src/cli/commands/list.ts +0 -96
  358. package/src/cli/commands/login.ts +0 -236
  359. package/src/cli/commands/logout.ts +0 -45
  360. package/src/cli/commands/panes/broker.ts +0 -68
  361. package/src/cli/commands/panes/pipe-sink.ts +0 -101
  362. package/src/cli/commands/panes/snapshot.ts +0 -156
  363. package/src/cli/commands/plan.e2e.test.ts +0 -90
  364. package/src/cli/commands/plan.ts +0 -68
  365. package/src/cli/commands/preview/index.ts +0 -282
  366. package/src/cli/commands/preview/list.ts +0 -116
  367. package/src/cli/commands/preview/status.ts +0 -137
  368. package/src/cli/commands/preview/stop.ts +0 -165
  369. package/src/cli/commands/project/add.ts +0 -110
  370. package/src/cli/commands/project/list.ts +0 -136
  371. package/src/cli/commands/project/remove.ts +0 -60
  372. package/src/cli/commands/push.ts +0 -115
  373. package/src/cli/commands/reference/add.ts +0 -266
  374. package/src/cli/commands/reference/delete.ts +0 -67
  375. package/src/cli/commands/reference/extract.ts +0 -389
  376. package/src/cli/commands/reference/list.ts +0 -117
  377. package/src/cli/commands/reference/normalize.ts +0 -90
  378. package/src/cli/commands/reference/open.ts +0 -92
  379. package/src/cli/commands/reference/save.ts +0 -103
  380. package/src/cli/commands/reference/search.ts +0 -85
  381. package/src/cli/commands/reference/show.ts +0 -174
  382. package/src/cli/commands/reference/update-index.ts +0 -103
  383. package/src/cli/commands/reference/update.ts +0 -136
  384. package/src/cli/commands/report/blocked.ts +0 -165
  385. package/src/cli/commands/report/complete.ts +0 -179
  386. package/src/cli/commands/report/progress.ts +0 -142
  387. package/src/cli/commands/report/start.ts +0 -140
  388. package/src/cli/commands/resource/acquire.ts +0 -116
  389. package/src/cli/commands/resource/list.ts +0 -77
  390. package/src/cli/commands/resource/release.ts +0 -64
  391. package/src/cli/commands/resource/wait.ts +0 -93
  392. package/src/cli/commands/review.ts +0 -105
  393. package/src/cli/commands/session/attach.ts +0 -200
  394. package/src/cli/commands/session/await.ts +0 -83
  395. package/src/cli/commands/session/complete.ts +0 -100
  396. package/src/cli/commands/session/create.ts +0 -92
  397. package/src/cli/commands/session/heartbeat.ts +0 -63
  398. package/src/cli/commands/session/list.ts +0 -281
  399. package/src/cli/commands/session/mark-done.ts +0 -132
  400. package/src/cli/commands/session/mine.ts +0 -189
  401. package/src/cli/commands/session/replay.ts +0 -659
  402. package/src/cli/commands/session/run.ts +0 -44
  403. package/src/cli/commands/session/show.ts +0 -177
  404. package/src/cli/commands/session/start.ts +0 -580
  405. package/src/cli/commands/session/state/cleanup.ts +0 -61
  406. package/src/cli/commands/session/state/end.ts +0 -47
  407. package/src/cli/commands/session/state/get.ts +0 -65
  408. package/src/cli/commands/session/state/init.ts +0 -50
  409. package/src/cli/commands/session/state/list.ts +0 -68
  410. package/src/cli/commands/session/state/update.ts +0 -108
  411. package/src/cli/commands/session/stop.ts +0 -134
  412. package/src/cli/commands/session/view.ts +0 -186
  413. package/src/cli/commands/start.ts +0 -256
  414. package/src/cli/commands/state/dump.ts +0 -449
  415. package/src/cli/commands/status.ts +0 -244
  416. package/src/cli/commands/sync.ts +0 -174
  417. package/src/cli/commands/trace/export.ts +0 -255
  418. package/src/cli/commands/triage/claim.ts +0 -203
  419. package/src/cli/commands/triage/list.ts +0 -137
  420. package/src/cli/commands/triage/next.ts +0 -73
  421. package/src/cli/commands/triage/pull.ts +0 -97
  422. package/src/cli/commands/triage/stats.ts +0 -82
  423. package/src/cli/commands/tunnel/list.ts +0 -113
  424. package/src/cli/commands/tunnel/start.ts +0 -122
  425. package/src/cli/commands/tunnel/stop.ts +0 -108
  426. package/src/cli/commands/tunnel/url.ts +0 -82
  427. package/src/cli/commands/web/start.ts +0 -125
  428. package/src/cli/commands/windows/context.ts +0 -439
  429. package/src/cli/commands/windows/focus.ts +0 -130
  430. package/src/cli/commands/windows/list.ts +0 -213
  431. package/src/cli/commands/windows/map.ts +0 -223
  432. package/src/cli/commands/windows/read.ts +0 -279
  433. package/src/cli/commands/windows/search.ts +0 -219
  434. package/src/cli/commands/windows/show.ts +0 -188
  435. package/src/cli/commands/windows/watch.ts +0 -262
  436. package/src/lib/__tests__/annotations-convex.test.ts +0 -104
  437. package/src/lib/active-sessions.ts +0 -1486
  438. package/src/lib/agent-adapters.ts +0 -412
  439. package/src/lib/agent-sessions.ts +0 -671
  440. package/src/lib/agent-trace.test.ts +0 -296
  441. package/src/lib/agent-trace.ts +0 -513
  442. package/src/lib/analytics.ts +0 -178
  443. package/src/lib/annotations-convex.ts +0 -296
  444. package/src/lib/annotations.test.ts +0 -274
  445. package/src/lib/annotations.ts +0 -836
  446. package/src/lib/auto/discover.ts +0 -545
  447. package/src/lib/auto/ideate.ts +0 -412
  448. package/src/lib/auto/spawn.ts +0 -549
  449. package/src/lib/auto/workspace.ts +0 -282
  450. package/src/lib/backlog.test.ts +0 -194
  451. package/src/lib/backlog.ts +0 -428
  452. package/src/lib/config-loader.ts +0 -391
  453. package/src/lib/config-sync/adapters/claude.ts +0 -91
  454. package/src/lib/config-sync/adapters/codex.ts +0 -135
  455. package/src/lib/config-sync/adapters/copilot.ts +0 -98
  456. package/src/lib/config-sync/adapters/gemini.ts +0 -86
  457. package/src/lib/config-sync/adapters/index.ts +0 -39
  458. package/src/lib/config-sync/adapters/opencode.ts +0 -94
  459. package/src/lib/config-sync/index.ts +0 -399
  460. package/src/lib/config-sync/types.ts +0 -92
  461. package/src/lib/config-sync/writer.ts +0 -188
  462. package/src/lib/content-sync/index.ts +0 -882
  463. package/src/lib/content-sync/types.ts +0 -104
  464. package/src/lib/contracts.test.ts +0 -186
  465. package/src/lib/contracts.ts +0 -195
  466. package/src/lib/convex.ts +0 -54
  467. package/src/lib/device.ts +0 -41
  468. package/src/lib/digest/index.ts +0 -529
  469. package/src/lib/docs/lint.test.ts +0 -135
  470. package/src/lib/docs/lint.ts +0 -310
  471. package/src/lib/docs/sync.ts +0 -184
  472. package/src/lib/doctor/index.ts +0 -647
  473. package/src/lib/doctor/repos.ts +0 -381
  474. package/src/lib/doctor/templates.ts +0 -191
  475. package/src/lib/errors.ts +0 -111
  476. package/src/lib/events.ts +0 -479
  477. package/src/lib/heartbeat.test.ts +0 -164
  478. package/src/lib/heartbeat.ts +0 -326
  479. package/src/lib/hooks/adapters/claude.ts +0 -115
  480. package/src/lib/hooks/adapters/codex.ts +0 -92
  481. package/src/lib/hooks/adapters/copilot.ts +0 -141
  482. package/src/lib/hooks/context.ts +0 -174
  483. package/src/lib/hooks/index.ts +0 -39
  484. package/src/lib/hooks/registry.ts +0 -101
  485. package/src/lib/hooks/runner.ts +0 -208
  486. package/src/lib/hooks/types.ts +0 -89
  487. package/src/lib/index.test.ts +0 -426
  488. package/src/lib/managed-session.ts +0 -117
  489. package/src/lib/math.test.ts +0 -299
  490. package/src/lib/math.ts +0 -120
  491. package/src/lib/ngrok.ts +0 -441
  492. package/src/lib/nvim/discovery.test.ts +0 -157
  493. package/src/lib/nvim/discovery.ts +0 -181
  494. package/src/lib/nvim/index.ts +0 -28
  495. package/src/lib/nvim/remote.test.ts +0 -21
  496. package/src/lib/nvim/remote.ts +0 -184
  497. package/src/lib/panes/README.md +0 -20
  498. package/src/lib/panes/broker.ts +0 -261
  499. package/src/lib/panes/index.ts +0 -1
  500. package/src/lib/panes/server.ts +0 -379
  501. package/src/lib/preview/detect.ts +0 -184
  502. package/src/lib/preview/index.ts +0 -1
  503. package/src/lib/process/index.ts +0 -16
  504. package/src/lib/process/snapshot.test.ts +0 -188
  505. package/src/lib/process/snapshot.ts +0 -257
  506. package/src/lib/provider-auth.ts +0 -258
  507. package/src/lib/references.ts +0 -481
  508. package/src/lib/report.ts +0 -973
  509. package/src/lib/resources.test.ts +0 -132
  510. package/src/lib/resources.ts +0 -429
  511. package/src/lib/runner.test.ts +0 -288
  512. package/src/lib/runner.ts +0 -1223
  513. package/src/lib/session-artifacts.test.ts +0 -107
  514. package/src/lib/session-artifacts.ts +0 -193
  515. package/src/lib/session-manager.test.ts +0 -402
  516. package/src/lib/session-manager.ts +0 -150
  517. package/src/lib/session-result.test.ts +0 -98
  518. package/src/lib/session-result.ts +0 -262
  519. package/src/lib/session-state.ts +0 -470
  520. package/src/lib/slack-workspace.ts +0 -25
  521. package/src/lib/tmux/bridge.ts +0 -439
  522. package/src/lib/tmux/context.test.ts +0 -242
  523. package/src/lib/tmux/context.ts +0 -380
  524. package/src/lib/tmux/index.ts +0 -46
  525. package/src/lib/tmux/map.test.ts +0 -99
  526. package/src/lib/tmux/map.ts +0 -252
  527. package/src/lib/tmux/panes.ts +0 -170
  528. package/src/lib/tmux/redaction.test.ts +0 -231
  529. package/src/lib/tmux/redaction.ts +0 -201
  530. package/src/lib/triage-llm.ts +0 -312
  531. package/src/lib/triage-tracker.ts +0 -400
  532. package/src/lib/triage.ts +0 -655
  533. package/src/lib/types.ts +0 -61
  534. package/src/lib/windows/index.ts +0 -2
  535. package/src/lib/windows/inventory.test.ts +0 -370
  536. package/src/lib/windows/inventory.ts +0 -352
  537. package/src/lib/windows/types.ts +0 -46
  538. 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
- }
@@ -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
- });
@@ -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
- }
@@ -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
-
@@ -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
- }
@@ -1 +0,0 @@
1
- export * from "./broker.js";