@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Plan Repository
3
+ *
4
+ * Handles all database operations for plans.
5
+ * Plans are stored in project_documents with doc_type='plan'.
6
+ */
7
+ import type { PlanStatus } from '../schema.js';
8
+ export interface CreatePlanInput {
9
+ project_id: number;
10
+ name: string;
11
+ content: string;
12
+ work_item_id?: number;
13
+ }
14
+ export interface UpdatePlanInput {
15
+ content?: string;
16
+ status?: PlanStatus;
17
+ work_item_id?: number | null;
18
+ }
19
+ export interface ListPlansOptions {
20
+ status?: PlanStatus | PlanStatus[];
21
+ work_item_id?: number;
22
+ limit?: number;
23
+ order_by?: 'updated_desc' | 'updated_asc' | 'created_desc' | 'name_asc';
24
+ }
25
+ export interface Plan {
26
+ id: number;
27
+ projectId: number;
28
+ name: string;
29
+ content: string;
30
+ status: PlanStatus;
31
+ workItemId: number | null;
32
+ createdAt: Date;
33
+ updatedAt: Date;
34
+ }
35
+ export interface PlanSummary {
36
+ id: number;
37
+ name: string;
38
+ status: PlanStatus;
39
+ workItemId: number | null;
40
+ workItemTitle?: string;
41
+ workItemItemId?: string;
42
+ updatedAt: Date;
43
+ }
44
+ export interface PlanWithWorkItem extends Plan {
45
+ workItem?: {
46
+ id: number;
47
+ itemId: string;
48
+ title: string;
49
+ status: string;
50
+ };
51
+ }
52
+ export declare const planRepository: {
53
+ /**
54
+ * Create a new plan
55
+ */
56
+ create(input: CreatePlanInput): Plan;
57
+ /**
58
+ * Get plan by ID
59
+ */
60
+ getById(id: number): Plan | null;
61
+ /**
62
+ * Get plan by name for a project
63
+ */
64
+ getByName(projectId: number, name: string): Plan | null;
65
+ /**
66
+ * Get plan with linked work item details
67
+ */
68
+ getWithWorkItem(id: number): PlanWithWorkItem | null;
69
+ /**
70
+ * Update a plan
71
+ */
72
+ update(id: number, input: UpdatePlanInput): Plan | null;
73
+ /**
74
+ * Delete a plan
75
+ */
76
+ delete(id: number): boolean;
77
+ /**
78
+ * List plans for a project
79
+ */
80
+ list(projectId: number, options?: ListPlansOptions): PlanSummary[];
81
+ /**
82
+ * Count plans by status for a project
83
+ */
84
+ countByStatus(projectId: number): Record<PlanStatus, number>;
85
+ /**
86
+ * Get plans with status 'in_progress' for a project
87
+ */
88
+ getInProgress(projectId: number): PlanSummary[];
89
+ /**
90
+ * Check if there are any in_progress plans for a project
91
+ */
92
+ hasInProgress(projectId: number): boolean;
93
+ /**
94
+ * Link a plan to a work item
95
+ */
96
+ linkWorkItem(planId: number, workItemId: number): Plan | null;
97
+ /**
98
+ * Unlink a plan from its work item
99
+ */
100
+ unlinkWorkItem(planId: number): Plan | null;
101
+ };
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Plan Repository
3
+ *
4
+ * Handles all database operations for plans.
5
+ * Plans are stored in project_documents with doc_type='plan'.
6
+ */
7
+ import { getDb } from '../index.js';
8
+ // =============================================================================
9
+ // Status Transition Rules
10
+ // =============================================================================
11
+ const VALID_TRANSITIONS = {
12
+ draft: ['approved', 'abandoned'],
13
+ approved: ['in_progress', 'abandoned'],
14
+ in_progress: ['completed', 'abandoned'],
15
+ completed: [], // Terminal state
16
+ abandoned: ['draft'], // Can re-open
17
+ };
18
+ function isValidTransition(from, to) {
19
+ return VALID_TRANSITIONS[from].includes(to);
20
+ }
21
+ // =============================================================================
22
+ // Helpers
23
+ // =============================================================================
24
+ function recordToPlan(record) {
25
+ return {
26
+ id: record.id,
27
+ projectId: record.project_id,
28
+ name: record.title,
29
+ content: record.content,
30
+ status: record.status ?? 'draft',
31
+ workItemId: record.work_item_id,
32
+ createdAt: new Date(record.created_at),
33
+ updatedAt: new Date(record.updated_at),
34
+ };
35
+ }
36
+ function recordToPlanSummary(record) {
37
+ return {
38
+ id: record.id,
39
+ name: record.title,
40
+ status: record.status ?? 'draft',
41
+ workItemId: record.work_item_id,
42
+ workItemTitle: record.work_item_title,
43
+ workItemItemId: record.work_item_item_id,
44
+ updatedAt: new Date(record.updated_at),
45
+ };
46
+ }
47
+ // =============================================================================
48
+ // Repository
49
+ // =============================================================================
50
+ export const planRepository = {
51
+ /**
52
+ * Create a new plan
53
+ */
54
+ create(input) {
55
+ const db = getDb();
56
+ const now = new Date().toISOString();
57
+ const result = db
58
+ .prepare(`
59
+ INSERT INTO project_documents (
60
+ project_id, doc_type, title, content, status, work_item_id,
61
+ created_at, updated_at
62
+ ) VALUES (?, 'plan', ?, ?, 'draft', ?, ?, ?)
63
+ `)
64
+ .run(input.project_id, input.name, input.content, input.work_item_id ?? null, now, now);
65
+ const plan = this.getById(Number(result.lastInsertRowid));
66
+ if (!plan)
67
+ throw new Error('Failed to create plan');
68
+ return plan;
69
+ },
70
+ /**
71
+ * Get plan by ID
72
+ */
73
+ getById(id) {
74
+ const db = getDb();
75
+ const record = db
76
+ .prepare(`SELECT * FROM project_documents WHERE id = ? AND doc_type = 'plan'`)
77
+ .get(id);
78
+ return record ? recordToPlan(record) : null;
79
+ },
80
+ /**
81
+ * Get plan by name for a project
82
+ */
83
+ getByName(projectId, name) {
84
+ const db = getDb();
85
+ const record = db
86
+ .prepare(`SELECT * FROM project_documents
87
+ WHERE project_id = ? AND doc_type = 'plan' AND title = ?`)
88
+ .get(projectId, name);
89
+ return record ? recordToPlan(record) : null;
90
+ },
91
+ /**
92
+ * Get plan with linked work item details
93
+ */
94
+ getWithWorkItem(id) {
95
+ const db = getDb();
96
+ const record = db
97
+ .prepare(`
98
+ SELECT pd.*, wi.item_id as wi_item_id, wi.title as wi_title, wi.status as wi_status
99
+ FROM project_documents pd
100
+ LEFT JOIN work_items wi ON pd.work_item_id = wi.id
101
+ WHERE pd.id = ? AND pd.doc_type = 'plan'
102
+ `)
103
+ .get(id);
104
+ if (!record)
105
+ return null;
106
+ const plan = recordToPlan(record);
107
+ if (record.wi_item_id && record.work_item_id !== null) {
108
+ plan.workItem = {
109
+ id: record.work_item_id,
110
+ itemId: record.wi_item_id,
111
+ title: record.wi_title ?? '',
112
+ status: record.wi_status ?? '',
113
+ };
114
+ }
115
+ return plan;
116
+ },
117
+ /**
118
+ * Update a plan
119
+ */
120
+ update(id, input) {
121
+ const db = getDb();
122
+ // Get current plan for status validation
123
+ const current = this.getById(id);
124
+ if (!current)
125
+ return null;
126
+ // Validate status transition if changing status
127
+ if (input.status && input.status !== current.status) {
128
+ if (!isValidTransition(current.status, input.status)) {
129
+ throw new Error(`Invalid status transition: ${current.status} → ${input.status}`);
130
+ }
131
+ }
132
+ const updates = [];
133
+ const params = [];
134
+ if (input.content !== undefined) {
135
+ updates.push('content = ?');
136
+ params.push(input.content);
137
+ }
138
+ if (input.status !== undefined) {
139
+ updates.push('status = ?');
140
+ params.push(input.status);
141
+ }
142
+ if (input.work_item_id !== undefined) {
143
+ updates.push('work_item_id = ?');
144
+ params.push(input.work_item_id);
145
+ }
146
+ if (updates.length === 0) {
147
+ return current;
148
+ }
149
+ updates.push('updated_at = ?');
150
+ params.push(new Date().toISOString());
151
+ params.push(id);
152
+ const query = `UPDATE project_documents SET ${updates.join(', ')} WHERE id = ? AND doc_type = 'plan'`;
153
+ db.prepare(query).run(...params);
154
+ return this.getById(id);
155
+ },
156
+ /**
157
+ * Delete a plan
158
+ */
159
+ delete(id) {
160
+ const db = getDb();
161
+ const result = db
162
+ .prepare(`DELETE FROM project_documents WHERE id = ? AND doc_type = 'plan'`)
163
+ .run(id);
164
+ return result.changes > 0;
165
+ },
166
+ /**
167
+ * List plans for a project
168
+ */
169
+ list(projectId, options = {}) {
170
+ const db = getDb();
171
+ const conditions = ["pd.project_id = ?", "pd.doc_type = 'plan'"];
172
+ const params = [projectId];
173
+ // Filter by status
174
+ if (options.status) {
175
+ if (Array.isArray(options.status)) {
176
+ const placeholders = options.status.map(() => '?').join(', ');
177
+ conditions.push(`pd.status IN (${placeholders})`);
178
+ params.push(...options.status);
179
+ }
180
+ else {
181
+ conditions.push('pd.status = ?');
182
+ params.push(options.status);
183
+ }
184
+ }
185
+ // Filter by work item
186
+ if (options.work_item_id !== undefined) {
187
+ conditions.push('pd.work_item_id = ?');
188
+ params.push(options.work_item_id);
189
+ }
190
+ // Order by
191
+ let orderBy = 'pd.updated_at DESC';
192
+ switch (options.order_by) {
193
+ case 'updated_asc':
194
+ orderBy = 'pd.updated_at ASC';
195
+ break;
196
+ case 'created_desc':
197
+ orderBy = 'pd.created_at DESC';
198
+ break;
199
+ case 'name_asc':
200
+ orderBy = 'pd.title ASC';
201
+ break;
202
+ }
203
+ // Limit
204
+ const limit = options.limit ?? 20;
205
+ const query = `
206
+ SELECT pd.*, wi.title as work_item_title, wi.item_id as work_item_item_id
207
+ FROM project_documents pd
208
+ LEFT JOIN work_items wi ON pd.work_item_id = wi.id
209
+ WHERE ${conditions.join(' AND ')}
210
+ ORDER BY ${orderBy}
211
+ LIMIT ?
212
+ `;
213
+ params.push(limit);
214
+ const records = db.prepare(query).all(...params);
215
+ return records.map(recordToPlanSummary);
216
+ },
217
+ /**
218
+ * Count plans by status for a project
219
+ */
220
+ countByStatus(projectId) {
221
+ const db = getDb();
222
+ const results = db
223
+ .prepare(`
224
+ SELECT status, COUNT(*) as count
225
+ FROM project_documents
226
+ WHERE project_id = ? AND doc_type = 'plan'
227
+ GROUP BY status
228
+ `)
229
+ .all(projectId);
230
+ const counts = {
231
+ draft: 0,
232
+ approved: 0,
233
+ in_progress: 0,
234
+ completed: 0,
235
+ abandoned: 0,
236
+ };
237
+ for (const row of results) {
238
+ if (row.status && row.status in counts) {
239
+ counts[row.status] = row.count;
240
+ }
241
+ }
242
+ return counts;
243
+ },
244
+ /**
245
+ * Get plans with status 'in_progress' for a project
246
+ */
247
+ getInProgress(projectId) {
248
+ return this.list(projectId, { status: 'in_progress' });
249
+ },
250
+ /**
251
+ * Check if there are any in_progress plans for a project
252
+ */
253
+ hasInProgress(projectId) {
254
+ const db = getDb();
255
+ const result = db
256
+ .prepare(`
257
+ SELECT COUNT(*) as count FROM project_documents
258
+ WHERE project_id = ? AND doc_type = 'plan' AND status = 'in_progress'
259
+ `)
260
+ .get(projectId);
261
+ return result.count > 0;
262
+ },
263
+ /**
264
+ * Link a plan to a work item
265
+ */
266
+ linkWorkItem(planId, workItemId) {
267
+ return this.update(planId, { work_item_id: workItemId });
268
+ },
269
+ /**
270
+ * Unlink a plan from its work item
271
+ */
272
+ unlinkWorkItem(planId) {
273
+ return this.update(planId, { work_item_id: null });
274
+ },
275
+ };
@@ -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,