@compilr-dev/cli 0.5.0 → 0.5.2

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 (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  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.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -4,11 +4,12 @@
4
4
  * Commands for project management: init, backlog, workflow, anchors, design, sketch, refine
5
5
  */
6
6
  import { executeCommand } from '../registry.js';
7
- import { BacklogOverlayV2, WorkflowOverlayV2, DocsOverlayV2, DocumentDetailOverlayV2, AnchorsOverlayV2, ProjectsOverlayV2, NewProjectOverlayV2, InitSetupOverlayV2, ArchTypeOverlayV2, ModelWarningOverlayV2 } from '../../ui/overlay/index.js';
8
- import { projectRepository, workItemRepository } from '../../db/repositories/index.js';
7
+ import { BacklogOverlayV2, WorkflowOverlayV2, DocsOverlayV2, DocumentDetailOverlayV2, AnchorsOverlayV2, ProjectsOverlayV2, NewProjectOverlayV2, OnboardingWizardOverlayV2, KeysOverlayV2, ArchTypeOverlayV2, ModelWarningOverlayV2 } from '../../ui/overlay/index.js';
8
+ import { projectRepository, workItemRepository, documentRepository } from '../../db/repositories/index.js';
9
9
  import { setCurrentProject, getCurrentProject } from '../../tools/project-db.js';
10
10
  import { getSkillPrompt } from '../../repl-helpers.js';
11
11
  import { getModelTier, modelMeetsTier } from '../../utils/model-tiers.js';
12
+ import { getCurrentProjectIdForTracking, handleProjectSwitch } from './session.js';
12
13
  // =============================================================================
13
14
  // Helper Functions
14
15
  // =============================================================================
@@ -26,33 +27,80 @@ function syncFooterWithCurrentProject(ctx) {
26
27
  export const newCommand = {
27
28
  name: 'new',
28
29
  description: 'Create a new project',
30
+ details: 'Interactive wizard to scaffold a new project. Asks about project name, type, tech stack, and documentation preferences. Creates project structure with COMPILR.md, backlog, and optional separate docs repo.',
31
+ examples: [{ code: '/new' }],
32
+ interactions: [
33
+ '8-step wizard (0-7)',
34
+ '↑/↓ for selection steps, type for input steps',
35
+ 'Enter to confirm, Esc to go back',
36
+ ],
29
37
  async execute(_args, ctx) {
38
+ // Track project ID before overlay (for session/team switch handling)
39
+ const oldProjectId = getCurrentProjectIdForTracking();
30
40
  const newProjectOverlay = new NewProjectOverlayV2();
31
41
  const result = await ctx.ui.showOverlay(newProjectOverlay);
32
42
  // User cancelled
33
43
  if (!result?.created) {
34
44
  return true;
35
45
  }
36
- // Project was created - show success messages
37
- ctx.ui.print({ type: 'success', message: `Project created: ${result.projectPath ?? ''}` });
38
- if (result.docsPath) {
39
- ctx.ui.print({ type: 'success', message: `Docs repo created: ${result.docsPath}` });
46
+ // Check if this was an import or new project
47
+ const isImport = result.imported === true;
48
+ // Show success message
49
+ if (isImport) {
50
+ ctx.ui.print({ type: 'success', message: `Project imported: ${result.projectPath ?? ''}` });
51
+ }
52
+ else {
53
+ ctx.ui.print({ type: 'success', message: `Project created: ${result.projectPath ?? ''}` });
54
+ if (result.docsPath) {
55
+ ctx.ui.print({ type: 'success', message: `Docs repo created: ${result.docsPath}` });
56
+ }
40
57
  }
41
58
  // Register project in database if tracking is enabled
42
59
  if (result.trackInDatabase && result.projectName && result.projectPath) {
43
60
  try {
61
+ // Determine display name - for imports, use detected name; for new projects, prettify
62
+ const displayName = result.detectedProject?.displayName
63
+ ?? result.projectName.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
44
64
  const project = projectRepository.create({
45
65
  name: result.projectName,
46
- display_name: result.projectName.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
66
+ display_name: displayName,
47
67
  description: result.description,
48
68
  path: result.projectPath,
49
69
  type: 'general',
50
70
  workflow_mode: result.workflowMode ?? 'flexible',
71
+ git_remote: result.gitRemote,
72
+ // For imports, include detected language and framework
73
+ language: result.detectedProject?.language ?? undefined,
74
+ framework: result.detectedProject?.framework ?? undefined,
75
+ package_manager: result.detectedProject?.packageManager ?? undefined,
51
76
  });
77
+ // For imports, set lifecycle to 'active' immediately
78
+ if (isImport) {
79
+ projectRepository.update(project.id, { lifecycle_state: 'active' });
80
+ }
52
81
  setCurrentProject({ id: project.id, name: project.name, displayName: project.displayName, path: project.path });
53
82
  ctx.ui.setProjectName(project.displayName);
54
83
  ctx.ui.print({ type: 'success', message: `Project tracked in database (${result.workflowMode ?? 'flexible'} mode)` });
55
84
  ctx.ui.print({ type: 'success', message: `"${project.displayName}" is now the current project` });
85
+ // Handle project switch - saves old session/team and creates fresh team for new project
86
+ const switchResult = await handleProjectSwitch(oldProjectId, ctx.agent ?? null, ctx.team && ctx.agentFactory ? {
87
+ team: ctx.team,
88
+ agentFactory: ctx.agentFactory,
89
+ } : undefined);
90
+ if (switchResult?.switched) {
91
+ // Update the team if a new one was created
92
+ if (switchResult.newTeam && ctx.setTeam) {
93
+ ctx.setTeam(switchResult.newTeam);
94
+ // Update footer with new active agent
95
+ const active = switchResult.newTeam.getActive();
96
+ ctx.ui.setActiveTeamAgent({
97
+ id: active.id,
98
+ displayName: active.displayName,
99
+ mascot: active.mascot,
100
+ });
101
+ }
102
+ ctx.ui.print({ type: 'info', message: 'Fresh team and session started for project.' });
103
+ }
56
104
  }
57
105
  catch (dbError) {
58
106
  ctx.ui.print({ type: 'warning', message: `Could not register in database: ${dbError.message}` });
@@ -60,17 +108,29 @@ export const newCommand = {
60
108
  }
61
109
  // Show next steps
62
110
  ctx.ui.print({ type: 'info', message: '' });
63
- ctx.ui.print({ type: 'info', message: 'Next steps:' });
64
- ctx.ui.print({ type: 'info', message: ` cd ${result.projectPath?.split('/').pop() ?? 'project'}` });
65
- ctx.ui.print({ type: 'info', message: ' npm install' });
66
- ctx.ui.print({ type: 'info', message: ' npm run dev' });
111
+ if (isImport) {
112
+ // Import-specific next steps
113
+ ctx.ui.print({ type: 'info', message: 'Next steps:' });
114
+ ctx.ui.print({ type: 'info', message: ' Review the generated COMPILR.md' });
115
+ ctx.ui.print({ type: 'info', message: ' Add existing work items with /backlog' });
116
+ ctx.ui.print({ type: 'info', message: ' Or ask the agent to explore the codebase' });
117
+ }
118
+ else {
119
+ // New project next steps
120
+ ctx.ui.print({ type: 'info', message: 'Next steps:' });
121
+ ctx.ui.print({ type: 'info', message: ` cd ${result.projectPath?.split('/').pop() ?? 'project'}` });
122
+ ctx.ui.print({ type: 'info', message: ' npm install' });
123
+ ctx.ui.print({ type: 'info', message: ' npm run dev' });
124
+ }
67
125
  ctx.ui.print({ type: 'info', message: '' });
68
126
  // Hint for agent interaction
69
127
  const compilrMdPath = result.docsPath
70
128
  ? `${result.docsPath}/COMPILR.md`
71
129
  : `${result.projectPath ?? '.'}/COMPILR.md`;
72
130
  ctx.ui.print({ type: 'info', message: `Tip: Ask the agent to read ${compilrMdPath} to get started!` });
73
- ctx.ui.print({ type: 'info', message: 'When ready to define requirements, type /design' });
131
+ if (!isImport) {
132
+ ctx.ui.print({ type: 'info', message: 'When ready to define requirements, type /design' });
133
+ }
74
134
  return true;
75
135
  },
76
136
  };
@@ -79,10 +139,30 @@ export const newCommand = {
79
139
  // =============================================================================
80
140
  export const initCommand = {
81
141
  name: 'init',
82
- description: 'View CLI setup status',
142
+ description: 'Run the CLI setup wizard',
143
+ details: 'Opens the onboarding wizard to configure API keys, git settings, and CLI preferences. Re-runnable anytime to update settings.',
144
+ examples: [{ code: '/init' }],
145
+ interactions: [
146
+ '↑/↓ to navigate wizard steps',
147
+ 'Enter to confirm, Esc to go back',
148
+ 'Type to enter values in input steps',
149
+ ],
83
150
  async execute(_args, ctx) {
84
- const initSetupOverlay = new InitSetupOverlayV2();
85
- await ctx.ui.showOverlay(initSetupOverlay);
151
+ // Show onboarding wizard (same as first-run experience)
152
+ // Loop if user chooses to configure keys
153
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
154
+ while (true) {
155
+ const wizard = new OnboardingWizardOverlayV2();
156
+ const result = await ctx.ui.showOverlay(wizard);
157
+ if (result?.openKeys) {
158
+ // User chose to configure keys - show keys overlay then loop back
159
+ const keysOverlay = new KeysOverlayV2();
160
+ await ctx.ui.showOverlay(keysOverlay);
161
+ continue;
162
+ }
163
+ // Done (completed or cancelled)
164
+ break;
165
+ }
86
166
  return true;
87
167
  },
88
168
  };
@@ -92,8 +172,19 @@ export const initCommand = {
92
172
  export const backlogCommand = {
93
173
  name: 'backlog',
94
174
  description: 'View and manage project backlog',
175
+ details: 'Opens an interactive overlay to browse, filter, and manage backlog items. You can add new items, change status/priority, search, and view details.',
176
+ examples: [{ code: '/backlog' }],
177
+ interactions: [
178
+ 'Tab cycles: All → Feature → Bug → Tech-Debt → Chore → Active',
179
+ '↑/↓ to navigate, ←/→ for pages',
180
+ 'Enter for details, Space to toggle status',
181
+ '/ to search, n for new item',
182
+ 'Esc to close',
183
+ ],
95
184
  async execute(_args, ctx) {
96
- const backlogOverlay = new BacklogOverlayV2();
185
+ // Get team agent IDs for owner selection in detail screen
186
+ const teamAgentIds = ctx.team?.getAgentIds() ?? [];
187
+ const backlogOverlay = new BacklogOverlayV2(undefined, teamAgentIds);
97
188
  const result = await ctx.ui.showOverlay(backlogOverlay);
98
189
  if (result?.modified) {
99
190
  ctx.ui.print({ type: 'success', message: 'Backlog updated.' });
@@ -107,9 +198,42 @@ export const backlogCommand = {
107
198
  export const workflowCommand = {
108
199
  name: 'workflow',
109
200
  description: 'View project workflow dashboard',
201
+ details: 'Displays the current project workflow status, progress through phases (init → design → backlog → scaffold → build), and recommended next actions. Helps you understand where you are in the development process.',
202
+ examples: [{ code: '/workflow' }],
203
+ interactions: [
204
+ '↑/↓ to navigate actions',
205
+ 'Enter to run selected action',
206
+ 'Esc to close',
207
+ ],
110
208
  async execute(_args, ctx) {
209
+ // Track project ID before overlay (for session switch handling)
210
+ const oldProjectId = getCurrentProjectIdForTracking();
111
211
  const workflowOverlay = new WorkflowOverlayV2();
112
212
  const result = await ctx.ui.showOverlay(workflowOverlay);
213
+ // Handle project switch if it occurred (includes team switching)
214
+ const switchResult = await handleProjectSwitch(oldProjectId, ctx.agent ?? null, ctx.team && ctx.agentFactory ? {
215
+ team: ctx.team,
216
+ agentFactory: ctx.agentFactory,
217
+ } : undefined);
218
+ if (switchResult?.switched) {
219
+ // Update the team if a new one was created/loaded
220
+ if (switchResult.newTeam && ctx.setTeam) {
221
+ ctx.setTeam(switchResult.newTeam);
222
+ // Update footer with new active agent
223
+ const active = switchResult.newTeam.getActive();
224
+ ctx.ui.setActiveTeamAgent({
225
+ id: active.id,
226
+ displayName: active.displayName,
227
+ mascot: active.mascot,
228
+ });
229
+ }
230
+ if (switchResult.sessionRestored) {
231
+ ctx.ui.print({ type: 'info', message: `Session restored (${String(switchResult.messageCount)} messages).` });
232
+ }
233
+ else {
234
+ ctx.ui.print({ type: 'info', message: 'Started fresh session for this project.' });
235
+ }
236
+ }
113
237
  // Handle workflow result - execute command if returned
114
238
  if (result?.command) {
115
239
  // Strip leading slash and execute the command
@@ -127,6 +251,16 @@ export const workflowCommand = {
127
251
  export const anchorsCommand = {
128
252
  name: 'anchors',
129
253
  description: 'View and manage anchors (persistent context)',
254
+ details: 'Anchors are critical pieces of information that survive context compaction. They are always included at the top of the context window. Manage both global anchors and project-specific anchors.',
255
+ examples: [{ code: '/anchors' }],
256
+ interactions: [
257
+ '↑/↓ to navigate anchors',
258
+ '[a] Add new anchor',
259
+ '[e] or Enter to edit',
260
+ '[d] to delete',
261
+ '[r] to refresh',
262
+ 'Esc to close',
263
+ ],
130
264
  async execute(_args, ctx) {
131
265
  const anchorsOverlay = new AnchorsOverlayV2();
132
266
  const result = await ctx.ui.showOverlay(anchorsOverlay);
@@ -142,6 +276,8 @@ export const anchorsCommand = {
142
276
  export const designCommand = {
143
277
  name: 'design',
144
278
  description: 'Agent-driven requirements gathering',
279
+ details: 'Comprehensive requirements gathering workflow. The agent guides you through vision, features, and technical context phases, then creates a PRD and populates the backlog with 5-15 items. Best used after /new.',
280
+ examples: [{ code: '/design' }],
145
281
  async execute(_args, ctx) {
146
282
  // Check if a project is set
147
283
  const currentProject = getCurrentProject();
@@ -217,6 +353,8 @@ Please start by using todo_write to track the design phases, then begin with Pha
217
353
  export const sketchCommand = {
218
354
  name: 'sketch',
219
355
  description: 'Quick 6-question project outline',
356
+ details: 'Lightweight alternative to /design. Asks 6 quick questions and creates 3-8 backlog items. Good for small projects or when you want to get started quickly.',
357
+ examples: [{ code: '/sketch' }],
220
358
  execute(_args, ctx) {
221
359
  // Check if a project is set
222
360
  const currentProject = getCurrentProject();
@@ -263,6 +401,11 @@ Please start by asking me about the type of application I'm building using the a
263
401
  export const refineCommand = {
264
402
  name: 'refine',
265
403
  description: 'Iterative refinement of requirements',
404
+ details: 'Iteratively refine backlog items. Can focus on a specific item or let the agent suggest what to refine. Useful for breaking down large items or adding acceptance criteria.',
405
+ examples: [
406
+ { code: '/refine', description: 'Agent picks item to refine' },
407
+ { code: '/refine REQ-003', description: 'Refine specific item' },
408
+ ],
266
409
  async execute(args, ctx) {
267
410
  // Check if a project is set
268
411
  const currentProject = getCurrentProject();
@@ -353,7 +496,13 @@ ${agentInstructions}`;
353
496
  // =============================================================================
354
497
  export const buildCommand = {
355
498
  name: 'build',
356
- description: 'Build a backlog item',
499
+ description: 'Implement a backlog item',
500
+ details: 'Picks the highest priority backlog item (or a specific one) and guides the agent through implementing it. Includes planning, coding, testing, and committing. Auto-detects if project scaffold is needed first.',
501
+ examples: [
502
+ { code: '/build', description: 'Pick highest priority item' },
503
+ { code: '/build REQ-003', description: 'Build specific item' },
504
+ { code: '/build scaffold', description: 'Create project structure first' },
505
+ ],
357
506
  async execute(args, ctx) {
358
507
  const argTrimmed = args.trim();
359
508
  // Handle `/build scaffold` - redirect to scaffold command
@@ -499,7 +648,12 @@ Please start by:
499
648
  // =============================================================================
500
649
  export const noteCommand = {
501
650
  name: 'note',
502
- description: 'Create a session note',
651
+ description: 'Create a session note capturing work done',
652
+ details: 'Creates a structured markdown note summarizing the current session including changes made, decisions, blockers, and next steps. Optionally provide a title.',
653
+ examples: [
654
+ { code: '/note', description: 'Auto-generated title' },
655
+ { code: '/note "Fixed auth bug"', description: 'Custom title' },
656
+ ],
503
657
  execute(args, ctx) {
504
658
  // Check if a project is set
505
659
  const currentProject = getCurrentProject();
@@ -551,7 +705,13 @@ Review the conversation context to understand what was accomplished, then create
551
705
  // =============================================================================
552
706
  export const prdCommand = {
553
707
  name: 'prd',
554
- description: 'Update the Product Requirements Document',
708
+ description: 'Amend or enhance the Product Requirements Document',
709
+ details: 'Update or refine the PRD created during /design. The agent reads the existing PRD and guides you through updating specific sections.',
710
+ examples: [
711
+ { code: '/prd', description: 'Interactive section selection' },
712
+ { code: '/prd vision', description: 'Update vision section' },
713
+ { code: '/prd scope', description: 'Update scope section' },
714
+ ],
555
715
  execute(args, ctx) {
556
716
  // Check if a project is set
557
717
  const currentProject = getCurrentProject();
@@ -585,7 +745,7 @@ ${prdPrompt}
585
745
 
586
746
  ${sectionInstruction}
587
747
 
588
- Start by reading the existing PRD.md file to understand current state.`;
748
+ Start by reading the existing PRD from the database using project_document_get({ doc_type: "prd" }). If no document exists yet, create a new one.`;
589
749
  // Queue message for agent
590
750
  ctx.queueAgentMessage({
591
751
  message: fullMessage,
@@ -601,7 +761,9 @@ Start by reading the existing PRD.md file to understand current state.`;
601
761
  // =============================================================================
602
762
  export const scaffoldCommand = {
603
763
  name: 'scaffold',
604
- description: 'Create project scaffold/foundation',
764
+ description: 'Create project foundation/structure',
765
+ details: 'Smart project scaffolding. If an Application Model exists, generates a complete app via the factory. If the PRD mentions entities, offers to build a model first. Otherwise falls back to manual scaffolding.',
766
+ examples: [{ code: '/scaffold' }],
605
767
  async execute(_args, ctx) {
606
768
  // Check if a project is set
607
769
  const currentProject = getCurrentProject();
@@ -645,14 +807,53 @@ export const scaffoldCommand = {
645
807
  break;
646
808
  }
647
809
  }
648
- // Get scaffold skill prompt and replace path placeholder
649
- let scaffoldPrompt = getSkillPrompt('scaffold');
810
+ // Check if an Application Model exists for this project
811
+ const appModelDoc = documentRepository.getByType(currentProject.id, 'app-model');
812
+ const hasAppModel = appModelDoc !== null;
813
+ let modelEntityCount = 0;
814
+ if (appModelDoc) {
815
+ try {
816
+ const parsed = JSON.parse(appModelDoc.content);
817
+ modelEntityCount = parsed.entities?.length ?? 0;
818
+ }
819
+ catch { /* invalid JSON — treat as no model */ }
820
+ }
821
+ // Check PRD for entity patterns (only if no model yet)
822
+ let prdMentionsEntities = false;
823
+ if (!hasAppModel) {
824
+ const prdDoc = documentRepository.getByType(currentProject.id, 'prd');
825
+ if (prdDoc) {
826
+ const lower = prdDoc.content.toLowerCase();
827
+ prdMentionsEntities = ['manage', 'track', 'crud', 'entities', 'database', 'table', 'records', 'list of', 'collection of']
828
+ .some(p => lower.includes(p));
829
+ }
830
+ }
831
+ // Choose skill: factory-scaffold if model exists or PRD has entities, else manual scaffold
832
+ let skillName;
833
+ let factoryContext = '';
834
+ if (hasAppModel && modelEntityCount > 0) {
835
+ skillName = 'factory-scaffold';
836
+ factoryContext = `\n## FACTORY CONTEXT\nAn Application Model exists with ${String(modelEntityCount)} entities. Use factory tools to scaffold from this model.\nIMPORTANT: Pass output_dir: "${currentProject.path}" to factory_scaffold.\n`;
837
+ ctx.ui.print({ type: 'info', message: `Application Model found (${String(modelEntityCount)} entities). Using factory generation.` });
838
+ }
839
+ else if (prdMentionsEntities) {
840
+ skillName = 'factory-scaffold';
841
+ factoryContext = `\n## FACTORY CONTEXT\nNo Application Model yet, but the PRD mentions entity patterns. Build the model first, then generate.\nIMPORTANT: Pass output_dir: "${currentProject.path}" to factory_scaffold.\n`;
842
+ ctx.ui.print({ type: 'info', message: 'Entity patterns detected in PRD. Using factory-assisted generation.' });
843
+ }
844
+ else {
845
+ skillName = 'scaffold';
846
+ }
847
+ // Get skill prompt and replace path placeholder
848
+ let scaffoldPrompt = getSkillPrompt(skillName);
650
849
  if (!scaffoldPrompt) {
651
- ctx.ui.print({ type: 'error', message: 'Scaffold skill not found.' });
850
+ ctx.ui.print({ type: 'error', message: `${skillName} skill not found.` });
652
851
  return true;
653
852
  }
654
- // Replace {{projectPath}} placeholder with actual path
655
853
  scaffoldPrompt = scaffoldPrompt.replace(/\{\{projectPath\}\}/g, currentProject.path);
854
+ const closingInstruction = skillName === 'factory-scaffold'
855
+ ? 'Start by checking the Application Model with app_model_get. If no model exists, read the PRD with project_document_get and build the model incrementally using app_model_update. Then generate with factory_scaffold.'
856
+ : 'Start by reading the project documents from the database using project_document_list and project_document_get. Then create a plan with todo_write before generating files.';
656
857
  // Build full message for agent with explicit project path context
657
858
  const fullMessage = `I want to create the project scaffold/foundation.
658
859
 
@@ -660,7 +861,7 @@ export const scaffoldCommand = {
660
861
  - Project Name: ${currentProject.name} (ID: ${String(currentProject.id)})
661
862
  - **Project Directory: ${currentProject.path}**
662
863
  - ALL files MUST be created in this directory
663
-
864
+ ${factoryContext}
664
865
  ## TOOL RESTRICTIONS (CRITICAL)
665
866
  - Do NOT use detect_project or find_project_root
666
867
  - Do NOT scan filesystem to detect project type
@@ -678,11 +879,15 @@ When creating files:
678
879
 
679
880
  ${scaffoldPrompt}
680
881
 
681
- Please start by reading the project documents from the database using project_document_list and project_document_get. Then create a plan with todo_write before generating files.`;
882
+ ${closingInstruction}`;
682
883
  // Queue message for agent
683
884
  ctx.queueAgentMessage({
684
885
  message: fullMessage,
685
- displayMessage: 'Create project scaffold.',
886
+ displayMessage: hasAppModel
887
+ ? 'Generate project from Application Model.'
888
+ : prdMentionsEntities
889
+ ? 'Build model and generate project.'
890
+ : 'Create project scaffold.',
686
891
  });
687
892
  return true;
688
893
  },
@@ -692,7 +897,18 @@ Please start by reading the project documents from the database using project_do
692
897
  // =============================================================================
693
898
  export const archCommand = {
694
899
  name: 'arch',
695
- description: 'Create architecture documentation',
900
+ description: 'Create architecture documentation (ADRs, diagrams, etc.)',
901
+ details: 'Guides you through creating architecture documentation. Choose from ADRs (Architecture Decision Records), system diagrams, data models, or API designs. The agent asks questions and generates properly formatted documentation.',
902
+ examples: [
903
+ { code: '/arch', description: 'Interactive type selection' },
904
+ { code: '/arch decision', description: 'Create ADR directly' },
905
+ { code: '/arch diagram', description: 'Create system diagram' },
906
+ ],
907
+ interactions: [
908
+ '↑/↓ or 1-5 to select type',
909
+ 'Enter to confirm',
910
+ 'Esc to cancel',
911
+ ],
696
912
  async execute(_args, ctx) {
697
913
  // Check if a project is set (use database, not filesystem)
698
914
  const currentProject = getCurrentProject();
@@ -755,7 +971,17 @@ Please start by using project_document_list to find any existing PRD, and workit
755
971
  // =============================================================================
756
972
  export const docsCommand = {
757
973
  name: 'docs',
758
- description: 'View project documents (PRD, architecture, design, notes)',
974
+ description: 'View project documents (PRD, architecture, etc.)',
975
+ details: 'Opens an overlay to browse and read documents stored in the database for the active project. Documents are created by /design, /arch, and other workflow commands.',
976
+ examples: [
977
+ { code: '/docs', description: 'List all documents' },
978
+ ],
979
+ interactions: [
980
+ '↑/↓ or j/k to navigate',
981
+ 'Enter to view document',
982
+ '↑/↓ to scroll content',
983
+ 'Esc to go back or close',
984
+ ],
759
985
  async execute(_args, ctx) {
760
986
  // Loop: show list → detail → back to list (until user cancels list or Ctrl+C from detail)
761
987
  let showList = true;
@@ -783,10 +1009,48 @@ export const docsCommand = {
783
1009
  // =============================================================================
784
1010
  export const projectsCommand = {
785
1011
  name: 'projects',
786
- description: 'View and manage all projects',
1012
+ description: 'View and manage projects',
1013
+ details: 'Opens an interactive overlay to browse, filter, and manage projects tracked in the database. You can view details, open projects, archive, restore, or delete them.',
1014
+ examples: [{ code: '/projects' }],
1015
+ interactions: [
1016
+ 'Tab cycles: All → Active → Paused → Completed → Archived',
1017
+ '↑/↓ or j/k to navigate',
1018
+ 'Enter to view details and actions',
1019
+ 'x to archive/restore project',
1020
+ 'd to delete project',
1021
+ 'a to show/hide archived',
1022
+ 'Esc to close',
1023
+ ],
787
1024
  async execute(_args, ctx) {
1025
+ // Track project ID before overlay (for session switch handling)
1026
+ const oldProjectId = getCurrentProjectIdForTracking();
788
1027
  const projectsOverlay = new ProjectsOverlayV2();
789
1028
  await ctx.ui.showOverlay(projectsOverlay);
1029
+ // Handle project switch if it occurred (includes team switching)
1030
+ const switchResult = await handleProjectSwitch(oldProjectId, ctx.agent ?? null, ctx.team && ctx.agentFactory ? {
1031
+ team: ctx.team,
1032
+ agentFactory: ctx.agentFactory,
1033
+ } : undefined);
1034
+ if (switchResult?.switched) {
1035
+ const current = getCurrentProject();
1036
+ // Update the team if a new one was created/loaded
1037
+ if (switchResult.newTeam && ctx.setTeam) {
1038
+ ctx.setTeam(switchResult.newTeam);
1039
+ // Update footer with new active agent
1040
+ const active = switchResult.newTeam.getActive();
1041
+ ctx.ui.setActiveTeamAgent({
1042
+ id: active.id,
1043
+ displayName: active.displayName,
1044
+ mascot: active.mascot,
1045
+ });
1046
+ }
1047
+ if (switchResult.sessionRestored) {
1048
+ ctx.ui.print({ type: 'success', message: `Switched to "${current?.displayName ?? 'project'}" - session restored (${String(switchResult.messageCount)} messages).` });
1049
+ }
1050
+ else {
1051
+ ctx.ui.print({ type: 'success', message: `Switched to "${current?.displayName ?? 'project'}" - fresh session.` });
1052
+ }
1053
+ }
790
1054
  // Sync footer with current project (may have changed during overlay)
791
1055
  syncFooterWithCurrentProject(ctx);
792
1056
  return true;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Reset Command for REPL V2
3
+ *
4
+ * Clears the conversation history while staying in the current project.
5
+ * Options:
6
+ * - Reset & reload context: Clear messages, refresh COMPILR.md
7
+ * - Reset only: Clear messages, keep current context
8
+ */
9
+ import type { CommandHandlerV2 } from '../types.js';
10
+ export declare const resetCommand: CommandHandlerV2;
11
+ export declare const resetCommands: CommandHandlerV2[];
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Reset Command for REPL V2
3
+ *
4
+ * Clears the conversation history while staying in the current project.
5
+ * Options:
6
+ * - Reset & reload context: Clear messages, refresh COMPILR.md
7
+ * - Reset only: Clear messages, keep current context
8
+ */
9
+ import { ResetOverlayV2, } from '../../ui/overlay/impl/reset-overlay-v2.js';
10
+ import { getCurrentProject } from '../../tools/project-db.js';
11
+ import { getProjectSessionManager } from '../../session/index.js';
12
+ import { archiveCurrentSession } from './session.js';
13
+ // =============================================================================
14
+ // Reset Command
15
+ // =============================================================================
16
+ export const resetCommand = {
17
+ name: 'reset',
18
+ aliases: ['clear-context'],
19
+ description: 'Clear conversation and optionally reload project context',
20
+ details: 'Starts a fresh conversation within the current project. Previous session is archived to history. Use this when you want to start over without switching projects.',
21
+ examples: [{ code: '/reset' }],
22
+ interactions: [
23
+ 'j/k to navigate options',
24
+ 'Enter to select',
25
+ 'Esc to cancel',
26
+ ],
27
+ async execute(_args, ctx) {
28
+ if (!ctx.agent) {
29
+ ctx.ui.print({ type: 'error', message: 'No agent connected. Cannot reset.' });
30
+ return true;
31
+ }
32
+ // Get current project info
33
+ const currentProject = getCurrentProject();
34
+ const projectName = currentProject?.displayName ?? 'Global';
35
+ // Get current session stats
36
+ const history = ctx.agent.getHistory();
37
+ const messageCount = history.length;
38
+ const contextManager = ctx.agent.getContextManager();
39
+ const tokenCount = contextManager?.getTokenCount();
40
+ // Show reset overlay
41
+ const overlay = new ResetOverlayV2({
42
+ projectName,
43
+ messageCount,
44
+ tokenCount,
45
+ });
46
+ const result = await ctx.ui.showOverlay(overlay);
47
+ if (!result || result.option === 'cancel') {
48
+ ctx.ui.print({ type: 'info', message: 'Reset cancelled.' });
49
+ return true;
50
+ }
51
+ const projectId = currentProject?.id ?? null;
52
+ // Handle delete-history option separately
53
+ if (result.option === 'delete-history') {
54
+ const psm = getProjectSessionManager();
55
+ try {
56
+ const deletedCount = await psm.deleteProjectHistory(projectId, false);
57
+ if (deletedCount > 0) {
58
+ ctx.ui.print({ type: 'success', message: `Deleted ${String(deletedCount)} archived session${deletedCount !== 1 ? 's' : ''}.` });
59
+ }
60
+ else {
61
+ ctx.ui.print({ type: 'info', message: 'No archived sessions to delete.' });
62
+ }
63
+ }
64
+ catch {
65
+ ctx.ui.print({ type: 'error', message: 'Failed to delete session history.' });
66
+ }
67
+ return true;
68
+ }
69
+ // Archive current session before resetting
70
+ try {
71
+ await archiveCurrentSession();
72
+ ctx.ui.print({ type: 'info', message: 'Previous session archived.' });
73
+ }
74
+ catch {
75
+ // Silently continue - archiving is best-effort
76
+ }
77
+ // Clear the agent history - both default agent and all team agents
78
+ ctx.agent.clearHistory();
79
+ // Clear restored history (Ctrl+R view)
80
+ ctx.ui.setRestoredHistory([]);
81
+ // If we have a team, clear all team agent histories too
82
+ if (ctx.team) {
83
+ ctx.team.clearAllHistories();
84
+ ctx.ui.print({ type: 'info', message: `Team context cleared (${String(ctx.team.size)} agents)` });
85
+ }
86
+ // Clear all message queues
87
+ if (ctx.clearAllQueues) {
88
+ const clearedCount = ctx.clearAllQueues();
89
+ if (clearedCount > 0) {
90
+ ctx.ui.print({ type: 'info', message: `${String(clearedCount)} queued message${clearedCount !== 1 ? 's' : ''} cleared` });
91
+ }
92
+ }
93
+ if (result.option === 'reset-reload') {
94
+ // Reset & reload context - need to refresh project context
95
+ // This is handled by creating a new agent with fresh context
96
+ // For now, we just clear history. Full context refresh requires
97
+ // recreating the agent (to be implemented in Phase 2 integration)
98
+ ctx.ui.print({ type: 'success', message: 'Conversation cleared. Project context refreshed.' });
99
+ ctx.ui.print({ type: 'info', message: 'Note: Full context reload requires CLI restart for now.' });
100
+ }
101
+ else {
102
+ // Reset only - just clear messages
103
+ ctx.ui.print({ type: 'success', message: 'Conversation cleared. Context preserved.' });
104
+ }
105
+ // Save the fresh session state
106
+ const psm = getProjectSessionManager();
107
+ const state = ctx.agent.serialize();
108
+ await psm.saveProjectSession(projectId, currentProject?.displayName ?? null, state);
109
+ ctx.ui.print({ type: 'info', message: 'Ready for a fresh conversation.' });
110
+ return true;
111
+ },
112
+ };
113
+ // =============================================================================
114
+ // Export
115
+ // =============================================================================
116
+ export const resetCommands = [
117
+ resetCommand,
118
+ ];