@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
@@ -14,21 +14,22 @@
14
14
  * - 'change' - Input text changed
15
15
  */
16
16
  import { EventEmitter } from 'events';
17
- import chalk from 'chalk';
17
+ import { Chalk } from 'chalk';
18
18
  import { getStyles } from '../themes/index.js';
19
19
  import * as terminal from './terminal.js';
20
- import { getAutocompleteCommands } from '../commands.js';
21
- import { getFileMatches, extractAtMention, replaceAtMention, } from './file-autocomplete.js';
20
+ import { getFileMatches, extractAtMention, replaceAtMention, extractDollarMention, replaceDollarMention, } from './file-autocomplete.js';
22
21
  import { debugRender } from '../utils/debug-log.js';
23
22
  import { stripAnsi as unifiedStripAnsi, getPhysicalLineCountWithOffset, } from './line-utils.js';
24
23
  // =============================================================================
25
24
  // Constants
26
25
  // =============================================================================
26
+ // Force color output (level 3 = 24-bit true color)
27
+ const chalk = new Chalk({ level: 3 });
27
28
  const MAX_VISIBLE_COMMANDS = 10;
28
29
  // =============================================================================
29
30
  // Default Commands (from central registry)
30
31
  // =============================================================================
31
- export const DEFAULT_COMMANDS = getAutocompleteCommands();
32
+ export const DEFAULT_COMMANDS = [];
32
33
  // =============================================================================
33
34
  // Helper Functions
34
35
  // =============================================================================
@@ -39,6 +40,26 @@ export const DEFAULT_COMMANDS = getAutocompleteCommands();
39
40
  export function stripAnsi(str) {
40
41
  return unifiedStripAnsi(str);
41
42
  }
43
+ /**
44
+ * Format input text with syntax highlighting for special prefixes.
45
+ * - $agent references: bold + secondary color
46
+ * - @path references: secondary color
47
+ * - /commands: primary color
48
+ */
49
+ function formatInputText(text) {
50
+ const s = getStyles();
51
+ let result = text;
52
+ // Format $agent references - bold + secondary
53
+ // Match $word at word boundaries (not inside other text)
54
+ result = result.replace(/(?<![$\w])\$([a-zA-Z_][a-zA-Z0-9_]*)\b/g, (_match, agentId) => chalk.bold(s.secondary(`$${agentId}`)));
55
+ // Format @path references - secondary (not bold, paths can be long)
56
+ // Match @word or @path/to/file patterns
57
+ result = result.replace(/(?<![@\w])@([\w./-]+)/g, (_match, path) => s.secondary(`@${path}`));
58
+ // Format /commands at start of input - primary color
59
+ // Only match at start of line (after optional whitespace)
60
+ result = result.replace(/^(\s*)(\/[a-zA-Z][a-zA-Z0-9_-]*)/g, (_match, space, cmd) => space + s.primary(cmd));
61
+ return result;
62
+ }
42
63
  /**
43
64
  * Calculate physical lines for wrapped text
44
65
  * Uses unified line-utils for consistent behavior across components.
@@ -108,6 +129,8 @@ export class InputPrompt extends EventEmitter {
108
129
  promptLen;
109
130
  showSeparators;
110
131
  commands;
132
+ getAgentSuggestions;
133
+ getCommands;
111
134
  // Input state
112
135
  state = {
113
136
  lines: [''],
@@ -129,6 +152,16 @@ export class InputPrompt extends EventEmitter {
129
152
  scrollOffset: 0,
130
153
  partial: '',
131
154
  };
155
+ // Agent autocomplete (for $agents)
156
+ agentAutocomplete = {
157
+ active: false,
158
+ matches: [],
159
+ selectedIndex: 0,
160
+ scrollOffset: 0,
161
+ partial: '',
162
+ startPos: 0,
163
+ lineIndex: 0,
164
+ };
132
165
  // History
133
166
  history = [];
134
167
  historyIndex = -1;
@@ -154,6 +187,8 @@ export class InputPrompt extends EventEmitter {
154
187
  this.promptLen = stripAnsi(this.prompt).length;
155
188
  this.showSeparators = options.showSeparators ?? true;
156
189
  this.commands = options.commands ?? DEFAULT_COMMANDS;
190
+ this.getAgentSuggestions = options.getAgentSuggestions;
191
+ this.getCommands = options.getCommands;
157
192
  }
158
193
  // ===========================================================================
159
194
  // Public API
@@ -183,6 +218,12 @@ export class InputPrompt extends EventEmitter {
183
218
  clearSuggestion() {
184
219
  this.suggestion = null;
185
220
  }
221
+ /**
222
+ * Set the callback to get available team agents for $ autocomplete
223
+ */
224
+ setAgentSuggestionsCallback(callback) {
225
+ this.getAgentSuggestions = callback;
226
+ }
186
227
  /**
187
228
  * Start input capture (non-blocking, event-driven)
188
229
  */
