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