@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,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
+ }