@compilr-dev/cli 0.5.0 → 0.5.2

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