@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,549 @@
1
+ /**
2
+ * Team Commands for REPL V2
3
+ *
4
+ * Commands for managing multi-agent teams.
5
+ */
6
+ import pc from 'picocolors';
7
+ import { TeamOverlayV2 } from '../../ui/overlay/impl/team-overlay-v2.js';
8
+ import { CustomAgentFormOverlayV2 } from '../../ui/overlay/impl/custom-agent-form-overlay-v2.js';
9
+ import { ArtifactOverlayV2, ArtifactDetailOverlayV2 } from '../../ui/overlay/index.js';
10
+ import { ROLE_METADATA, PREDEFINED_ROLE_IDS } from '../../multi-agent/index.js';
11
+ import { loadCustomAgents, createCustomAgentDefinition, addCustomAgent, removeCustomAgent, } from '../../multi-agent/custom-agents.js';
12
+ import { getCurrentProject } from '../../tools/project-db.js';
13
+ import { getSessionRegistry } from '../../multi-agent/session-registry.js';
14
+ import { saveCurrentTeam, saveCurrentSession } from './session.js';
15
+ // =============================================================================
16
+ // Helper: Save team roster + session (ensures session file exists for /resume)
17
+ // =============================================================================
18
+ /**
19
+ * Save team state and also persist the default agent's session.
20
+ * This ensures a `current-{prefix}.json` file exists even when
21
+ * the only change was an /add or /remove — making the session
22
+ * visible to the startup restore flow and /resume overlay.
23
+ */
24
+ function saveTeamAndSession(team, ctx) {
25
+ saveCurrentTeam(team);
26
+ // Also save the session so it shows up in /resume
27
+ const defaultAgent = team.get('default')?.agent ?? ctx.agent;
28
+ if (defaultAgent) {
29
+ void saveCurrentSession(defaultAgent.serialize());
30
+ }
31
+ }
32
+ // =============================================================================
33
+ // Helper: Sync team roster to session registry
34
+ // =============================================================================
35
+ function syncTeamRoster(team) {
36
+ try {
37
+ const registry = getSessionRegistry();
38
+ if (registry) {
39
+ const agents = team.getAll();
40
+ registry.updateAgents(agents.map((a) => ({
41
+ id: a.id,
42
+ displayName: a.displayName,
43
+ mascot: a.mascot,
44
+ })));
45
+ }
46
+ }
47
+ catch {
48
+ // Best effort
49
+ }
50
+ }
51
+ // =============================================================================
52
+ // Helper: Format Team Status
53
+ // =============================================================================
54
+ function formatTeamStatus(team) {
55
+ const lines = [];
56
+ const agents = team.getAll();
57
+ lines.push(pc.bold(`Team: ${team.name}`));
58
+ lines.push(pc.dim(`─`.repeat(40)));
59
+ for (const agent of agents) {
60
+ const isActive = agent.id === team.activeAgentId;
61
+ const isCoordinator = agent.id === team.coordinatorId;
62
+ const prefix = isActive ? pc.green('▶') : ' ';
63
+ const label = agent.getFullLabel();
64
+ const badges = [];
65
+ if (isActive)
66
+ badges.push(pc.green('active'));
67
+ if (isCoordinator)
68
+ badges.push(pc.yellow('coordinator'));
69
+ const badgeStr = badges.length > 0 ? ` ${pc.dim('[')}${badges.join(pc.dim(', '))}${pc.dim(']')}` : '';
70
+ lines.push(`${prefix} ${label}${badgeStr}`);
71
+ if (agent.description) {
72
+ lines.push(` ${pc.dim(agent.description)}`);
73
+ }
74
+ }
75
+ lines.push(pc.dim(`─`.repeat(40)));
76
+ lines.push(pc.dim(`${String(agents.length)} agent${agents.length !== 1 ? 's' : ''} in team`));
77
+ return lines;
78
+ }
79
+ // =============================================================================
80
+ // /team Command
81
+ // =============================================================================
82
+ // Generate role list dynamically from PREDEFINED_ROLE_IDS (excluding 'default')
83
+ const AVAILABLE_ROLES = PREDEFINED_ROLE_IDS.filter((r) => r !== 'default').join(', ');
84
+ export const teamCommand = {
85
+ name: 'team',
86
+ description: 'Manage multi-agent team',
87
+ details: `Open team overlay or use subcommands: status, add <role> [id], remove <id>, switch <id>
88
+ Roles: ${AVAILABLE_ROLES}. Switch with $agent prefix (e.g., $arch)`,
89
+ async execute(args, ctx) {
90
+ const team = ctx.team;
91
+ if (!team) {
92
+ ctx.ui.print({ type: 'warning', message: 'Multi-agent team not initialized' });
93
+ return true;
94
+ }
95
+ const trimmedArgs = args.trim().toLowerCase();
96
+ const [subcommand, ...rest] = trimmedArgs.split(/\s+/);
97
+ const arg = rest.join(' ');
98
+ // Handle subcommands
99
+ switch (subcommand) {
100
+ case '':
101
+ // No args - open overlay
102
+ return openTeamOverlay(ctx, team);
103
+ case 'status': {
104
+ // Quick status view
105
+ const lines = formatTeamStatus(team);
106
+ for (const line of lines) {
107
+ ctx.ui.print({ type: 'info', message: line });
108
+ }
109
+ return true;
110
+ }
111
+ case 'add':
112
+ return handleAddAgent(ctx, team, arg);
113
+ case 'remove':
114
+ case 'rm':
115
+ return handleRemoveAgent(ctx, team, arg);
116
+ case 'switch':
117
+ case 'sw':
118
+ return handleSwitchAgent(ctx, team, arg);
119
+ case 'coordinator':
120
+ case 'coord':
121
+ return handleSetCoordinator(ctx, team, arg);
122
+ default:
123
+ // Unknown subcommand - maybe it's a role to add?
124
+ if (subcommand in ROLE_METADATA && subcommand !== 'default') {
125
+ return handleAddAgent(ctx, team, subcommand);
126
+ }
127
+ ctx.ui.print({ type: 'error', message: `Unknown subcommand: ${subcommand}` });
128
+ ctx.ui.print({ type: 'info', message: 'Use /team for the team management overlay' });
129
+ return true;
130
+ }
131
+ },
132
+ };
133
+ // =============================================================================
134
+ // Subcommand Handlers
135
+ // =============================================================================
136
+ async function openTeamOverlay(ctx, team) {
137
+ const overlay = new TeamOverlayV2(team);
138
+ const result = await ctx.ui.showOverlay(overlay);
139
+ if (result?.action === 'switch' && result.agentId) {
140
+ try {
141
+ if (ctx.switchAgent) {
142
+ await ctx.switchAgent(result.agentId);
143
+ }
144
+ const agent = team.get(result.agentId);
145
+ ctx.ui.print({
146
+ type: 'success',
147
+ message: `Switched to ${agent?.getFullLabel() ?? result.agentId}`,
148
+ });
149
+ }
150
+ catch (err) {
151
+ ctx.ui.print({
152
+ type: 'error',
153
+ message: `Failed to switch: ${err instanceof Error ? err.message : 'Unknown error'}`,
154
+ });
155
+ }
156
+ }
157
+ else if (result?.action === 'add' && result.role) {
158
+ try {
159
+ const requestedId = result.customId ?? result.role;
160
+ const agent = await team.addAgentFromRole(result.role, result.customId, result.modelTier);
161
+ // Detect cross-terminal collision (agent got a different ID)
162
+ if (agent.id !== requestedId) {
163
+ ctx.ui.print({
164
+ type: 'info',
165
+ message: `Agent '${requestedId}' is active in another terminal. Using '${agent.id}' instead.`,
166
+ });
167
+ }
168
+ syncTeamRoster(team);
169
+ saveTeamAndSession(team, ctx);
170
+ ctx.ui.print({
171
+ type: 'success',
172
+ message: `Added ${agent.getFullLabel()} to team`,
173
+ });
174
+ if (result.customId) {
175
+ ctx.ui.print({
176
+ type: 'info',
177
+ message: `Use $${agent.id} to switch to this agent`,
178
+ });
179
+ }
180
+ }
181
+ catch (err) {
182
+ ctx.ui.print({
183
+ type: 'error',
184
+ message: `Failed to add agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
185
+ });
186
+ }
187
+ }
188
+ else if (result?.action === 'compact' && result.agentId) {
189
+ // Per-agent compaction
190
+ const teamAgent = team.get(result.agentId);
191
+ if (!teamAgent) {
192
+ ctx.ui.print({
193
+ type: 'error',
194
+ message: `Agent '${result.agentId}' not found`,
195
+ });
196
+ }
197
+ else if (!teamAgent.agent) {
198
+ ctx.ui.print({
199
+ type: 'warning',
200
+ message: `Agent '${result.agentId}' has no context to compact`,
201
+ });
202
+ }
203
+ else {
204
+ ctx.ui.print({
205
+ type: 'info',
206
+ message: `Compacting ${teamAgent.getFullLabel()}'s context...`,
207
+ });
208
+ try {
209
+ // Use the agent's compact method
210
+ await teamAgent.agent.compact();
211
+ ctx.ui.print({
212
+ type: 'success',
213
+ message: `Compacted ${teamAgent.getFullLabel()}'s context`,
214
+ });
215
+ }
216
+ catch (err) {
217
+ ctx.ui.print({
218
+ type: 'error',
219
+ message: `Failed to compact: ${err instanceof Error ? err.message : 'Unknown error'}`,
220
+ });
221
+ }
222
+ }
223
+ }
224
+ else if (result?.action === 'create-custom') {
225
+ // Custom agent creation
226
+ await handleCreateCustomAgent(ctx, team);
227
+ }
228
+ else if (result?.action === 'remove' && result.agentId) {
229
+ // Remove agent from team
230
+ const agentId = result.agentId;
231
+ const agent = team.get(agentId);
232
+ const label = agent?.getFullLabel() ?? agentId;
233
+ const isCustom = result.role === 'custom';
234
+ const wasActive = team.activeAgentId === agentId;
235
+ const removed = team.removeAgent(agentId);
236
+ if (removed) {
237
+ syncTeamRoster(team);
238
+ saveTeamAndSession(team, ctx);
239
+ // If the removed agent was active, team switches to default — update footer
240
+ if (wasActive) {
241
+ ctx.ui.setActiveTeamAgent(null);
242
+ }
243
+ // Also remove from custom-agents.json if it's a custom agent
244
+ if (isCustom) {
245
+ const currentProject = getCurrentProject();
246
+ if (currentProject?.path) {
247
+ removeCustomAgent(currentProject.path, agentId);
248
+ }
249
+ }
250
+ ctx.ui.print({ type: 'success', message: `Removed ${label} from team` });
251
+ }
252
+ else {
253
+ ctx.ui.print({ type: 'error', message: `Failed to remove ${label}` });
254
+ }
255
+ }
256
+ else if (result?.action === 'change-tier' && result.agentId && result.modelTier) {
257
+ // Change agent's model tier
258
+ const agentId = result.agentId;
259
+ const newTier = result.modelTier;
260
+ try {
261
+ const agent = await team.changeAgentTier(agentId, newTier);
262
+ ctx.ui.print({
263
+ type: 'success',
264
+ message: `Changed ${agent.getFullLabel()} to ${newTier} model`,
265
+ });
266
+ // If this is the active agent, update the REPL's reference
267
+ if (agentId === team.activeAgentId && agent.agent && ctx.restoreAgent) {
268
+ ctx.restoreAgent(agent.agent);
269
+ }
270
+ }
271
+ catch (err) {
272
+ ctx.ui.print({
273
+ type: 'error',
274
+ message: `Failed to change tier: ${err instanceof Error ? err.message : 'Unknown error'}`,
275
+ });
276
+ }
277
+ }
278
+ return true;
279
+ }
280
+ async function handleCreateCustomAgent(ctx, team) {
281
+ // Check for project context
282
+ const currentProject = getCurrentProject();
283
+ if (!currentProject?.path) {
284
+ ctx.ui.print({
285
+ type: 'warning',
286
+ message: 'Select a project first to create custom agents',
287
+ });
288
+ return;
289
+ }
290
+ const projectPath = currentProject.path;
291
+ // Load existing custom agents for duplicate check
292
+ const existingCustomAgents = loadCustomAgents(projectPath);
293
+ const teamAgentIds = team.getAgentIds();
294
+ // Show custom agent form
295
+ const formOverlay = new CustomAgentFormOverlayV2({
296
+ existingCustomAgents,
297
+ teamAgentIds,
298
+ });
299
+ const formResult = await ctx.ui.showOverlay(formOverlay);
300
+ // User cancelled
301
+ if (!formResult || formResult.cancelled || !formResult.agent) {
302
+ return;
303
+ }
304
+ // Create the custom agent definition
305
+ const agentData = formResult.agent;
306
+ const agentDef = createCustomAgentDefinition(agentData.id, agentData.displayName, agentData.specialty, agentData.personality, existingCustomAgents, agentData.toolConfig, agentData.enabledSkills, agentData.modelTier);
307
+ // Save to project
308
+ try {
309
+ addCustomAgent(projectPath, agentDef);
310
+ }
311
+ catch (err) {
312
+ ctx.ui.print({
313
+ type: 'error',
314
+ message: `Failed to save custom agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
315
+ });
316
+ return;
317
+ }
318
+ // Add to team
319
+ try {
320
+ const requestedId = agentDef.id;
321
+ const teamAgent = await team.addCustomAgent(agentDef);
322
+ // Detect cross-terminal collision
323
+ if (teamAgent.id !== requestedId) {
324
+ ctx.ui.print({
325
+ type: 'info',
326
+ message: `Agent '${requestedId}' is active in another terminal. Using '${teamAgent.id}' instead.`,
327
+ });
328
+ }
329
+ syncTeamRoster(team);
330
+ saveTeamAndSession(team, ctx);
331
+ ctx.ui.print({
332
+ type: 'success',
333
+ message: `Created ${teamAgent.getFullLabel()}`,
334
+ });
335
+ ctx.ui.print({
336
+ type: 'info',
337
+ message: `Use $${teamAgent.id} to switch to this agent`,
338
+ });
339
+ }
340
+ catch (err) {
341
+ ctx.ui.print({
342
+ type: 'error',
343
+ message: `Failed to add custom agent to team: ${err instanceof Error ? err.message : 'Unknown error'}`,
344
+ });
345
+ }
346
+ }
347
+ async function handleAddAgent(ctx, team, args) {
348
+ // Parse: /team add <role> [custom-id]
349
+ const parts = args.trim().split(/\s+/);
350
+ const roleName = parts[0];
351
+ const customId = parts[1]; // Optional custom ID
352
+ if (!roleName) {
353
+ ctx.ui.print({ type: 'error', message: 'Usage: /team add <role> [custom-id]' });
354
+ ctx.ui.print({
355
+ type: 'info',
356
+ message: `Available roles: ${Object.keys(ROLE_METADATA).filter(r => r !== 'default').join(', ')}`,
357
+ });
358
+ ctx.ui.print({
359
+ type: 'info',
360
+ message: 'Example: /team add arch my-architect',
361
+ });
362
+ return true;
363
+ }
364
+ if (!(roleName in ROLE_METADATA) || roleName === 'default') {
365
+ ctx.ui.print({ type: 'error', message: `Unknown role: ${roleName}` });
366
+ ctx.ui.print({
367
+ type: 'info',
368
+ message: `Available roles: ${Object.keys(ROLE_METADATA).filter(r => r !== 'default').join(', ')}`,
369
+ });
370
+ return true;
371
+ }
372
+ const role = roleName;
373
+ // Check if the agent ID (custom or role name) already exists
374
+ const agentId = customId || role;
375
+ if (team.has(agentId)) {
376
+ ctx.ui.print({ type: 'warning', message: `Agent '${agentId}' already exists in team` });
377
+ return true;
378
+ }
379
+ try {
380
+ const requestedId = customId || role;
381
+ const agent = await team.addAgentFromRole(role, customId);
382
+ // Detect cross-terminal collision (agent got a different ID)
383
+ if (agent.id !== requestedId) {
384
+ ctx.ui.print({
385
+ type: 'info',
386
+ message: `Agent '${requestedId}' is active in another terminal. Using '${agent.id}' instead.`,
387
+ });
388
+ }
389
+ syncTeamRoster(team);
390
+ saveTeamAndSession(team, ctx);
391
+ ctx.ui.print({
392
+ type: 'success',
393
+ message: `Added ${agent.getFullLabel()} to team`,
394
+ });
395
+ if (customId) {
396
+ ctx.ui.print({
397
+ type: 'info',
398
+ message: `Use $${agent.id} to switch to this agent`,
399
+ });
400
+ }
401
+ }
402
+ catch (err) {
403
+ ctx.ui.print({
404
+ type: 'error',
405
+ message: `Failed to add agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
406
+ });
407
+ }
408
+ return true;
409
+ }
410
+ function handleRemoveAgent(ctx, team, agentId) {
411
+ if (!agentId) {
412
+ ctx.ui.print({ type: 'error', message: 'Usage: /team remove <agent-id>' });
413
+ return true;
414
+ }
415
+ if (agentId === 'default') {
416
+ ctx.ui.print({ type: 'error', message: 'Cannot remove the default agent' });
417
+ return true;
418
+ }
419
+ if (!team.has(agentId)) {
420
+ ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
421
+ return true;
422
+ }
423
+ const agent = team.get(agentId);
424
+ const label = agent?.getFullLabel() ?? agentId;
425
+ const wasActive = team.activeAgentId === agentId;
426
+ const removed = team.removeAgent(agentId);
427
+ if (removed) {
428
+ syncTeamRoster(team);
429
+ saveTeamAndSession(team, ctx);
430
+ // If the removed agent was active, team switches to default — update footer
431
+ if (wasActive) {
432
+ ctx.ui.setActiveTeamAgent(null);
433
+ }
434
+ ctx.ui.print({ type: 'success', message: `Removed ${label} from team` });
435
+ }
436
+ else {
437
+ ctx.ui.print({ type: 'error', message: `Failed to remove ${label}` });
438
+ }
439
+ return true;
440
+ }
441
+ async function handleSwitchAgent(ctx, team, agentId) {
442
+ if (!agentId) {
443
+ ctx.ui.print({ type: 'error', message: 'Usage: /team switch <agent-id>' });
444
+ ctx.ui.print({
445
+ type: 'info',
446
+ message: `Available agents: ${team.getAgentIds().join(', ')}`,
447
+ });
448
+ return true;
449
+ }
450
+ if (!team.has(agentId)) {
451
+ ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
452
+ ctx.ui.print({
453
+ type: 'info',
454
+ message: `Available agents: ${team.getAgentIds().join(', ')}`,
455
+ });
456
+ return true;
457
+ }
458
+ try {
459
+ if (ctx.switchAgent) {
460
+ await ctx.switchAgent(agentId);
461
+ }
462
+ const agent = team.get(agentId);
463
+ ctx.ui.print({
464
+ type: 'success',
465
+ message: `Switched to ${agent?.getFullLabel() ?? agentId}`,
466
+ });
467
+ }
468
+ catch (err) {
469
+ ctx.ui.print({
470
+ type: 'error',
471
+ message: `Failed to switch: ${err instanceof Error ? err.message : 'Unknown error'}`,
472
+ });
473
+ }
474
+ return true;
475
+ }
476
+ function handleSetCoordinator(ctx, team, agentId) {
477
+ if (!agentId) {
478
+ // Clear coordinator
479
+ if (team.coordinatorId) {
480
+ team.setCoordinator(undefined);
481
+ ctx.ui.print({ type: 'success', message: 'Cleared coordinator' });
482
+ }
483
+ else {
484
+ ctx.ui.print({ type: 'info', message: 'No coordinator is set' });
485
+ ctx.ui.print({ type: 'info', message: 'Usage: /team coordinator <agent-id>' });
486
+ }
487
+ return true;
488
+ }
489
+ if (agentId === 'none' || agentId === 'clear') {
490
+ team.setCoordinator(undefined);
491
+ ctx.ui.print({ type: 'success', message: 'Cleared coordinator' });
492
+ return true;
493
+ }
494
+ if (!team.has(agentId)) {
495
+ ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
496
+ return true;
497
+ }
498
+ team.setCoordinator(agentId);
499
+ const agent = team.get(agentId);
500
+ ctx.ui.print({
501
+ type: 'success',
502
+ message: `Set ${agent?.getFullLabel() ?? agentId} as coordinator`,
503
+ });
504
+ return true;
505
+ }
506
+ // =============================================================================
507
+ // /artifact Command
508
+ // =============================================================================
509
+ export const artifactCommand = {
510
+ name: 'artifact',
511
+ description: 'View team artifacts',
512
+ details: `Browse and view artifacts shared by team agents. Artifacts are named pieces of work
513
+ (designs, plans, reviews, decisions, notes) that agents can publish and reference.`,
514
+ examples: [
515
+ { code: '/artifact', description: 'Browse all artifacts' },
516
+ ],
517
+ interactions: [
518
+ 'Tab cycles: All → Design → Plan → Review → Decision → Note',
519
+ '↑/↓ or j/k to navigate',
520
+ '/ to search',
521
+ 'Enter to view artifact',
522
+ 'Esc to go back or close',
523
+ ],
524
+ async execute(_args, ctx) {
525
+ // Loop: show list → detail → back to list (until user cancels list or Ctrl+C from detail)
526
+ let showList = true;
527
+ while (showList) {
528
+ // Show artifact list (inline overlay)
529
+ const listOverlay = new ArtifactOverlayV2();
530
+ const listResult = await ctx.ui.showOverlay(listOverlay);
531
+ // User cancelled the list (Esc/Ctrl+C) - exit
532
+ if (!listResult?.selectedArtifact || listResult.cancelled) {
533
+ showList = false;
534
+ continue;
535
+ }
536
+ // Show selected artifact in fullscreen detail overlay
537
+ const detailOverlay = new ArtifactDetailOverlayV2(listResult.selectedArtifact);
538
+ const detailResult = await ctx.ui.showOverlay(detailOverlay);
539
+ // Ctrl+C from detail - exit completely
540
+ // Esc/q from detail (goBack=true) - loop back to show list again
541
+ showList = detailResult?.goBack === true;
542
+ }
543
+ return true;
544
+ },
545
+ };
546
+ // =============================================================================
547
+ // Export
548
+ // =============================================================================
549
+ export const teamCommands = [teamCommand, artifactCommand];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Terminals Command Handler
3
+ *
4
+ * Shows active terminal sessions for multi-terminal awareness.
5
+ * Opens an interactive overlay when sessions exist, falls back to info message otherwise.
6
+ */
7
+ import type { CommandHandlerV2 } from '../types.js';
8
+ export declare const terminalsCommand: CommandHandlerV2;
9
+ export declare const terminalsCommands: CommandHandlerV2[];
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Terminals Command Handler
3
+ *
4
+ * Shows active terminal sessions for multi-terminal awareness.
5
+ * Opens an interactive overlay when sessions exist, falls back to info message otherwise.
6
+ */
7
+ import { getSessionRegistry } from '../../multi-agent/session-registry.js';
8
+ import { TerminalsOverlayV2 } from '../../ui/overlay/impl/terminals-overlay-v2.js';
9
+ export const terminalsCommand = {
10
+ name: 'terminals',
11
+ aliases: ['sessions'],
12
+ description: 'Show active terminal sessions',
13
+ details: 'Lists all CLI instances currently running on this machine. Useful for seeing which terminals are active and what agents they are running.',
14
+ examples: [
15
+ { code: '/terminals', description: 'List all active terminal sessions' },
16
+ { code: '/sessions', description: 'Alias for /terminals' },
17
+ ],
18
+ async execute(_args, ctx) {
19
+ const registry = getSessionRegistry();
20
+ if (!registry) {
21
+ ctx.ui.print({ type: 'info', message: 'Session registry not available.' });
22
+ return true;
23
+ }
24
+ const sessions = registry.getActiveSessions();
25
+ if (sessions.length === 0) {
26
+ ctx.ui.print({ type: 'info', message: 'No active terminal sessions.' });
27
+ return true;
28
+ }
29
+ const overlay = new TerminalsOverlayV2();
30
+ await ctx.ui.showOverlay(overlay);
31
+ return true;
32
+ },
33
+ };
34
+ export const terminalsCommands = [terminalsCommand];
@@ -3,11 +3,12 @@
3
3
  *
