@compilr-dev/cli 0.5.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 (591) hide show
  1. package/README.md +236 -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 +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  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-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -25,12 +25,40 @@ export interface TodoItem {
25
25
  content: string;
26
26
  status: 'pending' | 'in_progress' | 'completed';
27
27
  activeForm?: string;
28
+ owner?: string;
29
+ blockedBy?: number[];
28
30
  }
31
+ import type { TokenBreakdown as _TokenBreakdown } from '../utils/token-types.js';
32
+ export type { TokenBreakdown } from '../utils/token-types.js';
33
+ export { emptyTokenBreakdown } from '../utils/token-types.js';
34
+ type TokenBreakdown = _TokenBreakdown;
29
35
  export interface SpinnerState {
30
36
  text: string;
31
37
  tool?: string;
32
38
  tokens: number;
39
+ inputTokens: number;
40
+ outputTokens: number;
33
41
  startTime: number;
42
+ breakdown?: TokenBreakdown;
43
+ }
44
+ export interface TurnMetrics {
45
+ turnNumber: number;
46
+ inputTokens: number;
47
+ outputTokens: number;
48
+ /** Thinking tokens (Gemini 2.5+ models) */
49
+ thinkingTokens: number;
50
+ /** Cache read tokens (Anthropic/Gemini) */
51
+ cacheReadTokens: number;
52
+ subagentInputTokens: number;
53
+ subagentOutputTokens: number;
54
+ toolCalls: number;
55
+ durationMs: number;
56
+ /** Debug payload info - char counts sent to provider (for debugging token discrepancies) */
57
+ debugPayload?: {
58
+ systemChars: number;
59
+ contentsChars: number;
60
+ toolsChars: number;
61
+ };
34
62
  }
