@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,610 @@
1
+ /**
2
+ * AgentTeam - Multi-agent orchestration
3
+ *
4
+ * Manages a team of persistent agents:
5
+ * - Agent switching ($name prefix)
6
+ * - Isolated contexts per agent
7
+ * - Team-level persistence
8
+ * - Event notifications
9
+ */
10
+ import { TeamAgent } from './team-agent.js';
11
+ import { ROLE_EXPERTISE } from './types.js';
12
+ import { SharedContextManager } from './shared-context.js';
13
+ import { ArtifactStore } from './artifacts.js';
14
+ import { getSessionRegistry } from './session-registry.js';
15
+ import { resolveAgentIdCollision } from './collision-utils.js';
16
+ /**
17
+ * AgentTeam orchestrates multiple persistent agents
18
+ */
19
+ export class AgentTeam {
20
+ /**
21
+ * Team name
22
+ */
23
+ name;
24
+ /**
25
+ * Map of agent ID to TeamAgent
26
+ */
27
+ agents = new Map();
28
+ /**
29
+ * Currently active agent ID
30
+ */
31
+ _activeAgentId = 'default';
32
+ /**
33
+ * Coordinator agent ID (optional)
34
+ */
35
+ _coordinatorId;
36
+ /**
37
+ * Factory for creating agents
38
+ */
39
+ agentFactory;
40
+ /**
41
+ * Event handler
42
+ */
43
+ onEvent;
44
+ /**
45
+ * Shared context manager for cross-agent knowledge sharing
46
+ */
47
+ _sharedContext;
48
+ /**
49
+ * Artifact store for team artifacts
50
+ */
51
+ _artifactStore;
52
+ /**
53
+ * Track handoff source: targetAgentId → sourceAgentId
54
+ * Used for one-hop prevention (agents that were handed a task
55
+ * cannot re-hand it off, except back to the coordinator)
56
+ */
57
+ _handedFrom = new Map();
58
+ /**
59
+ * Creation timestamp
60
+ */
61
+ createdAt = new Date();
62
+ /**
63
+ * Last updated timestamp
64
+ */
65
+ updatedAt = new Date();
66
+ constructor(config) {
67
+ this.name = config.name ?? 'Team';
68
+ this.agentFactory = config.agentFactory;
69
+ this.onEvent = config.onEvent;
70
+ // Initialize shared context (use provided or create new)
71
+ this._sharedContext = config.sharedContext ?? new SharedContextManager();
72
+ // Initialize artifact store (use provided or create in-memory)
73
+ // Note: For persistence, pass a store loaded from disk
74
+ this._artifactStore = config.artifactStore ?? new ArtifactStore('');
75
+ // Create default agent
76
+ const defaultAgent = TeamAgent.fromRole('default', 'default');
77
+ this.agents.set('default', defaultAgent);
78
+ // Add any initial agents
79
+ if (config.initialAgents) {
80
+ for (const agentConfig of config.initialAgents) {
81
+ if (agentConfig.id !== 'default') {
82
+ this.agents.set(agentConfig.id, new TeamAgent(agentConfig));
83
+ }
84
+ }
85
+ }
86
+ // Update shared context with team roster (simple list)
87
+ this._sharedContext.setTeam(Array.from(this.agents.keys()), this._activeAgentId);
88
+ // Build full team roster for team awareness
89
+ this.updateTeamRoster();
90
+ }
91
+ /**
92
+ * Get the currently active agent ID
93
+ */
94
+ get activeAgentId() {
95
+ return this._activeAgentId;
96
+ }
97
+ /**
98
+ * Get the coordinator agent ID (if set)
99
+ */
100
+ get coordinatorId() {
101
+ return this._coordinatorId;
102
+ }
103
+ /**
104
+ * Get the shared context manager
105
+ */
106
+ get sharedContext() {
107
+ return this._sharedContext;
108
+ }
109
+ /**
110
+ * Get the artifact store
111
+ */
112
+ get artifactStore() {
113
+ return this._artifactStore;
114
+ }
115
+ /**
116
+ * Get the currently active TeamAgent
117
+ */
118
+ getActive() {
119
+ const agent = this.agents.get(this._activeAgentId);
120
+ if (!agent) {
121
+ // Fallback to default
122
+ const defaultAgent = this.agents.get('default');
123
+ if (!defaultAgent) {
124
+ throw new Error('Default agent not found - this should never happen');
125
+ }
126
+ return defaultAgent;
127
+ }
128
+ return agent;
129
+ }
130
+ /**
131
+ * Get the currently active Agent instance
132
+ * Returns null if not initialized
133
+ */
134
+ getActiveAgent() {
135
+ return this.getActive().agent;
136
+ }
137
+ /**
138
+ * Get a specific TeamAgent by ID
139
+ */
140
+ get(id) {
141
+ return this.agents.get(id);
142
+ }
143
+ /**
144
+ * Set the agent instance for the default TeamAgent
145
+ * Used when the agent is created before the team
146
+ */
147
+ setDefaultAgent(agent) {
148
+ const defaultTeamAgent = this.agents.get('default');
149
+ if (defaultTeamAgent) {
150
+ defaultTeamAgent.setAgent(agent);
151
+ }
152
+ }
153
+ /**
154
+ * Check if an agent exists in the team
155
+ */
156
+ has(id) {
157
+ return this.agents.has(id);
158
+ }
159
+ /**
160
+ * Get all agent IDs
161
+ */
162
+ getAgentIds() {
163
+ return Array.from(this.agents.keys());
164
+ }
165
+ /**
166
+ * Get all TeamAgents
167
+ */
168
+ getAll() {
169
+ return Array.from(this.agents.values());
170
+ }
171
+ /**
172
+ * Get team size (number of agents)
173
+ */
174
+ get size() {
175
+ return this.agents.size;
176
+ }
177
+ /**
178
+ * Add a new agent to the team
179
+ */
180
+ async addAgent(config) {
181
+ if (this.agents.has(config.id)) {
182
+ throw new Error(`Agent '${config.id}' already exists in team`);
183
+ }
184
+ const teamAgent = new TeamAgent(config);
185
+ this.agents.set(config.id, teamAgent);
186
+ // Initialize the agent with shared context
187
+ await teamAgent.initialize(this.agentFactory, this._sharedContext);
188
+ // Update shared context roster
189
+ this._sharedContext.addAgent(config.id);
190
+ // Update full team roster for team awareness
191
+ this.updateTeamRoster();
192
+ this.updatedAt = new Date();
193
+ this.emit({ type: 'agent:added', agentId: config.id });
194
+ return teamAgent;
195
+ }
196
+ /**
197
+ * Add an agent from a predefined role
198
+ * @param role - The predefined role
199
+ * @param id - Optional custom ID (defaults to role name)
200
+ * @param modelTier - Optional model tier override (defaults to role's default tier)
201
+ */
202
+ async addAgentFromRole(role, id, modelTier) {
203
+ let agentId = id ?? role;
204
+ // Cross-terminal collision check
205
+ const registry = getSessionRegistry();
206
+ if (registry) {
207
+ const globalIds = registry.getGlobalAgentIds();
208
+ const localIds = Array.from(this.agents.keys());
209
+ const resolved = resolveAgentIdCollision(agentId, localIds, globalIds);
210
+ if (resolved.wasCollision) {
211
+ const originalId = agentId;
212
+ agentId = resolved.id;
213
+ this.emit({ type: 'agent:collision', originalId, agentId: resolved.id });
214
+ }
215
+ }
216
+ if (this.agents.has(agentId)) {
217
+ throw new Error(`Agent '${agentId}' already exists in team`);
218
+ }
219
+ const teamAgent = TeamAgent.fromRole(role, agentId, modelTier);
220
+ this.agents.set(agentId, teamAgent);
221
+ // Initialize the agent with shared context
222
+ await teamAgent.initialize(this.agentFactory, this._sharedContext);
223
+ // Update shared context roster
224
+ this._sharedContext.addAgent(agentId);
225
+ // Update full team roster for team awareness
226
+ this.updateTeamRoster();
227
+ this.updatedAt = new Date();
228
+ this.emit({ type: 'agent:added', agentId });
229
+ return teamAgent;
230
+ }
231
+ /**
232
+ * Add a custom agent from a CustomAgentDefinition
233
+ */
234
+ async addCustomAgent(def) {
235
+ let agentId = def.id;
236
+ // Cross-terminal collision check
237
+ const registry = getSessionRegistry();
238
+ if (registry) {
239
+ const globalIds = registry.getGlobalAgentIds();
240
+ const localIds = Array.from(this.agents.keys());
241
+ const resolved = resolveAgentIdCollision(agentId, localIds, globalIds);
242
+ if (resolved.wasCollision) {
243
+ const originalId = agentId;
244
+ agentId = resolved.id;
245
+ def = { ...def, id: agentId };
246
+ this.emit({ type: 'agent:collision', originalId, agentId: resolved.id });
247
+ }
248
+ }
249
+ if (this.agents.has(agentId)) {
250
+ throw new Error(`Agent '${agentId}' already exists in team`);
251
+ }
252
+ const teamAgent = TeamAgent.fromCustomDefinition(def);
253
+ this.agents.set(agentId, teamAgent);
254
+ // Initialize the agent with shared context
255
+ await teamAgent.initialize(this.agentFactory, this._sharedContext);
256
+ // Update shared context roster
257
+ this._sharedContext.addAgent(def.id);
258
+ // Update full team roster for team awareness
259
+ this.updateTeamRoster();
260
+ this.updatedAt = new Date();
261
+ this.emit({ type: 'agent:added', agentId: def.id });
262
+ return teamAgent;
263
+ }
264
+ /**
265
+ * Remove an agent from the team
266
+ */
267
+ removeAgent(id) {
268
+ if (id === 'default') {
269
+ throw new Error("Cannot remove the default agent");
270
+ }
271
+ if (!this.agents.has(id)) {
272
+ return false;
273
+ }
274
+ // If removing active agent, switch to default
275
+ if (this._activeAgentId === id) {
276
+ this._activeAgentId = 'default';
277
+ this._sharedContext.setActiveAgent('default');
278
+ }
279
+ // If removing coordinator, clear coordinator
280
+ if (this._coordinatorId === id) {
281
+ this._coordinatorId = undefined;
282
+ }
283
+ this.agents.delete(id);
284
+ // Update shared context roster
285
+ this._sharedContext.removeAgent(id);
286
+ // Update full team roster for team awareness
287
+ this.updateTeamRoster();
288
+ this.updatedAt = new Date();
289
+ this.emit({ type: 'agent:removed', agentId: id });
290
+ return true;
291
+ }
292
+ /**
293
+ * Clear conversation history for all agents in the team
294
+ * Used by /reset command to start fresh
295
+ */
296
+ clearAllHistories() {
297
+ for (const agent of this.agents.values()) {
298
+ agent.clearHistory();
299
+ }
300
+ // Clear shared context activity feed
301
+ this._sharedContext.clearActivity();
302
+ this.updatedAt = new Date();
303
+ this.emit({ type: 'team:reset' });
304
+ }
305
+ /**
306
+ * Callback for checking in-progress tasks when switching agents
307
+ * Set by the REPL to provide task counts for warnings
308
+ */
309
+ _getInProgressTasksCallback;
310
+ /**
311
+ * Set the callback for getting in-progress tasks
312
+ * Used by REPL to integrate with todo list and work items
313
+ */
314
+ setInProgressTasksCallback(callback) {
315
+ this._getInProgressTasksCallback = callback;
316
+ }
317
+ /**
318
+ * Switch to a different agent
319
+ */
320
+ async switchTo(id) {
321
+ const agent = this.agents.get(id);
322
+ if (!agent) {
323
+ throw new Error(`Agent '${id}' not found in team`);
324
+ }
325
+ // Initialize if needed
326
+ if (!agent.isInitialized) {
327
+ await agent.initialize(this.agentFactory, this._sharedContext);
328
+ }
329
+ const previousId = this._activeAgentId;
330
+ // Check for in-progress tasks owned by the outgoing agent
331
+ if (previousId !== id && this._getInProgressTasksCallback) {
332
+ const inProgressTasks = this._getInProgressTasksCallback(previousId);
333
+ const hasTodos = inProgressTasks.todos.length > 0;
334
+ const hasWorkItems = inProgressTasks.workItems.length > 0;
335
+ if (hasTodos || hasWorkItems) {
336
+ this.emit({
337
+ type: 'agent:switch_warning',
338
+ agentId: id,
339
+ previousAgentId: previousId,
340
+ message: `Agent "${previousId}" has in-progress tasks: ${hasTodos ? `${String(inProgressTasks.todos.length)} todo(s)` : ''}${hasTodos && hasWorkItems ? ', ' : ''}${hasWorkItems ? `${String(inProgressTasks.workItems.length)} work item(s)` : ''}`,
341
+ });
342
+ }
343
+ }
344
+ this._activeAgentId = id;
345
+ this.updatedAt = new Date();
346
+ // Update shared context active agent
347
+ this._sharedContext.setActiveAgent(id);
348
+ // Update roster active agent for team awareness
349
+ this._sharedContext.setRosterActiveAgent(id);
350
+ this.emit({
351
+ type: 'agent:switched',
352
+ agentId: id,
353
+ previousAgentId: previousId,
354
+ });
355
+ return agent;
356
+ }
357
+ /**
358
+ * Set the coordinator agent
359
+ */
360
+ setCoordinator(id) {
361
+ if (id !== undefined && !this.agents.has(id)) {
362
+ throw new Error(`Agent '${id}' not found in team`);
363
+ }
364
+ this._coordinatorId = id;
365
+ this.updatedAt = new Date();
366
+ }
367
+ /**
368
+ * Check if an agent is the coordinator
369
+ * The default agent is considered coordinator if no explicit coordinator is set.
370
+ */
371
+ isCoordinator(id) {
372
+ if (this._coordinatorId !== undefined) {
373
+ return this._coordinatorId === id;
374
+ }
375
+ // If no coordinator explicitly set, default agent is the coordinator
376
+ return id === 'default';
377
+ }
378
+ /**
379
+ * Check if the active agent is the coordinator
380
+ * The default agent is considered coordinator if no explicit coordinator is set.
381
+ */
382
+ isActiveCoordinator() {
383
+ if (this._coordinatorId !== undefined) {
384
+ return this._coordinatorId === this._activeAgentId;
385
+ }
386
+ // If no coordinator explicitly set, default agent is the coordinator
387
+ return this._activeAgentId === 'default';
388
+ }
389
+ /**
390
+ * Change an agent's model tier
391
+ * This updates the tier and reinitializes the agent with the new model.
392
+ * Conversation history is preserved.
393
+ *
394
+ * @param id - The agent ID
395
+ * @param newTier - The new model tier
396
+ * @returns The updated TeamAgent
397
+ */
398
+ async changeAgentTier(id, newTier) {
399
+ const agent = this.agents.get(id);
400
+ if (!agent) {
401
+ throw new Error(`Agent '${id}' not found in team`);
402
+ }
403
+ // Set the new tier (this preserves state and clears the agent instance)
404
+ agent.setModelTier(newTier);
405
+ // Reinitialize with the new tier
406
+ await agent.initialize(this.agentFactory, this._sharedContext);
407
+ this.updatedAt = new Date();
408
+ this.emit({ type: 'agent:switched', agentId: id, previousAgentId: id });
409
+ return agent;
410
+ }
411
+ /**
412
+ * Initialize all agents (lazy initialization)
413
+ */
414
+ async initializeAll() {
415
+ for (const agent of this.agents.values()) {
416
+ if (!agent.isInitialized) {
417
+ await agent.initialize(this.agentFactory, this._sharedContext);
418
+ }
419
+ }
420
+ }
421
+ /**
422
+ * Initialize only the active agent
423
+ */
424
+ async initializeActive() {
425
+ const teamAgent = this.getActive();
426
+ if (!teamAgent.isInitialized) {
427
+ await teamAgent.initialize(this.agentFactory, this._sharedContext);
428
+ }
429
+ const agent = teamAgent.agent;
430
+ if (!agent) {
431
+ throw new Error('Agent not initialized after initialize() call');
432
+ }
433
+ return agent;
434
+ }
435
+ /**
436
+ * Parse a message for $agent prefix and switch if needed
437
+ * Returns the message without the prefix and whether a switch occurred
438
+ */
439
+ async parseAndSwitch(message) {
440
+ const match = message.match(/^\$(\w+)\s*(.*)/s);
441
+ if (!match) {
442
+ return { message, switched: false, agentId: this._activeAgentId };
443
+ }
444
+ const [, agentId, remainingMessage] = match;
445
+ // Check if agent exists
446
+ if (!this.agents.has(agentId)) {
447
+ // Return original message - let the agent handle invalid prefix
448
+ return { message, switched: false, agentId: this._activeAgentId };
449
+ }
450
+ // Switch to the agent
451
+ await this.switchTo(agentId);
452
+ return {
453
+ message: remainingMessage.trim() || message, // Keep original if no remaining message
454
+ switched: true,
455
+ agentId,
456
+ };
457
+ }
458
+ /**
459
+ * Get autocomplete suggestions for $agent prefix
460
+ */
461
+ getAgentSuggestions(prefix) {
462
+ const results = [];
463
+ const searchPrefix = prefix.toLowerCase();
464
+ for (const [id, agent] of this.agents) {
465
+ if (id.toLowerCase().startsWith(searchPrefix)) {
466
+ results.push({
467
+ id,
468
+ label: agent.getFullLabel(),
469
+ });
470
+ }
471
+ }
472
+ return results;
473
+ }
474
+ // ---------------------------------------------------------------------------
475
+ // Handoff Tracking (One-Hop Prevention)
476
+ // ---------------------------------------------------------------------------
477
+ /**
478
+ * Record that sourceAgent handed off to targetAgent.
479
+ * Used for one-hop prevention.
480
+ */
481
+ recordHandoff(targetAgentId, sourceAgentId) {
482
+ this._handedFrom.set(targetAgentId, sourceAgentId);
483
+ }
484
+ /**
485
+ * Check if an agent was handed a task (i.e., is a handoff target).
486
+ * If true, this agent cannot re-hand off (except back to coordinator).
487
+ */
488
+ wasHandedTo(agentId) {
489
+ return this._handedFrom.has(agentId);
490
+ }
491
+ /**
492
+ * Get the source agent that handed off to the given agent.
493
+ */
494
+ getHandoffSource(agentId) {
495
+ return this._handedFrom.get(agentId);
496
+ }
497
+ /**
498
+ * Clear handoff tracking for an agent (after it completes its task).
499
+ */
500
+ clearHandoffRecord(agentId) {
501
+ this._handedFrom.delete(agentId);
502
+ }
503
+ /**
504
+ * Serialize the team for persistence
505
+ */
506
+ serialize() {
507
+ const agents = [];
508
+ for (const agent of this.agents.values()) {
509
+ agents.push(agent.serialize());
510
+ }
511
+ return {
512
+ metadata: {
513
+ name: this.name,
514
+ activeAgentId: this._activeAgentId,
515
+ coordinatorId: this._coordinatorId,
516
+ agentIds: Array.from(this.agents.keys()),
517
+ createdAt: this.createdAt.toISOString(),
518
+ updatedAt: this.updatedAt.toISOString(),
519
+ },
520
+ agents,
521
+ };
522
+ }
523
+ /**
524
+ * Restore team state from serialized data
525
+ */
526
+ static restore(data, agentFactory, onEvent, options) {
527
+ const team = new AgentTeam({
528
+ name: data.metadata.name,
529
+ agentFactory,
530
+ onEvent,
531
+ sharedContext: options?.sharedContext,
532
+ artifactStore: options?.artifactStore,
533
+ });
534
+ // Clear default agent if not in serialized data
535
+ if (!data.metadata.agentIds.includes('default')) {
536
+ team.agents.delete('default');
537
+ }
538
+ // Restore agents
539
+ for (const agentData of data.agents) {
540
+ const teamAgent = TeamAgent.fromSerialized(agentData);
541
+ team.agents.set(agentData.id, teamAgent);
542
+ }
543
+ // Restore metadata
544
+ team._activeAgentId = data.metadata.activeAgentId;
545
+ team._coordinatorId = data.metadata.coordinatorId;
546
+ // Update shared context with restored team roster (simple list)
547
+ team._sharedContext.setTeam(Array.from(team.agents.keys()), team._activeAgentId);
548
+ // Build full team roster for team awareness
549
+ team.updateTeamRoster();
550
+ team.emit({ type: 'team:restored' });
551
+ return team;
552
+ }
553
+ /**
554
+ * Emit a team event
555
+ */
556
+ emit(event) {
557
+ this.onEvent?.(event);
558
+ }
559
+ // ---------------------------------------------------------------------------
560
+ // Team Awareness - Roster Management
561
+ // ---------------------------------------------------------------------------
562
+ /**
563
+ * Build and update the team roster in shared context
564
+ * Called when team composition or active agent changes
565
+ */
566
+ updateTeamRoster() {
567
+ const roster = this.buildTeamRoster();
568
+ this._sharedContext.updateTeamRoster(roster);
569
+ // Push updated roster to all initialized agents via anchors.
570
+ // Anchors are re-injected on every LLM call, so agents always see the latest roster.
571
+ if (this._sharedContext.hasTeamRoster()) {
572
+ const rosterContent = this._sharedContext.formatTeamRoster();
573
+ for (const [, teamAgent] of this.agents) {
574
+ const agent = teamAgent.agent;
575
+ if (agent && agent.hasAnchors()) {
576
+ agent.addAnchor({
577
+ id: 'team-roster',
578
+ content: rosterContent,
579
+ priority: 'info',
580
+ scope: 'session',
581
+ });
582
+ }
583
+ }
584
+ }
585
+ }
586
+ /**
587
+ * Build the team roster from current agents
588
+ */
589
+ buildTeamRoster() {
590
+ const roster = [];
591
+ for (const [id, agent] of this.agents) {
592
+ const role = agent.role;
593
+ // For custom agents, derive expertise from their specialty/description
594
+ // since ROLE_EXPERTISE['custom'] is empty
595
+ let expertise = ROLE_EXPERTISE[role];
596
+ if (role === 'custom' && expertise.length === 0 && agent.description) {
597
+ expertise = agent.description.split(',').map(s => s.trim()).filter(Boolean);
598
+ }
599
+ roster.push({
600
+ id,
601
+ displayName: agent.displayName,
602
+ mascot: agent.mascot,
603
+ role,
604
+ expertise,
605
+ isActive: id === this._activeAgentId,
606
+ });
607
+ }
608
+ return roster;
609
+ }
610
+ }