@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
@@ -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
+ }