4
4
  * Command system for the new TerminalUI-based REPL.
5
5
  */
6
- export type { CommandContextV2, CommandHandlerV2, CommandResultV2 } from './types.js';
7
- export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, } from './registry.js';
6
+ export type { CommandContextV2, CommandHandlerV2, CommandResultV2, CommandExample } from './types.js';
7
+ export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, getAutocompleteCommands, getHelpCommands, } from './registry.js';
8
8
  export { allCommands } from './handlers/index.js';
9
9
  export { coreCommands } from './handlers/core.js';
10
10
  export { settingsCommands } from './handlers/settings.js';
11
11
  export { contextCommands } from './handlers/context.js';
12
12
  export { projectCommands } from './handlers/project.js';
13
13
  export { debugCommands } from './handlers/debug.js';
14
+ export { sessionCommands, saveCurrentSession, loadProjectSession, hasCurrentProjectSession, hasRecentSession, getMostRecentSession, checkpointBeforeSwitch, loadAndRestoreSession, archiveCurrentSession, refreshProjectContext, getProjectAnchors, saveCurrentTeam, loadCurrentTeam, hasCurrentTeam, deleteCurrentTeam, type ProjectContextRefreshResult, convertMessagesToItems, } from './handlers/session.js';
@@ -4,7 +4,7 @@
4
4
  * Command system for the new TerminalUI-based REPL.
