@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
package/dist/ui/diff.d.ts CHANGED
@@ -28,10 +28,16 @@ export declare function generateEditDiff(filePath: string, oldText: string, newT
28
28
  * Format a diff header showing what changed
29
29
  */
30
30
  export declare function formatDiffHeader(filePath: string, additions: number, removals: number): string;
31
+ /**
32
+ * Compute the full modified file content after applying an edit.
33
+ * For edit: reads file, applies text replacement, returns full modified content.
34
+ * Returns null if the file can't be read or the old text isn't found.
35
+ */
36
+ export declare function computeModifiedContent(filePath: string, oldText: string, newText: string, replaceAll?: boolean): string | null;
31
37
  /**
32
38
  * Generate a simple diff for write_file operations (new content only)
33
39
  */
34
- export declare function generateWriteDiff(filePath: string, content: string, _isNew: boolean): DiffResult;
40
+ export declare function generateWriteDiff(_filePath: string, content: string, _isNew: boolean): DiffResult;
35
41
  /**
36
42
  * Format header for write_file operations
37
43
  */
package/dist/ui/diff.js CHANGED
@@ -36,65 +36,77 @@ export function generateEditDiff(filePath, oldText, newText, replaceAll = false)
36
36
  // File doesn't exist yet or can't be read
37
37
  return null;
38
38
  }
