@compilr-dev/cli 0.5.0 → 0.5.2

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