@compilr-dev/cli 0.5.0 → 0.5.1

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 (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -115,6 +115,12 @@ export declare const projectRepository: {
115
115
  touch(id: number): void;
116
116
  /**
117
117
  * Delete a project (cascades to work_items, documents, history)
118
+ * Also cleans up session files and team data from disk.
119
+ *
120
+ * IMPORTANT: Project must be archived before deletion.
121
+ * Use archive() first, then delete().
122
+ *
123
+ * @throws Error if project is not archived
118
124
  */
119
125
  delete(id: number): boolean;
120
126
  /**
@@ -4,6 +4,9 @@
4
4
  * Handles all database operations for projects.
5
5
  */
6
6
  import { getDb } from '../index.js';
7
+ import { getSessionsPath } from '../../settings/paths.js';
8
+ import { rmSync, existsSync } from 'fs';
9
+ import { join } from 'path';
7
10
  /**
8
11
  * Convert database record to Project object
9
12
  */
@@ -287,10 +290,48 @@ export const projectRepository = {
287
290
  },
288
291
  /**
289
292
  * Delete a project (cascades to work_items, documents, history)
293
+ * Also cleans up session files and team data from disk.
294
+ *
295
+ * IMPORTANT: Project must be archived before deletion.
296
+ * Use archive() first, then delete().
297
+ *
298
+ * @throws Error if project is not archived
290
299
  */
291
300
  delete(id) {
292
301
  const db = getDb();
302
+ // Check if project is archived first
303
+ const project = db.prepare('SELECT status FROM projects WHERE id = ?').get(id);
304
+ if (!project) {
305
+ return false; // Project doesn't exist
306
+ }
307
+ if (project.status !== 'archived') {
308
+ throw new Error('Project must be archived before deletion. Use archive() first.');
309
+ }
293
310
  const result = db.prepare('DELETE FROM projects WHERE id = ?').run(id);
311
+ if (result.changes > 0) {
312
+ // Clean up session files for this project
313
+ try {
314
+ const sessionsPath = getSessionsPath();
315
+ const projectSessionPath = join(sessionsPath, `project-${String(id)}`);
316
+ if (existsSync(projectSessionPath)) {
317
+ rmSync(projectSessionPath, { recursive: true, force: true });
318
+ }
319
+ }
320
+ catch {
321
+ // Session cleanup is best-effort - don't fail delete if cleanup fails
322
+ }
323
+ // Clean up anchor files for this project
324
+ try {
325
+ const anchorsPath = join(getSessionsPath(), '..', 'anchors');
326
+ const projectAnchorsPath = join(anchorsPath, `project-${String(id)}.json`);
327
+ if (existsSync(projectAnchorsPath)) {
328
+ rmSync(projectAnchorsPath, { force: true });
329
+ }
330
+ }
331
+ catch {
332
+ // Anchor cleanup is best-effort
333
+ }
334
+ }
294
335
  return result.changes > 0;
295
336
  },
296
337
  /**
@@ -11,12 +11,14 @@ export interface CreateWorkItemInput {
11
11
  description?: string;
12
12
  priority?: WorkItemPriority;
13
13
  estimated_effort?: 'low' | 'medium' | 'high';
14
+ owner?: string;
14
15
  }
15
16
  export interface UpdateWorkItemInput {
16
17
  type?: WorkItemType;
17
18
  status?: WorkItemStatus;
18
19
  priority?: WorkItemPriority;
19
20
  guided_step?: GuidedStep | null;
21
+ owner?: string | null;
20
22
  title?: string;
21
23
  description?: string;
22
24
  estimated_effort?: 'low' | 'medium' | 'high';
@@ -28,6 +30,8 @@ export interface QueryWorkItemsInput {
28
30
  status?: WorkItemStatus | 'all';
29
31
  type?: WorkItemType | 'all';
30
32
  priority?: WorkItemPriority | 'all';
33
+ /** Filter by owner: agent ID, 'unassigned', or 'all' */
34
+ owner?: string;
31
35
  search?: string;
32
36
  limit?: number;
33
37
  offset?: number;
@@ -41,6 +45,7 @@ export interface WorkItem {
41
45
  status: WorkItemStatus;
42
46
  priority: WorkItemPriority;
43
47
  guidedStep: GuidedStep | null;
48
+ owner: string | null;
44
49
  title: string;
45
50
  description: string | null;
46
51
  estimatedEffort: string | null;
@@ -88,6 +93,15 @@ export declare const workItemRepository: {
88
93
  * Delete a work item
89
94
  */
90
95
  delete(id: number): boolean;
96
+ /**
97
+ * Get work items by owner
98
+ * @param owner - Agent ID or 'unassigned' for items without owner
99
+ */
100
+ getByOwner(projectId: number, owner: string, status?: WorkItemStatus): WorkItem[];
101
+ /**
102
+ * Get work item counts by owner for a project
103
+ */
104
+ getOwnerCounts(projectId: number): Record<string, number>;
91
105
  /**
92
106
  * Get work item counts by status for a project
93
107
  */
@@ -111,5 +125,6 @@ export declare const workItemRepository: {
111
125
  title: string;
112
126
  description?: string;
113
127
  priority?: WorkItemPriority;
128
+ owner?: string;
114
129
  }>): WorkItem[];
115
130
  };
@@ -17,6 +17,7 @@ function recordToWorkItem(record) {
17
17
  status: record.status,
18
18
  priority: record.priority,
19
19
  guidedStep: record.guided_step,
20
+ owner: record.owner,
20
21
  title: record.title,
21
22
  description: record.description,
22
23
  estimatedEffort: record.estimated_effort,
@@ -57,11 +58,11 @@ export const workItemRepository = {
57
58
  .prepare(`
58
59
  INSERT INTO work_items (
59
60
  project_id, item_number, item_id, type, status, priority,
60
- title, description, estimated_effort,
61
+ owner, title, description, estimated_effort,
61
62
  created_at, updated_at
62
63
  ) VALUES (
63
64
  @project_id, @item_number, @item_id, @type, @status, @priority,
64
- @title, @description, @estimated_effort,
65
+ @owner, @title, @description, @estimated_effort,
65
66
  @created_at, @updated_at
66
67
  )
67
68
  `)
@@ -72,6 +73,7 @@ export const workItemRepository = {
72
73
  type: input.type,
73
74
  status: 'backlog',
74
75
  priority: input.priority ?? 'medium',
76
+ owner: input.owner ?? null,
75
77
  title: input.title,
76
78
  description: input.description ?? null,
77
79
  estimated_effort: input.estimated_effort ?? null,
@@ -126,6 +128,15 @@ export const workItemRepository = {
126
128
  conditions.push('priority = @priority');
127
129
  params.priority = input.priority;
128
130
  }
131
+ if (input.owner && input.owner !== 'all') {
132
+ if (input.owner === 'unassigned') {
133
+ conditions.push('owner IS NULL');
134
+ }
135
+ else {
136
+ conditions.push('owner = @owner');
137
+ params.owner = input.owner;
138
+ }
139
+ }
129
140
  if (input.search) {
130
141
  conditions.push('(title LIKE @search OR description LIKE @search)');
131
142
  params.search = `%${input.search}%`;
@@ -226,6 +237,10 @@ export const workItemRepository = {
226
237
  updates.push('guided_step = @guided_step');
227
238
  params.guided_step = input.guided_step;
228
239
  }
240
+ if (input.owner !== undefined) {
241
+ updates.push('owner = @owner');
242
+ params.owner = input.owner;
243
+ }
229
244
  if (input.title !== undefined) {
230
245
  updates.push('title = @title');
231
246
  params.title = input.title;
@@ -285,6 +300,13 @@ export const workItemRepository = {
285
300
  VALUES (?, ?, 'step_advance', ?, ?, 'agent', ?)
286
301
  `).run(workItemId, projectId, oldItem.guidedStep ?? 'none', changes.guided_step ?? 'none', now);
287
302
  }
303
+ // Record owner changes
304
+ if (changes.owner !== undefined && changes.owner !== oldItem.owner) {
305
+ db.prepare(`
306
+ INSERT INTO work_item_history (work_item_id, project_id, action, old_value, new_value, changed_by, changed_at)
307
+ VALUES (?, ?, 'owner_change', ?, ?, 'agent', ?)
308
+ `).run(workItemId, projectId, oldItem.owner ?? 'unassigned', changes.owner ?? 'unassigned', now);
309
+ }
288
310
  },
289
311
  /**
290
312
  * Delete a work item
@@ -294,6 +316,48 @@ export const workItemRepository = {
294
316
  const result = db.prepare('DELETE FROM work_items WHERE id = ?').run(id);
295
317
  return result.changes > 0;
296
318
  },
319
+ /**
320
+ * Get work items by owner
321
+ * @param owner - Agent ID or 'unassigned' for items without owner
322
+ */
323
+ getByOwner(projectId, owner, status) {
324
+ const db = getDb();
325
+ let query = 'SELECT * FROM work_items WHERE project_id = ?';
326
+ const params = [projectId];
327
+ if (owner === 'unassigned') {
328
+ query += ' AND owner IS NULL';
329
+ }
330
+ else {
331
+ query += ' AND owner = ?';
332
+ params.push(owner);
333
+ }
334
+ if (status) {
335
+ query += ' AND status = ?';
336
+ params.push(status);
337
+ }
338
+ query += ' ORDER BY priority, created_at ASC';
339
+ const records = db.prepare(query).all(...params);
340
+ return records.map(recordToWorkItem);
341
+ },
342
+ /**
343
+ * Get work item counts by owner for a project
344
+ */
345
+ getOwnerCounts(projectId) {
346
+ const db = getDb();
347
+ const results = db
348
+ .prepare(`
349
+ SELECT COALESCE(owner, 'unassigned') as owner, COUNT(*) as count
350
+ FROM work_items
351
+ WHERE project_id = ? AND status != 'completed' AND status != 'skipped'
352
+ GROUP BY owner
353
+ `)
354
+ .all(projectId);
355
+ const counts = {};
356
+ for (const row of results) {
357
+ counts[row.owner] = row.count;
358
+ }
359
+ return counts;
360
+ },
297
361
  /**
298
362
  * Get work item counts by status for a project
299
363
  */
@@ -354,10 +418,10 @@ export const workItemRepository = {
354
418
  const insertStmt = db.prepare(`
355
419
  INSERT INTO work_items (
356
420
  project_id, item_number, item_id, type, status, priority,
357
- title, description, created_at, updated_at
421
+ owner, title, description, created_at, updated_at
358
422
  ) VALUES (
359
423
  @project_id, @item_number, @item_id, @type, @status, @priority,
360
- @title, @description, @created_at, @updated_at
424
+ @owner, @title, @description, @created_at, @updated_at
361
425
  )
362
426
  `);
363
427
  // Use transaction for atomicity
@@ -371,6 +435,7 @@ export const workItemRepository = {
371
435
  type: item.type,
372
436
  status: 'backlog',
373
437
  priority: item.priority ?? 'medium',
438
+ owner: item.owner ?? null,
374
439
  title: item.title,
375
440
  description: item.description ?? null,
376
441
  created_at: now,
@@ -4,8 +4,8 @@
4
4
  * Based on: db-workflow-architecture.md
5
5
  * Database: SQLite via better-sqlite3
6
6
  */
7
- export declare const SCHEMA_VERSION = 1;
8
- export declare const SCHEMA_SQL = "\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Projects table\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL,\n display_name TEXT NOT NULL,\n description TEXT,\n\n -- Project type and status\n type TEXT DEFAULT 'general',\n status TEXT DEFAULT 'active',\n\n -- Paths\n path TEXT NOT NULL,\n docs_path TEXT,\n repo_pattern TEXT DEFAULT 'single',\n\n -- Tech stack (auto-detected)\n language TEXT,\n framework TEXT,\n package_manager TEXT,\n runtime_version TEXT,\n\n -- Commands (JSON)\n commands TEXT,\n\n -- Git info\n git_remote TEXT,\n git_branch TEXT DEFAULT 'main',\n\n -- Workflow\n workflow_mode TEXT DEFAULT 'flexible',\n lifecycle_state TEXT DEFAULT 'setup',\n current_item_id TEXT,\n\n -- Context & Metadata (JSON)\n last_context TEXT,\n metadata TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_activity_at DATETIME\n);\n\n-- Work items (backlog items, tasks, bugs)\nCREATE TABLE IF NOT EXISTS work_items (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n -- Identity\n item_number INTEGER NOT NULL,\n item_id TEXT NOT NULL,\n\n -- Classification\n type TEXT NOT NULL,\n status TEXT DEFAULT 'backlog',\n priority TEXT DEFAULT 'medium',\n\n -- Guided mode: current step in work item cycle\n guided_step TEXT,\n\n -- Content\n title TEXT NOT NULL,\n description TEXT,\n\n -- Effort tracking\n estimated_effort TEXT,\n actual_minutes INTEGER,\n\n -- Completion\n completed_at DATETIME,\n completed_by TEXT,\n commit_hash TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n UNIQUE (project_id, item_id)\n);\n\n-- Project documents (PRD, architecture, etc.)\nCREATE TABLE IF NOT EXISTS project_documents (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n doc_type TEXT NOT NULL,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Work item history (audit trail)\nCREATE TABLE IF NOT EXISTS work_item_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n work_item_id INTEGER NOT NULL,\n project_id INTEGER NOT NULL,\n\n action TEXT NOT NULL,\n old_value TEXT,\n new_value TEXT,\n notes TEXT,\n\n changed_by TEXT,\n changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_projects_path ON projects(path);\nCREATE INDEX IF NOT EXISTS idx_projects_docs_path ON projects(docs_path);\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\n\nCREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);\nCREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);\nCREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);\n\nCREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);\nCREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);\n\nCREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);\n";
7
+ export declare const SCHEMA_VERSION = 6;
8
+ export declare const SCHEMA_SQL = "\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Projects table\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL,\n display_name TEXT NOT NULL,\n description TEXT,\n\n -- Project type and status\n type TEXT DEFAULT 'general',\n status TEXT DEFAULT 'active',\n\n -- Paths\n path TEXT NOT NULL,\n docs_path TEXT,\n repo_pattern TEXT DEFAULT 'single',\n\n -- Tech stack (auto-detected)\n language TEXT,\n framework TEXT,\n package_manager TEXT,\n runtime_version TEXT,\n\n -- Commands (JSON)\n commands TEXT,\n\n -- Git info\n git_remote TEXT,\n git_branch TEXT DEFAULT 'main',\n\n -- Workflow\n workflow_mode TEXT DEFAULT 'flexible',\n lifecycle_state TEXT DEFAULT 'setup',\n current_item_id TEXT,\n\n -- Context & Metadata (JSON)\n last_context TEXT,\n metadata TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_activity_at DATETIME\n);\n\n-- Work items (backlog items, tasks, bugs)\nCREATE TABLE IF NOT EXISTS work_items (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n -- Identity\n item_number INTEGER NOT NULL,\n item_id TEXT NOT NULL,\n\n -- Classification\n type TEXT NOT NULL,\n status TEXT DEFAULT 'backlog',\n priority TEXT DEFAULT 'medium',\n\n -- Guided mode: current step in work item cycle\n guided_step TEXT,\n\n -- Ownership (for multi-agent teams)\n owner TEXT,\n\n -- Content\n title TEXT NOT NULL,\n description TEXT,\n\n -- Effort tracking\n estimated_effort TEXT,\n actual_minutes INTEGER,\n\n -- Completion\n completed_at DATETIME,\n completed_by TEXT,\n commit_hash TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n UNIQUE (project_id, item_id)\n);\n\n-- Project documents (PRD, architecture, plans, etc.)\nCREATE TABLE IF NOT EXISTS project_documents (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n doc_type TEXT NOT NULL,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n\n -- Plan-specific fields (NULL for non-plan documents)\n status TEXT,\n work_item_id INTEGER,\n\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE SET NULL\n);\n\n-- Work item history (audit trail)\nCREATE TABLE IF NOT EXISTS work_item_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n work_item_id INTEGER NOT NULL,\n project_id INTEGER NOT NULL,\n\n action TEXT NOT NULL,\n old_value TEXT,\n new_value TEXT,\n notes TEXT,\n\n changed_by TEXT,\n changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_projects_path ON projects(path);\nCREATE INDEX IF NOT EXISTS idx_projects_docs_path ON projects(docs_path);\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\n\nCREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);\nCREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);\nCREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);\nCREATE INDEX IF NOT EXISTS idx_work_items_owner ON work_items(owner);\n\nCREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);\nCREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);\nCREATE INDEX IF NOT EXISTS idx_project_documents_status ON project_documents(status);\nCREATE INDEX IF NOT EXISTS idx_project_documents_work_item ON project_documents(work_item_id);\n\nCREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);\n\n-- Terminal sessions (multi-terminal awareness)\nCREATE TABLE IF NOT EXISTS terminal_sessions (\n id TEXT PRIMARY KEY,\n project_id INTEGER,\n pid INTEGER NOT NULL,\n tty_path TEXT,\n label TEXT,\n started_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_heartbeat DATETIME DEFAULT CURRENT_TIMESTAMP,\n active_agent TEXT DEFAULT 'default',\n agents_json TEXT DEFAULT '[]',\n status TEXT DEFAULT 'active',\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_project ON terminal_sessions(project_id);\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_status ON terminal_sessions(status);\n\n-- File locks (multi-terminal file lock awareness)\nCREATE TABLE IF NOT EXISTS file_locks (\n path TEXT NOT NULL,\n project_id INTEGER NOT NULL,\n session_id TEXT NOT NULL,\n agent_id TEXT NOT NULL,\n locked_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (path, project_id),\n FOREIGN KEY (session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_file_locks_session ON file_locks(session_id);\n\n-- Session notifications (cross-session notifications)\nCREATE TABLE IF NOT EXISTS session_notifications (\n id TEXT PRIMARY KEY,\n project_id INTEGER NOT NULL,\n from_session_id TEXT NOT NULL,\n to_session_id TEXT,\n type TEXT NOT NULL,\n title TEXT NOT NULL,\n message TEXT,\n payload_json TEXT,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n read_at DATETIME,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n FOREIGN KEY (from_session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_session_notifications_project ON session_notifications(project_id);\nCREATE INDEX IF NOT EXISTS idx_session_notifications_to_session ON session_notifications(to_session_id);\nCREATE INDEX IF NOT EXISTS idx_session_notifications_unread ON session_notifications(read_at);\n";
9
9
  export interface ProjectRecord {
10
10
  id: number;
11
11
  name: string;
@@ -41,6 +41,7 @@ export interface WorkItemRecord {
41
41
  status: string;
42
42
  priority: string;
43
43
  guided_step: string | null;
44
+ owner: string | null;
44
45
  title: string;
45
46
  description: string | null;
46
47
  estimated_effort: string | null;
@@ -57,6 +58,8 @@ export interface ProjectDocumentRecord {
57
58
  doc_type: string;
58
59
  title: string;
59
60
  content: string;
61
+ status: string | null;
62
+ work_item_id: number | null;
60
63
  created_at: string;
61
64
  updated_at: string;
62
65
  }
@@ -80,4 +83,38 @@ export type WorkItemType = 'feature' | 'bug' | 'tech-debt' | 'chore';
80
83
  export type WorkItemStatus = 'backlog' | 'in_progress' | 'completed' | 'skipped';
81
84
  export type WorkItemPriority = 'critical' | 'high' | 'medium' | 'low';
82
85
  export type GuidedStep = 'plan' | 'implement' | 'test' | 'commit' | 'review';
83
- export type DocumentType = 'prd' | 'architecture' | 'design' | 'notes';
86
+ export type DocumentType = 'prd' | 'architecture' | 'design' | 'notes' | 'plan';
87
+ export type PlanStatus = 'draft' | 'approved' | 'in_progress' | 'completed' | 'abandoned';
88
+ export type TerminalSessionStatus = 'active' | 'stale' | 'dead';
89
+ export interface TerminalSessionRecord {
90
+ id: string;
91
+ project_id: number | null;
92
+ pid: number;
93
+ tty_path: string | null;
94
+ label: string | null;
95
+ started_at: string;
96
+ last_heartbeat: string;
97
+ active_agent: string;
98
+ agents_json: string;
99
+ status: TerminalSessionStatus;
100
+ }
101
+ export interface FileLockRecord {
102
+ path: string;
103
+ project_id: number;
104
+ session_id: string;
105
+ agent_id: string;
106
+ locked_at: string;
107
+ }
108
+ export type SessionNotificationType = 'pending_request' | 'agent_finished';
109
+ export interface SessionNotificationRecord {
110
+ id: string;
111
+ project_id: number;
112
+ from_session_id: string;
113
+ to_session_id: string | null;
114
+ type: SessionNotificationType;
115
+ title: string;
116
+ message: string | null;
117
+ payload_json: string | null;
118
+ created_at: string;
119
+ read_at: string | null;
120
+ }
package/dist/db/schema.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Based on: db-workflow-architecture.md
5
5
  * Database: SQLite via better-sqlite3
6
6
  */
7
- export const SCHEMA_VERSION = 1;
7
+ export const SCHEMA_VERSION = 6;
8
8
  export const SCHEMA_SQL = `
9
9
  -- Schema version tracking
10
10
  CREATE TABLE IF NOT EXISTS schema_version (
@@ -73,6 +73,9 @@ CREATE TABLE IF NOT EXISTS work_items (
73
73
  -- Guided mode: current step in work item cycle
74
74
  guided_step TEXT,
75
75
 
76
+ -- Ownership (for multi-agent teams)
77
+ owner TEXT,
78
+
76
79
  -- Content
77
80
  title TEXT NOT NULL,
78
81
  description TEXT,
@@ -94,7 +97,7 @@ CREATE TABLE IF NOT EXISTS work_items (
94
97
  UNIQUE (project_id, item_id)
95
98
  );
96
99
 
97
- -- Project documents (PRD, architecture, etc.)
100
+ -- Project documents (PRD, architecture, plans, etc.)
98
101
  CREATE TABLE IF NOT EXISTS project_documents (
99
102
  id INTEGER PRIMARY KEY AUTOINCREMENT,
100
103
  project_id INTEGER NOT NULL,
@@ -103,10 +106,15 @@ CREATE TABLE IF NOT EXISTS project_documents (
103
106
  title TEXT NOT NULL,
104
107
  content TEXT NOT NULL,
105
108
 
109
+ -- Plan-specific fields (NULL for non-plan documents)
110
+ status TEXT,
111
+ work_item_id INTEGER,
112
+
106
113
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
107
114
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
108
115
 
109
- FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
116
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
117
+ FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE SET NULL
110
118
  );
111
119
 
112
120
  -- Work item history (audit trail)
@@ -135,9 +143,64 @@ CREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);
135
143
  CREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);
136
144
  CREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);
137
145
  CREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);
146
+ CREATE INDEX IF NOT EXISTS idx_work_items_owner ON work_items(owner);
138
147
 
139
148
  CREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);
140
149
  CREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);
150
+ CREATE INDEX IF NOT EXISTS idx_project_documents_status ON project_documents(status);
151
+ CREATE INDEX IF NOT EXISTS idx_project_documents_work_item ON project_documents(work_item_id);
141
152
 
142
153
  CREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);
154
+
155
+ -- Terminal sessions (multi-terminal awareness)
156
+ CREATE TABLE IF NOT EXISTS terminal_sessions (
157
+ id TEXT PRIMARY KEY,
158
+ project_id INTEGER,
159
+ pid INTEGER NOT NULL,
160
+ tty_path TEXT,
161
+ label TEXT,
162
+ started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
163
+ last_heartbeat DATETIME DEFAULT CURRENT_TIMESTAMP,
164
+ active_agent TEXT DEFAULT 'default',
165
+ agents_json TEXT DEFAULT '[]',
166
+ status TEXT DEFAULT 'active',
167
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL
168
+ );
169
+
170
+ CREATE INDEX IF NOT EXISTS idx_terminal_sessions_project ON terminal_sessions(project_id);
171
+ CREATE INDEX IF NOT EXISTS idx_terminal_sessions_status ON terminal_sessions(status);
172
+
173
+ -- File locks (multi-terminal file lock awareness)
174
+ CREATE TABLE IF NOT EXISTS file_locks (
175
+ path TEXT NOT NULL,
176
+ project_id INTEGER NOT NULL,
177
+ session_id TEXT NOT NULL,
178
+ agent_id TEXT NOT NULL,
179
+ locked_at DATETIME DEFAULT CURRENT_TIMESTAMP,
180
+ PRIMARY KEY (path, project_id),
181
+ FOREIGN KEY (session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE,
182
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
183
+ );
184
+
185
+ CREATE INDEX IF NOT EXISTS idx_file_locks_session ON file_locks(session_id);
186
+
187
+ -- Session notifications (cross-session notifications)
188
+ CREATE TABLE IF NOT EXISTS session_notifications (
189
+ id TEXT PRIMARY KEY,
190
+ project_id INTEGER NOT NULL,
191
+ from_session_id TEXT NOT NULL,
192
+ to_session_id TEXT,
193
+ type TEXT NOT NULL,
194
+ title TEXT NOT NULL,
195
+ message TEXT,
196
+ payload_json TEXT,
197
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
198
+ read_at DATETIME,
199
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
200
+ FOREIGN KEY (from_session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE
201
+ );
202
+
203
+ CREATE INDEX IF NOT EXISTS idx_session_notifications_project ON session_notifications(project_id);
204
+ CREATE INDEX IF NOT EXISTS idx_session_notifications_to_session ON session_notifications(to_session_id);
205
+ CREATE INDEX IF NOT EXISTS idx_session_notifications_unread ON session_notifications(read_at);
143
206
  `;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Episodes Module (CLI)
3
+ *
4
+ * Work history tracking with file-based persistence and automatic recording.
5
+ */
6
+ import type { EpisodeStore } from '@compilr-dev/agents';
7
+ export { FileEpisodeStore } from './store.js';
8
+ export type { FileEpisodeStoreOptions } from './store.js';
9
+ export { EpisodeRecorder } from './recorder.js';
10
+ export type { EpisodeRecorderConfig } from './recorder.js';
11
+ export { isSignificantWork, extractAffectedFiles, extractLinesChanged } from './significant-work.js';
12
+ export { queryWorkAtRisk } from './work-at-risk.js';
13
+ export { buildWorkSummaryContent, updateWorkSummaryAnchor } from './work-summary-anchor.js';
14
+ export type { WorkSummaryAnchorConfig } from './work-summary-anchor.js';
15
+ export type { PendingToolSignal, EpisodeFile } from './types.js';
16
+ export type { Effort, WorkEpisode, EffortSignals, EffortWeights, EffortSummary, ProjectWorkSummary, WorkAtRisk, EpisodeStore, } from './types.js';
17
+ /** Set the global episode store (called during startup) */
18
+ export declare function setGlobalEpisodeStore(store: EpisodeStore): void;
19
+ /** Get the global episode store (used by recall_work tool) */
20
+ export declare function getGlobalEpisodeStore(): EpisodeStore | null;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Episodes Module (CLI)
3
+ *
4
+ * Work history tracking with file-based persistence and automatic recording.
5
+ */
6
+ // Store
7
+ export { FileEpisodeStore } from './store.js';
8
+ // Recorder
9
+ export { EpisodeRecorder } from './recorder.js';
10
+ // Significant work detection
11
+ export { isSignificantWork, extractAffectedFiles, extractLinesChanged } from './significant-work.js';
12
+ // Work at risk
13
+ export { queryWorkAtRisk } from './work-at-risk.js';
14
+ // Work summary anchor
15
+ export { buildWorkSummaryContent, updateWorkSummaryAnchor } from './work-summary-anchor.js';
16
+ // =============================================================================
17
+ // Global Episode Store
18
+ // =============================================================================
19
+ let _globalStore = null;
20
+ /** Set the global episode store (called during startup) */
21
+ export function setGlobalEpisodeStore(store) {
22
+ _globalStore = store;
23
+ }
24
+ /** Get the global episode store (used by recall_work tool) */
25
+ export function getGlobalEpisodeStore() {
26
+ return _globalStore;
27
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Episode Recorder
3
+ *
4
+ * Collects tool call signals via an AfterToolHook, batches them within
5
+ * a time window, and persists as WorkEpisode records.
6
+ */
7
+ import type { AfterToolHook, Effort, EpisodeStore } from '@compilr-dev/agents';
8
+ export interface EpisodeRecorderConfig {
9
+ /** Episode store for persistence */
10
+ store: EpisodeStore;
11
+ /** Agent ID (e.g., 'default', 'backend') */
12
+ agentId: string;
13
+ /** Terminal session prefix (first 8 chars) */
14
+ terminalPrefix: string;
15
+ /** Session ID for grouping */
16
+ sessionId: string;
17
+ /** Enable automatic recording via hook (default: true) */
18
+ autoRecord?: boolean;
19
+ /** Minimum effort level to record (default: 'low') */
20
+ minEffortToRecord?: Effort;
21
+ /** Batch window in milliseconds (default: 5000) */
22
+ batchWindowMs?: number;
23
+ /** Called after each batch is flushed as a WorkEpisode */
24
+ onBatchFlushed?: () => void;
25
+ }
26
+ export declare class EpisodeRecorder {
27
+ private readonly store;
28
+ private readonly agentId;
29
+ private readonly terminalPrefix;
30
+ private readonly sessionId;
31
+ private readonly autoRecord;
32
+ private readonly minEffortToRecord;
33
+ private readonly batchWindowMs;
34
+ private readonly onBatchFlushed?;
35
+ private pendingSignals;
36
+ private batchTimer;
37
+ private batchStartTime;
38
+ constructor(config: EpisodeRecorderConfig);
39
+ /**
40
+ * Create an AfterToolHook for observing tool calls.
41
+ * Always returns undefined (observation only — never modifies results).
42
+ */
43
+ createHook(): AfterToolHook;
44
+ /**
45
+ * Force-flush all pending signals as a WorkEpisode.
46
+ * Called on shutdown to avoid losing data.
47
+ */
48
+ flush(): void;
49
+ private scheduleBatch;
50
+ private buildAndSaveEpisode;
51
+ }