39
- // Split file into lines
40
- const lines = fileContent.split('\n');
41
- // Find all line numbers that contain the old text
42
- const affectedLines = [];
43
- for (let i = 0; i < lines.length; i++) {
44
- if (lines[i].includes(oldText)) {
45
- affectedLines.push(i);
46
- if (!replaceAll)
47
- break; // Only find first occurrence
48
- }
39
+ // Find all occurrences of oldText in the file (supports multi-line)
40
+ const occurrences = [];
41
+ let searchFrom = 0;
42
+ let idx = fileContent.indexOf(oldText, searchFrom);
43
+ while (idx !== -1) {
44
+ occurrences.push(idx);
45
+ if (!replaceAll)
46
+ break;
47
+ searchFrom = idx + oldText.length;
48
+ idx = fileContent.indexOf(oldText, searchFrom);
49
49
  }
50
- if (affectedLines.length === 0) {
51
- // Old text not found
50
+ if (occurrences.length === 0) {
52
51
  return null;
53
52
  }
53
+ const lines = fileContent.split('\n');
54
+ // Convert character offset to line number
55
+ const charOffsetToLine = (offset) => {
56
+ let chars = 0;
57
+ for (let i = 0; i < lines.length; i++) {
58
+ if (offset <= chars + lines[i].length)
59
+ return i;
60
+ chars += lines[i].length + 1; // +1 for \n
61
+ }
62
+ return lines.length - 1;
63
+ };
64
+ const oldLines = oldText.split('\n');
65
+ const newLines = newText.split('\n');
54
66
  // Build the diff output
55
67
  const diffLines = [];
56
68
  let additions = 0;
57
69
  let removals = 0;
58
- // Track which context lines have been shown
59
70
  const shownContextLines = new Set();
60
71
  let lastShownLine = -999;
61
- for (let idx = 0; idx < affectedLines.length; idx++) {
62
- const lineNum = affectedLines[idx];
63
- // Calculate context range for this change
64
- const contextStart = Math.max(0, lineNum - CONTEXT_LINES);
65
- const contextEnd = Math.min(lines.length - 1, lineNum + CONTEXT_LINES);
66
- // Add separator if there's a gap from the last shown line
72
+ for (let occIdx = 0; occIdx < occurrences.length; occIdx++) {
73
+ const startLine = charOffsetToLine(occurrences[occIdx]);
74
+ const endLine = startLine + oldLines.length - 1;
75
+ const contextStart = Math.max(0, startLine - CONTEXT_LINES);
76
+ const contextEnd = Math.min(lines.length - 1, endLine + CONTEXT_LINES);
77
+ // Add separator if there's a gap
67
78
  const s = getStyles();
68
79
  if (lastShownLine >= 0 && contextStart > lastShownLine + 1) {
69
80
  diffLines.push(s.muted(' ...'));
70
81
  }
71
- // Show context lines before the change
72
- for (let i = contextStart; i < lineNum; i++) {
82
+ // Context lines before
83
+ for (let i = contextStart; i < startLine; i++) {
73
84
  if (!shownContextLines.has(i)) {
74
- const lineNumStr = String(i + 1).padStart(6);
75
- diffLines.push(formatContextLine(lineNumStr, lines[i]));
85
+ diffLines.push(formatContextLine(String(i + 1).padStart(6), lines[i]));
76
86
  shownContextLines.add(i);
77
87
  lastShownLine = i;
78
88
  }
79
89
  }
80
- // Show the changed line (removal + addition)
81
- const lineNumStr = String(lineNum + 1).padStart(6);
82
- const originalLine = lines[lineNum];
83
- const modifiedLine = replaceAll
84
- ? originalLine.split(oldText).join(newText) // Replace all in line
85
- : originalLine.replace(oldText, newText); // Replace first in line
86
- diffLines.push(formatRemovedLine(lineNumStr, originalLine));
87
- diffLines.push(formatAddedLine(lineNumStr, modifiedLine));
88
- removals++;
89
- additions++;
90
- shownContextLines.add(lineNum);
91
- lastShownLine = lineNum;
92
- // Show context lines after the change (but only if not overlapping with next change)
93
- const nextChangeLineNum = idx < affectedLines.length - 1 ? affectedLines[idx + 1] : Infinity;
94
- for (let i = lineNum + 1; i <= contextEnd && i < nextChangeLineNum; i++) {
90
+ // Removed lines (old text)
91
+ for (let i = 0; i < oldLines.length; i++) {
92
+ const lineNum = startLine + i;
93
+ diffLines.push(formatRemovedLine(String(lineNum + 1).padStart(6), lines[lineNum]));
94
+ shownContextLines.add(lineNum);
95
+ lastShownLine = lineNum;
96
+ }
97
+ removals += oldLines.length;
98
+ // Added lines (new text)
99
+ for (let i = 0; i < newLines.length; i++) {
100
+ diffLines.push(formatAddedLine(String(startLine + 1).padStart(6), newLines[i]));
101
+ }
102
+ additions += newLines.length;
103
+ // Context lines after
104
+ const nextStartLine = occIdx < occurrences.length - 1
105
+ ? charOffsetToLine(occurrences[occIdx + 1])
106
+ : Infinity;
107
+ for (let i = endLine + 1; i <= contextEnd && i < nextStartLine; i++) {
95
108
  if (!shownContextLines.has(i)) {
96
- const ctxLineNumStr = String(i + 1).padStart(6);
97
- diffLines.push(formatContextLine(ctxLineNumStr, lines[i]));
109
+ diffLines.push(formatContextLine(String(i + 1).padStart(6), lines[i]));
98
110
  shownContextLines.add(i);
99
111
  lastShownLine = i;
100
112
  }
@@ -147,24 +159,49 @@ function formatAddedLine(lineNum, content) {
147
159
  return `${s.muted(lineNum)} ${chalk.bgGreen.black('+')} ${chalk.bgGreen.black(content)}`;
148
160
  }
149
161
  // =============================================================================
162
+ // Modified Content Generation (for VS Code diff view)
163
+ // =============================================================================
164
+ /**
165
+ * Compute the full modified file content after applying an edit.
166
+ * For edit: reads file, applies text replacement, returns full modified content.
167
+ * Returns null if the file can't be read or the old text isn't found.
168
+ */
169
+ export function computeModifiedContent(filePath, oldText, newText, replaceAll) {
170
+ let fileContent;
171
+ try {
172
+ fileContent = fs.readFileSync(filePath, 'utf-8');
173
+ }
174
+ catch {
175
+ return null;
176
+ }
177
+ // Check that oldText exists in the file
178
+ if (!fileContent.includes(oldText)) {
179
+ return null;
180
+ }
181
+ if (replaceAll) {
182
+ // Replace all occurrences
183
+ let result = fileContent;
184
+ while (result.includes(oldText)) {
185
+ result = result.replace(oldText, newText);
186
+ }
187
+ return result;
188
+ }
189
+ // Replace first occurrence only
190
+ return fileContent.replace(oldText, newText);
191
+ }
192
+ // =============================================================================
150
193
  // Write File Diff (for new files or complete overwrites)
151
194
  // =============================================================================
152
195
  /**
153
196
  * Generate a simple diff for write_file operations (new content only)
154
197
  */
155
- export function generateWriteDiff(filePath, content, _isNew) {
198
+ export function generateWriteDiff(_filePath, content, _isNew) {
156
199
  const lines = content.split('\n');
157
200
  const diffLines = [];
158
- // Show first few lines as preview
159
- const previewLines = Math.min(lines.length, 10);
160
- for (let i = 0; i < previewLines; i++) {
201
+ for (let i = 0; i < lines.length; i++) {
161
202
  const lineNum = String(i + 1).padStart(6);
162
203
  diffLines.push(formatAddedLine(lineNum, lines[i]));
163
204
  }
164
- if (lines.length > previewLines) {
165
- const s = getStyles();
166
- diffLines.push(s.muted(` ... ${String(lines.length - previewLines)} more lines`));
167
- }
168
205
  return {
169
206
  lines: diffLines,
170
207
  additions: lines.length,
@@ -2,7 +2,7 @@
2
2
  * Ephemeral Zone
3
3
  *
4
4
  * @deprecated This module is superseded by the new Footer architecture.
5
- * Use todo-zone.ts, input-prompt-v2.ts, and footer.ts instead.
5
+ * Use todo-zone.ts, input-prompt.ts, and footer.ts instead.
6
6
  * This file is kept for reference and may be removed in a future cleanup.
7
7
  *
8
8
  * Manages the ephemeral area that is cleared and redrawn while agent works.
@@ -2,7 +2,7 @@
2
2
  * Ephemeral Zone
3
3
  *
4
4
  * @deprecated This module is superseded by the new Footer architecture.
5
- * Use todo-zone.ts, input-prompt-v2.ts, and footer.ts instead.
5
+ * Use todo-zone.ts, input-prompt.ts, and footer.ts instead.
6
6
  * This file is kept for reference and may be removed in a future cleanup.
7
7
  *
8
8
  * Manages the ephemeral area that is cleared and redrawn while agent works.
@@ -11,6 +11,7 @@
11
11
  import chalk from 'chalk';
12
12
  import { getStyles } from '../themes/index.js';
13
13
  import * as terminal from './terminal.js';
14
+ import { formatTokens } from './base/index.js';
14
15
  import { formatPendingMessage } from './conversation.js';
15
16
  // Note: This file is deprecated but kept for reference.
16
17
  // All pc.* calls below have been converted to use getStyles() for theme support.
@@ -59,15 +60,6 @@ function formatDuration(ms) {
59
60
  const remainingSeconds = seconds % 60;
60
61
  return `${String(minutes)}m ${String(remainingSeconds)}s`;
61
62
  }
62
- /**
63
- * Format token count (e.g., "1.2k", "500")
64
- */
65
- function formatTokens(tokens) {
66
- if (tokens >= 1000) {
67
- return `${(tokens / 1000).toFixed(1)}k`;
68
- }
69
- return tokens.toString();
70
- }
71
63
  /**
72
64
  * Render todo list with visual styling
73
65
  */
@@ -129,6 +121,8 @@ export class EphemeralZone {
129
121
  this.state.spinner = {
130
122
  text: this.thinkingWord,
131
123
  tokens: 0,
124
+ inputTokens: 0,
125
+ outputTokens: 0,
132
126
  startTime: Date.now(),
133
127
  };
134
128
  // Start animation
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Overlay Features
3
+ *
4
+ * Composable features for building overlays.
5
+ * Each feature handles a specific aspect of overlay behavior.
6
+ *
7
+ * Available features:
8
+ * - ListFeature: List selection and navigation
9
+ * - TabFeature: Tab/filter navigation
10
+ * - InputFeature: Text input with cursor movement
11
+ * - PaginationFeature: Paginated list navigation with scroll tracking
12
+ * - SearchFeature: Search/filter text input with type-to-search
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * import { ListFeature, TabFeature, InputFeature, PaginationFeature, SearchFeature } from './features/index.js';
17
+ *
18
+ * const listFeature = new ListFeature(() => items);
19
+ * const tabFeature = new TabFeature(TABS);
20
+ * const inputFeature = new InputFeature({ placeholder: 'Enter text...' });
21
+ * const pagination = new PaginationFeature({ pageSize: 12 });
22
+ * const search = new SearchFeature({ onSearch: (q) => filter(q) });
23
+ * ```
24
+ */
25
+ export { ListFeature, createSimpleListRenderer, createLabelDescriptionRenderer, } from './list-feature.js';
26
+ export type { ListFeatureConfig } from './list-feature.js';
27
+ export { TabFeature, createTabsFromLabels, createFilterTabs, } from './tab-feature.js';
28
+ export type { TabFeatureConfig } from './tab-feature.js';
29
+ export { InputFeature } from './input-feature.js';
30
+ export type { InputFeatureOptions, InputKeyResult } from './input-feature.js';
31
+ export { PaginationFeature } from './pagination-feature.js';
32
+ export type { PaginationState, PaginationConfig, PaginationKeyResult, } from './pagination-feature.js';
33
+ export { SearchFeature } from './search-feature.js';
34
+ export type { SearchState, SearchConfig, SearchKeyResult, SearchBoxOptions, } from './search-feature.js';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Overlay Features
3
+ *
4
+ * Composable features for building overlays.
5
+ * Each feature handles a specific aspect of overlay behavior.
6
+ *
7
+ * Available features:
8
+ * - ListFeature: List selection and navigation
9
+ * - TabFeature: Tab/filter navigation
10
+ * - InputFeature: Text input with cursor movement
11
+ * - PaginationFeature: Paginated list navigation with scroll tracking
12
+ * - SearchFeature: Search/filter text input with type-to-search
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * import { ListFeature, TabFeature, InputFeature, PaginationFeature, SearchFeature } from './features/index.js';
17
+ *
18
+ * const listFeature = new ListFeature(() => items);
19
+ * const tabFeature = new TabFeature(TABS);
20
+ * const inputFeature = new InputFeature({ placeholder: 'Enter text...' });
21
+ * const pagination = new PaginationFeature({ pageSize: 12 });
22
+ * const search = new SearchFeature({ onSearch: (q) => filter(q) });
23
+ * ```
24
+ */
25
+ // List selection and navigation
26
+ export { ListFeature, createSimpleListRenderer, createLabelDescriptionRenderer, } from './list-feature.js';
27
+ // Tab/filter navigation
28
+ export { TabFeature, createTabsFromLabels, createFilterTabs, } from './tab-feature.js';
29
+ // Text input with cursor movement
30
+ export { InputFeature } from './input-feature.js';
31
+ // Paginated list navigation
32
+ export { PaginationFeature } from './pagination-feature.js';
33
+ // Search/filter text input
34
+ export { SearchFeature } from './search-feature.js';
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Input Feature
3
+ *
4
+ * Composable text input handling for overlays.
5
+ * Provides cursor movement, text editing, and rendering.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * class MyScreen extends BaseScreen {
10
+ * private input = new InputFeature({ placeholder: 'Enter text...' });
11
+ *
12
+ * render(): string[] {
13
+ * return [
14
+ * ' ' + this.input.render(styles),
15
+ * ];
16
+ * }
17
+ *
18
+ * handleKey(data: Buffer): ScreenResult {
19
+ * const result = this.input.handleKey(data);
20
+ * if (result.handled) {
21
+ * return stay();
22
+ * }
23
+ * // Handle other keys (Enter, Escape, etc.)
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export interface InputFeatureOptions {
29
+ /** Initial value */
30
+ initialValue?: string;
31
+ /** Placeholder text when empty */
32
+ placeholder?: string;
33
+ /** Maximum length (0 = unlimited) */
34
+ maxLength?: number;
35
+ }
36
+ export interface InputKeyResult {
37
+ /** Whether the key was handled */
38
+ handled: boolean;
39
+ /** Whether to re-render */
40
+ render: boolean;
41
+ }
42
+ export declare class InputFeature {
43
+ /** Current text value */
44
+ private _value;
45
+ /** Cursor position (0 = before first char, value.length = after last char) */
46
+ private _cursor;
47
+ /** Placeholder text */
48
+ private readonly placeholder;
49
+ /** Maximum length */
50
+ private readonly maxLength;
51
+ constructor(options?: InputFeatureOptions);
52
+ /** Get current value */
53
+ get value(): string;
54
+ /** Set value (resets cursor to end) */
55
+ set value(v: string);
56
+ /** Get cursor position */
57
+ get cursor(): number;
58
+ /** Check if empty */
59
+ get isEmpty(): boolean;
60
+ /** Get trimmed value */
61
+ get trimmedValue(): string;
62
+ /**
63
+ * Handle a key press.
64
+ * Returns whether the key was handled and whether to re-render.
65
+ */
66
+ handleKey(data: Buffer): InputKeyResult;
67
+ /**
68
+ * Render the input field with cursor.
69
+ * Returns a string like: "> text with cursor_"
70
+ *
71
+ * @param styles - Theme styles for coloring
72
+ * @param prefix - Prefix before the input (default: "> ")
73
+ */
74
+ render(styles: ReturnType<typeof import('../../themes/index.js').getStyles>, prefix?: string): string;
75
+ /**
76
+ * Render input field without cursor (for non-focused state).
77
+ */
78
+ renderWithoutCursor(styles: ReturnType<typeof import('../../themes/index.js').getStyles>, prefix?: string): string;
79
+ /** Clear the input */
80
+ clear(): void;
81
+ /** Find word boundary to the left of cursor */
82
+ private findWordBoundaryLeft;
83
+ /** Find word boundary to the right of cursor */
84
+ private findWordBoundaryRight;
85
+ }
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Input Feature
3
+ *
4
+ * Composable text input handling for overlays.
5
+ * Provides cursor movement, text editing, and rendering.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * class MyScreen extends BaseScreen {
10
+ * private input = new InputFeature({ placeholder: 'Enter text...' });
11
+ *
12
+ * render(): string[] {
13
+ * return [
14
+ * ' ' + this.input.render(styles),
15
+ * ];
16
+ * }
17
+ *
18
+ * handleKey(data: Buffer): ScreenResult {
19
+ * const result = this.input.handleKey(data);
20
+ * if (result.handled) {
21
+ * return stay();
22
+ * }
23
+ * // Handle other keys (Enter, Escape, etc.)
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ import { isLeftArrow, isRightArrow, isBackspace, isDelete, isHome, isEnd, isCtrlA, isCtrlE, isWordLeft, isWordRight, extractPrintable, } from '../base/key-utils.js';
29
+ // =============================================================================
30
+ // InputFeature Class
31
+ // =============================================================================
32
+ export class InputFeature {
33
+ /** Current text value */
34
+ _value;
35
+ /** Cursor position (0 = before first char, value.length = after last char) */
36
+ _cursor;
37
+ /** Placeholder text */
38
+ placeholder;
39
+ /** Maximum length */
40
+ maxLength;
41
+ constructor(options = {}) {
42
+ this._value = options.initialValue ?? '';
43
+ this._cursor = this._value.length;
44
+ this.placeholder = options.placeholder ?? '';
45
+ this.maxLength = options.maxLength ?? 0;
46
+ }
47
+ // ===========================================================================
48
+ // Getters/Setters
49
+ // ===========================================================================
50
+ /** Get current value */
51
+ get value() {
52
+ return this._value;
53
+ }
54
+ /** Set value (resets cursor to end) */
55
+ set value(v) {
56
+ this._value = v;
57
+ this._cursor = v.length;
58
+ }
59
+ /** Get cursor position */
60
+ get cursor() {
61
+ return this._cursor;
62
+ }
63
+ /** Check if empty */
64
+ get isEmpty() {
65
+ return this._value.length === 0;
66
+ }
67
+ /** Get trimmed value */
68
+ get trimmedValue() {
69
+ return this._value.trim();
70
+ }
71
+ // ===========================================================================
72
+ // Key Handling
73
+ // ===========================================================================
74
+ /**
75
+ * Handle a key press.
76
+ * Returns whether the key was handled and whether to re-render.
77
+ */
78
+ handleKey(data) {
79
+ // Left arrow - move cursor left
80
+ if (isLeftArrow(data)) {
81
+ if (this._cursor > 0) {
82
+ this._cursor--;
83
+ return { handled: true, render: true };
84
+ }
85
+ return { handled: true, render: false };
86
+ }
87
+ // Right arrow - move cursor right
88
+ if (isRightArrow(data)) {
89
+ if (this._cursor < this._value.length) {
90
+ this._cursor++;
91
+ return { handled: true, render: true };
92
+ }
93
+ return { handled: true, render: false };
94
+ }
95
+ // Home or Ctrl+A - move to start
96
+ if (isHome(data) || isCtrlA(data)) {
97
+ if (this._cursor > 0) {
98
+ this._cursor = 0;
99
+ return { handled: true, render: true };
100
+ }
101
+ return { handled: true, render: false };
102
+ }
103
+ // End or Ctrl+E - move to end
104
+ if (isEnd(data) || isCtrlE(data)) {
105
+ if (this._cursor < this._value.length) {
106
+ this._cursor = this._value.length;
107
+ return { handled: true, render: true };
108
+ }
109
+ return { handled: true, render: false };
110
+ }
111
+ // Word left (Ctrl+Left, Alt+b)
112
+ if (isWordLeft(data)) {
113
+ const newPos = this.findWordBoundaryLeft();
114
+ if (newPos !== this._cursor) {
115
+ this._cursor = newPos;
116
+ return { handled: true, render: true };
117
+ }
118
+ return { handled: true, render: false };
119
+ }
120
+ // Word right (Ctrl+Right, Alt+f)
121
+ if (isWordRight(data)) {
122
+ const newPos = this.findWordBoundaryRight();
123
+ if (newPos !== this._cursor) {
124
+ this._cursor = newPos;
125
+ return { handled: true, render: true };
126
+ }
127
+ return { handled: true, render: false };
128
+ }
129
+ // Backspace - delete before cursor
130
+ if (isBackspace(data)) {
131
+ if (this._cursor > 0) {
132
+ this._value =
133
+ this._value.slice(0, this._cursor - 1) + this._value.slice(this._cursor);
134
+ this._cursor--;
135
+ return { handled: true, render: true };
136
+ }
137
+ return { handled: true, render: false };
138
+ }
139
+ // Delete - delete at cursor
140
+ if (isDelete(data)) {
141
+ if (this._cursor < this._value.length) {
142
+ this._value =
143
+ this._value.slice(0, this._cursor) + this._value.slice(this._cursor + 1);
144
+ return { handled: true, render: true };
145
+ }
146
+ return { handled: true, render: false };
147
+ }
148
+ // Printable characters - insert at cursor
149
+ const printable = extractPrintable(data);
150
+ if (printable.length > 0) {
151
+ // Check max length
152
+ if (this.maxLength > 0 && this._value.length + printable.length > this.maxLength) {
153
+ const allowed = this.maxLength - this._value.length;
154
+ if (allowed <= 0) {
155
+ return { handled: true, render: false };
156
+ }
157
+ const truncated = printable.slice(0, allowed);
158
+ this._value =
159
+ this._value.slice(0, this._cursor) + truncated + this._value.slice(this._cursor);
160
+ this._cursor += truncated.length;
161
+ return { handled: true, render: true };
162
+ }
163
+ this._value =
164
+ this._value.slice(0, this._cursor) + printable + this._value.slice(this._cursor);
165
+ this._cursor += printable.length;
166
+ return { handled: true, render: true };
167
+ }
168
+ // Not handled
169
+ return { handled: false, render: false };
170
+ }
171
+ // ===========================================================================
172
+ // Rendering
173
+ // ===========================================================================
174
+ /**
175
+ * Render the input field with cursor.
176
+ * Returns a string like: "> text with cursor_"
177
+ *
178
+ * @param styles - Theme styles for coloring
179
+ * @param prefix - Prefix before the input (default: "> ")
180
+ */
181
+ render(styles, prefix = '> ') {
182
+ if (this._value.length === 0 && this.placeholder) {
183
+ // Show placeholder with cursor at start
184
+ return styles.primary(prefix) + styles.primary('▋') + styles.muted(this.placeholder);
185
+ }
186
+ // Split text at cursor position
187
+ const before = this._value.slice(0, this._cursor);
188
+ const after = this._value.slice(this._cursor);
189
+ return styles.primary(prefix) + before + styles.primary('▋') + after;
190
+ }
191
+ /**
192
+ * Render input field without cursor (for non-focused state).
193
+ */
194
+ renderWithoutCursor(styles, prefix = '> ') {
195
+ if (this._value.length === 0 && this.placeholder) {
196
+ return styles.muted(prefix + this.placeholder);
197
+ }
198
+ return prefix + this._value;
199
+ }
200
+ // ===========================================================================
201
+ // Helpers
202
+ // ===========================================================================
203
+ /** Clear the input */
204
+ clear() {
205
+ this._value = '';
206
+ this._cursor = 0;
207
+ }
208
+ /** Find word boundary to the left of cursor */
209
+ findWordBoundaryLeft() {
210
+ if (this._cursor === 0)
211
+ return 0;
212
+ let pos = this._cursor - 1;
213
+ // Skip whitespace
214
+ while (pos > 0 && /\s/.test(this._value[pos])) {
215
+ pos--;
216
+ }
217
+ // Skip word characters
218
+ while (pos > 0 && !/\s/.test(this._value[pos - 1])) {
219
+ pos--;
220
+ }
221
+ return pos;
222
+ }
223
+ /** Find word boundary to the right of cursor */
224
+ findWordBoundaryRight() {
225
+ if (this._cursor >= this._value.length)
226
+ return this._value.length;
227
+ let pos = this._cursor;
228
+ // Skip current word
229
+ while (pos < this._value.length && !/\s/.test(this._value[pos])) {
230
+ pos++;
231
+ }
232
+ // Skip whitespace
233
+ while (pos < this._value.length && /\s/.test(this._value[pos])) {
234
+ pos++;
235
+ }
236
+ return pos;
237
+ }
238
+ }