@@ -290,6 +331,15 @@ export class InputPrompt extends EventEmitter {
290
331
  scrollOffset: 0,
291
332
  partial: '',
292
333
  };
334
+ this.agentAutocomplete = {
335
+ active: false,
336
+ matches: [],
337
+ selectedIndex: 0,
338
+ scrollOffset: 0,
339
+ partial: '',
340
+ startPos: 0,
341
+ lineIndex: 0,
342
+ };
293
343
  }
294
344
  /**
295
345
  * Add command to history
@@ -320,7 +370,9 @@ export class InputPrompt extends EventEmitter {
320
370
  lines.push(linePrompt + s.muted(this.suggestion) + hint);
321
371
  }
322
372
  else {
323
- lines.push(linePrompt + lineContent);
373
+ // Format special prefixes: $agent, @path, /command
374
+ const formattedContent = formatInputText(lineContent);
375
+ lines.push(linePrompt + formattedContent);
324
376
  }
325
377
  }
326
378
  // Bottom separator
@@ -353,7 +405,34 @@ export class InputPrompt extends EventEmitter {
353
405
  */
354
406
  getAutocompleteLines() {
355
407
  const s = getStyles();
356
- // File autocomplete takes priority
408
+ // Agent autocomplete takes highest priority
409
+ if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
410
+ const lines = [];
411
+ const offset = this.agentAutocomplete.scrollOffset;
412
+ const visible = this.agentAutocomplete.matches.slice(offset, offset + MAX_VISIBLE_COMMANDS);
413
+ const total = this.agentAutocomplete.matches.length;
414
+ // Show scroll indicator if there are more items above
415
+ if (offset > 0) {
416
+ lines.push(s.muted(` ↑ ${String(offset)} more above`));
417
+ }
418
+ for (let i = 0; i < visible.length; i++) {
419
+ const agent = visible[i];
420
+ const actualIndex = offset + i;
421
+ const isSelected = actualIndex === this.agentAutocomplete.selectedIndex;
422
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
423
+ const mascot = agent.mascot + ' ';
424
+ const name = isSelected ? s.primary(chalk.bold('$' + agent.id)) : '$' + agent.id;
425
+ const desc = s.muted(` - ${agent.displayName}`);
426
+ lines.push(`${prefix}${mascot}${name}${desc}`);
427
+ }
428
+ // Show scroll indicator if there are more items below
429
+ const remaining = total - offset - visible.length;
430
+ if (remaining > 0) {
431
+ lines.push(s.muted(` ↓ ${String(remaining)} more below`));
432
+ }
433
+ return lines;
434
+ }
435
+ // File autocomplete takes second priority
357
436
  if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
358
437
  const lines = [];
359
438
  const offset = this.fileAutocomplete.scrollOffset;
@@ -412,7 +491,8 @@ export class InputPrompt extends EventEmitter {
412
491
  */
413
492
  isAutocompleteActive() {
414
493
  return ((this.autocomplete.active && this.autocomplete.matches.length > 0) ||
415
- (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0));
494
+ (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) ||
495
+ (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0));
416
496
  }
