@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,692 @@
1
+ /**
2
+ * Team Overlay V2
3
+ *
4
+ * Modal overlay for managing the multi-agent team.
5
+ * Uses TabbedListOverlayV2 for consistent list/tab behavior.
6
+ *
7
+ * Features:
8
+ * - Members tab: List team agents, switch, add, remove
9
+ * - Roles tab: Available roles to add
10
+ * - Context tab: View per-agent context usage and shared context status
11
+ */
12
+ import * as terminal from '../../terminal.js';
13
+ import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isClose, extractPrintable, renderBorder, wrapText, renderProgressBar, formatTokens, } from '../../base/index.js';
14
+ import { ROLE_METADATA } from '../../../multi-agent/index.js';
15
+ import { PROFILE_INFO } from '../../../multi-agent/tool-config.js';
16
+ import { TIER_INFO, getModelForTier } from '../../../models/index.js';
17
+ import { getSettings } from '../../../settings/index.js';
18
+ import { getRoleTierDefault, setRoleTierDefault } from '../../../settings/index.js';
19
+ const TABS = [
20
+ { id: 'members', label: 'Members' },
21
+ { id: 'roles', label: 'Add Agent' },
22
+ { id: 'context', label: 'Context' },
23
+ ];
24
+ // =============================================================================
25
+ // Detail Screen (View Agent Info)
26
+ // =============================================================================
27
+ const MODEL_TIERS_LIST = ['fast', 'balanced', 'powerful'];
28
+ class AgentDetailScreen extends BaseScreen {
29
+ item;
30
+ styles;
31
+ editingTier = false;
32
+ selectedTierIndex;
33
+ originalTierIndex;
34
+ constructor(item, styles) {
35
+ super();
36
+ this.item = item;
37
+ this.styles = styles;
38
+ // Initialize tier index from current tier or default to balanced
39
+ const currentTier = item.modelTier ?? 'balanced';
40
+ this.selectedTierIndex = MODEL_TIERS_LIST.indexOf(currentTier);
41
+ if (this.selectedTierIndex === -1)
42
+ this.selectedTierIndex = 1;
43
+ this.originalTierIndex = this.selectedTierIndex;
44
+ }
45
+ render() {
46
+ const s = this.styles;
47
+ const cols = terminal.getTerminalWidth();
48
+ const border = renderBorder(cols, s);
49
+ const lines = [];
50
+ const contentWidth = cols - 6;
51
+ lines.push(border);
52
+ lines.push(` ${s.primaryBold(`${this.item.mascot} ${this.item.displayName}`)}`);
53
+ lines.push('');
54
+ // Info
55
+ lines.push(` ${s.muted('ID:')} ${s.primary(`$${this.item.id}`)}`);
56
+ lines.push(` ${s.muted('Role:')} ${s.secondary(this.item.role)}`);
57
+ // Model tier (editable) and model ID
58
+ const currentTier = MODEL_TIERS_LIST[this.selectedTierIndex];
59
+ const tierInfo = TIER_INFO[currentTier];
60
+ const tierChanged = this.selectedTierIndex !== this.originalTierIndex;
61
+ if (this.editingTier) {
62
+ const tierLabel = s.primaryBold('▶ Tier:');
63
+ const tierValue = s.primaryBold(`[${tierInfo.label}]`);
64
+ const changeHint = tierChanged ? s.warning(' ← will change model') : '';
65
+ lines.push(` ${tierLabel} ${tierValue}${changeHint}`);
66
+ }
67
+ else {
68
+ lines.push(` ${s.muted('Tier:')} ${s.primary(`[${tierInfo.label}]`)}`);
69
+ }
70
+ // Show actual model ID
71
+ if (this.item.modelId) {
72
+ lines.push(` ${s.muted('Model:')} ${s.secondary(this.item.modelId)}`);
73
+ }
74
+ // Status badges
75
+ const badges = [];
76
+ if (this.item.isActive) {
77
+ badges.push(s.primary('● Active'));
78
+ }
79
+ if (this.item.isCoordinator) {
80
+ badges.push(s.secondary('★ Coordinator'));
81
+ }
82
+ if (this.item.hasToolRestrictions) {
83
+ badges.push(s.warning('◐ Tool Restrictions'));
84
+ }
85
+ if (badges.length > 0) {
86
+ lines.push(` ${badges.join(' ')}`);
87
+ }
88
+ lines.push('');
89
+ // Description
90
+ if (this.item.description) {
91
+ lines.push(` ${s.muted('Description:')}`);
92
+ const wrapped = wrapText(this.item.description, contentWidth);
93
+ for (const line of wrapped) {
94
+ lines.push(` ${s.secondary(line)}`);
95
+ }
96
+ }
97
+ // Tool Profile and Skills (for custom agents)
98
+ if (this.item.role === 'custom' && this.item.toolProfile) {
99
+ lines.push('');
100
+ const isValidProfile = this.item.toolProfile in PROFILE_INFO;
101
+ const profileLabel = isValidProfile
102
+ ? PROFILE_INFO[this.item.toolProfile].label
103
+ : this.item.toolProfile;
104
+ lines.push(` ${s.muted('Tool Profile:')} ${s.primary(profileLabel)}`);
105
+ if (isValidProfile) {
106
+ lines.push(` ${s.muted(PROFILE_INFO[this.item.toolProfile].description)}`);
107
+ }
108
+ // Show enabled skills
109
+ if (this.item.enabledSkills && this.item.enabledSkills.length > 0) {
110
+ lines.push(` ${s.muted('Skills:')} ${s.secondary(this.item.enabledSkills.join(', '))}`);
111
+ }
112
+ else {
113
+ lines.push(` ${s.muted('Skills:')} ${s.secondary('All skills enabled')}`);
114
+ }
115
+ }
116
+ lines.push('');
117
+ // Hints - different based on editing mode
118
+ if (this.editingTier) {
119
+ lines.push(` ${s.muted('←→: change tier · Enter: confirm · Esc: cancel')}`);
120
+ if (tierChanged) {
121
+ lines.push(` ${s.warning('Note: Changing tier switches to a different model.')}`);
122
+ lines.push(` ${s.warning('Conversation history preserved (thinking blocks stripped).')}`);
123
+ }
124
+ }
125
+ else {
126
+ lines.push(` ${s.muted('Enter: switch to agent · t: edit model tier')}`);
127
+ if (this.item.id !== 'default') {
128
+ lines.push(` ${s.muted('d: remove from team · Esc: go back')}`);
129
+ }
130
+ else {
131
+ lines.push(` ${s.muted('Esc: go back')}`);
132
+ }
133
+ }
134
+ lines.push('');
135
+ lines.push(border);
136
+ return lines;
137
+ }
138
+ getMinHeight() {
139
+ // More height for custom agents with tool profile info, and when editing
140
+ const base = this.item.role === 'custom' ? 22 : 18;
141
+ return this.editingTier ? base + 2 : base;
142
+ }
143
+ handleKey(data) {
144
+ if (this.editingTier) {
145
+ // In tier editing mode
146
+ if (isEscape(data) || isCtrlC(data)) {
147
+ // Cancel editing, restore original tier
148
+ this.selectedTierIndex = this.originalTierIndex;
149
+ this.editingTier = false;
150
+ return stay();
151
+ }
152
+ if (isEnter(data)) {
153
+ // Confirm tier change
154
+ this.editingTier = false;
155
+ const tierChanged = this.selectedTierIndex !== this.originalTierIndex;
156
+ if (tierChanged) {
157
+ const newTier = MODEL_TIERS_LIST[this.selectedTierIndex];
158
+ return closeOverlay({
159
+ action: 'change-tier',
160
+ agentId: this.item.id,
161
+ modelTier: newTier,
162
+ });
163
+ }
164
+ return stay();
165
+ }
166
+ // Arrow keys cycle through tiers
167
+ const key = data.toString();
168
+ if (key === '\x1b[D' || key === 'h') { // Left arrow or h
169
+ this.selectedTierIndex = (this.selectedTierIndex - 1 + MODEL_TIERS_LIST.length) % MODEL_TIERS_LIST.length;
170
+ }
171
+ else if (key === '\x1b[C' || key === 'l') { // Right arrow or l
172
+ this.selectedTierIndex = (this.selectedTierIndex + 1) % MODEL_TIERS_LIST.length;
173
+ }
174
+ return stay();
175
+ }
176
+ // Normal mode
177
+ if (isEscape(data) || isCtrlC(data) || isClose(data)) {
178
+ return popScreen();
179
+ }
180
+ if (isEnter(data)) {
181
+ // Switch to this agent
182
+ return closeOverlay({ action: 'switch', agentId: this.item.id });
183
+ }
184
+ const char = extractPrintable(data);
185
+ if (char === 't') {
186
+ // Enter tier editing mode
187
+ this.editingTier = true;
188
+ return stay();
189
+ }
190
+ if (char === 'd' && this.item.id !== 'default') {
191
+ // Return remove action - command handler will do the actual removal
192
+ // (including cleanup of custom-agents.json for custom agents)
193
+ return closeOverlay({ action: 'remove', agentId: this.item.id, role: this.item.role });
194
+ }
195
+ return stay();
196
+ }
197
+ }
198
+ // =============================================================================
199
+ // Add Role Screen (Confirm adding role with optional custom name and model tier)
200
+ // =============================================================================
201
+ class AddRoleScreen extends BaseScreen {
202
+ item;
203
+ styles;
204
+ customName = '';
205
+ selectedTierIndex;
206
+ setAsDefault = false;
207
+ focusedField = 'name';
208
+ roleDefaultTier;
209
+ userDefaultTier;
210
+ constructor(item, styles) {
211
+ super();
212
+ this.item = item;
213
+ this.styles = styles;
214
+ // Get role's built-in default and user's saved preference
215
+ this.roleDefaultTier = item.defaultModelTier ?? 'balanced';
216
+ this.userDefaultTier = getRoleTierDefault(item.role);
217
+ // Initialize to user preference if set, otherwise role default
218
+ const initialTier = this.userDefaultTier ?? this.roleDefaultTier;
219
+ this.selectedTierIndex = MODEL_TIERS_LIST.indexOf(initialTier);
220
+ if (this.selectedTierIndex === -1)
221
+ this.selectedTierIndex = 1; // fallback to balanced
222
+ }
223
+ render() {
224
+ const s = this.styles;
225
+ const cols = terminal.getTerminalWidth();
226
+ const border = renderBorder(cols, s);
227
+ const lines = [];
228
+ const contentWidth = cols - 6;
229
+ lines.push(border);
230
+ lines.push(` ${s.primaryBold(`Add ${this.item.mascot} ${this.item.displayName}`)}`);
231
+ lines.push('');
232
+ // Description
233
+ const wrapped = wrapText(this.item.description, contentWidth);
234
+ for (const line of wrapped) {
235
+ lines.push(` ${s.secondary(line)}`);
236
+ }
237
+ lines.push('');
238
+ // Custom name input
239
+ const defaultId = this.item.role;
240
+ const displayId = this.customName || defaultId;
241
+ const nameLabel = this.focusedField === 'name' ? s.primaryBold('▶ Agent ID:') : s.muted(' Agent ID:');
242
+ lines.push(` ${nameLabel} ${s.primary(`$${displayId}`)}${this.customName ? '' : s.muted(' (default)')}`);
243
+ lines.push('');
244
+ // Model tier - single cycling value
245
+ const currentTier = MODEL_TIERS_LIST[this.selectedTierIndex];
246
+ const tierInfo = TIER_INFO[currentTier];
247
+ const isRoleDefault = currentTier === this.roleDefaultTier;
248
+ const isUserDefault = currentTier === this.userDefaultTier;
249
+ let tierSuffix = '';
250
+ if (isUserDefault) {
251
+ tierSuffix = ' (your default)';
252
+ }
253
+ else if (isRoleDefault) {
254
+ tierSuffix = ' (default)';
255
+ }
256
+ const tierLabel = this.focusedField === 'tier' ? s.primaryBold('▶ Model Tier:') : s.muted(' Model Tier:');
257
+ const tierValue = this.focusedField === 'tier'
258
+ ? s.primaryBold(`[${tierInfo.label}${tierSuffix}]`)
259
+ : s.primary(`[${tierInfo.label}${tierSuffix}]`);
260
+ lines.push(` ${tierLabel} ${tierValue}`);
261
+ lines.push('');
262
+ // Checkbox for setting as default
263
+ const checkboxLabel = this.focusedField === 'checkbox' ? s.primaryBold('▶') : ' ';
264
+ const checkboxValue = this.setAsDefault ? s.primary('[✓]') : s.muted('[ ]');
265
+ const checkboxText = `Set as default for ${this.item.displayName}`;
266
+ lines.push(` ${checkboxLabel} ${checkboxValue} ${this.focusedField === 'checkbox' ? s.primary(checkboxText) : s.secondary(checkboxText)}`);
267
+ lines.push('');
268
+ // Hints based on focused field
269
+ if (this.focusedField === 'name') {
270
+ lines.push(` ${s.muted('Type: custom name · Tab: next field · Enter: add · Esc: cancel')}`);
271
+ }
272
+ else if (this.focusedField === 'tier') {
273
+ lines.push(` ${s.muted('←→: change tier · Tab: next field · Enter: add · Esc: cancel')}`);
274
+ }
275
+ else {
276
+ lines.push(` ${s.muted('Space: toggle · Tab: next field · Enter: add · Esc: cancel')}`);
277
+ }
278
+ lines.push('');
279
+ lines.push(border);
280
+ return lines;
281
+ }
282
+ getMinHeight() {
283
+ return 18;
284
+ }
285
+ handleKey(data) {
286
+ if (isEscape(data) || isCtrlC(data) || isClose(data)) {
287
+ return popScreen();
288
+ }
289
+ if (isEnter(data)) {
290
+ // Save as default if checkbox is checked
291
+ const modelTier = MODEL_TIERS_LIST[this.selectedTierIndex];
292
+ if (this.setAsDefault) {
293
+ setRoleTierDefault(this.item.role, modelTier);
294
+ }
295
+ // Return result - command handler will do the actual add
296
+ const customId = this.customName.trim() || undefined;
297
+ return closeOverlay({ action: 'add', role: this.item.role, customId, modelTier });
298
+ }
299
+ // Tab cycles through fields: name -> tier -> checkbox -> name
300
+ if (data[0] === 9) { // Tab
301
+ if (this.focusedField === 'name') {
302
+ this.focusedField = 'tier';
303
+ }
304
+ else if (this.focusedField === 'tier') {
305
+ this.focusedField = 'checkbox';
306
+ }
307
+ else {
308
+ this.focusedField = 'name';
309
+ }
310
+ return stay();
311
+ }
312
+ // Field-specific handling
313
+ if (this.focusedField === 'name') {
314
+ // Handle backspace
315
+ if (data[0] === 127 || data[0] === 8) {
316
+ if (this.customName.length > 0) {
317
+ this.customName = this.customName.slice(0, -1);
318
+ }
319
+ return stay();
320
+ }
321
+ // Handle printable characters for custom name
322
+ const char = extractPrintable(data);
323
+ if (char && /^[a-zA-Z0-9_-]$/.test(char)) {
324
+ this.customName += char.toLowerCase();
325
+ }
326
+ }
327
+ else if (this.focusedField === 'tier') {
328
+ // Tier selection - left/right arrows cycle through values
329
+ const key = data.toString();
330
+ if (key === '\x1b[D' || key === 'h') { // Left arrow or h
331
+ this.selectedTierIndex = (this.selectedTierIndex - 1 + MODEL_TIERS_LIST.length) % MODEL_TIERS_LIST.length;
332
+ }
333
+ else if (key === '\x1b[C' || key === 'l') { // Right arrow or l
334
+ this.selectedTierIndex = (this.selectedTierIndex + 1) % MODEL_TIERS_LIST.length;
335
+ }
336
+ }
337
+ else {
338
+ // focusedField === 'checkbox': Space toggles checkbox
339
+ if (data[0] === 32) { // Space
340
+ this.setAsDefault = !this.setAsDefault;
341
+ }
342
+ }
343
+ return stay();
344
+ }
345
+ }
346
+ // =============================================================================
347
+ // Context Detail Screen (View Agent Context Status)
348
+ // =============================================================================
349
+ class ContextDetailScreen extends BaseScreen {
350
+ item;
351
+ styles;
352
+ constructor(item, styles) {
353
+ super();
354
+ this.item = item;
355
+ this.styles = styles;
356
+ }
357
+ render() {
358
+ const s = this.styles;
359
+ const cols = terminal.getTerminalWidth();
360
+ const border = renderBorder(cols, s);
361
+ const lines = [];
362
+ lines.push(border);
363
+ if (this.item.isSharedContext) {
364
+ // Shared context detail
365
+ lines.push(` ${s.primaryBold('* Shared Team Context')}`);
366
+ lines.push('');
367
+ lines.push(` ${s.muted('Usage:')} ${renderProgressBar(this.item.utilization / 100, 20, s)}`);
368
+ lines.push(` ${s.muted('Tokens:')} ${formatTokens(this.item.currentTokens)} / ${formatTokens(this.item.maxTokens)}`);
369
+ lines.push('');
370
+ lines.push(` ${s.secondary('Shared context is injected into all agent prompts.')}`);
371
+ lines.push(` ${s.secondary('It includes project info, decisions, and artifact summaries.')}`);
372
+ }
373
+ else {
374
+ // Agent context detail
375
+ lines.push(` ${s.primaryBold(`${this.item.mascot} ${this.item.displayName} - Context`)}`);
376
+ lines.push('');
377
+ lines.push(` ${s.muted('Usage:')} ${renderProgressBar(this.item.utilization / 100, 20, s)}`);
378
+ lines.push(` ${s.muted('Tokens:')} ${formatTokens(this.item.currentTokens)} / ${formatTokens(this.item.maxTokens)}`);
379
+ lines.push(` ${s.muted('Messages:')} ${String(this.item.messageCount)}`);
380
+ lines.push('');
381
+ if (this.item.utilization > 70) {
382
+ lines.push(` ${s.warning('⚠ Context is getting full. Consider compacting.')}`);
383
+ lines.push('');
384
+ }
385
+ lines.push(` ${s.muted('Press c to compact this agent\'s context')}`);
386
+ }
387
+ lines.push(` ${s.muted('Press Esc to go back')}`);
388
+ lines.push('');
389
+ lines.push(border);
390
+ return lines;
391
+ }
392
+ // renderProgressBar and formatTokens are now imported from '../../base/index.js'
393
+ getMinHeight() {
394
+ return 14;
395
+ }
396
+ handleKey(data) {
397
+ if (isEscape(data) || isCtrlC(data) || isClose(data)) {
398
+ return popScreen();
399
+ }
400
+ const char = extractPrintable(data);
401
+ if (char === 'c' && !this.item.isSharedContext) {
402
+ // Request compaction for this agent
403
+ return closeOverlay({ action: 'compact', agentId: this.item.id });
404
+ }
405
+ return stay();
406
+ }
407
+ }
408
+ // =============================================================================
409
+ // Main Overlay
410
+ // =============================================================================
411
+ export class TeamOverlayV2 extends TabbedListOverlayV2 {
412
+ type = 'inline';
413
+ id = 'team-overlay-v2';
414
+ constructor(team, _options = {}) {
415
+ const memberItems = TeamOverlayV2.buildMemberItems(team);
416
+ const roleItems = TeamOverlayV2.buildRoleItems(team);
417
+ const contextItems = TeamOverlayV2.buildContextItems(team);
418
+ const allItems = [...memberItems, ...roleItems, ...contextItems];
419
+ super({
420
+ title: 'Team Management',
421
+ tabs: TABS,
422
+ items: allItems,
423
+ pageSize: 10,
424
+ filterByTab: (item, tabId) => {
425
+ if (tabId === 'members')
426
+ return item.isMember;
427
+ if (tabId === 'context')
428
+ return item.isContext;
429
+ // roles tab: neither member nor context
430
+ return !item.isMember && !item.isContext;
431
+ },
432
+ getSearchText: (item) => {
433
+ if (item.isMember) {
434
+ return `${item.id} ${item.displayName} ${item.role}`;
435
+ }
436
+ if (item.isContext) {
437
+ return `${item.id} ${item.displayName}`;
438
+ }
439
+ if ('isCustomCreate' in item && item.isCustomCreate) {
440
+ return `custom create ${item.displayName}`;
441
+ }
442
+ // RoleItem (TypeScript has narrowed the type)
443
+ return `${item.role} ${item.displayName} ${item.description}`;
444
+ },
445
+ renderItem: (item, isSelected, styles) => {
446
+ const prefix = isSelected ? styles.primary('❯ ') : ' ';
447
+ const cols = terminal.getTerminalWidth();
448
+ const maxWidth = cols - 10;
449
+ if (item.isMember) {
450
+ // TeamMemberItem
451
+ const activeIndicator = item.isActive ? styles.primary('●') : ' ';
452
+ const coordIndicator = item.isCoordinator ? styles.secondary('★') : '';
453
+ const label = `${item.mascot} $${item.id}`;
454
+ const name = item.displayName;
455
+ // Model tier badge
456
+ let tierBadge = '';
457
+ if (item.modelTier) {
458
+ tierBadge = styles.muted(` [${TIER_INFO[item.modelTier].label}]`);
459
+ }
460
+ const badges = [activeIndicator, coordIndicator].filter(Boolean).join(' ');
461
+ let line = `${prefix}${label} ${styles.muted(`(${name})`)}${tierBadge} ${badges}`;
462
+ if (line.length > maxWidth) {
463
+ line = line.slice(0, maxWidth - 1) + '…';
464
+ }
465
+ return isSelected ? styles.primary(line) : line;
466
+ }
467
+ else if (item.isContext) {
468
+ // ContextItem - show progress bar
469
+ const pct = item.utilization;
470
+ const barWidth = 10;
471
+ const filled = Math.round((pct / 100) * barWidth);
472
+ const empty = barWidth - filled;
473
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
474
+ const barColor = pct > 80 ? styles.error : pct > 60 ? styles.warning : styles.primary;
475
+ let label;
476
+ if (item.isSharedContext) {
477
+ label = `* Shared Context`;
478
+ }
479
+ else {
480
+ label = `${item.mascot} $${item.id}`;
481
+ }
482
+ // Pad label to fixed width for alignment (18 chars covers most cases)
483
+ const labelWidth = 18;
484
+ const paddedLabel = label.padEnd(labelWidth);
485
+ const tokens = formatTokens(item.currentTokens);
486
+ // Pad percentage to fixed width (3 chars: 0-100)
487
+ const pctStr = String(Math.round(pct)).padStart(3);
488
+ let line = `${prefix}${paddedLabel} ${barColor(bar)} ${pctStr}% (${tokens})`;
489
+ if (line.length > maxWidth) {
490
+ line = line.slice(0, maxWidth - 1) + '…';
491
+ }
492
+ return isSelected ? styles.primary(line) : line;
493
+ }
494
+ else if ('isCustomCreate' in item && item.isCustomCreate) {
495
+ // CustomCreateItem - special styling
496
+ let line = `${prefix}${styles.secondary(item.mascot)} ${styles.primary(item.displayName)}`;
497
+ if (line.length > maxWidth) {
498
+ line = line.slice(0, maxWidth - 1) + '…';
499
+ }
500
+ return line;
501
+ }
502
+ else {
503
+ // RoleItem (TypeScript has narrowed the type)
504
+ const label = `${item.mascot} ${item.displayName}`;
505
+ // Show profile badge
506
+ let profileBadge = '';
507
+ if (item.defaultProfile && item.defaultProfile !== 'full') {
508
+ profileBadge = styles.muted(` [${PROFILE_INFO[item.defaultProfile].label}]`);
509
+ }
510
+ // Show tier badge
511
+ let tierBadge = '';
512
+ if (item.defaultModelTier) {
513
+ tierBadge = styles.muted(` [${TIER_INFO[item.defaultModelTier].label}]`);
514
+ }
515
+ const inTeamBadge = item.alreadyInTeam ? styles.muted(' (in team)') : '';
516
+ let line = `${prefix}${label}${profileBadge}${tierBadge}${inTeamBadge}`;
517
+ if (line.length > maxWidth) {
518
+ line = line.slice(0, maxWidth - 1) + '…';
519
+ }
520
+ if (item.alreadyInTeam) {
521
+ return styles.muted(line);
522
+ }
523
+ return isSelected ? styles.primary(line) : line;
524
+ }
525
+ },
526
+ showCount: true,
527
+ emptyMessage: 'No agents in team.',
528
+ noResultsMessage: 'No agents match the search.',
529
+ footerHints: (searchMode, tabId) => {
530
+ if (searchMode) {
531
+ return 'Type to search · Enter/Esc Exit search · Backspace Delete';
532
+ }
533
+ if (tabId === 'context') {
534
+ return 'Enter: view details · c: compact (in detail) · Tab: tabs · q/Esc: close';
535
+ }
536
+ return 'Enter: view/add · d: remove (in detail) · Tab: tabs · q/Esc: close';
537
+ },
538
+ });
539
+ }
540
+ // ---------------------------------------------------------------------------
541
+ // Static Data Builders
542
+ // ---------------------------------------------------------------------------
543
+ static buildMemberItems(team) {
544
+ const agents = team.getAll();
545
+ // Get current provider for model resolution
546
+ const settings = getSettings();
547
+ const settingsProvider = settings.defaultProvider;
548
+ // Resolve 'auto' to 'claude' as default (same as CLI startup)
549
+ const provider = settingsProvider === 'auto' ? 'claude' : settingsProvider;
550
+ return agents.map((agent) => {
551
+ // Resolve model ID from tier
552
+ const tier = agent.modelTier ?? 'balanced';
553
+ const modelId = getModelForTier(provider, tier);
554
+ return {
555
+ id: agent.id,
556
+ displayName: agent.displayName,
557
+ mascot: agent.mascot,
558
+ role: agent.role,
559
+ description: agent.description,
560
+ isActive: agent.id === team.activeAgentId,
561
+ isCoordinator: agent.id === team.coordinatorId,
562
+ hasToolRestrictions: agent.toolFilter !== undefined && agent.toolFilter.length > 0,
563
+ toolProfile: agent.toolProfile,
564
+ enabledSkills: agent.enabledSkills,
565
+ modelTier: agent.modelTier,
566
+ modelId,
567
+ isMember: true,
568
+ isContext: false,
569
+ };
570
+ });
571
+ }
572
+ static buildRoleItems(team) {
573
+ const existingIds = new Set(team.getAgentIds());
574
+ const items = [];
575
+ for (const [role, metadata] of Object.entries(ROLE_METADATA)) {
576
+ if (role === 'default' || role === 'custom')
577
+ continue;
578
+ items.push({
579
+ role: role,
580
+ displayName: metadata.displayName,
581
+ mascot: metadata.mascot,
582
+ description: metadata.description,
583
+ alreadyInTeam: existingIds.has(role),
584
+ defaultProfile: metadata.defaultToolProfile,
585
+ defaultModelTier: metadata.defaultModelTier,
586
+ isCustomCreate: false,
587
+ isMember: false,
588
+ isContext: false,
589
+ });
590
+ }
591
+ // Add custom agent creation option at the bottom
592
+ items.push({
593
+ displayName: 'Create Custom Agent...',
594
+ mascot: '[+]',
595
+ description: 'Define your own specialized agent',
596
+ isCustomCreate: true,
597
+ isMember: false,
598
+ isContext: false,
599
+ });
600
+ return items;
601
+ }
602
+ static buildContextItems(team) {
603
+ const items = [];
604
+ const agents = team.getAll();
605
+ // Add per-agent context items
606
+ for (const teamAgent of agents) {
607
+ // Use getContextStats() which works for both initialized and restored agents
608
+ const stats = teamAgent.getContextStats();
609
+ const currentTokens = stats.estimatedTokens;
610
+ const messageCount = stats.messageCount;
611
+ const maxTokens = 200000; // Claude's context window
612
+ const utilization = Math.min(100, Math.round((currentTokens / maxTokens) * 100));
613
+ items.push({
614
+ id: teamAgent.id,
615
+ displayName: teamAgent.displayName,
616
+ mascot: teamAgent.mascot,
617
+ utilization,
618
+ currentTokens,
619
+ maxTokens,
620
+ messageCount,
621
+ lastActive: undefined, // Could track this in future
622
+ isSharedContext: false,
623
+ isMember: false,
624
+ isContext: true,
625
+ });
626
+ }
627
+ // Add shared context summary row
628
+ const sharedContext = team.sharedContext;
629
+ const tokenBudget = sharedContext.getTokenBudget();
630
+ items.push({
631
+ id: 'shared',
632
+ displayName: 'Shared Context',
633
+ mascot: '*',
634
+ utilization: sharedContext.getUtilization(),
635
+ currentTokens: tokenBudget.current,
636
+ maxTokens: tokenBudget.max,
637
+ messageCount: 0,
638
+ isSharedContext: true,
639
+ isMember: false,
640
+ isContext: true,
641
+ });
642
+ return items;
643
+ }
644
+ // ---------------------------------------------------------------------------
645
+ // Detail Screen Creation
646
+ // ---------------------------------------------------------------------------
647
+ createDetailScreen(item) {
648
+ if (item.isMember) {
649
+ // TeamMemberItem - show detail screen
650
+ return new AgentDetailScreen(item, this.getStyles());
651
+ }
652
+ else if (item.isContext) {
653
+ // ContextItem - show context detail screen
654
+ return new ContextDetailScreen(item, this.getStyles());
655
+ }
656
+ else if ('isCustomCreate' in item && item.isCustomCreate) {
657
+ // CustomCreateItem - handled specially, should not reach here
658
+ // (handleKey intercepts this case)
659
+ return null;
660
+ }
661
+ else {
662
+ // RoleItem - show add confirmation (TypeScript has narrowed the type)
663
+ if (item.alreadyInTeam) {
664
+ return null; // Already in team, do nothing
665
+ }
666
+ return new AddRoleScreen(item, this.getStyles());
667
+ }
668
+ }
669
+ // ---------------------------------------------------------------------------
670
+ // Key Handling Override
671
+ // ---------------------------------------------------------------------------
672
+ handleKey(key) {
673
+ const data = key.raw;
674
+ // Check if Enter is pressed on CustomCreateItem
675
+ if (isEnter(data) && this.state.filteredItems.length > 0) {
676
+ const currentItem = this.state.filteredItems[this.state.selectedIndex];
677
+ if ('isCustomCreate' in currentItem && currentItem.isCustomCreate) {
678
+ // Custom agent creation - close overlay and signal to show form
679
+ return this.close({ action: 'create-custom' });
680
+ }
681
+ }
682
+ // Also handle 'c' shortcut for custom creation in roles tab
683
+ // Only when on main list (not in a detail screen like AddRoleScreen)
684
+ const char = extractPrintable(data);
685
+ const currentTabId = TABS[this.state.currentTab]?.id;
686
+ if (char === 'c' && currentTabId === 'roles' && !this.state.searchMode && this.screenStack.size() === 1) {
687
+ return this.close({ action: 'create-custom' });
688
+ }
689
+ // Delegate to parent for all other keys
690
+ return super.handleKey(key);
691
+ }
692
+ }