@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Autocomplete controller for command, file, and agent autocomplete.
3
+ *
4
+ * Extracted from TerminalUI — owns all three autocomplete states and their
5
+ * management methods. Input state is passed in as parameters; accept() returns
6
+ * new input state instead of mutating directly.
7
+ */
8
+ import { getStyles } from '../themes/index.js';
9
+ import { getVisibleLength } from './line-utils.js';
10
+ import { MAX_VISIBLE_COMMANDS, } from './terminal-types.js';
11
+ import { filterCommands } from './terminal-autocomplete-utils.js';
12
+ import { getFileMatches, extractAtMention, replaceAtMention, extractDollarMention, replaceDollarMention, } from './file-autocomplete.js';
13
+ export class AutocompleteController {
14
+ command = {
15
+ active: false,
16
+ matches: [],
17
+ selectedIndex: 0,
18
+ scrollOffset: 0,
19
+ };
20
+ file = {
21
+ active: false,
22
+ matches: [],
23
+ selectedIndex: 0,
24
+ scrollOffset: 0,
25
+ partial: '',
26
+ };
27
+ agent = {
28
+ active: false,
29
+ matches: [],
30
+ selectedIndex: 0,
31
+ scrollOffset: 0,
32
+ partial: '',
33
+ startPos: 0,
34
+ lineIndex: 0,
35
+ };
36
+ getAgentSuggestions;
37
+ getCommands;
38
+ /** Whether any autocomplete is currently active. */
39
+ isActive() {
40
+ return this.command.active || this.file.active || this.agent.active;
41
+ }
42
+ // ===========================================================================
43
+ // Update (called when input changes)
44
+ // ===========================================================================
45
+ /**
46
+ * Detect and activate autocomplete based on current input state.
47
+ * Priority: @ file > $ agent > / command
48
+ */
49
+ update(lines, currentLine, cursorPos) {
50
+ const currentLineContent = lines[currentLine];
51
+ // Check for @ file path autocomplete first (works on any line)
52
+ const atMention = extractAtMention(currentLineContent, cursorPos);
53
+ if (atMention !== null) {
54
+ // File autocomplete mode - disable other autocompletes
55
+ this.command.active = false;
56
+ this.command.matches = [];
57
+ this.command.selectedIndex = 0;
58
+ this.command.scrollOffset = 0;
59
+ this.agent.active = false;
60
+ this.agent.matches = [];
61
+ // Enable file autocomplete
62
+ this.file.active = true;
63
+ this.file.partial = atMention;
64
+ this.file.matches = getFileMatches(atMention);
65
+ if (this.file.selectedIndex >= this.file.matches.length) {
66
+ this.file.selectedIndex = Math.max(0, this.file.matches.length - 1);
67
+ this.file.scrollOffset = 0;
68
+ }
69
+ return;
70
+ }
71
+ // Reset file autocomplete
72
+ this.file.active = false;
73
+ this.file.matches = [];
74
+ this.file.selectedIndex = 0;
75
+ this.file.scrollOffset = 0;
76
+ this.file.partial = '';
77
+ // Check for $ agent autocomplete (anywhere in the current line)
78
+ if (this.getAgentSuggestions) {
79
+ const dollarMention = extractDollarMention(currentLineContent, cursorPos);
80
+ if (dollarMention !== null) {
81
+ const partial = dollarMention.partial.toLowerCase();
82
+ const allAgents = this.getAgentSuggestions();
83
+ // Filter agents by partial match
84
+ const matches = allAgents.filter(a => a.id.toLowerCase().startsWith(partial) ||
85
+ a.displayName.toLowerCase().includes(partial));
86
+ if (matches.length > 0) {
87
+ this.agent.active = true;
88
+ this.agent.partial = partial;
89
+ this.agent.matches = matches;
90
+ this.agent.startPos = dollarMention.startPos;
91
+ this.agent.lineIndex = currentLine;
92
+ if (this.agent.selectedIndex >= matches.length) {
93
+ this.agent.selectedIndex = Math.max(0, matches.length - 1);
94
+ this.agent.scrollOffset = 0;
95
+ }
96
+ // Reset command autocomplete
97
+ this.command.active = false;
98
+ this.command.matches = [];
99
+ return;
100
+ }
101
+ }
102
+ }
103
+ // Reset agent autocomplete
104
+ this.agent.active = false;
105
+ this.agent.matches = [];
106
+ this.agent.selectedIndex = 0;
107
+ this.agent.scrollOffset = 0;
108
+ this.agent.partial = '';
109
+ this.agent.startPos = 0;
110
+ this.agent.lineIndex = 0;
111
+ // Activate command autocomplete when first line starts with /
112
+ const firstLine = lines[0];
113
+ if (currentLine === 0 && firstLine.startsWith('/')) {
114
+ this.command.active = true;
115
+ const freshCommands = this.getCommands?.() ?? [];
116
+ this.command.matches = filterCommands(firstLine, freshCommands);
117
+ // Reset selection if it's out of bounds
118
+ if (this.command.selectedIndex >= this.command.matches.length) {
119
+ this.command.selectedIndex = Math.max(0, this.command.matches.length - 1);
120
+ this.command.scrollOffset = 0;
121
+ }
122
+ }
123
+ else {
124
+ this.command.active = false;
125
+ this.command.matches = [];
126
+ this.command.selectedIndex = 0;
127
+ this.command.scrollOffset = 0;
128
+ }
129
+ }
130
+ // ===========================================================================
131
+ // Accept (apply selected autocomplete)
132
+ // ===========================================================================
133
+ /**
134
+ * Apply the selected autocomplete match.
135
+ * Returns new input state if something was accepted, null otherwise.
136
+ * Caller must also call update() after applying the result for file autocomplete
137
+ * (directory selection may trigger continued autocomplete).
138
+ */
139
+ accept(lines, currentLine, cursorPos) {
140
+ // Agent autocomplete takes highest priority
141
+ if (this.agent.active && this.agent.matches.length > 0) {
142
+ const selectedAgent = this.agent.matches[this.agent.selectedIndex];
143
+ const lineIdx = this.agent.lineIndex;
144
+ const line = lines[lineIdx];
145
+ const result = replaceDollarMention(line, cursorPos, selectedAgent.id);
146
+ const newLines = [...lines];
147
+ newLines[lineIdx] = result.input;
148
+ this.agent.active = false;
149
+ this.agent.matches = [];
150
+ this.agent.selectedIndex = 0;
151
+ this.agent.scrollOffset = 0;
152
+ this.agent.partial = '';
153
+ this.agent.startPos = 0;
154
+ this.agent.lineIndex = 0;
155
+ return { lines: newLines, currentLine: lineIdx, cursorPos: result.cursorPos };
156
+ }
157
+ // File autocomplete takes priority (works on current line)
158
+ if (this.file.active && this.file.matches.length > 0) {
159
+ const selectedFile = this.file.matches[this.file.selectedIndex];
160
+ const currentLineContent = lines[currentLine];
161
+ const result = replaceAtMention(currentLineContent, cursorPos, selectedFile.path);
162
+ const newLines = [...lines];
163
+ newLines[currentLine] = result.input;
164
+ this.file.active = false;
165
+ this.file.matches = [];
166
+ this.file.selectedIndex = 0;
167
+ this.file.scrollOffset = 0;
168
+ this.file.partial = '';
169
+ return { lines: newLines, currentLine, cursorPos: result.cursorPos };
170
+ }
171
+ // Command autocomplete (works on first line only)
172
+ if (this.command.active && this.command.matches.length > 0) {
173
+ const selected = this.command.matches[this.command.selectedIndex];
174
+ const newLines = [...lines];
175
+ newLines[0] = selected.command;
176
+ this.command.active = false;
177
+ this.command.matches = [];
178
+ this.command.selectedIndex = 0;
179
+ this.command.scrollOffset = 0;
180
+ return { lines: newLines, currentLine: 0, cursorPos: selected.command.length };
181
+ }
182
+ return null;
183
+ }
184
+ // ===========================================================================
185
+ // Close / Navigate
186
+ // ===========================================================================
187
+ close() {
188
+ this.agent.active = false;
189
+ this.agent.matches = [];
190
+ this.agent.selectedIndex = 0;
191
+ this.agent.scrollOffset = 0;
192
+ this.agent.partial = '';
193
+ this.agent.startPos = 0;
194
+ this.agent.lineIndex = 0;
195
+ this.file.active = false;
196
+ this.file.matches = [];
197
+ this.file.selectedIndex = 0;
198
+ this.file.scrollOffset = 0;
199
+ this.file.partial = '';
200
+ this.command.active = false;
201
+ this.command.matches = [];
202
+ this.command.selectedIndex = 0;
203
+ this.command.scrollOffset = 0;
204
+ }
205
+ navigateUp() {
206
+ if (this.agent.active && this.agent.matches.length > 0) {
207
+ if (this.agent.selectedIndex > 0) {
208
+ this.agent.selectedIndex--;
209
+ if (this.agent.selectedIndex < this.agent.scrollOffset) {
210
+ this.agent.scrollOffset = this.agent.selectedIndex;
211
+ }
212
+ return true;
213
+ }
214
+ return false;
215
+ }
216
+ if (this.file.active && this.file.matches.length > 0) {
217
+ if (this.file.selectedIndex > 0) {
218
+ this.file.selectedIndex--;
219
+ if (this.file.selectedIndex < this.file.scrollOffset) {
220
+ this.file.scrollOffset = this.file.selectedIndex;
221
+ }
222
+ return true;
223
+ }
224
+ return false;
225
+ }
226
+ if (!this.command.active || this.command.matches.length === 0) {
227
+ return false;
228
+ }
229
+ if (this.command.selectedIndex > 0) {
230
+ this.command.selectedIndex--;
231
+ if (this.command.selectedIndex < this.command.scrollOffset) {
232
+ this.command.scrollOffset = this.command.selectedIndex;
233
+ }
234
+ return true;
235
+ }
236
+ return false;
237
+ }
238
+ navigateDown() {
239
+ if (this.agent.active && this.agent.matches.length > 0) {
240
+ if (this.agent.selectedIndex < this.agent.matches.length - 1) {
241
+ this.agent.selectedIndex++;
242
+ const maxVisibleIndex = this.agent.scrollOffset + MAX_VISIBLE_COMMANDS - 1;
243
+ if (this.agent.selectedIndex > maxVisibleIndex) {
244
+ this.agent.scrollOffset = this.agent.selectedIndex - MAX_VISIBLE_COMMANDS + 1;
245
+ }
246
+ return true;
247
+ }
248
+ return false;
249
+ }
250
+ if (this.file.active && this.file.matches.length > 0) {
251
+ if (this.file.selectedIndex < this.file.matches.length - 1) {
252
+ this.file.selectedIndex++;
253
+ const maxVisibleIndex = this.file.scrollOffset + MAX_VISIBLE_COMMANDS - 1;
254
+ if (this.file.selectedIndex > maxVisibleIndex) {
255
+ this.file.scrollOffset = this.file.selectedIndex - MAX_VISIBLE_COMMANDS + 1;
256
+ }
257
+ return true;
258
+ }
259
+ return false;
260
+ }
261
+ if (!this.command.active || this.command.matches.length === 0) {
262
+ return false;
263
+ }
264
+ if (this.command.selectedIndex < this.command.matches.length - 1) {
265
+ this.command.selectedIndex++;
266
+ const maxVisibleIndex = this.command.scrollOffset + MAX_VISIBLE_COMMANDS - 1;
267
+ if (this.command.selectedIndex > maxVisibleIndex) {
268
+ this.command.scrollOffset = this.command.selectedIndex - MAX_VISIBLE_COMMANDS + 1;
269
+ }
270
+ return true;
271
+ }
272
+ return false;
273
+ }
274
+ // ===========================================================================
275
+ // Build lines (for footer rendering)
276
+ // ===========================================================================
277
+ buildCommandLines(termWidth) {
278
+ if (!this.command.active || this.command.matches.length === 0) {
279
+ return [];
280
+ }
281
+ const s = getStyles();
282
+ const lines = [];
283
+ const { matches, selectedIndex, scrollOffset } = this.command;
284
+ const visible = matches.slice(scrollOffset, scrollOffset + MAX_VISIBLE_COMMANDS);
285
+ const total = matches.length;
286
+ if (scrollOffset > 0) {
287
+ lines.push(s.muted(` ↑ ${String(scrollOffset)} more above`));
288
+ }
289
+ for (let i = 0; i < visible.length; i++) {
290
+ const cmd = visible[i];
291
+ const actualIndex = scrollOffset + i;
292
+ const isSelected = actualIndex === selectedIndex;
293
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
294
+ const name = isSelected ? s.primaryBold(cmd.command) : cmd.command;
295
+ const baseLen = getVisibleLength(prefix) + getVisibleLength(name) + 3;
296
+ const maxDescLen = termWidth - baseLen - 2;
297
+ const truncatedDesc = cmd.description.length > maxDescLen
298
+ ? cmd.description.slice(0, maxDescLen - 1) + '…'
299
+ : cmd.description;
300
+ lines.push(`${prefix}${name} ${s.muted('- ' + truncatedDesc)}`);
301
+ }
302
+ const belowCount = total - scrollOffset - visible.length;
303
+ if (belowCount > 0) {
304
+ lines.push(s.muted(` ↓ ${String(belowCount)} more below`));
305
+ }
306
+ return lines;
307
+ }
308
+ buildFileLines(termWidth) {
309
+ if (!this.file.active || this.file.matches.length === 0) {
310
+ return [];
311
+ }
312
+ const s = getStyles();
313
+ const lines = [];
314
+ const { matches, selectedIndex, scrollOffset } = this.file;
315
+ const visible = matches.slice(scrollOffset, scrollOffset + MAX_VISIBLE_COMMANDS);
316
+ const total = matches.length;
317
+ if (scrollOffset > 0) {
318
+ lines.push(s.muted(` ↑ ${String(scrollOffset)} more above`));
319
+ }
320
+ for (let i = 0; i < visible.length; i++) {
321
+ const file = visible[i];
322
+ const actualIndex = scrollOffset + i;
323
+ const isSelected = actualIndex === selectedIndex;
324
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
325
+ const icon = file.isDirectory ? '📁 ' : '📄 ';
326
+ const name = isSelected ? s.primaryBold(file.path) : file.path;
327
+ const baseLen = getVisibleLength(prefix) + 3 + getVisibleLength(file.path);
328
+ if (baseLen > termWidth - 2) {
329
+ const maxLen = termWidth - getVisibleLength(prefix) - 5;
330
+ const truncatedPath = file.path.length > maxLen
331
+ ? '…' + file.path.slice(-(maxLen - 1))
332
+ : file.path;
333
+ const truncatedName = isSelected ? s.primaryBold(truncatedPath) : truncatedPath;
334
+ lines.push(`${prefix}${icon}${truncatedName}`);
335
+ }
336
+ else {
337
+ lines.push(`${prefix}${icon}${name}`);
338
+ }
339
+ }
340
+ const belowCount = total - scrollOffset - visible.length;
341
+ if (belowCount > 0) {
342
+ lines.push(s.muted(` ↓ ${String(belowCount)} more below`));
343
+ }
344
+ return lines;
345
+ }
346
+ buildAgentLines(termWidth) {
347
+ if (!this.agent.active || this.agent.matches.length === 0) {
348
+ return [];
349
+ }
350
+ const s = getStyles();
351
+ const lines = [];
352
+ const { matches, selectedIndex, scrollOffset } = this.agent;
353
+ const visible = matches.slice(scrollOffset, scrollOffset + MAX_VISIBLE_COMMANDS);
354
+ const total = matches.length;
355
+ if (scrollOffset > 0) {
356
+ lines.push(s.muted(` ↑ ${String(scrollOffset)} more above`));
357
+ }
358
+ for (let i = 0; i < visible.length; i++) {
359
+ const agentItem = visible[i];
360
+ const actualIndex = scrollOffset + i;
361
+ const isSelected = actualIndex === selectedIndex;
362
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
363
+ const mascot = agentItem.mascot + ' ';
364
+ const name = isSelected ? s.primaryBold('$' + agentItem.id) : '$' + agentItem.id;
365
+ const desc = s.muted(' - ' + agentItem.displayName);
366
+ const baseLen = getVisibleLength(prefix) + 6 + agentItem.id.length + 3 + agentItem.displayName.length;
367
+ if (baseLen > termWidth - 2) {
368
+ const maxDescLen = termWidth - getVisibleLength(prefix) - 6 - agentItem.id.length - 5;
369
+ const truncatedDesc = agentItem.displayName.length > maxDescLen
370
+ ? s.muted(' - ' + agentItem.displayName.slice(0, maxDescLen - 1) + '…')
371
+ : desc;
372
+ lines.push(`${prefix}${mascot}${name}${truncatedDesc}`);
373
+ }
374
+ else {
375
+ lines.push(`${prefix}${mascot}${name}${desc}`);
376
+ }
377
+ }
378
+ const belowCount = total - scrollOffset - visible.length;
379
+ if (belowCount > 0) {
380
+ lines.push(s.muted(` ↓ ${String(belowCount)} more below`));
381
+ }
382
+ return lines;
383
+ }
384
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Base UI Utilities
3
+ *
4
+ * Shared utilities for consistent overlay behavior.
5
+ *
6
+ * Components:
7
+ * - key-utils: Key detection functions
8
+ * - overlay-types: Core interfaces and types
9
+ * - overlay-lifecycle: Lifecycle management
10
+ * - overlay-base: BaseOverlay abstract class
11
+ * - screen-stack: Navigation stack for multi-screen overlays
12
+ */
13
+ export * from './key-utils.js';
14
+ export * from './overlay-types.js';
15
+ export { OverlayLifecycle, setupOverlay } from './overlay-lifecycle.js';
16
+ export type { KeyHandler } from './overlay-lifecycle.js';
17
+ export { BaseOverlay } from './overlay-base.js';
18
+ export { BaseScreen, ScreenStack, stay, pushScreen, popScreen, closeOverlay, } from './screen-stack.js';
19
+ export { renderBorder, wrapText, truncate, truncateAnsi, normalizeText, padToHeight, emptyLines, renderProgressBar, formatTokens, } from './render-utils.js';
20
+ export { TabbedListOverlay } from './tabbed-list-overlay.js';
21
+ export type { TabbedListConfig, TabbedListState } from './tabbed-list-overlay.js';
22
+ export { BaseOverlayV2 } from './overlay-base-v2.js';
23
+ export { TabbedListOverlayV2 } from './tabbed-list-overlay-v2.js';
24
+ export type { TabbedListConfigV2, TabbedListStateV2, } from './tabbed-list-overlay-v2.js';
25
+ export { createInlineOverlayContext, inlineSetup, inlineCleanup, inlineCleanupWithSummary, inlineClearPrevious, inlinePadLines, inlineRenderLines, inlineRender, inlineUpdateContext, isEscapeKey, isCtrlCKey, isEnterKey, isBackspaceKey, isUpArrowKey, isDownArrowKey, isLeftArrowKey, isRightArrowKey, isTabKey, isSpaceKey, isPrintableChar, getPrintableChar, isNumberKey, getNumberKey, getNumberKeyIndex, } from './inline-overlay-utils.js';
26
+ export type { InlineOverlayContext } from './inline-overlay-utils.js';
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Base UI Utilities
3
+ *
4
+ * Shared utilities for consistent overlay behavior.
5
+ *
6
+ * Components:
7
+ * - key-utils: Key detection functions
8
+ * - overlay-types: Core interfaces and types
9
+ * - overlay-lifecycle: Lifecycle management
10
+ * - overlay-base: BaseOverlay abstract class
11
+ * - screen-stack: Navigation stack for multi-screen overlays
12
+ */
13
+ // Key detection utilities
14
+ export * from './key-utils.js';
15
+ // Core types and interfaces
16
+ export * from './overlay-types.js';
17
+ // Lifecycle management
18
+ export { OverlayLifecycle, setupOverlay } from './overlay-lifecycle.js';
19
+ // Base overlay class
20
+ export { BaseOverlay } from './overlay-base.js';
21
+ // Screen stack for multi-screen overlays
22
+ export { BaseScreen, ScreenStack, stay, pushScreen, popScreen, closeOverlay, } from './screen-stack.js';
23
+ // Render utilities
24
+ export { renderBorder, wrapText, truncate, truncateAnsi, normalizeText, padToHeight, emptyLines, renderProgressBar, formatTokens, } from './render-utils.js';
25
+ // Tabbed list overlay base
26
+ export { TabbedListOverlay } from './tabbed-list-overlay.js';
27
+ // V2 Overlay base classes (new Overlay interface)
28
+ export { BaseOverlayV2 } from './overlay-base-v2.js';
29
+ export { TabbedListOverlayV2 } from './tabbed-list-overlay-v2.js';
30
+ // Inline overlay utilities (for in-conversation overlays)
31
+ export { createInlineOverlayContext, inlineSetup, inlineCleanup, inlineCleanupWithSummary, inlineClearPrevious, inlinePadLines, inlineRenderLines, inlineRender, inlineUpdateContext,
32
+ // Key detection (also available from key-utils)
33
+ isEscapeKey, isCtrlCKey, isEnterKey, isBackspaceKey, isUpArrowKey, isDownArrowKey, isLeftArrowKey, isRightArrowKey, isTabKey, isSpaceKey, isPrintableChar, getPrintableChar, isNumberKey, getNumberKey, getNumberKeyIndex, } from './inline-overlay-utils.js';
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Inline Overlay Utilities
3
+ *
4
+ * Shared utilities for "in-conversation" overlays that render above the footer.
5
+ * These overlays differ from full-screen overlays (BaseOverlay) in that they:
6
+ * - Render inline within the conversation
7
+ * - Use line-based clearing (clearLinesAbove) instead of full screen clear
8
+ * - Track line counts to prevent ghost lines and cursor drift
9
+ *
10
+ * CANONICAL PATTERN for inline overlays:
11
+ *
12
+ * ```typescript
13
+ * export async function showMyOverlay(options: Options): Promise<Result> {
14
+ * const state = { ... };
15
+ * const ctx = createInlineOverlayContext();
16
+ *
17
+ * // Setup
18
+ * // NOTE: Footer should be paused by CALLER (index.ts), not here
19
+ * // This prevents double-pause issues with agent tool overlays
20
+ * inlineSetup(ctx);
21
+ *
22
+ * // Initial render
23
+ * ctx.lineCount = renderMyOverlay(options, state, ctx);
24
+ * ctx.maxLineCount = Math.max(ctx.maxLineCount, ctx.lineCount);
25
+ *
26
+ * return new Promise((resolve) => {
27
+ * const cleanup = (result: Result) => {
28
+ * inlineCleanup(ctx);
29
+ * process.stdin.removeListener('data', handleData);
30
+ * resolve(result);
31
+ * };
32
+ *
33
+ * const handleData = (data: Buffer) => {
34
+ * // Handle keys, update state
35
+ * // ...
36
+ *
37
+ * // Re-render (always use maxLineCount for both clearing and target)
38
+ * ctx.lineCount = renderMyOverlay(options, state, ctx);
39
+ * ctx.maxLineCount = Math.max(ctx.maxLineCount, ctx.lineCount);
40
+ * };
41
+ *
42
+ * process.stdin.on('data', handleData);
43
+ * });
44
+ * }
45
+ * ```
46
+ *
47
+ * RENDER FUNCTION pattern:
48
+ *
49
+ * ```typescript
50
+ * function renderMyOverlay(
51
+ * options: Options,
52
+ * state: State,
53
+ * ctx: InlineOverlayContext
54
+ * ): number {
55
+ * const lines: string[] = [];
56
+ *
57
+ * // Clear previous render
58
+ * if (ctx.maxLineCount > 0) {
59
+ * terminal.clearLinesAbove(ctx.maxLineCount);
60
+ * }
61
+ *
62
+ * // Build lines array
63
+ * lines.push(...);
64
+ *
65
+ * // Pad to consistent height (prevents cursor drift)
66
+ * while (lines.length < ctx.maxLineCount) {
67
+ * lines.push('');
68
+ * }
69
+ *
70
+ * // Render
71
+ * terminal.write(lines.join('\n'));
72
+ *
73
+ * return lines.length;
74
+ * }
75
+ * ```
76
+ */
77
+ /**
78
+ * Context for tracking inline overlay render state.
79
+ * This prevents ghost lines and cursor drift.
80
+ */
81
+ export interface InlineOverlayContext {
82
+ /** Current number of lines rendered */
83
+ lineCount: number;
84
+ /** Maximum lines ever rendered (used for clearing) */
85
+ maxLineCount: number;
86
+ /** Whether raw mode was enabled before overlay */
87
+ wasRawMode: boolean;
88
+ }
89
+ /**
90
+ * Create a new inline overlay context.
91
+ * Call this at the start of showXxxOverlay().
92
+ */
93
+ export declare function createInlineOverlayContext(): InlineOverlayContext;
94
+ /**
95
+ * Standard setup for inline overlays.
96
+ * Call this after creating the context.
97
+ *
98
+ * NOTE: Footer pause should be handled by the CALLER (index.ts),
99
+ * not by the overlay itself. This prevents double-pause issues
100
+ * when overlays are triggered by agent tools.
101
+ */
102
+ export declare function inlineSetup(ctx: InlineOverlayContext): void;
103
+ /**
104
+ * Standard cleanup for inline overlays.
105
+ * Call this before resolving the promise.
106
+ *
107
+ * NOTE: Footer resume should be handled by the CALLER (index.ts),
108
+ * not by the overlay itself.
109
+ */
110
+ export declare function inlineCleanup(ctx: InlineOverlayContext): void;
111
+ /**
112
+ * Cleanup with a result summary line.
113
+ * Some overlays show a brief result after closing.
114
+ */
115
+ export declare function inlineCleanupWithSummary(ctx: InlineOverlayContext, summaryLine: string): void;
116
+ /**
117
+ * Clear previous render and prepare for new render.
118
+ * Call this at the start of your render function.
119
+ *
120
+ * @param ctx - The overlay context
121
+ */
122
+ export declare function inlineClearPrevious(ctx: InlineOverlayContext): void;
123
+ /**
124
+ * Pad lines array to target height (prevents cursor drift).
125
+ * Call this before rendering.
126
+ *
127
+ * @param lines - Array of lines to pad
128
+ * @param targetLineCount - Target number of lines (usually ctx.maxLineCount)
129
+ */
130
+ export declare function inlinePadLines(lines: string[], targetLineCount: number): void;
131
+ /**
132
+ * Render lines and return the line count.
133
+ * Call this at the end of your render function.
134
+ *
135
+ * @param lines - Array of lines to render
136
+ * @returns Number of lines rendered
137
+ */
138
+ export declare function inlineRenderLines(lines: string[]): number;
139
+ /**
140
+ * Complete render helper that clears, pads, and renders.
141
+ * Use this for simpler overlays.
142
+ *
143
+ * @param lines - Array of lines to render
144
+ * @param ctx - The overlay context
145
+ * @returns Number of lines rendered
146
+ */
147
+ export declare function inlineRender(lines: string[], ctx: InlineOverlayContext): number;
148
+ /**
149
+ * Update context after render.
150
+ * Call this after your render function returns.
151
+ *
152
+ * @param ctx - The overlay context
153
+ * @param newLineCount - Number of lines just rendered
154
+ */
155
+ export declare function inlineUpdateContext(ctx: InlineOverlayContext, newLineCount: number): void;
156
+ /**
157
+ * Check if buffer is Escape key
158
+ */
159
+ export declare function isEscapeKey(data: Buffer): boolean;
160
+ /**
161
+ * Check if buffer is Ctrl+C
162
+ */
163
+ export declare function isCtrlCKey(data: Buffer): boolean;
164
+ /**
165
+ * Check if buffer is Enter key
166
+ */
167
+ export declare function isEnterKey(data: Buffer): boolean;
168
+ /**
169
+ * Check if buffer is Backspace key
170
+ */
171
+ export declare function isBackspaceKey(data: Buffer): boolean;
172
+ /**
173
+ * Check if buffer is Up arrow
174
+ */
175
+ export declare function isUpArrowKey(data: Buffer): boolean;
176
+ /**
177
+ * Check if buffer is Down arrow
178
+ */
179
+ export declare function isDownArrowKey(data: Buffer): boolean;
180
+ /**
181
+ * Check if buffer is Left arrow
182
+ */
183
+ export declare function isLeftArrowKey(data: Buffer): boolean;
184
+ /**
185
+ * Check if buffer is Right arrow
186
+ */
187
+ export declare function isRightArrowKey(data: Buffer): boolean;
188
+ /**
189
+ * Check if buffer is Tab key
190
+ */
191
+ export declare function isTabKey(data: Buffer): boolean;
192
+ /**
193
+ * Check if buffer is Space key
194
+ */
195
+ export declare function isSpaceKey(data: Buffer): boolean;
196
+ /**
197
+ * Check if buffer is a printable ASCII character
198
+ */
199
+ export declare function isPrintableChar(data: Buffer): boolean;
200
+ /**
201
+ * Get printable character from buffer, or null if not printable
202
+ */
203
+ export declare function getPrintableChar(data: Buffer): string | null;
204
+ /**
205
+ * Check if buffer is a number key (1-9)
206
+ */
207
+ export declare function isNumberKey(data: Buffer): boolean;
208
+ /**
209
+ * Get number from number key (1-9), or null if not a number key
210
+ * Returns 1-9 (not 0-8)
211
+ */
212
+ export declare function getNumberKey(data: Buffer): number | null;
213
+ /**
214
+ * Get 0-indexed number from number key, or null if not a number key
215
+ * Returns 0-8 (for use as array index)
216
+ */
217
+ export declare function getNumberKeyIndex(data: Buffer): number | null;