5
5
  */
6
6
  // Registry
7
- export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, } from './registry.js';
7
+ export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, getAutocompleteCommands, getHelpCommands, } from './registry.js';
8
8
  // All handlers
9
9
  export { allCommands } from './handlers/index.js';
10
10
  // Individual handler modules (for selective imports)
@@ -13,3 +13,6 @@ export { settingsCommands } from './handlers/settings.js';
13
13
  export { contextCommands } from './handlers/context.js';
14
14
  export { projectCommands } from './handlers/project.js';
15
15
  export { debugCommands } from './handlers/debug.js';
16
+ export { sessionCommands, saveCurrentSession, loadProjectSession, hasCurrentProjectSession, hasRecentSession, getMostRecentSession, checkpointBeforeSwitch, loadAndRestoreSession, archiveCurrentSession, refreshProjectContext, getProjectAnchors,
17
+ // Team persistence
18
+ saveCurrentTeam, loadCurrentTeam, hasCurrentTeam, deleteCurrentTeam, convertMessagesToItems, } from './handlers/session.js';
@@ -35,3 +35,18 @@ export declare function hasCommand(nameOrAlias: string): boolean;
35
35
  * Clear all registered commands (for testing).
36
36
  */
37
37
  export declare function clearCommands(): void;
38
+ /**
39
+ * Get all commands formatted for autocomplete.
40
+ * Filters out internal/tool commands (those with underscores or camelCase).
41
+ */
42
+ export declare function getAutocompleteCommands(): {
43
+ command: string;
44
+ description: string;
45
+ }[];
46
+ /**
47
+ * Get all commands formatted for help display.
48
+ */
49
+ export declare function getHelpCommands(): {
50
+ name: string;
51
+ description: string;
52
+ }[];
@@ -78,3 +78,37 @@ export function clearCommands() {
78
78
  handlers.clear();
79
79
  aliasMap.clear();
80
80
  }
