@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,711 @@
1
+ /**
2
+ * Custom Agent Form Overlay V2
3
+ *
4
+ * Multi-step wizard for creating custom agents.
5
+ * Step 1: Basic Info (Agent ID, Display Name, Specialty, Personality)
6
+ * Step 2: Tool Profile (select profile or customize tool groups)
7
+ * Step 3: Skills (select which skills to enable)
8
+ * Step 4: Model Tier (select fast/balanced/powerful)
9
+ */
10
+ import { BaseOverlayV2, renderBorder, wrapText } from '../../base/index.js';
11
+ import { validateAgentId, isAgentIdTaken, } from '../../../multi-agent/custom-agents.js';
12
+ import { PREDEFINED_ROLE_IDS } from '../../../multi-agent/types.js';
13
+ import { TOOL_GROUPS, PROFILE_INFO, getGroupsByTier, createDefaultToolConfig, getToolsForProfile, } from '../../../multi-agent/tool-config.js';
14
+ import { getDefinedSkillNames, checkSkillCompatibility, getSkillsByCategory, } from '../../../multi-agent/skill-requirements.js';
15
+ import { MODEL_TIERS, TIER_INFO } from '../../../models/index.js';
16
+ // Profile list for selection
17
+ const PROFILE_LIST = [
18
+ 'full',
19
+ 'read-only',
20
+ 'developer',
21
+ 'security',
22
+ 'docs',
23
+ 'devops',
24
+ 'qa',
25
+ 'custom',
26
+ ];
27
+ // =============================================================================
28
+ // Overlay Implementation
29
+ // =============================================================================
30
+ export class CustomAgentFormOverlayV2 extends BaseOverlayV2 {
31
+ type = 'inline';
32
+ id = 'custom-agent-form-overlay-v2';
33
+ existingCustomAgents;
34
+ teamAgentIds;
35
+ constructor(options) {
36
+ const fields = [
37
+ {
38
+ id: 'agentId',
39
+ label: 'Agent ID',
40
+ hint: 'lowercase, no spaces, used as $agentId',
41
+ required: true,
42
+ maxLength: 20,
43
+ value: '',
44
+ },
45
+ {
46
+ id: 'displayName',
47
+ label: 'Display Name',
48
+ hint: 'human-readable name',
49
+ required: true,
50
+ maxLength: 50,
51
+ value: '',
52
+ },
53
+ {
54
+ id: 'specialty',
55
+ label: 'Specialty',
56
+ hint: 'what this agent specializes in',
57
+ required: true,
58
+ maxLength: 200,
59
+ value: '',
60
+ },
61
+ {
62
+ id: 'personality',
63
+ label: 'Personality',
64
+ hint: 'optional - how the agent approaches tasks',
65
+ required: false,
66
+ maxLength: 200,
67
+ value: '',
68
+ },
69
+ ];
70
+ super({
71
+ fields,
72
+ activeFieldIndex: 0,
73
+ cursorPos: 0,
74
+ currentStep: 'basic',
75
+ selectedProfile: 'full',
76
+ customGroups: new Set(),
77
+ profileListIndex: 0,
78
+ groupListIndex: 0,
79
+ inGroupSelection: false,
80
+ enabledSkills: new Set(),
81
+ skillListIndex: 0,
82
+ selectedModelTier: 'balanced',
83
+ tierListIndex: 1, // Default to balanced (index 1)
84
+ });
85
+ this.existingCustomAgents = options.existingCustomAgents;
86
+ this.teamAgentIds = options.teamAgentIds;
87
+ this.minHeight = 25;
88
+ }
89
+ renderContent(context) {
90
+ switch (this.state.currentStep) {
91
+ case 'basic':
92
+ return this.renderBasicStep(context);
93
+ case 'tools':
94
+ return this.renderToolsStep(context);
95
+ case 'skills':
96
+ return this.renderSkillsStep(context);
97
+ case 'tier':
98
+ return this.renderTierStep(context);
99
+ default:
100
+ return this.renderBasicStep(context);
101
+ }
102
+ }
103
+ renderBasicStep(context) {
104
+ const s = context.styles;
105
+ const lines = [];
106
+ const border = renderBorder(context.width, s);
107
+ // Header with step indicator
108
+ lines.push(border);
109
+ lines.push(` ${s.primaryBold('Create Custom Agent')} ${s.muted('- Step 1/4: Basic Info')}`);
110
+ lines.push(border);
111
+ lines.push('');
112
+ // Render each field
113
+ for (let i = 0; i < this.state.fields.length; i++) {
114
+ const field = this.state.fields[i];
115
+ const isActive = i === this.state.activeFieldIndex;
116
+ const requiredMark = field.required ? s.error('*') : ' ';
117
+ // Field label
118
+ const labelStyle = isActive ? s.primary : s.secondary;
119
+ lines.push(` ${requiredMark} ${labelStyle(field.label + ':')}`);
120
+ // Field input
121
+ if (isActive) {
122
+ // Show cursor in active field
123
+ const beforeCursor = field.value.slice(0, this.state.cursorPos);
124
+ const afterCursor = field.value.slice(this.state.cursorPos);
125
+ const cursor = s.primaryBold('│');
126
+ lines.push(` ${beforeCursor}${cursor}${afterCursor}`);
127
+ }
128
+ else {
129
+ // Show value or placeholder
130
+ if (field.value) {
131
+ lines.push(` ${field.value}`);
132
+ }
133
+ else {
134
+ lines.push(` ${s.muted('(empty)')}`);
135
+ }
136
+ }
137
+ // Hint or error
138
+ if (field.error) {
139
+ lines.push(` ${s.error('⚠ ' + field.error)}`);
140
+ }
141
+ else if (isActive) {
142
+ lines.push(` ${s.muted(field.hint)}`);
143
+ }
144
+ else {
145
+ lines.push('');
146
+ }
147
+ }
148
+ lines.push('');
149
+ // Footer
150
+ lines.push(border);
151
+ lines.push(s.muted(' Tab/↓ Next Shift+Tab/↑ Prev Enter Continue Ctrl+D Defaults Esc Cancel'));
152
+ lines.push(border);
153
+ return lines;
154
+ }
155
+ renderToolsStep(context) {
156
+ const s = context.styles;
157
+ const lines = [];
158
+ const border = renderBorder(context.width, s);
159
+ // Header
160
+ lines.push(border);
161
+ lines.push(` ${s.primaryBold('Create Custom Agent')} ${s.muted('- Step 2/4: Tool Profile')}`);
162
+ lines.push(border);
163
+ lines.push('');
164
+ if (!this.state.inGroupSelection) {
165
+ // Profile selection
166
+ lines.push(` ${s.primary('Select a tool profile:')}`);
167
+ lines.push('');
168
+ for (let i = 0; i < PROFILE_LIST.length; i++) {
169
+ const profile = PROFILE_LIST[i];
170
+ const info = PROFILE_INFO[profile];
171
+ const isSelected = i === this.state.profileListIndex;
172
+ const isChosen = this.state.selectedProfile === profile;
173
+ const marker = isChosen ? s.success('●') : (isSelected ? s.primary('○') : ' ');
174
+ const labelStyle = isSelected ? s.primaryBold : (isChosen ? s.success : s.secondary);
175
+ lines.push(` ${marker} ${labelStyle(info.label)}`);
176
+ if (isSelected) {
177
+ // Show description for selected item
178
+ const wrapped = wrapText(info.description, context.width - 8);
179
+ for (const line of wrapped) {
180
+ lines.push(` ${s.muted(line)}`);
181
+ }
182
+ }
183
+ }
184
+ lines.push('');
185
+ lines.push(border);
186
+ lines.push(s.muted(' ↑/↓ Navigate Enter Select ← Back Esc Cancel'));
187
+ lines.push(border);
188
+ }
189
+ else {
190
+ // Custom group selection
191
+ lines.push(` ${s.primary('Select tool groups for custom profile:')}`);
192
+ lines.push('');
193
+ const { direct, meta } = getGroupsByTier();
194
+ // Direct tools section
195
+ lines.push(` ${s.muted('─── Direct Tools ───')}`);
196
+ for (let i = 0; i < direct.length; i++) {
197
+ const groupId = direct[i];
198
+ this.renderGroupItem(lines, groupId, i, s);
199
+ }
200
+ // Meta tools section
201
+ lines.push('');
202
+ lines.push(` ${s.muted('─── Meta-Registry Tools (via use_tool) ───')}`);
203
+ for (let i = 0; i < meta.length; i++) {
204
+ const groupId = meta[i];
205
+ this.renderGroupItem(lines, groupId, direct.length + i, s);
206
+ }
207
+ lines.push('');
208
+ lines.push(border);
209
+ lines.push(s.muted(' ↑/↓ Navigate Space Toggle Enter Done ← Back Esc Cancel'));
210
+ lines.push(border);
211
+ }
212
+ return lines;
213
+ }
214
+ renderGroupItem(lines, groupId, index, s) {
215
+ // groupId is guaranteed to exist (from getGroupsByTier)
216
+ const group = TOOL_GROUPS[groupId];
217
+ const isSelected = index === this.state.groupListIndex;
218
+ const isEnabled = this.state.customGroups.has(groupId);
219
+ const marker = isEnabled ? s.success('[x]') : '[ ]';
220
+ const labelStyle = isSelected ? s.primaryBold : s.secondary;
221
+ const readOnlyBadge = group.readOnly ? s.muted(' (read-only)') : '';
222
+ lines.push(` ${marker} ${labelStyle(group.label)}${readOnlyBadge}`);
223
+ }
224
+ renderSkillsStep(context) {
225
+ const s = context.styles;
226
+ const lines = [];
227
+ const border = renderBorder(context.width, s);
228
+ // Header
229
+ lines.push(border);
230
+ lines.push(` ${s.primaryBold('Create Custom Agent')} ${s.muted('- Step 3/4: Skills')}`);
231
+ lines.push(border);
232
+ lines.push('');
233
+ lines.push(` ${s.primary('Select skills to enable:')}`);
234
+ lines.push(` ${s.muted('(Leave empty for all skills, or select specific skills)')}`);
235
+ lines.push('');
236
+ // Get available tools for compatibility check
237
+ const availableTools = this.getAvailableTools();
238
+ const categories = getSkillsByCategory();
239
+ let globalIndex = 0;
240
+ for (const [category, skills] of Object.entries(categories)) {
241
+ lines.push(` ${s.muted(`─── ${category.charAt(0).toUpperCase() + category.slice(1)} ───`)}`);
242
+ for (const skillName of skills) {
243
+ const compatibility = checkSkillCompatibility(skillName, availableTools);
244
+ const isSelected = globalIndex === this.state.skillListIndex;
245
+ const isEnabled = this.state.enabledSkills.has(skillName);
246
+ const isCompatible = compatibility.compatible;
247
+ const marker = isEnabled ? s.success('[x]') : '[ ]';
248
+ const labelStyle = isSelected
249
+ ? (isCompatible ? s.primaryBold : s.error)
250
+ : (isCompatible ? s.secondary : s.muted);
251
+ const incompatibleBadge = !isCompatible
252
+ ? s.error(` (needs: ${compatibility.missingRequired.slice(0, 2).join(', ')}...)`)
253
+ : '';
254
+ lines.push(` ${marker} ${labelStyle(skillName)}${incompatibleBadge}`);
255
+ globalIndex++;
256
+ }
257
+ lines.push('');
258
+ }
259
+ lines.push(border);
260
+ lines.push(s.muted(' ↑/↓ Navigate Space Toggle a Toggle All Enter Next ← Back Esc Cancel'));
261
+ lines.push(border);
262
+ return lines;
263
+ }
264
+ getAvailableTools() {
265
+ return getToolsForProfile(this.state.selectedProfile, this.state.selectedProfile === 'custom' ? Array.from(this.state.customGroups) : undefined);
266
+ }
267
+ handleKey(key) {
268
+ // Escape - cancel
269
+ if (key.name === 'escape') {
270
+ return this.close({ cancelled: true });
271
+ }
272
+ // Ctrl+C - cancel
273
+ if (key.ctrl && key.name === 'c') {
274
+ return this.close({ cancelled: true });
275
+ }
276
+ switch (this.state.currentStep) {
277
+ case 'basic':
278
+ return this.handleBasicStepKey(key);
279
+ case 'tools':
280
+ return this.handleToolsStepKey(key);
281
+ case 'skills':
282
+ return this.handleSkillsStepKey(key);
283
+ case 'tier':
284
+ return this.handleTierStepKey(key);
285
+ default:
286
+ return this.noAction();
287
+ }
288
+ }
289
+ handleBasicStepKey(key) {
290
+ const field = this.state.fields[this.state.activeFieldIndex];
291
+ // Ctrl+D - use defaults (skip to create)
292
+ if (key.ctrl && key.name === 'd') {
293
+ return this.submitWithDefaults();
294
+ }
295
+ // Tab or Down - next field
296
+ if (key.name === 'tab' && !key.shift) {
297
+ return this.nextField();
298
+ }
299
+ if (key.name === 'down') {
300
+ return this.nextField();
301
+ }
302
+ // Shift+Tab or Up - previous field
303
+ if (key.name === 'tab' && key.shift) {
304
+ return this.prevField();
305
+ }
306
+ if (key.name === 'up') {
307
+ return this.prevField();
308
+ }
309
+ // Enter - validate and go to next step
310
+ if (key.name === 'return') {
311
+ return this.validateAndContinue();
312
+ }
313
+ // Backspace
314
+ if (key.name === 'backspace') {
315
+ if (this.state.cursorPos > 0) {
316
+ field.value = field.value.slice(0, this.state.cursorPos - 1) + field.value.slice(this.state.cursorPos);
317
+ this.state.cursorPos--;
318
+ field.error = undefined;
319
+ }
320
+ return this.rerender();
321
+ }
322
+ // Delete
323
+ if (key.name === 'delete') {
324
+ if (this.state.cursorPos < field.value.length) {
325
+ field.value = field.value.slice(0, this.state.cursorPos) + field.value.slice(this.state.cursorPos + 1);
326
+ field.error = undefined;
327
+ }
328
+ return this.rerender();
329
+ }
330
+ // Left arrow
331
+ if (key.name === 'left') {
332
+ if (this.state.cursorPos > 0) {
333
+ this.state.cursorPos--;
334
+ }
335
+ return this.rerender();
336
+ }
337
+ // Right arrow
338
+ if (key.name === 'right') {
339
+ if (this.state.cursorPos < field.value.length) {
340
+ this.state.cursorPos++;
341
+ }
342
+ return this.rerender();
343
+ }
344
+ // Home
345
+ if (key.name === 'home' || (key.ctrl && key.name === 'a')) {
346
+ this.state.cursorPos = 0;
347
+ return this.rerender();
348
+ }
349
+ // End
350
+ if (key.name === 'end' || (key.ctrl && key.name === 'e')) {
351
+ this.state.cursorPos = field.value.length;
352
+ return this.rerender();
353
+ }
354
+ // Printable character
355
+ if (key.char && key.char.length === 1 && !key.ctrl && !key.meta) {
356
+ // Check max length
357
+ if (field.value.length >= field.maxLength) {
358
+ return this.noAction();
359
+ }
360
+ // For agentId field, only allow lowercase letters, numbers, underscore
361
+ if (field.id === 'agentId') {
362
+ if (!/^[a-z0-9_]$/.test(key.char)) {
363
+ // Auto-convert uppercase to lowercase
364
+ if (/^[A-Z]$/.test(key.char)) {
365
+ field.value = field.value.slice(0, this.state.cursorPos) + key.char.toLowerCase() + field.value.slice(this.state.cursorPos);
366
+ this.state.cursorPos++;
367
+ field.error = undefined;
368
+ return this.rerender();
369
+ }
370
+ return this.noAction();
371
+ }
372
+ }
373
+ field.value = field.value.slice(0, this.state.cursorPos) + key.char + field.value.slice(this.state.cursorPos);
374
+ this.state.cursorPos++;
375
+ field.error = undefined;
376
+ return this.rerender();
377
+ }
378
+ return this.noAction();
379
+ }
380
+ handleToolsStepKey(key) {
381
+ // Left arrow - go back to basic step
382
+ if (key.name === 'left') {
383
+ if (this.state.inGroupSelection) {
384
+ this.state.inGroupSelection = false;
385
+ }
386
+ else {
387
+ this.state.currentStep = 'basic';
388
+ }
389
+ return this.rerender();
390
+ }
391
+ if (!this.state.inGroupSelection) {
392
+ // Profile selection
393
+ if (key.name === 'up') {
394
+ if (this.state.profileListIndex > 0) {
395
+ this.state.profileListIndex--;
396
+ }
397
+ return this.rerender();
398
+ }
399
+ if (key.name === 'down') {
400
+ if (this.state.profileListIndex < PROFILE_LIST.length - 1) {
401
+ this.state.profileListIndex++;
402
+ }
403
+ return this.rerender();
404
+ }
405
+ if (key.name === 'return' || key.name === 'space') {
406
+ const profile = PROFILE_LIST[this.state.profileListIndex];
407
+ this.state.selectedProfile = profile;
408
+ if (profile === 'custom') {
409
+ // Enter group selection mode
410
+ this.state.inGroupSelection = true;
411
+ this.state.groupListIndex = 0;
412
+ }
413
+ else {
414
+ // Go to skills step
415
+ this.state.currentStep = 'skills';
416
+ }
417
+ return this.rerender();
418
+ }
419
+ }
420
+ else {
421
+ // Custom group selection
422
+ const { direct, meta } = getGroupsByTier();
423
+ const totalGroups = direct.length + meta.length;
424
+ if (key.name === 'up') {
425
+ if (this.state.groupListIndex > 0) {
426
+ this.state.groupListIndex--;
427
+ }
428
+ return this.rerender();
429
+ }
430
+ if (key.name === 'down') {
431
+ if (this.state.groupListIndex < totalGroups - 1) {
432
+ this.state.groupListIndex++;
433
+ }
434
+ return this.rerender();
435
+ }
436
+ if (key.name === 'space') {
437
+ // Toggle group
438
+ const allGroups = [...direct, ...meta];
439
+ const groupId = allGroups[this.state.groupListIndex];
440
+ if (this.state.customGroups.has(groupId)) {
441
+ this.state.customGroups.delete(groupId);
442
+ }
443
+ else {
444
+ this.state.customGroups.add(groupId);
445
+ }
446
+ return this.rerender();
447
+ }
448
+ if (key.name === 'return') {
449
+ // Validate at least one group is selected
450
+ if (this.state.customGroups.size === 0) {
451
+ // Don't proceed without any groups
452
+ return this.noAction();
453
+ }
454
+ // Go to skills step
455
+ this.state.currentStep = 'skills';
456
+ return this.rerender();
457
+ }
458
+ }
459
+ return this.noAction();
460
+ }
461
+ handleSkillsStepKey(key) {
462
+ const skillNames = getDefinedSkillNames();
463
+ const totalSkills = skillNames.length;
464
+ // Left arrow - go back to tools step
465
+ if (key.name === 'left') {
466
+ this.state.currentStep = 'tools';
467
+ return this.rerender();
468
+ }
469
+ // Up/Down - navigate skills
470
+ if (key.name === 'up') {
471
+ if (this.state.skillListIndex > 0) {
472
+ this.state.skillListIndex--;
473
+ }
474
+ return this.rerender();
475
+ }
476
+ if (key.name === 'down') {
477
+ if (this.state.skillListIndex < totalSkills - 1) {
478
+ this.state.skillListIndex++;
479
+ }
480
+ return this.rerender();
481
+ }
482
+ // Space - toggle skill
483
+ if (key.name === 'space') {
484
+ const flatSkills = Object.values(getSkillsByCategory()).flat();
485
+ const skillName = flatSkills[this.state.skillListIndex];
486
+ // Check compatibility before toggling
487
+ const availableTools = this.getAvailableTools();
488
+ const compatibility = checkSkillCompatibility(skillName, availableTools);
489
+ if (compatibility.compatible) {
490
+ if (this.state.enabledSkills.has(skillName)) {
491
+ this.state.enabledSkills.delete(skillName);
492
+ }
493
+ else {
494
+ this.state.enabledSkills.add(skillName);
495
+ }
496
+ }
497
+ return this.rerender();
498
+ }
499
+ // 'a' - toggle all compatible skills
500
+ if (key.char === 'a') {
501
+ const flatSkills = Object.values(getSkillsByCategory()).flat();
502
+ const availableTools = this.getAvailableTools();
503
+ const allCompatibleEnabled = flatSkills.every(skillName => {
504
+ const compatibility = checkSkillCompatibility(skillName, availableTools);
505
+ return !compatibility.compatible || this.state.enabledSkills.has(skillName);
506
+ });
507
+ if (allCompatibleEnabled) {
508
+ // Clear all
509
+ this.state.enabledSkills.clear();
510
+ }
511
+ else {
512
+ // Enable all compatible
513
+ for (const skillName of flatSkills) {
514
+ const compatibility = checkSkillCompatibility(skillName, availableTools);
515
+ if (compatibility.compatible) {
516
+ this.state.enabledSkills.add(skillName);
517
+ }
518
+ }
519
+ }
520
+ return this.rerender();
521
+ }
522
+ // Enter - go to tier step
523
+ if (key.name === 'return') {
524
+ this.state.currentStep = 'tier';
525
+ return this.rerender();
526
+ }
527
+ return this.noAction();
528
+ }
529
+ renderTierStep(context) {
530
+ const s = context.styles;
531
+ const lines = [];
532
+ const border = renderBorder(context.width, s);
533
+ // Header
534
+ lines.push(border);
535
+ lines.push(` ${s.primaryBold('Create Custom Agent')} ${s.muted('- Step 4/4: Model Tier')}`);
536
+ lines.push(border);
537
+ lines.push('');
538
+ lines.push(` ${s.primary('Select the default model tier for this agent:')}`);
539
+ lines.push('');
540
+ for (let i = 0; i < MODEL_TIERS.length; i++) {
541
+ const tier = MODEL_TIERS[i];
542
+ const info = TIER_INFO[tier];
543
+ const isSelected = i === this.state.tierListIndex;
544
+ const isChosen = this.state.selectedModelTier === tier;
545
+ const marker = isChosen ? s.success('●') : (isSelected ? s.primary('○') : ' ');
546
+ const labelStyle = isSelected ? s.primaryBold : (isChosen ? s.success : s.secondary);
547
+ // Show tier label with short description
548
+ lines.push(` ${marker} ${labelStyle(info.label)} ${s.muted(`- ${info.shortDescription}`)}`);
549
+ if (isSelected) {
550
+ // Show full description for selected item
551
+ const wrapped = wrapText(info.description, context.width - 8);
552
+ for (const line of wrapped) {
553
+ lines.push(` ${s.muted(line)}`);
554
+ }
555
+ }
556
+ }
557
+ lines.push('');
558
+ lines.push(border);
559
+ lines.push(s.muted(' ↑/↓ Navigate Enter Create ← Back Esc Cancel'));
560
+ lines.push(border);
561
+ return lines;
562
+ }
563
+ handleTierStepKey(key) {
564
+ // Left arrow - go back to skills step
565
+ if (key.name === 'left') {
566
+ this.state.currentStep = 'skills';
567
+ return this.rerender();
568
+ }
569
+ // Up/Down - navigate tiers
570
+ if (key.name === 'up') {
571
+ if (this.state.tierListIndex > 0) {
572
+ this.state.tierListIndex--;
573
+ this.state.selectedModelTier = MODEL_TIERS[this.state.tierListIndex];
574
+ }
575
+ return this.rerender();
576
+ }
577
+ if (key.name === 'down') {
578
+ if (this.state.tierListIndex < MODEL_TIERS.length - 1) {
579
+ this.state.tierListIndex++;
580
+ this.state.selectedModelTier = MODEL_TIERS[this.state.tierListIndex];
581
+ }
582
+ return this.rerender();
583
+ }
584
+ // Space or Enter - select and submit
585
+ if (key.name === 'space') {
586
+ this.state.selectedModelTier = MODEL_TIERS[this.state.tierListIndex];
587
+ return this.rerender();
588
+ }
589
+ if (key.name === 'return') {
590
+ return this.submit();
591
+ }
592
+ return this.noAction();
593
+ }
594
+ nextField() {
595
+ if (this.state.activeFieldIndex < this.state.fields.length - 1) {
596
+ this.state.activeFieldIndex++;
597
+ this.state.cursorPos = this.state.fields[this.state.activeFieldIndex].value.length;
598
+ }
599
+ return this.rerender();
600
+ }
601
+ prevField() {
602
+ if (this.state.activeFieldIndex > 0) {
603
+ this.state.activeFieldIndex--;
604
+ this.state.cursorPos = this.state.fields[this.state.activeFieldIndex].value.length;
605
+ }
606
+ return this.rerender();
607
+ }
608
+ validateBasicInfo() {
609
+ let hasErrors = false;
610
+ for (const field of this.state.fields) {
611
+ field.error = undefined;
612
+ if (field.required && !field.value.trim()) {
613
+ field.error = `${field.label} is required`;
614
+ hasErrors = true;
615
+ continue;
616
+ }
617
+ // Special validation for agentId
618
+ if (field.id === 'agentId' && field.value) {
619
+ const idValidation = validateAgentId(field.value);
620
+ if (!idValidation.valid) {
621
+ field.error = idValidation.error;
622
+ hasErrors = true;
623
+ continue;
624
+ }
625
+ const taken = isAgentIdTaken(field.value, this.existingCustomAgents, this.teamAgentIds, [...PREDEFINED_ROLE_IDS]);
626
+ if (taken.taken) {
627
+ field.error = taken.reason;
628
+ hasErrors = true;
629
+ }
630
+ }
631
+ }
632
+ return !hasErrors;
633
+ }
634
+ validateAndContinue() {
635
+ if (!this.validateBasicInfo()) {
636
+ // Focus first field with error
637
+ const firstErrorIndex = this.state.fields.findIndex(f => f.error);
638
+ if (firstErrorIndex >= 0) {
639
+ this.state.activeFieldIndex = firstErrorIndex;
640
+ this.state.cursorPos = this.state.fields[firstErrorIndex].value.length;
641
+ }
642
+ return this.rerender();
643
+ }
644
+ // Go to tools step
645
+ this.state.currentStep = 'tools';
646
+ return this.rerender();
647
+ }
648
+ submitWithDefaults() {
649
+ if (!this.validateBasicInfo()) {
650
+ // Focus first field with error
651
+ const firstErrorIndex = this.state.fields.findIndex(f => f.error);
652
+ if (firstErrorIndex >= 0) {
653
+ this.state.activeFieldIndex = firstErrorIndex;
654
+ this.state.cursorPos = this.state.fields[firstErrorIndex].value.length;
655
+ }
656
+ return this.rerender();
657
+ }
658
+ // Submit with default toolConfig, empty skills, and balanced tier
659
+ const getFieldValue = (id) => {
660
+ return this.state.fields.find(f => f.id === id)?.value.trim() ?? '';
661
+ };
662
+ return this.close({
663
+ cancelled: false,
664
+ agent: {
665
+ id: getFieldValue('agentId'),
666
+ displayName: getFieldValue('displayName'),
667
+ specialty: getFieldValue('specialty'),
668
+ personality: getFieldValue('personality') || undefined,
669
+ toolConfig: createDefaultToolConfig(),
670
+ enabledSkills: [],
671
+ modelTier: 'balanced', // Default tier
672
+ },
673
+ });
674
+ }
675
+ submit() {
676
+ const getFieldValue = (id) => {
677
+ return this.state.fields.find(f => f.id === id)?.value.trim() ?? '';
678
+ };
679
+ // Build tool config
680
+ const toolConfig = {
681
+ profile: this.state.selectedProfile,
682
+ };
683
+ if (this.state.selectedProfile === 'custom') {
684
+ toolConfig.customGroups = Array.from(this.state.customGroups);
685
+ }
686
+ return this.close({
687
+ cancelled: false,
688
+ agent: {
689
+ id: getFieldValue('agentId'),
690
+ displayName: getFieldValue('displayName'),
691
+ specialty: getFieldValue('specialty'),
692
+ personality: getFieldValue('personality') || undefined,
693
+ toolConfig,
694
+ enabledSkills: Array.from(this.state.enabledSkills),
695
+ modelTier: this.state.selectedModelTier,
696
+ },
697
+ });
698
+ }
699
+ getCloseSummary(result) {
700
+ const s = this.getStyles();
701
+ if (result.cancelled) {
702
+ return s.muted('Custom agent creation cancelled');
703
+ }
704
+ if (result.agent) {
705
+ const profileLabel = PROFILE_INFO[result.agent.toolConfig.profile].label;
706
+ const tierLabel = TIER_INFO[result.agent.modelTier].label;
707
+ return s.success(`✓ Created $${result.agent.id}`) + s.muted(` (${result.agent.displayName}, ${profileLabel}, ${tierLabel})`);
708
+ }
709
+ return null;
710
+ }
711
+ }