@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,51 @@
1
+ /**
2
+ * Pending Requests Overlay V2
3
+ *
4
+ * Modal overlay for viewing and responding to pending requests from background agents.
5
+ * Users can approve, deny, or view details of each request.
6
+ *
7
+ * Phase 3b: Background Agents
8
+ */
9
+ import { BaseOverlayV2 } from '../../base/index.js';
10
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
11
+ import { type PendingRequest } from '../../../multi-agent/index.js';
12
+ export type PendingOverlayResult = {
13
+ type: 'closed';
14
+ } | {
15
+ type: 'respond';
16
+ request: PendingRequest;
17
+ };
18
+ interface PendingOverlayState {
19
+ /** Currently selected request index */
20
+ selectedIndex: number;
21
+ /** Requests snapshot at render time */
22
+ requests: PendingRequest[];
23
+ /** Whether we're showing a diff detail view */
24
+ showingDiff: boolean;
25
+ /** Scroll offset in diff view */
26
+ diffScrollOffset: number;
27
+ /** Pre-rendered diff lines (colored) */
28
+ diffLines: string[];
29
+ /** Which request the diff is for */
30
+ diffRequestId: string;
31
+ }
32
+ export declare class PendingOverlayV2 extends BaseOverlayV2<PendingOverlayState, PendingOverlayResult> {
33
+ readonly type: "inline";
34
+ readonly id = "pending-overlay-v2";
35
+ /** Active VS Code diff watchers, keyed by pending request ID */
36
+ private readonly vsDiffWatchers;
37
+ constructor();
38
+ protected renderContent(context: RenderContext): string[];
39
+ private renderListView;
40
+ private renderDiffView;
41
+ handleKey(key: KeyEvent): OverlayAction<PendingOverlayResult>;
42
+ private handleListKey;
43
+ /**
44
+ * Cancel an active VS Code diff for a pending request (if any).
45
+ * Called when the request is resolved from the terminal.
46
+ */
47
+ private cancelVSDiffForRequest;
48
+ private handleDiffKey;
49
+ getCloseSummary(result: PendingOverlayResult): string | null;
50
+ }
51
+ export {};
@@ -0,0 +1,445 @@
1
+ /**
2
+ * Pending Requests Overlay V2
3
+ *
4
+ * Modal overlay for viewing and responding to pending requests from background agents.
5
+ * Users can approve, deny, or view details of each request.
6
+ *
7
+ * Phase 3b: Background Agents
8
+ */
9
+ import chalk from 'chalk';
10
+ import { getStyles } from '../../../themes/index.js';
11
+ import { BaseOverlayV2, truncate } from '../../base/index.js';
12
+ import * as terminal from '../../terminal.js';
13
+ import * as diff from '../../diff.js';
14
+ import { isVSDiffAvailable } from '../../../utils/vscode-detect.js';
15
+ import { openVSCodeDiffForTool, cancelDiffRequest, waitForDiffResponse, } from '../../vscode-diff-ipc.js';
16
+ import { getPendingRequestsManager, } from '../../../multi-agent/index.js';
17
+ // Fixed height for diff view content area
18
+ const DIFF_VIEW_CONTENT_LINES = 15;
19
+ // Tool names that support diff viewing
20
+ const DIFFABLE_TOOLS = new Set(['edit', 'write_file', 'write']);
21
+ // =============================================================================
22
+ // Helpers
23
+ // =============================================================================
24
+ /**
25
+ * Check if a pending request has a diffable tool
26
+ */
27
+ function isDiffableRequest(req) {
28
+ if (req.type !== 'permission' || !req.context)
29
+ return false;
30
+ const ctx = req.context;
31
+ return typeof ctx.toolName === 'string' && DIFFABLE_TOOLS.has(ctx.toolName);
32
+ }
33
+ /**
34
+ * Generate diff lines for a pending request.
35
+ * Returns an array of formatted lines, or null if diff can't be generated.
36
+ */
37
+ function generateDiffForRequest(req) {
38
+ if (!req.context)
39
+ return null;
40
+ const ctx = req.context;
41
+ if (!ctx.toolName || !ctx.input)
42
+ return null;
43
+ const s = getStyles();
44
+ const toolName = ctx.toolName;
45
+ const input = ctx.input;
46
+ if (toolName === 'edit') {
47
+ const filePath = (input.filePath ?? input.file_path ?? input.path ?? '');
48
+ const oldText = (input.oldString ?? input.old_string ?? input.old_text ?? '');
49
+ const newText = (input.newString ?? input.new_string ?? input.new_text ?? '');
50
+ const replaceAll = Boolean(input.replaceAll ?? input.replace_all);
51
+ if (!filePath || !oldText)
52
+ return null;
53
+ const editDiff = diff.generateEditDiff(filePath, oldText, newText, replaceAll);
54
+ if (!editDiff) {
55
+ // Fallback: show raw old/new text
56
+ const lines = [];
57
+ lines.push(s.primary(`File: ${filePath}`));
58
+ lines.push('');
59
+ lines.push(s.muted('Could not read file to generate diff.'));
60
+ lines.push('');
61
+ lines.push(s.muted('Old text:'));
62
+ for (const line of oldText.split('\n').slice(0, 20)) {
63
+ lines.push(' ' + line);
64
+ }
65
+ lines.push('');
66
+ lines.push(s.muted('New text:'));
67
+ for (const line of newText.split('\n').slice(0, 20)) {
68
+ lines.push(' ' + line);
69
+ }
70
+ return lines;
71
+ }
72
+ const header = diff.formatDiffHeader(filePath, editDiff.additions, editDiff.removals);
73
+ return [header, '', ...editDiff.lines];
74
+ }
75
+ if (toolName === 'write_file' || toolName === 'write') {
76
+ const filePath = (input.path ?? input.file_path ?? input.filePath ?? '');
77
+ const content = (input.content ?? '');
78
+ if (!filePath || !content)
79
+ return null;
80
+ const writeDiff = diff.generateWriteDiff(filePath, content, true);
81
+ const header = diff.formatWriteHeader(filePath, writeDiff.additions, true);
82
+ return [header, '', ...writeDiff.lines];
83
+ }
84
+ return null;
85
+ }
86
+ // =============================================================================
87
+ // Pending Overlay V2 Class
88
+ // =============================================================================
89
+ export class PendingOverlayV2 extends BaseOverlayV2 {
90
+ type = 'inline';
91
+ id = 'pending-overlay-v2';
92
+ /** Active VS Code diff watchers, keyed by pending request ID */
93
+ vsDiffWatchers = new Map();
94
+ constructor() {
95
+ const manager = getPendingRequestsManager();
96
+ const requests = manager.getAll();
97
+ super({
98
+ selectedIndex: 0,
99
+ requests,
100
+ showingDiff: false,
101
+ diffScrollOffset: 0,
102
+ diffLines: [],
103
+ diffRequestId: '',
104
+ });
105
+ // Set minimum height for stable rendering
106
+ this.minHeight = 10;
107
+ }
108
+ renderContent(context) {
109
+ if (this.state.showingDiff) {
110
+ return this.renderDiffView(context);
111
+ }
112
+ return this.renderListView(context);
113
+ }
114
+ renderListView(context) {
115
+ const s = context.styles;
116
+ const lines = [];
117
+ const cols = terminal.getTerminalWidth();
118
+ const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
119
+ // Refresh requests each render
120
+ const manager = getPendingRequestsManager();
121
+ this.state.requests = manager.getAll();
122
+ // Header
123
+ lines.push(border);
124
+ lines.push(' ' + chalk.bold('Pending Requests') + s.muted(` (${String(this.state.requests.length)} total)`));
125
+ lines.push(border);
126
+ lines.push('');
127
+ if (this.state.requests.length === 0) {
128
+ lines.push(s.muted(' No pending requests from background agents.'));
129
+ lines.push('');
130
+ }
131
+ else {
132
+ // Render each request
133
+ for (let i = 0; i < this.state.requests.length; i++) {
134
+ const req = this.state.requests[i];
135
+ const isSelected = i === this.state.selectedIndex;
136
+ const prefix = isSelected ? ' ❯ ' : ' ';
137
+ // Request header: [mascot] agent: prompt
138
+ const header = `${req.mascot} $${req.agentId}: ${req.prompt}`;
139
+ const maxHeaderLen = cols - 6;
140
+ const truncHeader = truncate(header, maxHeaderLen);
141
+ if (isSelected) {
142
+ lines.push(s.primary(prefix + `${String(i + 1)}. ${truncHeader}`));
143
+ }
144
+ else {
145
+ lines.push(s.muted(prefix + `${String(i + 1)}. ${truncHeader}`));
146
+ }
147
+ // Type indicator
148
+ const typeLabel = req.type === 'permission' ? 'Permission request' : 'Question';
149
+ lines.push(s.muted(` Type: ${typeLabel}`));
150
+ // Actions line (only for selected)
151
+ if (isSelected) {
152
+ if (req.type === 'question') {
153
+ lines.push(s.info(' [r]espond · [d]eny/skip'));
154
+ }
155
+ else if (isDiffableRequest(req)) {
156
+ lines.push(s.info(' [a]pprove [d]eny [v] diff'));
157
+ }
158
+ else {
159
+ lines.push(s.info(' [a]pprove [d]eny'));
160
+ }
161
+ }
162
+ else {
163
+ lines.push('');
164
+ }
165
+ lines.push('');
166
+ }
167
+ }
168
+ // Footer
169
+ lines.push(border);
170
+ if (this.state.requests.length > 0) {
171
+ // Check if selected request is a question
172
+ const selectedReq = this.state.requests[this.state.selectedIndex];
173
+ if (selectedReq && selectedReq.type === 'question') {
174
+ lines.push(s.muted(' ↑↓ Navigate · r/Enter Respond · d Deny/Skip · Esc Close'));
175
+ }
176
+ else if (selectedReq && isDiffableRequest(selectedReq)) {
177
+ lines.push(s.muted(' ↑↓ Navigate · a Approve · d Deny · v View diff · Esc Close'));
178
+ }
179
+ else {
180
+ lines.push(s.muted(' ↑↓ Navigate · a Approve · d Deny · Esc Close'));
181
+ }
182
+ }
183
+ else {
184
+ lines.push(s.muted(' Esc Close'));
185
+ }
186
+ return lines;
187
+ }
188
+ renderDiffView(context) {
189
+ const s = context.styles;
190
+ const cols = terminal.getTerminalWidth();
191
+ const lines = [];
192
+ const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
193
+ // Refresh requests each render
194
+ const manager = getPendingRequestsManager();
195
+ this.state.requests = manager.getAll();
196
+ // Find the request this diff is for (may have been resolved externally via VS Code)
197
+ const req = this.state.requests.find(r => r.id === this.state.diffRequestId);
198
+ if (!req) {
199
+ // Request was resolved externally — return to list view
200
+ this.state.showingDiff = false;
201
+ return this.renderListView(context);
202
+ }
203
+ const agentLabel = `$${req.agentId}`;
204
+ const ctx = req.context;
205
+ const filePath = ctx?.input
206
+ ? (ctx.input.filePath ?? ctx.input.file_path ?? ctx.input.path ?? '')
207
+ : '';
208
+ const fileName = filePath.split('/').pop() || filePath;
209
+ // Header
210
+ lines.push(border);
211
+ lines.push(' ' + chalk.bold('Diff: ') + s.primary(fileName) + s.muted(agentLabel ? ` (${agentLabel})` : ''));
212
+ lines.push(border);
213
+ lines.push('');
214
+ // Content with scroll
215
+ const contentLines = this.state.diffLines;
216
+ const visibleLines = DIFF_VIEW_CONTENT_LINES;
217
+ const endLine = Math.min(this.state.diffScrollOffset + visibleLines, contentLines.length);
218
+ for (let i = this.state.diffScrollOffset; i < endLine; i++) {
219
+ const line = contentLines[i];
220
+ const safeLine = truncate(line, cols - 2);
221
+ lines.push(' ' + safeLine);
222
+ }
223
+ // Pad to fixed height
224
+ const renderedLines = endLine - this.state.diffScrollOffset;
225
+ for (let i = renderedLines; i < DIFF_VIEW_CONTENT_LINES; i++) {
226
+ lines.push('');
227
+ }
228
+ // Footer with scroll indicator
229
+ lines.push('');
230
+ const scrollInfo = contentLines.length > visibleLines
231
+ ? s.muted(` [${String(this.state.diffScrollOffset + 1)}-${String(endLine)}/${String(contentLines.length)}]`)
232
+ : '';
233
+ lines.push(border);
234
+ lines.push(s.muted(' ↑↓/PgUp/PgDn Scroll · a Approve · d Deny · Esc Back') + scrollInfo);
235
+ return lines;
236
+ }
237
+ handleKey(key) {
238
+ if (this.state.showingDiff) {
239
+ return this.handleDiffKey(key);
240
+ }
241
+ return this.handleListKey(key);
242
+ }
243
+ handleListKey(key) {
244
+ // Escape or Ctrl+C = close
245
+ if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
246
+ // Cancel all active VS Code diff watchers
247
+ for (const [, watcher] of this.vsDiffWatchers) {
248
+ watcher.abort();
249
+ cancelDiffRequest(watcher.diffReqId);
250
+ }
251
+ this.vsDiffWatchers.clear();
252
+ return this.close({ type: 'closed' });
253
+ }
254
+ // No requests - just allow closing
255
+ if (this.state.requests.length === 0) {
256
+ return this.rerender();
257
+ }
258
+ const keyStr = key.char?.toLowerCase() ?? '';
259
+ // Arrow navigation
260
+ if (key.name === 'up') {
261
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
262
+ return this.rerender();
263
+ }
264
+ if (key.name === 'down') {
265
+ this.state.selectedIndex = Math.min(this.state.requests.length - 1, this.state.selectedIndex + 1);
266
+ return this.rerender();
267
+ }
268
+ // View diff (for permission-type with diffable tool)
269
+ if (keyStr === 'v') {
270
+ const req = this.state.requests[this.state.selectedIndex];
271
+ if (req && isDiffableRequest(req)) {
272
+ // Open VS Code diff if available
273
+ if (isVSDiffAvailable() && !this.vsDiffWatchers.has(req.id)) {
274
+ const ctx = req.context;
275
+ const diffReqId = openVSCodeDiffForTool({
276
+ toolName: ctx.toolName,
277
+ input: ctx.input,
278
+ agentId: req.agentId,
279
+ });
280
+ if (diffReqId) {
281
+ // Start background watcher for VS Code approve/deny response
282
+ const { promise, abort } = waitForDiffResponse(diffReqId, 120_000);
283
+ this.vsDiffWatchers.set(req.id, { abort, diffReqId });
284
+ promise.then((response) => {
285
+ if (response && !response.cancelled) {
286
+ const manager = getPendingRequestsManager();
287
+ const pending = manager.getAll().find(r => r.id === req.id);
288
+ if (pending) {
289
+ manager.respond(req.id, { approved: response.accepted });
290
+ // Trigger overlay re-render to reflect the change
291
+ this.requestRender();
292
+ }
293
+ }
294
+ this.vsDiffWatchers.delete(req.id);
295
+ }).catch(() => {
296
+ this.vsDiffWatchers.delete(req.id);
297
+ });
298
+ }
299
+ }
300
+ // Also show terminal diff view (for terminal-based approve/deny)
301
+ const terminalDiffLines = generateDiffForRequest(req);
302
+ if (terminalDiffLines) {
303
+ this.state.showingDiff = true;
304
+ this.state.diffScrollOffset = 0;
305
+ this.state.diffLines = terminalDiffLines;
306
+ this.state.diffRequestId = req.id;
307
+ return this.rerender();
308
+ }
309
+ }
310
+ return this.rerender();
311
+ }
312
+ // Approve selected request (for permission-type only)
313
+ if (keyStr === 'a') {
314
+ const req = this.state.requests[this.state.selectedIndex];
315
+ if (req && req.type === 'permission') {
316
+ this.cancelVSDiffForRequest(req.id);
317
+ const manager = getPendingRequestsManager();
318
+ manager.respond(req.id, { approved: true });
319
+ // Auto-close if no requests remain
320
+ if (manager.getCount() === 0) {
321
+ return this.close({ type: 'closed' });
322
+ }
323
+ // Update selection if needed
324
+ if (this.state.selectedIndex >= this.state.requests.length - 1) {
325
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
326
+ }
327
+ }
328
+ return this.rerender();
329
+ }
330
+ // Deny selected request
331
+ if (keyStr === 'd') {
332
+ const req = this.state.requests[this.state.selectedIndex];
333
+ if (req) {
334
+ this.cancelVSDiffForRequest(req.id);
335
+ const manager = getPendingRequestsManager();
336
+ manager.respond(req.id, { approved: false });
337
+ // Auto-close if no requests remain
338
+ if (manager.getCount() === 0) {
339
+ return this.close({ type: 'closed' });
340
+ }
341
+ // Update selection if needed
342
+ if (this.state.selectedIndex >= this.state.requests.length - 1) {
343
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
344
+ }
345
+ }
346
+ return this.rerender();
347
+ }
348
+ // Respond to question with standard overlay (r or Enter)
349
+ if (keyStr === 'r' || key.name === 'return') {
350
+ const req = this.state.requests[this.state.selectedIndex];
351
+ if (req && req.type === 'question') {
352
+ // Close overlay and return the request to show standard overlay
353
+ return this.close({ type: 'respond', request: req });
354
+ }
355
+ }
356
+ return this.rerender();
357
+ }
358
+ /**
359
+ * Cancel an active VS Code diff for a pending request (if any).
360
+ * Called when the request is resolved from the terminal.
361
+ */
362
+ cancelVSDiffForRequest(pendingReqId) {
363
+ const watcher = this.vsDiffWatchers.get(pendingReqId);
364
+ if (watcher) {
365
+ watcher.abort();
366
+ cancelDiffRequest(watcher.diffReqId);
367
+ this.vsDiffWatchers.delete(pendingReqId);
368
+ }
369
+ }
370
+ handleDiffKey(key) {
371
+ const keyStr = key.char?.toLowerCase() ?? '';
372
+ // Escape or q = go back to list view
373
+ if (key.name === 'escape' || keyStr === 'q') {
374
+ this.state.showingDiff = false;
375
+ return this.rerender();
376
+ }
377
+ // Approve from diff view
378
+ if (keyStr === 'a') {
379
+ const req = this.state.requests.find(r => r.id === this.state.diffRequestId);
380
+ if (req && req.type === 'permission') {
381
+ this.cancelVSDiffForRequest(req.id);
382
+ const manager = getPendingRequestsManager();
383
+ manager.respond(req.id, { approved: true });
384
+ this.state.showingDiff = false;
385
+ // Auto-close if no requests remain
386
+ if (manager.getCount() === 0) {
387
+ return this.close({ type: 'closed' });
388
+ }
389
+ // Update selection if needed
390
+ if (this.state.selectedIndex >= this.state.requests.length - 1) {
391
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
392
+ }
393
+ }
394
+ return this.rerender();
395
+ }
396
+ // Deny from diff view
397
+ if (keyStr === 'd') {
398
+ const req = this.state.requests.find(r => r.id === this.state.diffRequestId);
399
+ if (req) {
400
+ this.cancelVSDiffForRequest(req.id);
401
+ const manager = getPendingRequestsManager();
402
+ manager.respond(req.id, { approved: false });
403
+ this.state.showingDiff = false;
404
+ // Auto-close if no requests remain
405
+ if (manager.getCount() === 0) {
406
+ return this.close({ type: 'closed' });
407
+ }
408
+ // Update selection if needed
409
+ if (this.state.selectedIndex >= this.state.requests.length - 1) {
410
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
411
+ }
412
+ }
413
+ return this.rerender();
414
+ }
415
+ // Scroll
416
+ const visibleLines = DIFF_VIEW_CONTENT_LINES;
417
+ const maxOffset = Math.max(0, this.state.diffLines.length - visibleLines);
418
+ if (key.name === 'up') {
419
+ this.state.diffScrollOffset = Math.max(0, this.state.diffScrollOffset - 1);
420
+ }
421
+ else if (key.name === 'pageup') {
422
+ this.state.diffScrollOffset = Math.max(0, this.state.diffScrollOffset - visibleLines);
423
+ }
424
+ else if (key.name === 'down') {
425
+ this.state.diffScrollOffset = Math.min(maxOffset, this.state.diffScrollOffset + 1);
426
+ }
427
+ else if (key.name === 'pagedown') {
428
+ this.state.diffScrollOffset = Math.min(maxOffset, this.state.diffScrollOffset + visibleLines);
429
+ }
430
+ return this.rerender();
431
+ }
432
+ getCloseSummary(result) {
433
+ // Don't show summary if we're responding to a question (will show overlay)
434
+ if (result.type === 'respond') {
435
+ return null;
436
+ }
437
+ const s = getStyles();
438
+ const manager = getPendingRequestsManager();
439
+ const remaining = manager.getCount();
440
+ if (remaining > 0) {
441
+ return s.muted(`Pending requests: ${String(remaining)} remaining`);
442
+ }
443
+ return s.success('All pending requests resolved.');
444
+ }
445
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Permission Overlay V2
3
+ *
4
+ * Modal overlay for tool permission requests.
5
+ * Uses BaseOverlayV2 for the new TerminalUI-based REPL.
6
+ */
7
+ import { BaseOverlayV2 } from '../../base/index.js';
8
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
9
+ export type PermissionResult = 'allow' | 'deny' | 'allow-always';
10
+ export interface PermissionOverlayV2Options {
11
+ toolName: string;
12
+ args: Record<string, unknown>;
13
+ description?: string;
14
+ /** Pre-rendered diff lines (for edit tool) */
15
+ diffLines?: string[];
16
+ }
17
+ interface PermissionState {
18
+ selectedIndex: number;
19
+ showingDetail: boolean;
20
+ detailScrollOffset: number;
21
+ detailContentLines: string[];
22
+ }
23
+ export declare class PermissionOverlayV2 extends BaseOverlayV2<PermissionState, PermissionResult> {
24
+ readonly type: "inline";
25
+ readonly id = "permission-overlay-v2";
26
+ private readonly options;
27
+ constructor(options: PermissionOverlayV2Options);
28
+ protected renderContent(context: RenderContext): string[];
29
+ private renderMainView;
30
+ private renderDetailView;
31
+ handleKey(key: KeyEvent): OverlayAction<PermissionResult>;
32
+ private handleMainKey;
33
+ private handleDetailKey;
34
+ getCloseSummary(result: PermissionResult): string | null;
35
+ }
36
+ export {};