@creativeintelligence/abbie 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/dist/cli/commands/start.js +2 -1
  2. package/oclif.manifest.json +1 -1
  3. package/package.json +9 -5
  4. package/dist/cli/base-command.d.ts.map +0 -1
  5. package/dist/cli/commands/agent/list.d.ts.map +0 -1
  6. package/dist/cli/commands/annotation/ack.d.ts.map +0 -1
  7. package/dist/cli/commands/annotation/create.d.ts.map +0 -1
  8. package/dist/cli/commands/annotation/events.d.ts.map +0 -1
  9. package/dist/cli/commands/annotation/export.d.ts.map +0 -1
  10. package/dist/cli/commands/annotation/import.d.ts.map +0 -1
  11. package/dist/cli/commands/annotation/ingest.d.ts.map +0 -1
  12. package/dist/cli/commands/annotation/list.d.ts.map +0 -1
  13. package/dist/cli/commands/annotation/reply.d.ts.map +0 -1
  14. package/dist/cli/commands/annotation/resolve.d.ts.map +0 -1
  15. package/dist/cli/commands/auto/index.d.ts.map +0 -1
  16. package/dist/cli/commands/backlog/add.d.ts.map +0 -1
  17. package/dist/cli/commands/backlog/claim.d.ts.map +0 -1
  18. package/dist/cli/commands/backlog/complete.d.ts.map +0 -1
  19. package/dist/cli/commands/backlog/list.d.ts.map +0 -1
  20. package/dist/cli/commands/backlog/pick.d.ts.map +0 -1
  21. package/dist/cli/commands/backlog/sync.d.ts.map +0 -1
  22. package/dist/cli/commands/bootstrap.d.ts.map +0 -1
  23. package/dist/cli/commands/bridge.d.ts.map +0 -1
  24. package/dist/cli/commands/context/inject.d.ts.map +0 -1
  25. package/dist/cli/commands/context/list.d.ts.map +0 -1
  26. package/dist/cli/commands/context/publish.d.ts.map +0 -1
  27. package/dist/cli/commands/context/read.d.ts.map +0 -1
  28. package/dist/cli/commands/daemon.d.ts.map +0 -1
  29. package/dist/cli/commands/digest/index.d.ts.map +0 -1
  30. package/dist/cli/commands/docs/lint.d.ts.map +0 -1
  31. package/dist/cli/commands/docs/sync.d.ts.map +0 -1
  32. package/dist/cli/commands/doctor.d.ts.map +0 -1
  33. package/dist/cli/commands/find/index.d.ts.map +0 -1
  34. package/dist/cli/commands/gc.d.ts.map +0 -1
  35. package/dist/cli/commands/history/index.d.ts.map +0 -1
  36. package/dist/cli/commands/hooks/guard.d.ts.map +0 -1
  37. package/dist/cli/commands/hooks/list.d.ts.map +0 -1
  38. package/dist/cli/commands/hooks/lock.d.ts.map +0 -1
  39. package/dist/cli/commands/hooks/status.d.ts.map +0 -1
  40. package/dist/cli/commands/hooks/test.d.ts.map +0 -1
  41. package/dist/cli/commands/hooks/unlock.d.ts.map +0 -1
  42. package/dist/cli/commands/index.d.ts.map +0 -1
  43. package/dist/cli/commands/list.d.ts.map +0 -1
  44. package/dist/cli/commands/list.e2e.test.d.ts +0 -1
  45. package/dist/cli/commands/list.e2e.test.js +0 -47
  46. package/dist/cli/commands/login.d.ts.map +0 -1
  47. package/dist/cli/commands/logout.d.ts.map +0 -1
  48. package/dist/cli/commands/panes/broker.d.ts.map +0 -1
  49. package/dist/cli/commands/panes/pipe-sink.d.ts.map +0 -1
  50. package/dist/cli/commands/panes/snapshot.d.ts.map +0 -1
  51. package/dist/cli/commands/plan.d.ts.map +0 -1
  52. package/dist/cli/commands/plan.e2e.test.d.ts +0 -1
  53. package/dist/cli/commands/plan.e2e.test.js +0 -74
  54. package/dist/cli/commands/preview/index.d.ts.map +0 -1
  55. package/dist/cli/commands/preview/init.d.ts.map +0 -1
  56. package/dist/cli/commands/preview/list.d.ts.map +0 -1
  57. package/dist/cli/commands/preview/status.d.ts.map +0 -1
  58. package/dist/cli/commands/preview/stop.d.ts.map +0 -1
  59. package/dist/cli/commands/preview/sync.d.ts.map +0 -1
  60. package/dist/cli/commands/preview/watch.d.ts.map +0 -1
  61. package/dist/cli/commands/project/add.d.ts.map +0 -1
  62. package/dist/cli/commands/project/list.d.ts.map +0 -1
  63. package/dist/cli/commands/project/remove.d.ts.map +0 -1
  64. package/dist/cli/commands/push.d.ts.map +0 -1
  65. package/dist/cli/commands/reference/add.d.ts.map +0 -1
  66. package/dist/cli/commands/reference/delete.d.ts.map +0 -1
  67. package/dist/cli/commands/reference/extract.d.ts.map +0 -1
  68. package/dist/cli/commands/reference/list.d.ts.map +0 -1
  69. package/dist/cli/commands/reference/normalize.d.ts.map +0 -1
  70. package/dist/cli/commands/reference/open.d.ts.map +0 -1
  71. package/dist/cli/commands/reference/save.d.ts.map +0 -1
  72. package/dist/cli/commands/reference/search.d.ts.map +0 -1
  73. package/dist/cli/commands/reference/show.d.ts.map +0 -1
  74. package/dist/cli/commands/reference/update-index.d.ts.map +0 -1
  75. package/dist/cli/commands/reference/update.d.ts.map +0 -1
  76. package/dist/cli/commands/report/blocked.d.ts.map +0 -1
  77. package/dist/cli/commands/report/complete.d.ts.map +0 -1
  78. package/dist/cli/commands/report/progress.d.ts.map +0 -1
  79. package/dist/cli/commands/report/start.d.ts.map +0 -1
  80. package/dist/cli/commands/resource/acquire.d.ts.map +0 -1
  81. package/dist/cli/commands/resource/list.d.ts.map +0 -1
  82. package/dist/cli/commands/resource/release.d.ts.map +0 -1
  83. package/dist/cli/commands/resource/wait.d.ts.map +0 -1
  84. package/dist/cli/commands/review.d.ts.map +0 -1
  85. package/dist/cli/commands/session/attach.d.ts.map +0 -1
  86. package/dist/cli/commands/session/await.d.ts.map +0 -1
  87. package/dist/cli/commands/session/complete.d.ts.map +0 -1
  88. package/dist/cli/commands/session/create.d.ts.map +0 -1
  89. package/dist/cli/commands/session/heartbeat.d.ts.map +0 -1
  90. package/dist/cli/commands/session/list.d.ts.map +0 -1
  91. package/dist/cli/commands/session/mark-done.d.ts.map +0 -1
  92. package/dist/cli/commands/session/mine.d.ts.map +0 -1
  93. package/dist/cli/commands/session/replay.d.ts.map +0 -1
  94. package/dist/cli/commands/session/run.d.ts.map +0 -1
  95. package/dist/cli/commands/session/show.d.ts.map +0 -1
  96. package/dist/cli/commands/session/start.d.ts.map +0 -1
  97. package/dist/cli/commands/session/state/cleanup.d.ts.map +0 -1
  98. package/dist/cli/commands/session/state/end.d.ts.map +0 -1
  99. package/dist/cli/commands/session/state/get.d.ts.map +0 -1
  100. package/dist/cli/commands/session/state/init.d.ts.map +0 -1
  101. package/dist/cli/commands/session/state/list.d.ts.map +0 -1
  102. package/dist/cli/commands/session/state/update.d.ts.map +0 -1
  103. package/dist/cli/commands/session/stop.d.ts.map +0 -1
  104. package/dist/cli/commands/session/view.d.ts.map +0 -1
  105. package/dist/cli/commands/start.d.ts.map +0 -1
  106. package/dist/cli/commands/state/dump.d.ts.map +0 -1
  107. package/dist/cli/commands/status.d.ts.map +0 -1
  108. package/dist/cli/commands/sync.d.ts.map +0 -1
  109. package/dist/cli/commands/trace/export.d.ts.map +0 -1
  110. package/dist/cli/commands/triage/claim.d.ts.map +0 -1
  111. package/dist/cli/commands/triage/list.d.ts.map +0 -1
  112. package/dist/cli/commands/triage/next.d.ts.map +0 -1
  113. package/dist/cli/commands/triage/pull.d.ts.map +0 -1
  114. package/dist/cli/commands/triage/stats.d.ts.map +0 -1
  115. package/dist/cli/commands/tunnel/list.d.ts.map +0 -1
  116. package/dist/cli/commands/tunnel/start.d.ts.map +0 -1
  117. package/dist/cli/commands/tunnel/stop.d.ts.map +0 -1
  118. package/dist/cli/commands/tunnel/url.d.ts.map +0 -1
  119. package/dist/cli/commands/web/start.d.ts.map +0 -1
  120. package/dist/cli/commands/windows/context.d.ts.map +0 -1
  121. package/dist/cli/commands/windows/focus.d.ts.map +0 -1
  122. package/dist/cli/commands/windows/list.d.ts.map +0 -1
  123. package/dist/cli/commands/windows/map.d.ts.map +0 -1
  124. package/dist/cli/commands/windows/read.d.ts.map +0 -1
  125. package/dist/cli/commands/windows/search.d.ts.map +0 -1
  126. package/dist/cli/commands/windows/show.d.ts.map +0 -1
  127. package/dist/cli/commands/windows/watch.d.ts.map +0 -1
  128. package/dist/lib/active-sessions.d.ts.map +0 -1
  129. package/dist/lib/agent-adapters.d.ts.map +0 -1
  130. package/dist/lib/agent-sessions.d.ts.map +0 -1
  131. package/dist/lib/agent-trace.d.ts.map +0 -1
  132. package/dist/lib/analytics.d.ts.map +0 -1
  133. package/dist/lib/annotations-convex.d.ts.map +0 -1
  134. package/dist/lib/annotations.d.ts.map +0 -1
  135. package/dist/lib/auto/discover.d.ts.map +0 -1
  136. package/dist/lib/auto/ideate.d.ts.map +0 -1
  137. package/dist/lib/auto/spawn.d.ts.map +0 -1
  138. package/dist/lib/auto/workspace.d.ts.map +0 -1
  139. package/dist/lib/backlog.d.ts.map +0 -1
  140. package/dist/lib/backlog.test.d.ts +0 -1
  141. package/dist/lib/backlog.test.js +0 -162
  142. package/dist/lib/config-loader.d.ts.map +0 -1
  143. package/dist/lib/config-sync/adapters/claude.d.ts.map +0 -1
  144. package/dist/lib/config-sync/adapters/codex.d.ts.map +0 -1
  145. package/dist/lib/config-sync/adapters/copilot.d.ts.map +0 -1
  146. package/dist/lib/config-sync/adapters/gemini.d.ts.map +0 -1
  147. package/dist/lib/config-sync/adapters/index.d.ts.map +0 -1
  148. package/dist/lib/config-sync/adapters/opencode.d.ts.map +0 -1
  149. package/dist/lib/config-sync/index.d.ts.map +0 -1
  150. package/dist/lib/config-sync/types.d.ts.map +0 -1
  151. package/dist/lib/config-sync/writer.d.ts.map +0 -1
  152. package/dist/lib/content-sync/index.d.ts.map +0 -1
  153. package/dist/lib/content-sync/types.d.ts.map +0 -1
  154. package/dist/lib/contracts.d.ts.map +0 -1
  155. package/dist/lib/convex.d.ts.map +0 -1
  156. package/dist/lib/device.d.ts.map +0 -1
  157. package/dist/lib/digest/index.d.ts.map +0 -1
  158. package/dist/lib/docs/lint.d.ts.map +0 -1
  159. package/dist/lib/docs/lint.test.d.ts +0 -1
  160. package/dist/lib/docs/lint.test.js +0 -120
  161. package/dist/lib/docs/sync.d.ts.map +0 -1
  162. package/dist/lib/doctor/index.d.ts.map +0 -1
  163. package/dist/lib/doctor/repos.d.ts.map +0 -1
  164. package/dist/lib/doctor/templates.d.ts.map +0 -1
  165. package/dist/lib/errors.d.ts.map +0 -1
  166. package/dist/lib/events.d.ts.map +0 -1
  167. package/dist/lib/heartbeat.d.ts.map +0 -1
  168. package/dist/lib/heartbeat.test.d.ts +0 -1
  169. package/dist/lib/heartbeat.test.js +0 -124
  170. package/dist/lib/hooks/adapters/claude.d.ts.map +0 -1
  171. package/dist/lib/hooks/adapters/codex.d.ts.map +0 -1
  172. package/dist/lib/hooks/adapters/copilot.d.ts.map +0 -1
  173. package/dist/lib/hooks/context.d.ts.map +0 -1
  174. package/dist/lib/hooks/index.d.ts.map +0 -1
  175. package/dist/lib/hooks/registry.d.ts.map +0 -1
  176. package/dist/lib/hooks/runner.d.ts.map +0 -1
  177. package/dist/lib/hooks/types.d.ts.map +0 -1
  178. package/dist/lib/index.test.d.ts +0 -1
  179. package/dist/lib/index.test.js +0 -334
  180. package/dist/lib/managed-session.d.ts.map +0 -1
  181. package/dist/lib/math.d.ts.map +0 -1
  182. package/dist/lib/math.test.d.ts +0 -1
  183. package/dist/lib/math.test.js +0 -238
  184. package/dist/lib/ngrok.d.ts.map +0 -1
  185. package/dist/lib/nvim/discovery.d.ts.map +0 -1
  186. package/dist/lib/nvim/discovery.test.d.ts +0 -1
  187. package/dist/lib/nvim/discovery.test.js +0 -131
  188. package/dist/lib/nvim/index.d.ts.map +0 -1
  189. package/dist/lib/nvim/remote.d.ts.map +0 -1
  190. package/dist/lib/nvim/remote.test.d.ts +0 -1
  191. package/dist/lib/nvim/remote.test.js +0 -18
  192. package/dist/lib/panes/broker.d.ts.map +0 -1
  193. package/dist/lib/panes/index.d.ts.map +0 -1
  194. package/dist/lib/panes/server.d.ts.map +0 -1
  195. package/dist/lib/preview/detect.d.ts.map +0 -1
  196. package/dist/lib/preview/index.d.ts.map +0 -1
  197. package/dist/lib/preview/manager.d.ts.map +0 -1
  198. package/dist/lib/preview/schema.d.ts.map +0 -1
  199. package/dist/lib/preview/sprite.d.ts.map +0 -1
  200. package/dist/lib/preview/watcher.d.ts.map +0 -1
  201. package/dist/lib/process/index.d.ts.map +0 -1
  202. package/dist/lib/process/snapshot.d.ts.map +0 -1
  203. package/dist/lib/process/snapshot.test.d.ts +0 -1
  204. package/dist/lib/process/snapshot.test.js +0 -127
  205. package/dist/lib/project-identity.d.ts.map +0 -1
  206. package/dist/lib/provider-auth.d.ts.map +0 -1
  207. package/dist/lib/references.d.ts.map +0 -1
  208. package/dist/lib/report.d.ts.map +0 -1
  209. package/dist/lib/resources.d.ts.map +0 -1
  210. package/dist/lib/resources.test.d.ts +0 -1
  211. package/dist/lib/resources.test.js +0 -94
  212. package/dist/lib/runner.d.ts.map +0 -1
  213. package/dist/lib/runner.test.d.ts +0 -1
  214. package/dist/lib/runner.test.js +0 -234
  215. package/dist/lib/session-artifacts.d.ts.map +0 -1
  216. package/dist/lib/session-manager.d.ts.map +0 -1
  217. package/dist/lib/session-manager.test.d.ts +0 -1
  218. package/dist/lib/session-manager.test.js +0 -310
  219. package/dist/lib/session-result.d.ts.map +0 -1
  220. package/dist/lib/session-state.d.ts.map +0 -1
  221. package/dist/lib/slack-workspace.d.ts.map +0 -1
  222. package/dist/lib/tmux/bridge.d.ts.map +0 -1
  223. package/dist/lib/tmux/context.d.ts.map +0 -1
  224. package/dist/lib/tmux/context.test.d.ts +0 -1
  225. package/dist/lib/tmux/context.test.js +0 -215
  226. package/dist/lib/tmux/index.d.ts.map +0 -1
  227. package/dist/lib/tmux/map.d.ts.map +0 -1
  228. package/dist/lib/tmux/map.test.d.ts +0 -1
  229. package/dist/lib/tmux/map.test.js +0 -80
  230. package/dist/lib/tmux/panes.d.ts.map +0 -1
  231. package/dist/lib/tmux/redaction.d.ts.map +0 -1
  232. package/dist/lib/tmux/redaction.test.d.ts +0 -1
  233. package/dist/lib/tmux/redaction.test.js +0 -183
  234. package/dist/lib/triage-llm.d.ts.map +0 -1
  235. package/dist/lib/triage-tracker.d.ts.map +0 -1
  236. package/dist/lib/triage.d.ts.map +0 -1
  237. package/dist/lib/types.d.ts.map +0 -1
  238. package/dist/lib/windows/index.d.ts.map +0 -1
  239. package/dist/lib/windows/inventory.d.ts.map +0 -1
  240. package/dist/lib/windows/inventory.test.d.ts +0 -1
  241. package/dist/lib/windows/inventory.test.js +0 -292
  242. package/dist/lib/windows/types.d.ts.map +0 -1
  243. package/dist/lib.d.ts.map +0 -1
  244. package/dist/web/app/@overlay/default.d.ts +0 -1
  245. package/dist/web/app/@overlay/default.js +0 -3
  246. package/dist/web/app/about/page.d.ts +0 -1
  247. package/dist/web/app/about/page.js +0 -6
  248. package/dist/web/app/layout.d.ts +0 -7
  249. package/dist/web/app/layout.js +0 -19
  250. package/dist/web/app/page.d.ts +0 -1
  251. package/dist/web/app/page.js +0 -38
  252. package/dist/web/app/settings/page.d.ts +0 -1
  253. package/dist/web/app/settings/page.js +0 -6
  254. package/dist/web/app/shortcuts/page.d.ts +0 -1
  255. package/dist/web/app/shortcuts/page.js +0 -6
  256. package/dist/web/atoms/sidebar.d.ts +0 -16
  257. package/dist/web/atoms/sidebar.js +0 -58
  258. package/dist/web/atoms/state.d.ts +0 -24
  259. package/dist/web/atoms/state.js +0 -43
  260. package/dist/web/components/command-palette.d.ts +0 -6
  261. package/dist/web/components/command-palette.js +0 -297
  262. package/dist/web/components/main-view.d.ts +0 -1
  263. package/dist/web/components/main-view.js +0 -93
  264. package/dist/web/components/overlay/page-overlay.d.ts +0 -16
  265. package/dist/web/components/overlay/page-overlay.js +0 -84
  266. package/dist/web/components/pane-view.d.ts +0 -5
  267. package/dist/web/components/pane-view.js +0 -168
  268. package/dist/web/components/project-files-view.d.ts +0 -6
  269. package/dist/web/components/project-files-view.js +0 -205
  270. package/dist/web/components/project-planning-view.d.ts +0 -6
  271. package/dist/web/components/project-planning-view.js +0 -146
  272. package/dist/web/components/session-view.d.ts +0 -6
  273. package/dist/web/components/session-view.js +0 -211
  274. package/dist/web/components/sessions-list-view.d.ts +0 -1
  275. package/dist/web/components/sessions-list-view.js +0 -118
  276. package/dist/web/components/sidebar/index.d.ts +0 -9
  277. package/dist/web/components/sidebar/index.js +0 -29
  278. package/dist/web/components/sidebar/kbd.d.ts +0 -17
  279. package/dist/web/components/sidebar/kbd.js +0 -47
  280. package/dist/web/components/sidebar/nav-group.d.ts +0 -22
  281. package/dist/web/components/sidebar/nav-group.js +0 -43
  282. package/dist/web/components/sidebar/nav-item.d.ts +0 -17
  283. package/dist/web/components/sidebar/nav-item.js +0 -38
  284. package/dist/web/components/sidebar/sidebar-header.d.ts +0 -9
  285. package/dist/web/components/sidebar/sidebar-header.js +0 -18
  286. package/dist/web/components/sidebar/sidebar-nav.d.ts +0 -7
  287. package/dist/web/components/sidebar/sidebar-nav.js +0 -505
  288. package/dist/web/components/sidebar/sidebar-search.d.ts +0 -7
  289. package/dist/web/components/sidebar/sidebar-search.js +0 -18
  290. package/dist/web/components/sidebar/sidebar-settings.d.ts +0 -4
  291. package/dist/web/components/sidebar/sidebar-settings.js +0 -28
  292. package/dist/web/components/sidebar/sidebar-transition.d.ts +0 -12
  293. package/dist/web/components/sidebar/sidebar-transition.js +0 -58
  294. package/dist/web/components/status-bar.d.ts +0 -1
  295. package/dist/web/components/status-bar.js +0 -53
  296. package/dist/web/components/terminal.d.ts +0 -4
  297. package/dist/web/components/terminal.js +0 -324
  298. package/dist/web/components/toast.d.ts +0 -7
  299. package/dist/web/components/toast.js +0 -72
  300. package/dist/web/hooks/use-keybindings.d.ts +0 -30
  301. package/dist/web/hooks/use-keybindings.js +0 -322
  302. package/dist/web/hooks/use-state.d.ts +0 -11
  303. package/dist/web/hooks/use-state.js +0 -84
  304. package/dist/web/lib/api.d.ts +0 -179
  305. package/dist/web/lib/api.js +0 -79
  306. package/dist/web/lib/paths.d.ts +0 -2
  307. package/dist/web/lib/paths.js +0 -26
  308. package/dist/web/lib/utils.d.ts +0 -2
  309. package/dist/web/lib/utils.js +0 -5
  310. package/dist/web/lib/ws.d.ts +0 -18
  311. package/dist/web/lib/ws.js +0 -138
  312. package/dist/web/next.config.d.ts +0 -3
  313. package/dist/web/next.config.js +0 -9
  314. package/scripts/generate-manifest.ts +0 -44
  315. package/src/cli/base-command.ts +0 -233
  316. package/src/cli/commands/__tests__/annotations.test.ts +0 -704
  317. package/src/cli/commands/__tests__/bridge.test.ts +0 -101
  318. package/src/cli/commands/__tests__/daemon.test.ts +0 -79
  319. package/src/cli/commands/agent/list.ts +0 -75
  320. package/src/cli/commands/annotation/ack.ts +0 -37
  321. package/src/cli/commands/annotation/create.ts +0 -67
  322. package/src/cli/commands/annotation/events.ts +0 -63
  323. package/src/cli/commands/annotation/export.ts +0 -67
  324. package/src/cli/commands/annotation/import.ts +0 -98
  325. package/src/cli/commands/annotation/ingest.ts +0 -112
  326. package/src/cli/commands/annotation/list.ts +0 -57
  327. package/src/cli/commands/annotation/reply.ts +0 -46
  328. package/src/cli/commands/annotation/resolve.ts +0 -37
  329. package/src/cli/commands/auto/index.ts +0 -755
  330. package/src/cli/commands/backlog/add.ts +0 -74
  331. package/src/cli/commands/backlog/claim.ts +0 -53
  332. package/src/cli/commands/backlog/complete.ts +0 -51
  333. package/src/cli/commands/backlog/list.ts +0 -107
  334. package/src/cli/commands/backlog/pick.ts +0 -50
  335. package/src/cli/commands/backlog/sync.ts +0 -131
  336. package/src/cli/commands/bootstrap.ts +0 -205
  337. package/src/cli/commands/bridge.ts +0 -233
  338. package/src/cli/commands/context/inject.ts +0 -103
  339. package/src/cli/commands/context/list.ts +0 -112
  340. package/src/cli/commands/context/publish.ts +0 -83
  341. package/src/cli/commands/context/read.ts +0 -85
  342. package/src/cli/commands/daemon.ts +0 -1809
  343. package/src/cli/commands/digest/index.ts +0 -245
  344. package/src/cli/commands/docs/lint.ts +0 -93
  345. package/src/cli/commands/docs/sync.ts +0 -90
  346. package/src/cli/commands/doctor.ts +0 -267
  347. package/src/cli/commands/find/index.ts +0 -313
  348. package/src/cli/commands/history/index.ts +0 -269
  349. package/src/cli/commands/hooks/guard.ts +0 -71
  350. package/src/cli/commands/hooks/list.ts +0 -139
  351. package/src/cli/commands/hooks/lock.ts +0 -47
  352. package/src/cli/commands/hooks/status.ts +0 -56
  353. package/src/cli/commands/hooks/test.ts +0 -190
  354. package/src/cli/commands/hooks/unlock.ts +0 -56
  355. package/src/cli/commands/list.e2e.test.ts +0 -58
  356. package/src/cli/commands/list.ts +0 -96
  357. package/src/cli/commands/login.ts +0 -236
  358. package/src/cli/commands/logout.ts +0 -45
  359. package/src/cli/commands/panes/broker.ts +0 -68
  360. package/src/cli/commands/panes/pipe-sink.ts +0 -101
  361. package/src/cli/commands/panes/snapshot.ts +0 -156
  362. package/src/cli/commands/plan.e2e.test.ts +0 -90
  363. package/src/cli/commands/plan.ts +0 -68
  364. package/src/cli/commands/preview/index.ts +0 -282
  365. package/src/cli/commands/preview/list.ts +0 -116
  366. package/src/cli/commands/preview/status.ts +0 -137
  367. package/src/cli/commands/preview/stop.ts +0 -165
  368. package/src/cli/commands/project/add.ts +0 -110
  369. package/src/cli/commands/project/list.ts +0 -136
  370. package/src/cli/commands/project/remove.ts +0 -60
  371. package/src/cli/commands/push.ts +0 -115
  372. package/src/cli/commands/reference/add.ts +0 -266
  373. package/src/cli/commands/reference/delete.ts +0 -67
  374. package/src/cli/commands/reference/extract.ts +0 -389
  375. package/src/cli/commands/reference/list.ts +0 -117
  376. package/src/cli/commands/reference/normalize.ts +0 -90
  377. package/src/cli/commands/reference/open.ts +0 -92
  378. package/src/cli/commands/reference/save.ts +0 -103
  379. package/src/cli/commands/reference/search.ts +0 -85
  380. package/src/cli/commands/reference/show.ts +0 -174
  381. package/src/cli/commands/reference/update-index.ts +0 -103
  382. package/src/cli/commands/reference/update.ts +0 -136
  383. package/src/cli/commands/report/blocked.ts +0 -165
  384. package/src/cli/commands/report/complete.ts +0 -179
  385. package/src/cli/commands/report/progress.ts +0 -142
  386. package/src/cli/commands/report/start.ts +0 -140
  387. package/src/cli/commands/resource/acquire.ts +0 -116
  388. package/src/cli/commands/resource/list.ts +0 -77
  389. package/src/cli/commands/resource/release.ts +0 -64
  390. package/src/cli/commands/resource/wait.ts +0 -93
  391. package/src/cli/commands/review.ts +0 -105
  392. package/src/cli/commands/session/attach.ts +0 -200
  393. package/src/cli/commands/session/await.ts +0 -83
  394. package/src/cli/commands/session/complete.ts +0 -100
  395. package/src/cli/commands/session/create.ts +0 -92
  396. package/src/cli/commands/session/heartbeat.ts +0 -63
  397. package/src/cli/commands/session/list.ts +0 -281
  398. package/src/cli/commands/session/mark-done.ts +0 -132
  399. package/src/cli/commands/session/mine.ts +0 -189
  400. package/src/cli/commands/session/replay.ts +0 -659
  401. package/src/cli/commands/session/run.ts +0 -44
  402. package/src/cli/commands/session/show.ts +0 -177
  403. package/src/cli/commands/session/start.ts +0 -580
  404. package/src/cli/commands/session/state/cleanup.ts +0 -61
  405. package/src/cli/commands/session/state/end.ts +0 -47
  406. package/src/cli/commands/session/state/get.ts +0 -65
  407. package/src/cli/commands/session/state/init.ts +0 -50
  408. package/src/cli/commands/session/state/list.ts +0 -68
  409. package/src/cli/commands/session/state/update.ts +0 -108
  410. package/src/cli/commands/session/stop.ts +0 -134
  411. package/src/cli/commands/session/view.ts +0 -186
  412. package/src/cli/commands/start.ts +0 -256
  413. package/src/cli/commands/state/dump.ts +0 -449
  414. package/src/cli/commands/status.ts +0 -244
  415. package/src/cli/commands/sync.ts +0 -174
  416. package/src/cli/commands/trace/export.ts +0 -255
  417. package/src/cli/commands/triage/claim.ts +0 -203
  418. package/src/cli/commands/triage/list.ts +0 -137
  419. package/src/cli/commands/triage/next.ts +0 -73
  420. package/src/cli/commands/triage/pull.ts +0 -97
  421. package/src/cli/commands/triage/stats.ts +0 -82
  422. package/src/cli/commands/tunnel/list.ts +0 -113
  423. package/src/cli/commands/tunnel/start.ts +0 -122
  424. package/src/cli/commands/tunnel/stop.ts +0 -108
  425. package/src/cli/commands/tunnel/url.ts +0 -82
  426. package/src/cli/commands/web/start.ts +0 -125
  427. package/src/cli/commands/windows/context.ts +0 -439
  428. package/src/cli/commands/windows/focus.ts +0 -130
  429. package/src/cli/commands/windows/list.ts +0 -213
  430. package/src/cli/commands/windows/map.ts +0 -223
  431. package/src/cli/commands/windows/read.ts +0 -279
  432. package/src/cli/commands/windows/search.ts +0 -219
  433. package/src/cli/commands/windows/show.ts +0 -188
  434. package/src/cli/commands/windows/watch.ts +0 -262
  435. package/src/lib/__tests__/annotations-convex.test.ts +0 -104
  436. package/src/lib/active-sessions.ts +0 -1486
  437. package/src/lib/agent-adapters.ts +0 -412
  438. package/src/lib/agent-sessions.ts +0 -671
  439. package/src/lib/agent-trace.test.ts +0 -296
  440. package/src/lib/agent-trace.ts +0 -513
  441. package/src/lib/analytics.ts +0 -178
  442. package/src/lib/annotations-convex.ts +0 -296
  443. package/src/lib/annotations.test.ts +0 -274
  444. package/src/lib/annotations.ts +0 -836
  445. package/src/lib/auto/discover.ts +0 -545
  446. package/src/lib/auto/ideate.ts +0 -412
  447. package/src/lib/auto/spawn.ts +0 -549
  448. package/src/lib/auto/workspace.ts +0 -282
  449. package/src/lib/backlog.test.ts +0 -194
  450. package/src/lib/backlog.ts +0 -428
  451. package/src/lib/config-loader.ts +0 -391
  452. package/src/lib/config-sync/adapters/claude.ts +0 -91
  453. package/src/lib/config-sync/adapters/codex.ts +0 -135
  454. package/src/lib/config-sync/adapters/copilot.ts +0 -98
  455. package/src/lib/config-sync/adapters/gemini.ts +0 -86
  456. package/src/lib/config-sync/adapters/index.ts +0 -39
  457. package/src/lib/config-sync/adapters/opencode.ts +0 -94
  458. package/src/lib/config-sync/index.ts +0 -399
  459. package/src/lib/config-sync/types.ts +0 -92
  460. package/src/lib/config-sync/writer.ts +0 -188
  461. package/src/lib/content-sync/index.ts +0 -882
  462. package/src/lib/content-sync/types.ts +0 -104
  463. package/src/lib/contracts.test.ts +0 -186
  464. package/src/lib/contracts.ts +0 -195
  465. package/src/lib/convex.ts +0 -54
  466. package/src/lib/device.ts +0 -41
  467. package/src/lib/digest/index.ts +0 -529
  468. package/src/lib/docs/lint.test.ts +0 -135
  469. package/src/lib/docs/lint.ts +0 -310
  470. package/src/lib/docs/sync.ts +0 -184
  471. package/src/lib/doctor/index.ts +0 -647
  472. package/src/lib/doctor/repos.ts +0 -381
  473. package/src/lib/doctor/templates.ts +0 -191
  474. package/src/lib/errors.ts +0 -111
  475. package/src/lib/events.ts +0 -479
  476. package/src/lib/heartbeat.test.ts +0 -164
  477. package/src/lib/heartbeat.ts +0 -326
  478. package/src/lib/hooks/adapters/claude.ts +0 -115
  479. package/src/lib/hooks/adapters/codex.ts +0 -92
  480. package/src/lib/hooks/adapters/copilot.ts +0 -141
  481. package/src/lib/hooks/context.ts +0 -174
  482. package/src/lib/hooks/index.ts +0 -39
  483. package/src/lib/hooks/registry.ts +0 -101
  484. package/src/lib/hooks/runner.ts +0 -208
  485. package/src/lib/hooks/types.ts +0 -89
  486. package/src/lib/index.test.ts +0 -426
  487. package/src/lib/managed-session.ts +0 -117
  488. package/src/lib/math.test.ts +0 -299
  489. package/src/lib/math.ts +0 -120
  490. package/src/lib/ngrok.ts +0 -441
  491. package/src/lib/nvim/discovery.test.ts +0 -157
  492. package/src/lib/nvim/discovery.ts +0 -181
  493. package/src/lib/nvim/index.ts +0 -28
  494. package/src/lib/nvim/remote.test.ts +0 -21
  495. package/src/lib/nvim/remote.ts +0 -184
  496. package/src/lib/panes/README.md +0 -20
  497. package/src/lib/panes/broker.ts +0 -261
  498. package/src/lib/panes/index.ts +0 -1
  499. package/src/lib/panes/server.ts +0 -379
  500. package/src/lib/preview/detect.ts +0 -184
  501. package/src/lib/preview/index.ts +0 -1
  502. package/src/lib/process/index.ts +0 -16
  503. package/src/lib/process/snapshot.test.ts +0 -188
  504. package/src/lib/process/snapshot.ts +0 -257
  505. package/src/lib/provider-auth.ts +0 -258
  506. package/src/lib/references.ts +0 -481
  507. package/src/lib/report.ts +0 -973
  508. package/src/lib/resources.test.ts +0 -132
  509. package/src/lib/resources.ts +0 -429
  510. package/src/lib/runner.test.ts +0 -288
  511. package/src/lib/runner.ts +0 -1223
  512. package/src/lib/session-artifacts.test.ts +0 -107
  513. package/src/lib/session-artifacts.ts +0 -193
  514. package/src/lib/session-manager.test.ts +0 -402
  515. package/src/lib/session-manager.ts +0 -150
  516. package/src/lib/session-result.test.ts +0 -98
  517. package/src/lib/session-result.ts +0 -262
  518. package/src/lib/session-state.ts +0 -470
  519. package/src/lib/slack-workspace.ts +0 -25
  520. package/src/lib/tmux/bridge.ts +0 -439
  521. package/src/lib/tmux/context.test.ts +0 -242
  522. package/src/lib/tmux/context.ts +0 -380
  523. package/src/lib/tmux/index.ts +0 -46
  524. package/src/lib/tmux/map.test.ts +0 -99
  525. package/src/lib/tmux/map.ts +0 -252
  526. package/src/lib/tmux/panes.ts +0 -170
  527. package/src/lib/tmux/redaction.test.ts +0 -231
  528. package/src/lib/tmux/redaction.ts +0 -201
  529. package/src/lib/triage-llm.ts +0 -312
  530. package/src/lib/triage-tracker.ts +0 -400
  531. package/src/lib/triage.ts +0 -655
  532. package/src/lib/types.ts +0 -61
  533. package/src/lib/windows/index.ts +0 -2
  534. package/src/lib/windows/inventory.test.ts +0 -370
  535. package/src/lib/windows/inventory.ts +0 -352
  536. package/src/lib/windows/types.ts +0 -46
  537. package/src/lib.ts +0 -260
