@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
@@ -1,809 +0,0 @@
1
- /**
2
- * Agents Overlay V2
3
- *
4
- * Modal overlay for viewing and managing agent configurations.
5
- * Uses TabbedListOverlayV2 for consistent navigation patterns.
6
- *
7
- * Features:
8
- * - Built-in tab: Lists predefined agent types with detail view
9
- * - Custom tab: Lists user-defined agents with detail/edit + create new
10
- * - Wizard mode: Step-by-step agent creation
11
- */
12
- import chalk from 'chalk';
13
- import * as terminal from './terminal.js';
14
- import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isNavigateUp, isNavigateDown, isBackspace, isClose, extractPrintable, renderBorder, wrapText, } from './base/index.js';
15
- import { InputFeature } from './features/index.js';
16
- import { getAgentRegistry } from '../agents/registry.js';
17
- // =============================================================================
18
- // Constants
19
- // =============================================================================
20
- const TABS = [
21
- { id: 'builtin', label: 'Built-in' },
22
- { id: 'custom', label: 'Custom' },
23
- ];
24
- const PAGE_SIZE = 12;
25
- // =============================================================================
26
- // Helpers
27
- // =============================================================================
28
- function isCreateItem(item) {
29
- return item.isCreateNew === true;
30
- }
31
- function buildItemsList(registry) {
32
- const items = [];
33
- // Add built-in agents
34
- for (const agent of registry.getBuiltinAgents()) {
35
- items.push(agentToItem(agent, true));
36
- }
37
- // Add custom agents
38
- for (const agent of registry.getCustomAgents()) {
39
- items.push(agentToItem(agent, false));
40
- }
41
- // Add "Create new agent" option for custom tab
42
- items.push({
43
- name: '',
44
- model: '',
45
- description: '',
46
- isBuiltin: false,
47
- isCreateNew: true,
48
- });
49
- return items;
50
- }
51
- function agentToItem(agent, isBuiltin) {
52
- return {
53
- name: agent.name,
54
- model: agent.model,
55
- description: agent.description,
56
- location: agent.location,
57
- systemPrompt: agent.systemPrompt,
58
- filePath: agent.filePath,
59
- isBuiltin,
60
- };
61
- }
62
- // =============================================================================
63
- // Detail Screen (View Agent Info)
64
- // =============================================================================
65
- class AgentDetailScreen extends BaseScreen {
66
- item;
67
- registry;
68
- styles;
69
- onEdit;
70
- constructor(item, registry, styles, onEdit) {
71
- super();
72
- this.item = item;
73
- this.registry = registry;
74
- this.styles = styles;
75
- this.onEdit = onEdit;
76
- }
77
- render() {
78
- const s = this.styles;
79
- const cols = terminal.getTerminalWidth();
80
- const border = renderBorder(cols, s);
81
- const lines = [];
82
- // Header
83
- lines.push(border);
84
- lines.push(` ${s.primaryBold('Agent Details')}`);
85
- lines.push('');
86
- // Name and model
87
- lines.push(` ${s.muted('Name:')} ${s.primary(this.item.name)}`);
88
- lines.push(` ${s.muted('Model:')} ${s.secondary(this.item.model)}`);
89
- lines.push(` ${s.muted('Type:')} ${this.item.isBuiltin ? s.muted('Built-in') : s.secondary('Custom')}`);
90
- // Location for custom agents
91
- if (!this.item.isBuiltin && this.item.location) {
92
- const locationLabel = this.item.location === 'project' ? 'Project' : 'Personal';
93
- lines.push(` ${s.muted('Location:')} ${s.secondary(locationLabel)}`);
94
- }
95
- lines.push('');
96
- // Description
97
- lines.push(` ${s.muted('Description:')}`);
98
- const descLines = wrapText(this.item.description, cols - 6, ' ');
99
- lines.push(...descLines);
100
- // System prompt for custom agents
101
- if (!this.item.isBuiltin && this.item.systemPrompt) {
102
- lines.push('');
103
- lines.push(` ${s.muted('System Prompt:')}`);
104
- // Show first few lines of system prompt
105
- const promptLines = this.item.systemPrompt.split('\n').slice(0, 5);
106
- for (const line of promptLines) {
107
- const truncated = line.length > cols - 6 ? line.slice(0, cols - 9) + '...' : line;
108
- lines.push(` ${s.secondary(truncated)}`);
109
- }
110
- if (this.item.systemPrompt.split('\n').length > 5) {
111
- lines.push(` ${s.muted('...')}`);
112
- }
113
- }
114
- // File path for custom agents
115
- if (!this.item.isBuiltin && this.item.filePath) {
116
- lines.push('');
117
- lines.push(` ${s.muted('File:')} ${s.secondary(this.item.filePath)}`);
118
- }
119
- // Usage hint for built-in agents
120
- if (this.item.isBuiltin) {
121
- lines.push('');
122
- lines.push(` ${s.muted('Usage:')}`);
123
- lines.push(` ${s.secondary('This agent is invoked via the Task tool.')}`);
124
- lines.push(` ${s.secondary(`Example: Task(subagent_type="${this.item.name}", prompt="...")`)}`);
125
- }
126
- lines.push('');
127
- lines.push(border);
128
- // Show edit hint for custom agents
129
- if (!this.item.isBuiltin) {
130
- lines.push(` ${s.muted('e Edit · q/Esc Back')}`);
131
- }
132
- else {
133
- lines.push(` ${s.muted('q/Esc Back')}`);
134
- }
135
- lines.push(border);
136
- return lines;
137
- }
138
- handleKey(data) {
139
- // Ctrl+C closes everything
140
- if (isCtrlC(data)) {
141
- return closeOverlay(undefined);
142
- }
143
- // Escape or q - back to list
144
- if (isEscape(data) || isClose(data)) {
145
- return popScreen();
146
- }
147
- // 'e' opens edit screen for custom agents
148
- const char = extractPrintable(data);
149
- if (char === 'e' && !this.item.isBuiltin) {
150
- const editScreen = new AgentEditScreen(this.item, this.registry, this.styles);
151
- return this.onEdit(editScreen);
152
- }
153
- return stay(false);
154
- }
155
- getMinHeight() {
156
- return 24;
157
- }
158
- }
159
- // =============================================================================
160
- // Edit Screen (Edit Custom Agent)
161
- // =============================================================================
162
- class AgentEditScreen extends BaseScreen {
163
- originalItem;
164
- registry;
165
- styles;
166
- step = 'field-select';
167
- selectedOption = 0;
168
- input;
169
- error = null;
170
- editedAgent;
171
- constructor(originalItem, registry, styles) {
172
- super();
173
- this.originalItem = originalItem;
174
- this.registry = registry;
175
- this.styles = styles;
176
- this.input = new InputFeature({ placeholder: '' });
177
- // Initialize with current values
178
- const loc = originalItem.location;
179
- this.editedAgent = {
180
- name: originalItem.name,
181
- prompt: originalItem.systemPrompt ?? '',
182
- description: originalItem.description,
183
- model: originalItem.model,
184
- location: (loc === 'project' || loc === 'personal') ? loc : 'project',
185
- };
186
- }
187
- render() {
188
- const s = this.styles;
189
- const cols = terminal.getTerminalWidth();
190
- const border = renderBorder(cols, s);
191
- const lines = [];
192
- lines.push(border);
193
- lines.push(` ${s.primaryBold('Edit Agent:')} ${s.primary(this.originalItem.name)}`);
194
- lines.push('');
195
- switch (this.step) {
196
- case 'field-select': {
197
- lines.push(` ${s.secondary('Select field to edit:')}`);
198
- lines.push('');
199
- const fields = [
200
- { id: 'model', label: 'Model', value: this.editedAgent.model },
201
- { id: 'description', label: 'Description', value: this.truncate(this.editedAgent.description, 40) },
202
- { id: 'prompt', label: 'System Prompt', value: this.truncate(this.editedAgent.prompt, 40) },
203
- { id: 'save', label: 'Save Changes', value: '' },
204
- { id: 'delete', label: 'Delete Agent', value: '' },
205
- { id: 'cancel', label: 'Cancel', value: '' },
206
- ];
207
- for (let i = 0; i < fields.length; i++) {
208
- const f = fields[i];
209
- const isSelected = this.selectedOption === i;
210
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
211
- if (f.id === 'save') {
212
- lines.push(`${prefix}${isSelected ? s.primary(f.label) : s.muted(f.label)}`);
213
- }
214
- else if (f.id === 'delete') {
215
- lines.push(`${prefix}${isSelected ? s.error(f.label) : s.muted(f.label)}`);
216
- }
217
- else if (f.id === 'cancel') {
218
- lines.push(`${prefix}${isSelected ? s.secondary(f.label) : s.muted(f.label)}`);
219
- }
220
- else {
221
- const label = `${f.label.padEnd(16)}${f.value}`;
222
- lines.push(`${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
223
- }
224
- }
225
- break;
226
- }
227
- case 'edit-model': {
228
- lines.push(` ${s.secondary('Select model')}`);
229
- lines.push('');
230
- const models = [
231
- { id: 'sonnet', label: 'Sonnet', desc: 'Balanced (recommended)' },
232
- { id: 'opus', label: 'Opus', desc: 'Most capable' },
233
- { id: 'haiku', label: 'Haiku', desc: 'Fast and efficient' },
234
- { id: 'inherit', label: 'Inherit', desc: "Use parent's model" },
235
- ];
236
- for (let i = 0; i < models.length; i++) {
237
- const m = models[i];
238
- const isSelected = this.selectedOption === i;
239
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
240
- const current = this.editedAgent.model === m.id ? s.muted(' (current)') : '';
241
- const label = `${String(i + 1)}. ${m.label.padEnd(10)} - ${m.desc}${current}`;
242
- lines.push(`${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
243
- }
244
- break;
245
- }
246
- case 'edit-description':
247
- lines.push(` ${s.secondary('Edit description')}`);
248
- lines.push('');
249
- lines.push(` When should the LLM use this agent?`);
250
- lines.push(` > ${this.input.render(s)}`);
251
- lines.push('');
252
- if (this.error) {
253
- lines.push(` ${s.error(this.error)}`);
254
- }
255
- else {
256
- lines.push(` ${s.muted('Press Enter to save, Esc to cancel')}`);
257
- }
258
- break;
259
- case 'edit-prompt':
260
- lines.push(` ${s.secondary('Edit system prompt')}`);
261
- lines.push('');
262
- lines.push(` Enter the agent's instructions:`);
263
- lines.push(` > ${this.input.render(s)}`);
264
- lines.push('');
265
- if (this.error) {
266
- lines.push(` ${s.error(this.error)}`);
267
- }
268
- else {
269
- lines.push(` ${s.muted('Press Enter to save, Esc to cancel')}`);
270
- lines.push(` ${s.muted('(For multiline prompts, edit the .md file directly)')}`);
271
- }
272
- break;
273
- case 'confirm-delete':
274
- lines.push(` ${s.error('Delete this agent?')}`);
275
- lines.push('');
276
- lines.push(` ${s.muted('Name:')} ${s.primary(this.originalItem.name)}`);
277
- lines.push(` ${s.muted('File:')} ${s.secondary(this.originalItem.filePath ?? 'unknown')}`);
278
- lines.push('');
279
- lines.push(this.selectedOption === 0
280
- ? ` ${s.error(' ❯ Yes, delete')}`
281
- : ` ${s.muted(' Yes, delete')}`);
282
- lines.push(this.selectedOption === 1
283
- ? ` ${s.primary(' ❯ No, cancel')}`
284
- : ` ${s.muted(' No, cancel')}`);
285
- break;
286
- }
287
- lines.push('');
288
- lines.push(border);
289
- lines.push(` ${s.muted('Esc Back')}`);
290
- lines.push(border);
291
- return lines;
292
- }
293
- handleKey(data) {
294
- // Ctrl+C closes everything
295
- if (isCtrlC(data)) {
296
- return closeOverlay(undefined);
297
- }
298
- // Escape goes back
299
- if (isEscape(data)) {
300
- return this.handleBack();
301
- }
302
- // Text input steps
303
- if (this.step === 'edit-description' || this.step === 'edit-prompt') {
304
- if (isEnter(data)) {
305
- const text = this.input.trimmedValue;
306
- if (!text) {
307
- this.error = 'Cannot be empty';
308
- return stay();
309
- }
310
- if (this.step === 'edit-description') {
311
- this.editedAgent.description = text;
312
- }
313
- else {
314
- this.editedAgent.prompt = text;
315
- }
316
- this.step = 'field-select';
317
- this.input.clear();
318
- this.error = null;
319
- return stay();
320
- }
321
- if (isBackspace(data)) {
322
- const result = this.input.handleKey(data);
323
- if (result.handled) {
324
- this.error = null;
325
- return stay(result.render);
326
- }
327
- return stay(false);
328
- }
329
- // Regular character input
330
- const result = this.input.handleKey(data);
331
- if (result.handled) {
332
- this.error = null;
333
- return stay(result.render);
334
- }
335
- return stay(false);
336
- }
337
- // Selection steps
338
- const maxOptions = this.step === 'field-select' ? 6 : this.step === 'edit-model' ? 4 : 2;
339
- if (isNavigateUp(data) && this.selectedOption > 0) {
340
- this.selectedOption--;
341
- return stay();
342
- }
343
- if (isNavigateDown(data) && this.selectedOption < maxOptions - 1) {
344
- this.selectedOption++;
345
- return stay();
346
- }
347
- if (isEnter(data)) {
348
- return this.handleSelect();
349
- }
350
- return stay(false);
351
- }
352
- handleBack() {
353
- switch (this.step) {
354
- case 'field-select':
355
- return popScreen();
356
- case 'edit-model':
357
- case 'edit-description':
358
- case 'edit-prompt':
359
- case 'confirm-delete':
360
- this.step = 'field-select';
361
- this.selectedOption = 0;
362
- this.input.clear();
363
- this.error = null;
364
- break;
365
- }
366
- return stay();
367
- }
368
- handleSelect() {
369
- switch (this.step) {
370
- case 'field-select':
371
- switch (this.selectedOption) {
372
- case 0: { // Model
373
- this.step = 'edit-model';
374
- const models = ['sonnet', 'opus', 'haiku', 'inherit'];
375
- this.selectedOption = models.indexOf(this.editedAgent.model);
376
- if (this.selectedOption < 0)
377
- this.selectedOption = 0;
378
- break;
379
- }
380
- case 1: // Description
381
- this.step = 'edit-description';
382
- this.input.value = this.editedAgent.description;
383
- break;
384
- case 2: // System Prompt
385
- this.step = 'edit-prompt';
386
- this.input.value = this.editedAgent.prompt;
387
- break;
388
- case 3: // Save
389
- return this.saveAgent();
390
- case 4: // Delete
391
- this.step = 'confirm-delete';
392
- this.selectedOption = 1; // Default to "No"
393
- break;
394
- case 5: // Cancel
395
- return popScreen();
396
- }
397
- break;
398
- case 'edit-model': {
399
- const models = ['sonnet', 'opus', 'haiku', 'inherit'];
400
- this.editedAgent.model = models[this.selectedOption];
401
- this.step = 'field-select';
402
- this.selectedOption = 0;
403
- break;
404
- }
405
- case 'confirm-delete':
406
- if (this.selectedOption === 0) {
407
- // Delete
408
- return this.deleteAgent();
409
- }
410
- else {
411
- // Cancel
412
- this.step = 'field-select';
413
- this.selectedOption = 0;
414
- }
415
- break;
416
- }
417
- return stay();
418
- }
419
- saveAgent() {
420
- try {
421
- this.registry.saveAgent({
422
- name: this.editedAgent.name,
423
- description: this.editedAgent.description,
424
- model: this.editedAgent.model,
425
- systemPrompt: this.editedAgent.prompt,
426
- }, this.editedAgent.location);
427
- this.registry.load();
428
- return closeOverlay({ edited: this.editedAgent.name });
429
- }
430
- catch (error) {
431
- this.error = error.message;
432
- return stay();
433
- }
434
- }
435
- deleteAgent() {
436
- try {
437
- this.registry.deleteAgent(this.originalItem.name);
438
- this.registry.load();
439
- return closeOverlay({ deleted: this.originalItem.name });
440
- }
441
- catch (error) {
442
- this.error = error.message;
443
- return stay();
444
- }
445
- }
446
- truncate(text, max) {
447
- if (!text)
448
- return '';
449
- if (text.length <= max)
450
- return text;
451
- return text.slice(0, max - 3) + '...';
452
- }
453
- getMinHeight() {
454
- return 22;
455
- }
456
- }
457
- // =============================================================================
458
- // Wizard Screen (Multi-Step Agent Creation)
459
- // =============================================================================
460
- class AgentWizardScreen extends BaseScreen {
461
- registry;
462
- styles;
463
- step = 'location';
464
- selectedOption = 0;
465
- input;
466
- error = null;
467
- newAgent = {
468
- location: 'project',
469
- name: '',
470
- prompt: '',
471
- description: '',
472
- model: 'sonnet',
473
- };
474
- constructor(registry, styles) {
475
- super();
476
- this.registry = registry;
477
- this.styles = styles;
478
- this.input = new InputFeature({ placeholder: '' });
479
- }
480
- render() {
481
- const s = this.styles;
482
- const cols = terminal.getTerminalWidth();
483
- const border = renderBorder(cols, s);
484
- const lines = [];
485
- lines.push(border);
486
- lines.push(` ${s.primaryBold('Create New Agent')}`);
487
- lines.push('');
488
- switch (this.step) {
489
- case 'location':
490
- lines.push(chalk.bold(' Choose location'));
491
- lines.push('');
492
- lines.push(this.selectedOption === 0
493
- ? ` ${s.primary(' ❯ 1. Project (.compilr-dev/agents/)')}`
494
- : ` ${s.muted(' 1. Project (.compilr-dev/agents/)')}`);
495
- lines.push(this.selectedOption === 1
496
- ? ` ${s.primary(' ❯ 2. Personal (~/.compilr-dev/agents/)')}`
497
- : ` ${s.muted(' 2. Personal (~/.compilr-dev/agents/)')}`);
498
- lines.push('');
499
- lines.push(` ${s.muted('Project agents are shared with your team.')}`);
500
- lines.push(` ${s.muted('Personal agents apply to all your projects.')}`);
501
- break;
502
- case 'name':
503
- lines.push(chalk.bold(' Agent name (identifier)'));
504
- lines.push('');
505
- lines.push(' Enter a unique identifier:');
506
- lines.push(` > ${this.input.render(s)}`);
507
- lines.push('');
508
- if (this.error) {
509
- lines.push(` ${s.error(this.error)}`);
510
- }
511
- else {
512
- lines.push(` ${s.muted('Use lowercase letters, numbers, hyphens (e.g., code-reviewer)')}`);
513
- }
514
- break;
515
- case 'prompt':
516
- lines.push(chalk.bold(' System prompt'));
517
- lines.push('');
518
- lines.push(' Enter the agent\'s instructions:');
519
- lines.push(` > ${this.input.render(s)}`);
520
- lines.push('');
521
- lines.push(` ${s.muted('This defines how the agent behaves.')}`);
522
- lines.push(` ${s.muted('Press Enter to continue.')}`);
523
- break;
524
- case 'description':
525
- lines.push(chalk.bold(' Description'));
526
- lines.push('');
527
- lines.push(' When should the LLM use this agent?');
528
- lines.push(` > ${this.input.render(s)}`);
529
- lines.push('');
530
- lines.push(` ${s.muted('This helps the LLM know when to invoke this agent.')}`);
531
- break;
532
- case 'model': {
533
- lines.push(chalk.bold(' Select model'));
534
- lines.push('');
535
- const models = [
536
- { id: 'sonnet', label: 'Sonnet', desc: 'Balanced (recommended)' },
537
- { id: 'opus', label: 'Opus', desc: 'Most capable' },
538
- { id: 'haiku', label: 'Haiku', desc: 'Fast and efficient' },
539
- { id: 'inherit', label: 'Inherit', desc: "Use parent's model" },
540
- ];
541
- for (let i = 0; i < models.length; i++) {
542
- const m = models[i];
543
- const isSelected = this.selectedOption === i;
544
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
545
- const label = `${String(i + 1)}. ${m.label.padEnd(10)} - ${m.desc}`;
546
- lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
547
- }
548
- break;
549
- }
550
- case 'confirm': {
551
- lines.push(chalk.bold(' Confirm'));
552
- lines.push('');
553
- lines.push(` Name: ${s.primary(this.newAgent.name)}`);
554
- const locationPath = this.newAgent.location === 'project'
555
- ? '.compilr-dev/agents/'
556
- : '~/.compilr-dev/agents/';
557
- lines.push(` Location: ${s.primary(locationPath)}${this.newAgent.name}.md`);
558
- lines.push(` Model: ${s.primary(this.newAgent.model)}`);
559
- lines.push('');
560
- lines.push(chalk.bold(' Description:'));
561
- const descPreview = this.newAgent.description.length > 60
562
- ? this.newAgent.description.slice(0, 57) + '...'
563
- : this.newAgent.description;
564
- lines.push(` ${s.muted(descPreview)}`);
565
- lines.push('');
566
- lines.push(chalk.bold(' System prompt:'));
567
- const promptPreview = this.newAgent.prompt.length > 60
568
- ? this.newAgent.prompt.slice(0, 57) + '...'
569
- : this.newAgent.prompt;
570
- lines.push(` ${s.muted(promptPreview)}`);
571
- lines.push('');
572
- lines.push(this.selectedOption === 0
573
- ? ` ${s.primary(' ❯ Save')}`
574
- : ` ${s.muted(' Save')}`);
575
- lines.push(this.selectedOption === 1
576
- ? ` ${s.primary(' ❯ Cancel')}`
577
- : ` ${s.muted(' Cancel')}`);
578
- if (this.error) {
579
- lines.push('');
580
- lines.push(` ${s.error(this.error)}`);
581
- }
582
- break;
583
- }
584
- }
585
- lines.push('');
586
- lines.push(border);
587
- lines.push(` ${s.muted('Esc to go back')}`);
588
- lines.push(border);
589
- return lines;
590
- }
591
- handleKey(data) {
592
- // Ctrl+C closes everything
593
- if (isCtrlC(data)) {
594
- return closeOverlay(undefined);
595
- }
596
- // Escape goes back
597
- if (isEscape(data)) {
598
- return this.handleBack();
599
- }
600
- // Input steps: name, prompt, description
601
- if (this.step === 'name' || this.step === 'prompt' || this.step === 'description') {
602
- if (isEnter(data)) {
603
- const text = this.input.trimmedValue;
604
- if (!text) {
605
- return stay(false);
606
- }
607
- // Validate name
608
- if (this.step === 'name') {
609
- if (!/^[a-z][a-z0-9-]{1,49}$/.test(text)) {
610
- this.error = 'Invalid name. Use lowercase letters, numbers, hyphens.';
611
- return stay();
612
- }
613
- if (this.registry.hasAgent(text)) {
614
- this.error = `Agent "${text}" already exists.`;
615
- return stay();
616
- }
617
- this.newAgent.name = text;
618
- this.step = 'prompt';
619
- this.input.clear();
620
- this.error = null;
621
- }
622
- else if (this.step === 'prompt') {
623
- this.newAgent.prompt = text;
624
- this.step = 'description';
625
- this.input.clear();
626
- }
627
- else {
628
- this.newAgent.description = text;
629
- this.step = 'model';
630
- this.selectedOption = 0;
631
- }
632
- return stay();
633
- }
634
- if (isBackspace(data)) {
635
- const result = this.input.handleKey(data);
636
- if (result.handled) {
637
- this.error = null;
638
- return stay(result.render);
639
- }
640
- return stay(false);
641
- }
642
- // Regular character input
643
- const result = this.input.handleKey(data);
644
- if (result.handled) {
645
- this.error = null;
646
- return stay(result.render);
647
- }
648
- return stay(false);
649
- }
650
- // Selection steps: location, model, confirm
651
- const maxOptions = this.step === 'model' ? 4 : 2;
652
- if (isNavigateUp(data) && this.selectedOption > 0) {
653
- this.selectedOption--;
654
- return stay();
655
- }
656
- if (isNavigateDown(data) && this.selectedOption < maxOptions - 1) {
657
- this.selectedOption++;
658
- return stay();
659
- }
660
- if (isEnter(data)) {
661
- return this.handleSelect();
662
- }
663
- return stay(false);
664
- }
665
- handleBack() {
666
- switch (this.step) {
667
- case 'location':
668
- return popScreen();
669
- case 'name':
670
- this.step = 'location';
671
- this.selectedOption = this.newAgent.location === 'project' ? 0 : 1;
672
- break;
673
- case 'prompt':
674
- this.step = 'name';
675
- this.input.value = this.newAgent.name;
676
- break;
677
- case 'description':
678
- this.step = 'prompt';
679
- this.input.value = this.newAgent.prompt;
680
- break;
681
- case 'model':
682
- this.step = 'description';
683
- this.input.value = this.newAgent.description;
684
- break;
685
- case 'confirm': {
686
- this.step = 'model';
687
- const models = ['sonnet', 'opus', 'haiku', 'inherit'];
688
- this.selectedOption = models.indexOf(this.newAgent.model);
689
- break;
690
- }
691
- }
692
- this.error = null;
693
- return stay();
694
- }
695
- handleSelect() {
696
- switch (this.step) {
697
- case 'location':
698
- this.newAgent.location = this.selectedOption === 0 ? 'project' : 'personal';
699
- this.step = 'name';
700
- this.input.clear();
701
- break;
702
- case 'model': {
703
- const models = ['sonnet', 'opus', 'haiku', 'inherit'];
704
- this.newAgent.model = models[this.selectedOption];
705
- this.step = 'confirm';
706
- this.selectedOption = 0;
707
- break;
708
- }
709
- case 'confirm':
710
- if (this.selectedOption === 0) {
711
- // Save
712
- try {
713
- this.registry.saveAgent({
714
- name: this.newAgent.name,
715
- description: this.newAgent.description,
716
- model: this.newAgent.model,
717
- systemPrompt: this.newAgent.prompt,
718
- }, this.newAgent.location);
719
- this.registry.load();
720
- return closeOverlay({ created: this.newAgent.name });
721
- }
722
- catch (error) {
723
- this.error = error.message;
724
- return stay();
725
- }
726
- }
727
- else {
728
- // Cancel
729
- return popScreen();
730
- }
731
- }
732
- return stay();
733
- }
734
- getMinHeight() {
735
- return 22;
736
- }
737
- }
738
- // =============================================================================
739
- // Agents Overlay V2
740
- // =============================================================================
741
- /**
742
- * Agents overlay using TabbedListOverlayV2.
743
- * Displays agents in a searchable, tabbed list.
744
- */
745
- export class AgentsOverlayV2 extends TabbedListOverlayV2 {
746
- type = 'inline';
747
- id = 'agents-overlay-v2';
748
- registry;
749
- constructor() {
750
- const registry = getAgentRegistry();
751
- registry.load();
752
- const items = buildItemsList(registry);
753
- super({
754
- title: 'Agents',
755
- tabs: TABS,
756
- items,
757
- pageSize: PAGE_SIZE,
758
- filterByTab: (item, tabId) => {
759
- if (tabId === 'builtin')
760
- return item.isBuiltin;
761
- return !item.isBuiltin;
762
- },
763
- getSearchText: (item) => {
764
- if (isCreateItem(item))
765
- return 'create new';
766
- return `${item.name} ${item.description}`;
767
- },
768
- renderItem: (item, isSelected, styles) => {
769
- const prefix = isSelected ? styles.primary(' ❯ ') : ' ';
770
- // Special "Create new agent" option
771
- if (isCreateItem(item)) {
772
- return isSelected
773
- ? `${prefix}${styles.primary('Create new agent')}`
774
- : `${prefix}${styles.muted('Create new agent')}`;
775
- }
776
- const cols = terminal.getTerminalWidth();
777
- const name = `${item.name} · ${item.model}`;
778
- const nameStyled = isSelected
779
- ? styles.primary(name.padEnd(30))
780
- : styles.secondary(name.padEnd(30));
781
- if (item.isBuiltin) {
782
- const maxDesc = Math.max(20, cols - 45);
783
- const desc = item.description.slice(0, maxDesc) + (item.description.length > maxDesc ? '...' : '');
784
- return `${prefix}${nameStyled}${styles.muted(desc)}`;
785
- }
786
- else {
787
- return `${prefix}${nameStyled}${styles.muted(`(${item.location ?? 'unknown'})`)}`;
788
- }
789
- },
790
- footerHints: (searchMode) => {
791
- if (searchMode) {
792
- return 'Type to filter · ↑↓/jk Navigate · Enter Select · Esc Exit search';
793
- }
794
- return 'Tab Filter · ↑↓/jk · / Search · Enter Select · q/Esc Close';
795
- },
796
- emptyMessage: 'No agents found.',
797
- noResultsMessage: 'No agents match the search.',
798
- });
799
- this.registry = registry;
800
- }
801
- createDetailScreen(item) {
802
- // "Create new agent" opens the wizard
803
- if (isCreateItem(item)) {
804
- return new AgentWizardScreen(this.registry, this.getStyles());
805
- }
806
- // All other agents open the detail view
807
- return new AgentDetailScreen(item, this.registry, this.getStyles(), (editScreen) => ({ action: 'push', screen: editScreen }));
808
- }
809
- }