35
63
  export interface CommandOption {
36
64
  command: string;
package/dist/ui/types.js CHANGED
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Shared types used across all UI modules.
5
5
  */
6
+ export { emptyTokenBreakdown } from '../utils/token-types.js';
6
7
  /**
7
8
  * Get display info for a mode
8
9
  */
@@ -0,0 +1,102 @@
1
+ /**
2
+ * VS Code Diff IPC
3
+ *
4
+ * File-based IPC protocol for communicating diff requests/responses between
5
+ * the CLI and the compilr-diff-companion VS Code extension.
6
+ *
7
+ * Directory structure:
8
+ * ~/.compilr-dev/diff-ipc/
9
+ * requests/ - CLI writes request JSON files
10
+ * responses/ - Extension writes response JSON files
11
+ *
12
+ * Temp files for original/modified content in os.tmpdir()/compilr-diff/
13
+ *
14
+ * Domain layer — imports from foundation layer only.
15
+ */
16
+ export interface VSDiffRequest {
17
+ id: string;
18
+ sessionId: string;
19
+ agentId: string;
20
+ sessionLabel: string;
21
+ originalPath: string;
22
+ modifiedPath: string;
23
+ targetPath: string;
24
+ toolName: string;
25
+ title: string;
26
+ timestamp: number;
27
+ }
28
+ export interface VSDiffResponse {
29
+ id: string;
30
+ accepted: boolean;
31
+ cancelled?: boolean;
32
+ timestamp: number;
33
+ }
34
+ /**
35
+ * Generate a unique diff request ID.
36
+ * Format: diff-{sessionPrefix}-{timestamp}
37
+ */
38
+ export declare function generateDiffRequestId(sessionPrefix: string): string;
39
+ /**
40
+ * Write original and modified content to temp files for VS Code's diff view.
41
+ * Returns { originalPath, modifiedPath }.
42
+ */
43
+ export declare function writeTempDiffFiles(requestId: string, originalContent: string, modifiedContent: string, targetPath: string): {
44
+ originalPath: string;
45
+ modifiedPath: string;
46
+ };
47
+ /**
48
+ * Send a diff request to the VS Code extension.
49
+ * Writes the request JSON to diff-ipc/requests/.
50
+ */
51
+ export declare function sendDiffRequest(request: VSDiffRequest): void;
52
+ /**
53
+ * Result of waitForDiffResponse — includes an abort function to stop the poll.
54
+ * Abort MUST be called when the terminal wins the Promise.race, BEFORE calling
55
+ * cancelDiffRequest, to prevent the CLI poll from eating the cancel response
56
+ * before the VS Code extension can read it.
57
+ */
58
+ export interface DiffResponseWaiter {
59
+ promise: Promise<VSDiffResponse | null>;
60
+ abort: () => void;
61
+ }
62
+ /**
63
+ * Poll for a diff response from the VS Code extension.
64
+ * Checks diff-ipc/responses/ at 200ms intervals for a matching response file.
65
+ * Returns { promise, abort } — call abort() to stop the poll early.
66
+ */
67
+ export declare function waitForDiffResponse(requestId: string, timeoutMs: number): DiffResponseWaiter;
68
+ /**
69
+ * Cancel a diff request.
70
+ * Writes a cancel response so the extension closes the diff tab.
71
+ * Temp file cleanup is deferred (2s) to give the extension time to
72
+ * read the cancel response and close the tab before the files disappear.
73
+ */
74
+ export declare function cancelDiffRequest(requestId: string): void;
75
+ /**
76
+ * Clean up all IPC files for a specific session prefix.
77
+ * Called when a terminal session unregisters.
78
+ */
79
+ export declare function cleanupSessionDiffs(sessionPrefix: string): void;
80
+ /**
81
+ * Clean up stale IPC files older than the given threshold.
82
+ * Called on CLI startup to prevent accumulation from crashed sessions.
83
+ */
84
+ export declare function cleanupStaleDiffs(maxAgeMs: number): void;
85
+ /**
86
+ * Open a VS Code diff tab for a tool permission request.
87
+ *
88
+ * Computes original/modified content from the tool input, writes temp files,
89
+ * and sends the IPC request for the compilr-diff-companion extension.
90
+ *
91
+ * Caller is responsible for checking isVSDiffAvailable() / vsDiffEnabled
92
+ * before calling this function.
93
+ *
94
+ * @returns The diff request ID (for use with waitForDiffResponse/cancelDiffRequest),
95
+ * or null if content could not be computed.
96
+ */
97
+ export declare function openVSCodeDiffForTool(options: {
98
+ toolName: string;
99
+ input: Record<string, unknown>;
100
+ agentId?: string;
101
+ sessionId?: string;
102
+ }): string | null;
@@ -0,0 +1,385 @@
1
+ /**
2
+ * VS Code Diff IPC
3
+ *
4
+ * File-based IPC protocol for communicating diff requests/responses between
5
+ * the CLI and the compilr-diff-companion VS Code extension.
6
+ *
7
+ * Directory structure:
8
+ * ~/.compilr-dev/diff-ipc/
9
+ * requests/ - CLI writes request JSON files
10
+ * responses/ - Extension writes response JSON files
11
+ *
12
+ * Temp files for original/modified content in os.tmpdir()/compilr-diff/
13
+ *
14
+ * Domain layer — imports from foundation layer only.
15
+ */
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import * as os from 'os';
19
+ import { getDataPath } from '../settings/paths.js';
20
+ import { computeModifiedContent } from './diff.js';
21
+ // =============================================================================
22
+ // Paths
23
+ // =============================================================================
24
+ function getIpcBasePath() {
25
+ return path.join(getDataPath(), 'diff-ipc');
26
+ }
27
+ function getRequestsDir() {
28
+ return path.join(getIpcBasePath(), 'requests');
29
+ }
30
+ function getResponsesDir() {
31
+ return path.join(getIpcBasePath(), 'responses');
32
+ }
33
+ function getTempDir() {
34
+ return path.join(os.tmpdir(), 'compilr-diff');
35
+ }
36
+ function ensureDir(dir) {
37
+ if (!fs.existsSync(dir)) {
38
+ fs.mkdirSync(dir, { recursive: true });
39
+ }
40
+ }
41
+ // =============================================================================
42
+ // Request ID Generation
43
+ // =============================================================================
44
+ /**
45
+ * Generate a unique diff request ID.
46
+ * Format: diff-{sessionPrefix}-{timestamp}
47
+ */
48
+ export function generateDiffRequestId(sessionPrefix) {
49
+ return `diff-${sessionPrefix}-${String(Date.now())}`;
50
+ }
51
+ // =============================================================================
52
+ // Temp File Management
53
+ // =============================================================================
54
+ /**
55
+ * Write original and modified content to temp files for VS Code's diff view.
56
+ * Returns { originalPath, modifiedPath }.
57
+ */
58
+ export function writeTempDiffFiles(requestId, originalContent, modifiedContent, targetPath) {
59
+ const tmpDir = getTempDir();
60
+ ensureDir(tmpDir);
61
+ const ext = path.extname(targetPath) || '.txt';
62
+ const basename = path.basename(targetPath, ext);
63
+ const originalPath = path.join(tmpDir, `${basename}.original-${requestId}${ext}`);
64
+ const modifiedPath = path.join(tmpDir, `${basename}.modified-${requestId}${ext}`);
65
+ fs.writeFileSync(originalPath, originalContent, 'utf-8');
66
+ fs.writeFileSync(modifiedPath, modifiedContent, 'utf-8');
67
+ return { originalPath, modifiedPath };
68
+ }
69
+ /**
70
+ * Clean up temp files for a specific request.
71
+ */
72
+ function cleanupTempFiles(requestId) {
73
+ const tmpDir = getTempDir();
74
+ if (!fs.existsSync(tmpDir))
75
+ return;
76
+ try {
77
+ const files = fs.readdirSync(tmpDir);
78
+ for (const file of files) {
79
+ if (file.includes(requestId)) {
80
+ try {
81
+ fs.unlinkSync(path.join(tmpDir, file));
82
+ }
83
+ catch {
84
+ // Best effort
85
+ }
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // Best effort
91
+ }
92
+ }
93
+ // =============================================================================
94
+ // IPC API
95
+ // =============================================================================
96
+ /**
97
+ * Send a diff request to the VS Code extension.
98
+ * Writes the request JSON to diff-ipc/requests/.
99
+ */
100
+ export function sendDiffRequest(request) {
101
+ const requestsDir = getRequestsDir();
102
+ ensureDir(requestsDir);
103
+ const filePath = path.join(requestsDir, `${request.id}.json`);
104
+ fs.writeFileSync(filePath, JSON.stringify(request, null, 2), 'utf-8');
105
+ }
106
+ /**
107
+ * Poll for a diff response from the VS Code extension.
108
+ * Checks diff-ipc/responses/ at 200ms intervals for a matching response file.
109
+ * Returns { promise, abort } — call abort() to stop the poll early.
110
+ */
111
+ export function waitForDiffResponse(requestId, timeoutMs) {
112
+ const responsesDir = getResponsesDir();
113
+ ensureDir(responsesDir);
114
+ const responsePath = path.join(responsesDir, `${requestId}.json`);
115
+ let aborted = false;
116
+ const promise = new Promise((resolve) => {
117
+ const startTime = Date.now();
118
+ const poll = setInterval(() => {
119
+ // If aborted (terminal won the race), stop immediately
120
+ if (aborted) {
121
+ clearInterval(poll);
122
+ resolve(null);
123
+ return;
124
+ }
125
+ // Check for timeout
126
+ if (Date.now() - startTime > timeoutMs) {
127
+ clearInterval(poll);
128
+ resolve(null);
129
+ return;
130
+ }
131
+ // Check for response file
132
+ try {
133
+ if (fs.existsSync(responsePath)) {
134
+ const content = fs.readFileSync(responsePath, 'utf-8');
135
+ const response = JSON.parse(content);
136
+ // Clean up response file (only if this is a real response from the extension,
137
+ // not a cancel response written by the CLI)
138
+ if (!response.cancelled) {
139
+ try {
140
+ fs.unlinkSync(responsePath);
141
+ }
142
+ catch {
143
+ // Best effort
144
+ }
145
+ }
146
+ clearInterval(poll);
147
+ resolve(response);
148
+ }
149
+ }
150
+ catch {
151
+ // File may be partially written, retry next tick
152
+ }
153
+ }, 200);
154
+ // Don't let the poll interval keep the process alive
155
+ poll.unref();
156
+ });
157
+ return {
158
+ promise,
159
+ abort: () => { aborted = true; },
160
+ };
161
+ }
162
+ /**
163
+ * Cancel a diff request.
164
+ * Writes a cancel response so the extension closes the diff tab.
165
+ * Temp file cleanup is deferred (2s) to give the extension time to
166
+ * read the cancel response and close the tab before the files disappear.
167
+ */
168
+ export function cancelDiffRequest(requestId) {
169
+ // Write a cancel response so the extension can close the tab
170
+ const responsesDir = getResponsesDir();
171
+ ensureDir(responsesDir);
172
+ const response = {
173
+ id: requestId,
174
+ accepted: false,
175
+ cancelled: true,
176
+ timestamp: Date.now(),
177
+ };
178
+ try {
179
+ fs.writeFileSync(path.join(responsesDir, `${requestId}.json`), JSON.stringify(response, null, 2), 'utf-8');
180
+ }
181
+ catch {
182
+ // Best effort
183
+ }
184
+ // Remove the request file (if it still exists)
185
+ try {
186
+ const requestPath = path.join(getRequestsDir(), `${requestId}.json`);
187
+ if (fs.existsSync(requestPath)) {
188
+ fs.unlinkSync(requestPath);
189
+ }
190
+ }
191
+ catch {
192
+ // Best effort
193
+ }
194
+ // Defer temp file cleanup — the extension needs the files to match/close the tab.
195
+ // The extension polls at 500ms; 2s gives it plenty of time.
196
+ const timer = setTimeout(() => { cleanupTempFiles(requestId); }, 2000);
197
+ timer.unref();
198
+ }
199
+ /**
200
+ * Clean up all IPC files for a specific session prefix.
201
+ * Called when a terminal session unregisters.
202
+ */
203
+ export function cleanupSessionDiffs(sessionPrefix) {
204
+ const pattern = `diff-${sessionPrefix}-`;
205
+ // Clean up request files
206
+ cleanupDirByPrefix(getRequestsDir(), pattern);
207
+ // Clean up response files
208
+ cleanupDirByPrefix(getResponsesDir(), pattern);
209
+ // Clean up temp files
210
+ const tmpDir = getTempDir();
211
+ if (fs.existsSync(tmpDir)) {
212
+ try {
213
+ const files = fs.readdirSync(tmpDir);
214
+ for (const file of files) {
215
+ if (file.includes(sessionPrefix)) {
216
+ try {
217
+ fs.unlinkSync(path.join(tmpDir, file));
218
+ }
219
+ catch {
220
+ // Best effort
221
+ }
222
+ }
223
+ }
224
+ }
225
+ catch {
226
+ // Best effort
227
+ }
228
+ }
229
+ }
230
+ /**
231
+ * Clean up stale IPC files older than the given threshold.
232
+ * Called on CLI startup to prevent accumulation from crashed sessions.
233
+ */
234
+ export function cleanupStaleDiffs(maxAgeMs) {
235
+ const now = Date.now();
236
+ cleanupStaleInDir(getRequestsDir(), now, maxAgeMs);
237
+ cleanupStaleInDir(getResponsesDir(), now, maxAgeMs);
238
+ // Also clean stale temp files
239
+ const tmpDir = getTempDir();
240
+ if (fs.existsSync(tmpDir)) {
241
+ try {
242
+ const files = fs.readdirSync(tmpDir);
243
+ for (const file of files) {
244
+ try {
245
+ const filePath = path.join(tmpDir, file);
246
+ const stat = fs.statSync(filePath);
247
+ if (now - stat.mtimeMs > maxAgeMs) {
248
+ fs.unlinkSync(filePath);
249
+ }
250
+ }
251
+ catch {
252
+ // Best effort
253
+ }
254
+ }
255
+ }
256
+ catch {
257
+ // Best effort
258
+ }
259
+ }
260
+ }
261
+ // =============================================================================
262
+ // Helpers
263
+ // =============================================================================
264
+ function cleanupDirByPrefix(dir, prefix) {
265
+ if (!fs.existsSync(dir))
266
+ return;
267
+ try {
268
+ const files = fs.readdirSync(dir);
269
+ for (const file of files) {
270
+ if (file.startsWith(prefix)) {
271
+ try {
272
+ fs.unlinkSync(path.join(dir, file));
273
+ }
274
+ catch {
275
+ // Best effort
276
+ }
277
+ }
278
+ }
279
+ }
280
+ catch {
281
+ // Best effort
282
+ }
283
+ }
284
+ function cleanupStaleInDir(dir, now, maxAgeMs) {
285
+ if (!fs.existsSync(dir))
286
+ return;
287
+ try {
288
+ const files = fs.readdirSync(dir);
289
+ for (const file of files) {
290
+ try {
291
+ const filePath = path.join(dir, file);
292
+ const stat = fs.statSync(filePath);
293
+ if (now - stat.mtimeMs > maxAgeMs) {
294
+ fs.unlinkSync(filePath);
295
+ }
296
+ }
297
+ catch {
298
+ // Best effort
299
+ }
300
+ }
301
+ }
302
+ catch {
303
+ // Best effort
304
+ }
305
+ }
306
+ function extractStringParam(input, ...keys) {
307
+ for (const key of keys) {
308
+ if (typeof input[key] === 'string')
309
+ return input[key];
310
+ }
311
+ return '';
312
+ }
313
+ // =============================================================================
314
+ // High-Level API
315
+ // =============================================================================
316
+ /**
317
+ * Open a VS Code diff tab for a tool permission request.
318
+ *
319
+ * Computes original/modified content from the tool input, writes temp files,
320
+ * and sends the IPC request for the compilr-diff-companion extension.
321
+ *
322
+ * Caller is responsible for checking isVSDiffAvailable() / vsDiffEnabled
323
+ * before calling this function.
324
+ *
325
+ * @returns The diff request ID (for use with waitForDiffResponse/cancelDiffRequest),
326
+ * or null if content could not be computed.
327
+ */
328
+ export function openVSCodeDiffForTool(options) {
329
+ const { toolName, input, agentId = 'default', sessionId = 'pending' } = options;
330
+ let originalContent = '';
331
+ let modifiedContent = '';
332
+ let targetPath = '';
333
+ if (toolName === 'edit') {
334
+ const filePath = extractStringParam(input, 'filePath', 'file_path', 'path');
335
+ const oldText = extractStringParam(input, 'oldString', 'old_string', 'old_text');
336
+ const newText = extractStringParam(input, 'newString', 'new_string', 'new_text');
337
+ const replaceAll = Boolean(input.replaceAll ?? input.replace_all);
338
+ if (!filePath || !oldText)
339
+ return null;
340
+ try {
341
+ originalContent = fs.readFileSync(filePath, 'utf-8');
342
+ }
343
+ catch {
344
+ originalContent = '';
345
+ }
346
+ modifiedContent = computeModifiedContent(filePath, oldText, newText, replaceAll) ?? originalContent;
347
+ targetPath = filePath;
348
+ }
349
+ else if (toolName === 'write_file' || toolName === 'write') {
350
+ const writePath = extractStringParam(input, 'path', 'file_path', 'filePath');
351
+ const writeContent = extractStringParam(input, 'content');
352
+ if (!writePath || !writeContent)
353
+ return null;
354
+ try {
355
+ originalContent = fs.readFileSync(writePath, 'utf-8');
356
+ }
357
+ catch {
358
+ originalContent = '';
359
+ }
360
+ modifiedContent = writeContent;
361
+ targetPath = writePath;
362
+ }
363
+ else {
364
+ return null;
365
+ }
366
+ if (!targetPath || !modifiedContent)
367
+ return null;
368
+ const requestId = generateDiffRequestId(sessionId);
369
+ const { originalPath, modifiedPath } = writeTempDiffFiles(requestId, originalContent, modifiedContent, targetPath);
370
+ const fileName = targetPath.split('/').pop() ?? 'unknown';
371
+ const vsDiffReq = {
372
+ id: requestId,
373
+ sessionId,
374
+ agentId,
375
+ sessionLabel: '',
376
+ originalPath,
377
+ modifiedPath,
378
+ targetPath,
379
+ toolName,
380
+ title: `Review: ${fileName}`,
381
+ timestamp: Date.now(),
382
+ };
383
+ sendDiffRequest(vsDiffReq);
384
+ return requestId;
385
+ }
@@ -6,11 +6,16 @@
6
6
  * - Machine-specific identifiers (hostname, username)
7
7
  * - A random "mk" value stored in settings.json
8
8
  */
9
- export type ProviderKey = 'anthropic' | 'openai' | 'google' | 'ollama';
9
+ export type ProviderKey = 'anthropic' | 'openai' | 'google' | 'ollama' | 'together' | 'groq' | 'fireworks' | 'perplexity' | 'openrouter';
10
10
  export interface StoredCredentials {
11
11
  anthropic?: string;
12
12
  openai?: string;
13
13
  google?: string;
14
+ together?: string;
15
+ groq?: string;
16
+ fireworks?: string;
17
+ perplexity?: string;
18
+ openrouter?: string;
14
19
  }
15
20
  /**
16
21
  * Get API key for a provider
@@ -39,17 +44,31 @@ export declare function getMaskedKey(provider: ProviderKey): string | null;
39
44
  */
40
45
  export declare function isKeyFromEnv(provider: ProviderKey): boolean;
41
46
  /**
42
- * Get all provider statuses
47
+ * Provider category for grouping in UI
48
+ */
49
+ export type ProviderCategory = 'primary' | 'local' | 'others';
50
+ /**
51
+ * Provider status with category information
43
52
  */
44
- export declare function getAllProviderStatuses(): Array<{
53
+ export interface ProviderStatus {
45
54
  provider: ProviderKey;
46
55
  name: string;
47
56
  hasKey: boolean;
48
57
  masked: string | null;
49
58
  fromEnv: boolean;
50
59
  keyUrl: string;
51
- }>;
60
+ category: ProviderCategory;
61
+ endpoint?: string;
62
+ }
63
+ /**
64
+ * Get all provider statuses
65
+ */
66
+ export declare function getAllProviderStatuses(): ProviderStatus[];
67
+ /**
68
+ * Get provider statuses filtered by category
69
+ */
70
+ export declare function getProvidersByCategory(category: ProviderCategory): ProviderStatus[];
52
71
  /**
53
72
  * Map provider type from settings to credential provider key
54
73
  */
55
- export declare function settingsProviderToCredentialKey(provider: 'auto' | 'claude' | 'openai' | 'gemini' | 'ollama'): ProviderKey;
74
+ export declare function settingsProviderToCredentialKey(provider: 'auto' | 'claude' | 'openai' | 'gemini' | 'ollama' | 'together' | 'groq' | 'fireworks' | 'perplexity' | 'openrouter' | 'custom'): ProviderKey;