@@ -1,529 +0,0 @@
1
- /**
2
- * Project digest generation
3
- *
4
- * Analyzes projects and generates world-class progress digests using codex.
5
- */
6
-
7
- import { execSync, spawn } from "node:child_process";
8
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
9
- import { homedir } from "node:os";
10
- import { basename, join } from "node:path";
11
-
12
- export type ProjectStatus = {
13
- emoji: "🟢" | "🟡" | "🟠" | "🔴" | "⚪";
14
- label: "healthy" | "attention" | "at-risk" | "blocked" | "dormant";
15
- color: string;
16
- };
17
-
18
- export type Project = {
19
- name: string;
20
- repo: string;
21
- commits7d: number;
22
- uncommitted: number;
23
- branch: string;
24
- status: ProjectStatus;
25
- linearIssues?: string[];
26
- };
27
-
28
- export type DigestResult = {
29
- project: string;
30
- repo: string;
31
- status: ProjectStatus;
32
- rawPath: string;
33
- digestPath: string;
34
- rawBytes: number;
35
- digestBytes: number;
36
- success: boolean;
37
- error?: string;
38
- };
39
-
40
- export type DigestOptions = {
41
- projects: string[];
42
- outputDir: string;
43
- days?: number;
44
- concurrency?: number;
45
- linear?: boolean;
46
- dryRun?: boolean;
47
- };
48
-
49
- const SEARCH_DIRS = [join(homedir(), "Developer", "apps"), join(homedir(), "Developer")];
50
-
51
- /**
52
- * Calculate project status based on activity
53
- */
54
- export function calculateStatus(commits: number, uncommitted: number): ProjectStatus {
55
- if (commits >= 10 && uncommitted < 30) {
56
- return { emoji: "🟢", label: "healthy", color: "green" };
57
- }
58
- if (commits >= 5 || (uncommitted >= 30 && uncommitted < 50)) {
59
- return { emoji: "🟡", label: "attention", color: "yellow" };
60
- }
61
- if (commits >= 1 || uncommitted >= 50) {
62
- return { emoji: "🟠", label: "at-risk", color: "orange" };
63
- }
64
- if (commits === 0 && uncommitted >= 50) {
65
- return { emoji: "🔴", label: "blocked", color: "red" };
66
- }
67
- return { emoji: "⚪", label: "dormant", color: "gray" };
68
- }
69
-
70
- /**
71
- * Resolve project name to repo path
72
- */
73
- export function resolveProject(nameOrPath: string): string | null {
74
- // If it's already a path, validate it
75
- if (nameOrPath.startsWith("/") || nameOrPath.startsWith("~")) {
76
- const expanded = nameOrPath.replace(/^~/, homedir());
77
- if (existsSync(join(expanded, ".git"))) {
78
- return expanded;
79
- }
80
- return null;
81
- }
82
-
83
- // Search for project by name
84
- for (const dir of SEARCH_DIRS) {
85
- // Direct match: ~/Developer/apps/arbor
86
- const direct = join(dir, nameOrPath);
87
- if (existsSync(join(direct, ".git"))) {
88
- return direct;
89
- }
90
-
91
- // Monorepo pattern: ~/Developer/apps/arbor/arbor-xyz
92
- const monorepo = join(dir, nameOrPath, `${nameOrPath}-xyz`);
93
- if (existsSync(join(monorepo, ".git"))) {
94
- return monorepo;
95
- }
96
-
97
- // Any subdirectory with .git
98
- if (existsSync(direct)) {
99
- try {
100
- const entries = execSync(`ls -1 "${direct}"`, { encoding: "utf-8" }).trim().split("\n");
101
- for (const entry of entries) {
102
- const subdir = join(direct, entry);
103
- if (existsSync(join(subdir, ".git"))) {
104
- return subdir;
105
- }
106
- }
107
- } catch {
108
- // ignore
109
- }
110
- }
111
- }
112
-
113
- return null;
114
- }
115
-
116
- /**
117
- * Discover projects with activity
118
- */
119
- export function discoverProjects(options: {
120
- minCommits?: number;
121
- maxProjects?: number;
122
- days?: number;
123
- }): Project[] {
124
- const { minCommits = 1, maxProjects, days = 7 } = options;
125
- const windowStart = new Date();
126
- windowStart.setDate(windowStart.getDate() - days);
127
- const since = windowStart.toISOString().split("T")[0];
128
-
129
- const projects: Array<{ commits: number; project: Project }> = [];
130
- const seen = new Set<string>();
131
-
132
- for (const searchDir of SEARCH_DIRS) {
133
- if (!existsSync(searchDir)) continue;
134
-
135
- try {
136
- const gitDirs = execSync(`find "${searchDir}" -maxdepth 3 -type d -name ".git" 2>/dev/null`, {
137
- encoding: "utf-8",
138
- })
139
- .trim()
140
- .split("\n")
141
- .filter(Boolean);
142
-
143
- for (const gitDir of gitDirs) {
144
- const repoDir = gitDir.replace(/\/.git$/, "");
145
- const repoName = basename(repoDir);
146
-
147
- // Skip non-project dirs
148
- if (/^(node_modules|dist|build|vendor|\..*)$/.test(repoName)) continue;
149
-
150
- // Deduplicate
151
- const realPath = execSync(`cd "${repoDir}" && pwd -P`, { encoding: "utf-8" }).trim();
152
- if (seen.has(realPath)) continue;
153
- seen.add(realPath);
154
-
155
- // Get git stats
156
- let commits = 0;
157
- let uncommitted = 0;
158
- let branch = "main";
159
-
160
- try {
161
- const log = execSync(`git -C "${repoDir}" log --since="${since}" --oneline 2>/dev/null`, {
162
- encoding: "utf-8",
163
- });
164
- commits = log.trim().split("\n").filter(Boolean).length;
165
-
166
- const status = execSync(`git -C "${repoDir}" status --porcelain 2>/dev/null`, {
167
- encoding: "utf-8",
168
- });
169
- uncommitted = status.trim().split("\n").filter(Boolean).length;
170
-
171
- branch =
172
- execSync(`git -C "${repoDir}" branch --show-current 2>/dev/null`, {
173
- encoding: "utf-8",
174
- }).trim() || "main";
175
- } catch {
176
- // ignore git errors
177
- }
178
-
179
- if (commits < minCommits) continue;
180
-
181
- projects.push({
182
- commits,
183
- project: {
184
- name: repoName,
185
- repo: repoDir,
186
- commits7d: commits,
187
- uncommitted,
188
- branch,
189
- status: calculateStatus(commits, uncommitted),
190
- },
191
- });
192
- }
193
- } catch {
194
- // ignore find errors
195
- }
196
- }
197
-
198
- // Sort by commits desc
199
- projects.sort((a, b) => b.commits - a.commits);
200
-
201
- const result = projects.map((p) => p.project);
202
- return maxProjects ? result.slice(0, maxProjects) : result;
203
- }
204
-
205
- /**
206
- * Fetch Linear issues for a project
207
- */
208
- export function fetchLinearIssues(projectName: string): string[] {
209
- // Derive team key from project name (e.g., kumori-xyz → KUMORI)
210
- const teamKey = projectName
211
- .toUpperCase()
212
- .replace(/-XYZ$/, "")
213
- .replace(/-APPLE$/, "")
214
- .replace(/-ANDROID$/, "");
215
-
216
- try {
217
- const output = execSync(
218
- `linear issue list --workspace luke-labs --team "${teamKey}" --limit 10 --json 2>/dev/null`,
219
- { encoding: "utf-8" },
220
- );
221
- const parsed: unknown = JSON.parse(output);
222
- if (!Array.isArray(parsed)) return [];
223
-
224
- const issues = parsed
225
- .map((issue) => {
226
- if (typeof issue !== "object" || issue === null) return null;
227
- const record = issue as Record<string, unknown>;
228
-
229
- const identifier = typeof record.identifier === "string" ? record.identifier : "?";
230
- const title = typeof record.title === "string" ? record.title : "";
231
- const state = typeof record.state === "string" ? record.state : "";
232
-
233
- return `- ${identifier}: ${title} [${state}]`;
234
- })
235
- .filter((line): line is string => typeof line === "string");
236
-
237
- return issues;
238
- } catch {
239
- return [];
240
- }
241
- }
242
-
243
- /**
244
- * Build the unified prompt for codex
245
- */
246
- export function buildPrompt(project: Project, windowStart: string, windowEnd: string): string {
247
- const linearSection = project.linearIssues?.length
248
- ? `\nLinear Issues:\n${project.linearIssues.join("\n")}`
249
- : "";
250
-
251
- return `<role>Agent Digest Specialist</role>
252
-
253
- <context>
254
- Project: ${project.name}
255
- Repo: ${project.repo}
256
- Window: ${windowStart} to ${windowEnd}
257
- Status: ${project.status.emoji} ${project.status.label} (${project.commits7d} commits, ${project.uncommitted} uncommitted)${linearSection}
258
- </context>
259
-
260
- <workflow>
261
- Execute these steps in order, then produce output:
262
-
263
- **Phase 1: Gather (3-4 min)**
264
- 1. \`git log --since="${windowStart}" --oneline\` - get commit list
265
- 2. \`git diff --stat HEAD~${project.commits7d}\` - get diffstat
266
- 3. Read AGENTS.md or CLAUDE.md (first 200 lines) for project context
267
- 4. \`git show --stat\` on 2-3 key commits to understand changes
268
-
269
- **Phase 2: Analyze (2-3 min)**
270
- 5. Group commits into 2-4 work themes by scanning messages
271
- 6. For each theme, identify 1-2 key files and note paths
272
- 7. Check for test files in diffstat (quality signal)
273
- 8. Note any security-related, config, or deletion patterns (risks)
274
-
275
- **Phase 3: Synthesize (2-3 min)**
276
- 9. Write status summary based on commit velocity and WIP count
277
- 10. Draft 2-3 recommendations based on risks and patterns
278
- 11. Compile evidence section with file paths from diffstat
279
-
280
- **Phase 4: Output**
281
- 12. Produce the digest in the exact format below
282
- </workflow>
283
-
284
- <output_format>
285
- # ${project.name} ${project.status.emoji}
286
-
287
- Repo: \`${project.repo}\`
288
- Window: ${windowStart} → ${windowEnd}
289
-
290
- ## Status
291
-
292
- - ${project.status.emoji} [One-line health summary with commit/uncommitted counts]. (Confidence: X/10)
293
- - [Activity pattern observation]. (Confidence: X/10)
294
-
295
- ## Work Themes & Accomplishments
296
-
297
- ### 1) [Theme from commits] ([brief description])
298
-
299
- - [Finding with file path evidence]. (Confidence: X/10)
300
- - [Another finding]. (Confidence: X/10)
301
-
302
- ### 2) [Second theme]...
303
-
304
- [2-4 themes total based on commit groupings]
305
-
306
- ## Linear Issue Correlation
307
-
308
- [If Linear issues provided in context, correlate commits with issues. Otherwise skip this section.]
309
-
310
- - [PROJ-123: correlates with commits X, Y]. (Confidence: X/10)
311
- - [PROJ-456: no commits in window, still in backlog]. (Confidence: X/10)
312
-
313
- ## Quality Signals
314
-
315
- - [Test coverage, documentation, CI observations]. (Confidence: X/10)
316
-
317
- ## Key Risks
318
-
319
- - [Risk with evidence if applicable]. (Confidence: X/10)
320
-
321
- ## Recommendations
322
-
323
- 1) [Actionable recommendation]. (Confidence: X/10)
324
- 2) [Another recommendation]. (Confidence: X/10)
325
-
326
- ## Evidence (selected)
327
-
328
- - [Description]: \`file/path.ts\`
329
- - [Description]: \`another/file.ts\`
330
-
331
- ## Commits (last 7 days)
332
-
333
- \`\`\`text
334
- [Full git log output from step 1]
335
- \`\`\`
336
-
337
- ## Diffstat (HEAD~N)
338
-
339
- \`\`\`text
340
- [Full diffstat output from step 2]
341
- \`\`\`
342
- </output_format>
343
-
344
- <constraints>
345
- - READ-ONLY: Do NOT modify any files
346
- - Every claim needs a confidence score (1-10)
347
- - Include file paths as evidence where applicable
348
- - Produce output after completing workflow - don't loop back
349
- - If a step fails, note it and continue
350
- </constraints>`;
351
- }
352
-
353
- /**
354
- * Run digest for a single project
355
- */
356
- export async function runDigest(
357
- project: Project,
358
- outputDir: string,
359
- windowStart: string,
360
- windowEnd: string,
361
- ): Promise<DigestResult> {
362
- const promptPath = join(outputDir, `${project.name}-prompt.md`);
363
- const rawPath = join(outputDir, `${project.name}-raw.txt`);
364
- const digestPath = join(outputDir, `${project.name}-digest.md`);
365
-
366
- // Build and write prompt
367
- const prompt = buildPrompt(project, windowStart, windowEnd);
368
- writeFileSync(promptPath, prompt);
369
-
370
- return new Promise((resolve) => {
371
- // Spawn codex
372
- const codex = spawn("codex", ["exec", "-", "--dangerously-bypass-approvals-and-sandbox"], {
373
- cwd: project.repo,
374
- stdio: ["pipe", "pipe", "pipe"],
375
- });
376
-
377
- let stdout = "";
378
- let stderr = "";
379
-
380
- codex.stdout.on("data", (data) => {
381
- stdout += data.toString();
382
- });
383
-
384
- codex.stderr.on("data", (data) => {
385
- stderr += data.toString();
386
- });
387
-
388
- codex.stdin.write(prompt);
389
- codex.stdin.end();
390
-
391
- codex.on("close", (code) => {
392
- // Write raw output
393
- writeFileSync(rawPath, stdout);
394
-
395
- // Post-process to extract digest
396
- let digest = "";
397
- const lines = stdout.split("\n");
398
- const codexIndex = lines.lastIndexOf("codex");
399
- if (codexIndex >= 0) {
400
- digest = lines
401
- .slice(codexIndex + 1)
402
- .join("\n")
403
- .trim();
404
- }
405
-
406
- if (!digest) {
407
- // Fallback: remove thinking blocks
408
- digest = stdout
409
- .split("\n")
410
- .filter((l) => !l.startsWith("thinking") && !l.startsWith("**"))
411
- .join("\n")
412
- .trim();
413
- }
414
-
415
- writeFileSync(digestPath, digest);
416
-
417
- const rawBytes = stdout.length;
418
- const digestBytes = digest.length;
419
-
420
- resolve({
421
- project: project.name,
422
- repo: project.repo,
423
- status: project.status,
424
- rawPath,
425
- digestPath,
426
- rawBytes,
427
- digestBytes,
428
- success: code === 0 && digestBytes > 0,
429
- error: code !== 0 ? `Exit code ${code}: ${stderr}` : undefined,
430
- });
431
- });
432
-
433
- codex.on("error", (err) => {
434
- resolve({
435
- project: project.name,
436
- repo: project.repo,
437
- status: project.status,
438
- rawPath,
439
- digestPath,
440
- rawBytes: 0,
441
- digestBytes: 0,
442
- success: false,
443
- error: err.message,
444
- });
445
- });
446
- });
447
- }
448
-
449
- /**
450
- * Run digests for multiple projects with concurrency control
451
- */
452
- export async function runDigests(options: DigestOptions): Promise<DigestResult[]> {
453
- const { projects: projectNames, outputDir, days = 7, concurrency = 2, linear = true } = options;
454
-
455
- // Ensure output dir exists
456
- mkdirSync(outputDir, { recursive: true });
457
-
458
- // Calculate window
459
- const windowEnd = new Date();
460
- const windowStart = new Date();
461
- windowStart.setDate(windowStart.getDate() - days);
462
- const windowStartStr = windowStart.toISOString().split("T")[0];
463
- const windowEndStr = windowEnd.toISOString().split("T")[0];
464
-
465
- // Resolve projects
466
- const resolvedProjects: Project[] = [];
467
- for (const name of projectNames) {
468
- const repo = resolveProject(name);
469
- if (!repo) {
470
- console.error(`Project not found: ${name}`);
471
- continue;
472
- }
473
-
474
- // Get git stats
475
- let commits = 0;
476
- let uncommitted = 0;
477
- let branch = "main";
478
-
479
- try {
480
- const log = execSync(
481
- `git -C "${repo}" log --since="${windowStartStr}" --oneline 2>/dev/null`,
482
- {
483
- encoding: "utf-8",
484
- },
485
- );
486
- commits = log.trim().split("\n").filter(Boolean).length;
487
-
488
- const status = execSync(`git -C "${repo}" status --porcelain 2>/dev/null`, {
489
- encoding: "utf-8",
490
- });
491
- uncommitted = status.trim().split("\n").filter(Boolean).length;
492
-
493
- branch =
494
- execSync(`git -C "${repo}" branch --show-current 2>/dev/null`, {
495
- encoding: "utf-8",
496
- }).trim() || "main";
497
- } catch {
498
- // ignore
499
- }
500
-
501
- const project: Project = {
502
- name: basename(repo),
503
- repo,
504
- commits7d: commits,
505
- uncommitted,
506
- branch,
507
- status: calculateStatus(commits, uncommitted),
508
- };
509
-
510
- // Fetch Linear issues if enabled
511
- if (linear) {
512
- project.linearIssues = fetchLinearIssues(project.name);
513
- }
514
-
515
- resolvedProjects.push(project);
516
- }
517
-
518
- // Run with concurrency control
519
- const results: DigestResult[] = [];
520
- for (let i = 0; i < resolvedProjects.length; i += concurrency) {
521
- const batch = resolvedProjects.slice(i, i + concurrency);
522
- const batchResults = await Promise.all(
523
- batch.map((p) => runDigest(p, outputDir, windowStartStr, windowEndStr)),
524
- );
525
- results.push(...batchResults);
526
- }
527
-
528
- return results;
529
- }
@@ -1,135 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { randomUUID } from "node:crypto";
3
- import { mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
4
- import { join, sep } from "node:path";
5
- import { lintAgentsDocs } from "./lint";
6
-
7
- function createTempDir(prefix: string): string {
8
- const root = join(process.cwd(), ".tmp-tests");
9
- mkdirSync(root, { recursive: true });
10
- const dir = join(root, `${prefix}-${randomUUID()}`);
11
- mkdirSync(dir, { recursive: true });
12
- return dir;
13
- }
14
-
15
- function cleanupTemp(dir: string): void {
16
- const marker = `${sep}.tmp-tests${sep}`;
17
- if (!dir.includes(marker)) return;
18
- rmSync(dir, { recursive: true, force: true });
19
- }
20
-
21
- function writeAgentsDoc(dir: string, content: string): void {
22
- mkdirSync(dir, { recursive: true });
23
- writeFileSync(join(dir, "AGENTS.md"), content);
24
- try {
25
- symlinkSync("AGENTS.md", join(dir, "CLAUDE.md"));
26
- } catch {
27
- writeFileSync(join(dir, "CLAUDE.md"), content);
28
- }
29
- }
30
-
31
- describe("lintAgentsDocs", () => {
32
- test("scans apps/packages/utils but not forks", () => {
33
- const workspaceRoot = createTempDir("docs-lint");
34
- try {
35
- // Good doc under apps
36
- writeAgentsDoc(join(workspaceRoot, "apps", "good", "repo"), "# Good\n\n## Notes\n\nHello.");
37
-
38
- // Bad doc under forks (should not be scanned)
39
- mkdirSync(join(workspaceRoot, "forks", "bad"), { recursive: true });
40
- writeFileSync(join(workspaceRoot, "forks", "bad", "AGENTS.md"), "## Bad");
41
-
42
- const result = lintAgentsDocs({
43
- workspaceRoot,
44
- warnShortWordsUnder: 0,
45
- warnLongWordsOver: Number.MAX_SAFE_INTEGER,
46
- });
47
-
48
- expect(result.errors).toBe(0);
49
- expect(result.agentsFiles).toBe(1);
50
- } finally {
51
- cleanupTemp(workspaceRoot);
52
- }
53
- });
54
-
55
- test("flags missing H1", () => {
56
- const workspaceRoot = createTempDir("docs-lint");
57
- try {
58
- writeAgentsDoc(join(workspaceRoot, "apps", "missing-h1"), "## Only H2\n\nText.");
59
-
60
- const result = lintAgentsDocs({
61
- workspaceRoot,
62
- warnShortWordsUnder: 0,
63
- warnLongWordsOver: Number.MAX_SAFE_INTEGER,
64
- });
65
-
66
- expect(result.issues.some((i) => i.type === "missing-h1")).toBe(true);
67
- expect(result.ok).toBe(false);
68
- } finally {
69
- cleanupTemp(workspaceRoot);
70
- }
71
- });
72
-
73
- test("flags XML-ish AGENTS.md", () => {
74
- const workspaceRoot = createTempDir("docs-lint");
75
- try {
76
- writeAgentsDoc(
77
- join(workspaceRoot, "utils", "xmlish"),
78
- "<INSTRUCTIONS>\n <foo>bar</foo>\n</INSTRUCTIONS>\n",
79
- );
80
-
81
- const result = lintAgentsDocs({
82
- workspaceRoot,
83
- warnShortWordsUnder: 0,
84
- warnLongWordsOver: Number.MAX_SAFE_INTEGER,
85
- });
86
-
87
- expect(result.issues.some((i) => i.type === "xmlish-agents")).toBe(true);
88
- expect(result.ok).toBe(false);
89
- } finally {
90
- cleanupTemp(workspaceRoot);
91
- }
92
- });
93
-
94
- test("reports duplicate clusters without failing", () => {
95
- const workspaceRoot = createTempDir("docs-lint");
96
- try {
97
- const content = "# Template\n\n## Notes\n\nSame everywhere.";
98
- writeAgentsDoc(join(workspaceRoot, "apps", "a"), content);
99
- writeAgentsDoc(join(workspaceRoot, "packages", "b"), content);
100
-
101
- const result = lintAgentsDocs({
102
- workspaceRoot,
103
- warnShortWordsUnder: 0,
104
- warnLongWordsOver: Number.MAX_SAFE_INTEGER,
105
- });
106
-
107
- expect(result.ok).toBe(true);
108
- expect(result.duplicateGroups.length).toBe(1);
109
- expect(result.duplicateGroups[0]?.count).toBe(2);
110
- } finally {
111
- cleanupTemp(workspaceRoot);
112
- }
113
- });
114
-
115
- test("flags inverted symlink direction (AGENTS.md → CLAUDE.md)", () => {
116
- const workspaceRoot = createTempDir("docs-lint");
117
- try {
118
- const dir = join(workspaceRoot, "apps", "inverted");
119
- mkdirSync(dir, { recursive: true });
120
- writeFileSync(join(dir, "CLAUDE.md"), "# Inverted\n");
121
- symlinkSync("CLAUDE.md", join(dir, "AGENTS.md"));
122
-
123
- const result = lintAgentsDocs({
124
- workspaceRoot,
125
- warnShortWordsUnder: 0,
126
- warnLongWordsOver: Number.MAX_SAFE_INTEGER,
127
- });
128
-
129
- expect(result.issues.some((i) => i.type === "agents-inverted-symlink")).toBe(true);
130
- expect(result.ok).toBe(false);
131
- } finally {
132
- cleanupTemp(workspaceRoot);
133
- }
134
- });
135
- });