417
497
  /**
418
498
  * Get height of rendered content
@@ -479,6 +559,15 @@ export class InputPrompt extends EventEmitter {
479
559
  scrollOffset: 0,
480
560
  partial: '',
481
561
  };
562
+ this.agentAutocomplete = {
563
+ active: false,
564
+ matches: [],
565
+ selectedIndex: 0,
566
+ scrollOffset: 0,
567
+ partial: '',
568
+ startPos: 0,
569
+ lineIndex: 0,
570
+ };
482
571
  this.historyIndex = -1;
483
572
  this.savedInput = '';
484
573
  this.renderedLines = 0;
@@ -498,6 +587,8 @@ export class InputPrompt extends EventEmitter {
498
587
  this.autocomplete.matches = [];
499
588
  this.autocomplete.selectedIndex = 0;
500
589
  this.autocomplete.scrollOffset = 0;
590
+ this.agentAutocomplete.active = false;
591
+ this.agentAutocomplete.matches = [];
501
592
  this.fileAutocomplete.active = true;
502
593
  this.fileAutocomplete.partial = atMention;
503
594
  this.fileAutocomplete.matches = getFileMatches(atMention);
@@ -513,11 +604,46 @@ export class InputPrompt extends EventEmitter {
513
604
  this.fileAutocomplete.selectedIndex = 0;
514
605
  this.fileAutocomplete.scrollOffset = 0;
515
606
  this.fileAutocomplete.partial = '';
607
+ // Check for $ agent autocomplete (anywhere in the current line)
608
+ if (this.getAgentSuggestions) {
609
+ const currentLine = this.state.lines[this.state.currentLine];
610
+ const dollarMention = extractDollarMention(currentLine, this.state.cursorPos);
611
+ if (dollarMention !== null) {
612
+ const partial = dollarMention.partial.toLowerCase();
613
+ const allAgents = this.getAgentSuggestions();
614
+ // Filter agents by partial match
615
+ const matches = allAgents.filter(agent => agent.id.toLowerCase().startsWith(partial) ||
616
+ agent.displayName.toLowerCase().includes(partial));
617
+ if (matches.length > 0) {
618
+ this.agentAutocomplete.active = true;
619
+ this.agentAutocomplete.partial = partial;
620
+ this.agentAutocomplete.matches = matches;
621
+ this.agentAutocomplete.startPos = dollarMention.startPos;
622
+ this.agentAutocomplete.lineIndex = this.state.currentLine;
623
+ if (this.agentAutocomplete.selectedIndex >= matches.length) {
624
+ this.agentAutocomplete.selectedIndex = Math.max(0, matches.length - 1);
625
+ this.agentAutocomplete.scrollOffset = 0;
626
+ }
627
+ // Reset other autocompletes
628
+ this.autocomplete.active = false;
629
+ this.autocomplete.matches = [];
630
+ return;
631
+ }
632
+ }
633
+ }
634
+ // Reset agent autocomplete
635
+ this.agentAutocomplete.active = false;
636
+ this.agentAutocomplete.matches = [];
637
+ this.agentAutocomplete.selectedIndex = 0;
638
+ this.agentAutocomplete.scrollOffset = 0;
639
+ this.agentAutocomplete.partial = '';
640
+ this.agentAutocomplete.startPos = 0;
641
+ this.agentAutocomplete.lineIndex = 0;
516
642
  // Check for / command autocomplete
517
643
  if (fullInput.startsWith('/') && this.state.lines.length === 1) {
518
644
  this.autocomplete.active = true;
519
645
  // Refresh commands dynamically to include newly created custom commands
520
- const freshCommands = getAutocompleteCommands();
646
+ const freshCommands = this.getCommands?.() ?? this.commands;
521
647
  this.autocomplete.matches = filterCommands(fullInput, freshCommands);
522
648
  if (this.autocomplete.selectedIndex >= this.autocomplete.matches.length) {
523
649
  this.autocomplete.selectedIndex = Math.max(0, this.autocomplete.matches.length - 1);
@@ -553,6 +679,7 @@ export class InputPrompt extends EventEmitter {
553
679
  const isShiftTab = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x5a;
554
680
  const isCtrlC = key === '\x03';
555
681
  const isCtrlO = key === '\x0f'; // Ctrl+O for toggle subagent expand
682
+ const isCtrlB = key === '\x02'; // Ctrl+B for background tasks
556
683
  const isUpArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41;
557
684
  const isDownArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42;
558
685
  const isLeftArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x44;
@@ -587,30 +714,41 @@ export class InputPrompt extends EventEmitter {
587
714
  this.emit('toggleSubagentExpand');
588
715
  return;
589
716
  }
717
+ // Ctrl+B - show background tasks overlay
718
+ if (isCtrlB) {
719
+ this.emit('showTasks');
720
+ return;
721
+ }
590
722
  // Escape - close autocomplete, double Esc clears input, or emit escape for agent abort
591
723
  if (isEscape) {
592
724
  const now = Date.now();
593
725
  const isDoubleEsc = now - this.lastEscTime < this.DOUBLE_ESC_THRESHOLD_MS;
594
726
  this.lastEscTime = now;
595
- if (this.fileAutocomplete.active) {
596
- // First priority: close file autocomplete
727
+ if (this.agentAutocomplete.active) {
728
+ // First priority: close agent autocomplete
729
+ this.agentAutocomplete.active = false;
730
+ this.agentAutocomplete.matches = [];
731
+ this.emit('change', this.getValue());
732
+ }
733
+ else if (this.fileAutocomplete.active) {
734
+ // Second priority: close file autocomplete
597
735
  this.fileAutocomplete.active = false;
598
736
  this.fileAutocomplete.matches = [];
599
737
  this.emit('change', this.getValue());
600
738
  }
601
739
  else if (this.autocomplete.active) {
602
- // Second priority: close command autocomplete
740
+ // Third priority: close command autocomplete
603
741
  this.autocomplete.active = false;
604
742
  this.autocomplete.matches = [];
605
743
  this.emit('change', this.getValue());
606
744
  }
607
745
  else if (isDoubleEsc && this.getValue().length > 0) {
608
- // Third priority: double Esc clears input (if there's content)
746
+ // Fourth priority: double Esc clears input (if there's content)
609
747
  this.clearInput();
610
748
  this.emit('change', this.getValue());
611
749
  }
612
750
  else {
613
- // Fourth priority: emit escape for agent abort
751
+ // Fifth priority: emit escape for agent abort
614
752
  this.emit('escape');
615
753
  }
616
754
  return;
@@ -705,6 +843,21 @@ export class InputPrompt extends EventEmitter {
705
843
  this.emit('change', this.getValue());
706
844
  return;
707
845
  }
846
+ // Agent autocomplete selection - replace with $agentId and add space
847
+ if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
848
+ const selectedAgent = this.agentAutocomplete.matches[this.agentAutocomplete.selectedIndex];
849
+ const lineIdx = this.agentAutocomplete.lineIndex;
850
+ const line = this.state.lines[lineIdx];
851
+ const result = replaceDollarMention(line, this.state.cursorPos, selectedAgent.id);
852
+ this.state.lines[lineIdx] = result.input;
853
+ this.state.currentLine = lineIdx;
854
+ this.state.cursorPos = result.cursorPos;
855
+ this.agentAutocomplete.active = false;
856
+ this.agentAutocomplete.matches = [];
857
+ this.emit('change', this.getValue());
858
+ // Return - let user type message after selecting agent
859
+ return;
860
+ }
708
861
  // File autocomplete selection - accept the path and continue
709
862
  if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
710
863
  const selectedFile = this.fileAutocomplete.matches[this.fileAutocomplete.selectedIndex];
@@ -745,8 +898,11 @@ export class InputPrompt extends EventEmitter {
745
898
  this.emit('command', command, args);
746
899
  }
747
900
  else {
901
+ // Strip @ prefix from file paths (autocomplete uses @ but agent doesn't need it)
902
+ // Matches @word or @path/to/file patterns
903
+ const cleanedInput = input.replace(/(?<![@\w])@([\w./-]+)/g, '$1');
748
904
  this.clearInput();
749
- this.emit('submit', input);
905
+ this.emit('submit', cleanedInput);
750
906
  }
751
907
  }
752
908
  handleTab() {
@@ -758,6 +914,20 @@ export class InputPrompt extends EventEmitter {
758
914
  this.emit('change', this.getValue());
759
915
  return;
760
916
  }
917
+ // Agent autocomplete completion - replace with $agentId and add space
918
+ if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
919
+ const selectedAgent = this.agentAutocomplete.matches[this.agentAutocomplete.selectedIndex];
920
+ const lineIdx = this.agentAutocomplete.lineIndex;
921
+ const line = this.state.lines[lineIdx];
922
+ const result = replaceDollarMention(line, this.state.cursorPos, selectedAgent.id);
923
+ this.state.lines[lineIdx] = result.input;
924
+ this.state.currentLine = lineIdx;
925
+ this.state.cursorPos = result.cursorPos;
926
+ this.agentAutocomplete.active = false;
927
+ this.agentAutocomplete.matches = [];
928
+ this.emit('change', this.getValue());
929
+ return;
930
+ }
761
931
  // File autocomplete completion
762
932
  if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
763
933
  const selectedFile = this.fileAutocomplete.matches[this.fileAutocomplete.selectedIndex];
@@ -791,6 +961,16 @@ export class InputPrompt extends EventEmitter {
791
961
  this.emit('change', this.getValue());
792
962
  }
793
963
  handleArrowUp() {
964
+ // Agent autocomplete navigation
965
+ if (this.agentAutocomplete.active && this.agentAutocomplete.selectedIndex > 0) {
966
+ this.agentAutocomplete.selectedIndex--;
967
+ // Adjust scroll offset if selection goes above visible area
968
+ if (this.agentAutocomplete.selectedIndex < this.agentAutocomplete.scrollOffset) {
969
+ this.agentAutocomplete.scrollOffset = this.agentAutocomplete.selectedIndex;
970
+ }
971
+ this.emit('change', this.getValue());
972
+ return;
973
+ }
794
974
  // File autocomplete navigation
795
975
  if (this.fileAutocomplete.active && this.fileAutocomplete.selectedIndex > 0) {
796
976
  this.fileAutocomplete.selectedIndex--;
@@ -853,6 +1033,18 @@ export class InputPrompt extends EventEmitter {
853
1033
  }
854
1034
  }
855
1035
  handleArrowDown() {
1036
+ // Agent autocomplete navigation
1037
+ if (this.agentAutocomplete.active &&
1038
+ this.agentAutocomplete.selectedIndex < this.agentAutocomplete.matches.length - 1) {
1039
+ this.agentAutocomplete.selectedIndex++;
1040
+ // Adjust scroll offset if selection goes below visible area
1041
+ const maxVisibleIndex = this.agentAutocomplete.scrollOffset + MAX_VISIBLE_COMMANDS - 1;
1042
+ if (this.agentAutocomplete.selectedIndex > maxVisibleIndex) {
1043
+ this.agentAutocomplete.scrollOffset = this.agentAutocomplete.selectedIndex - MAX_VISIBLE_COMMANDS + 1;
1044
+ }
1045
+ this.emit('change', this.getValue());
1046
+ return;
1047
+ }
856
1048
  // File autocomplete navigation
857
1049
  if (this.fileAutocomplete.active &&
858
1050
  this.fileAutocomplete.selectedIndex < this.fileAutocomplete.matches.length - 1) {
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Keyboard input handler.
3
+ *
4
+ * Extracted from TerminalUI — owns keyboard capture, escape handling,
5
+ * overlay key routing, and the main keypress dispatch loop. Accesses
6
+ * sub-controllers (input, autocomplete, overlay, status bar) directly
7
+ * through the host interface.
8
+ */
9
+ import type { InputController } from './input-controller.js';
10
+ import type { AutocompleteController } from './autocomplete-controller.js';
11
+ import type { OverlayManager } from './overlay-manager.js';
12
+ import type { StatusBarController } from './status-bar-controller.js';
13
+ import type { Overlay } from './overlay/index.js';
14
+ export interface KeyboardHandlerHost {
15
+ isGuardActive(): boolean;
16
+ isAgentRunning(): boolean;
17
+ getViewMode(): 'normal' | 'verbose-temp';
18
+ setViewMode(mode: 'normal' | 'verbose-temp'): void;
19
+ requestRender(): void;
20
+ emit(event: string, ...args: unknown[]): void;
21
+ readonly input: InputController;
22
+ readonly ac: AutocompleteController;
23
+ readonly overlay: OverlayManager;
24
+ readonly statusBar: StatusBarController;
25
+ getActiveOverlay(): Overlay | null;
26
+ hasActiveOverlay(): boolean;
27
+ hasActiveBash(): boolean;
28
+ backgroundBashCommand(): void;
29
+ hasRestoredHistory(): boolean;
30
+ showRestoredHistory(): void;
31
+ toggleVerboseView(): void;
32
+ toggleLiveRegionExpanded(): void;
33
+ toggleTodos(): void;
34
+ reRenderConversationVerbose(verbose: boolean): void;
35
+ }
36
+ export declare class KeyboardHandler {
37
+ private keyHandler;
38
+ private dataHandler;
39
+ private lastEscapeTime;
40
+ private lastTabTime;
41
+ private readonly host;
42
+ constructor(host: KeyboardHandlerHost);
43
+ startCapture(): void;
44
+ stopCapture(): void;
45
+ private handleEscape;
46
+ private handleOverlayKeypress;
47
+ /**
48
+ * Handle escape sequences for overlays directly from raw stdin data.
49
+ *
50
+ * Bypasses readline's keypress events which can be corrupted when the
51
+ * emitKeys generator is left suspended after a standalone escape key.
52
+ * Uses parseKeyEvent (from ui-core) to reliably parse the raw bytes.
53
+ */
54
+ private handleOverlayEscapeSequence;
55
+ private applyAutocomplete;
56
+ private handleKeypress;
57
+ }