81
+ /**
82
+ * Get all commands formatted for autocomplete.
83
+ * Filters out internal/tool commands (those with underscores or camelCase).
84
+ */
85
+ export function getAutocompleteCommands() {
86
+ const commands = [];
87
+ for (const [name, handler] of handlers) {
88
+ // Skip internal commands (tools, debug commands with underscores/camelCase)
89
+ if (name.includes('_') || /[A-Z]/.test(name))
90
+ continue;
91
+ commands.push({
92
+ command: `/${name}`,
93
+ description: handler.description,
94
+ });
95
+ }
96
+ return commands.sort((a, b) => a.command.localeCompare(b.command));
97
+ }
98
+ /**
99
+ * Get all commands formatted for help display.
100
+ */
101
+ export function getHelpCommands() {
102
+ const commands = [];
103
+ for (const [name, handler] of handlers) {
104
+ // Skip internal commands
105
+ if (name.includes('_') || /[A-Z]/.test(name))
106
+ continue;
107
+ const aliases = handler.aliases?.length ? ` (also /${handler.aliases.join(', /')})` : '';
108
+ commands.push({
109
+ name: `/${name}`,
110
+ description: `${handler.description}${aliases}`,
111
+ });
112
+ }
113
+ return commands.sort((a, b) => a.name.localeCompare(b.name));
114
+ }