@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,56 @@
1
+ /**
2
+ * Per-turn token and tool call tracking.
3
+ *
4
+ * Extracted from TerminalUI — a standalone data container with zero
5
+ * coupling to other subsystems.
6
+ */
7
+ export interface TurnMetricsSnapshot {
8
+ inputTokens: number;
9
+ outputTokens: number;
10
+ thinkingTokens: number;
11
+ cacheReadTokens: number;
12
+ durationMs: number;
13
+ toolCalls: number;
14
+ apiCalls: number;
15
+ debugPayload?: {
16
+ systemChars: number;
17
+ contentsChars: number;
18
+ toolsChars: number;
19
+ };
20
+ }
21
+ export declare class TurnMetrics {
22
+ inputTokens: number;
23
+ outputTokens: number;
24
+ thinkingTokens: number;
25
+ cacheReadTokens: number;
26
+ debugPayload?: {
27
+ systemChars: number;
28
+ contentsChars: number;
29
+ toolsChars: number;
30
+ };
31
+ startTime: number;
32
+ toolCalls: number;
33
+ apiCalls: number;
34
+ isThinking: boolean;
35
+ /**
36
+ * Add input/output tokens for live display.
37
+ * @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
38
+ * @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
39
+ * @param debugPayload - Optional debug payload sizes (char counts)
40
+ */
41
+ addTokens(inputTokens: number, outputTokens: number, thinkingTokens?: number, cacheReadTokens?: number, debugPayload?: {
42
+ systemChars: number;
43
+ contentsChars: number;
44
+ toolsChars: number;
45
+ }): void;
46
+ incrementToolCalls(): void;
47
+ incrementApiCalls(): void;
48
+ /**
49
+ * Reset all metrics (call when agent starts a new turn).
50
+ */
51
+ reset(): void;
52
+ /**
53
+ * Get a snapshot of current metrics.
54
+ */
55
+ getSnapshot(): TurnMetricsSnapshot;
56
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Per-turn token and tool call tracking.
3
+ *
4
+ * Extracted from TerminalUI — a standalone data container with zero
5
+ * coupling to other subsystems.
6
+ */
7
+ export class TurnMetrics {
8
+ inputTokens = 0;
9
+ outputTokens = 0;
10
+ thinkingTokens = 0;
11
+ cacheReadTokens = 0;
12
+ debugPayload;
13
+ startTime = 0;
14
+ toolCalls = 0;
15
+ apiCalls = 0;
16
+ isThinking = false;
17
+ /**
18
+ * Add input/output tokens for live display.
19
+ * @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
20
+ * @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
21
+ * @param debugPayload - Optional debug payload sizes (char counts)
22
+ */
23
+ addTokens(inputTokens, outputTokens, thinkingTokens, cacheReadTokens, debugPayload) {
24
+ this.inputTokens += inputTokens;
25
+ this.outputTokens += outputTokens;
26
+ if (thinkingTokens) {
27
+ this.thinkingTokens += thinkingTokens;
28
+ }
29
+ if (cacheReadTokens) {
30
+ this.cacheReadTokens += cacheReadTokens;
31
+ }
32
+ if (debugPayload) {
33
+ if (!this.debugPayload) {
34
+ this.debugPayload = { systemChars: 0, contentsChars: 0, toolsChars: 0 };
35
+ }
36
+ this.debugPayload.systemChars += debugPayload.systemChars;
37
+ this.debugPayload.contentsChars += debugPayload.contentsChars;
38
+ this.debugPayload.toolsChars += debugPayload.toolsChars;
39
+ }
40
+ }
41
+ incrementToolCalls() {
42
+ this.toolCalls++;
43
+ }
44
+ incrementApiCalls() {
45
+ this.apiCalls++;
46
+ }
47
+ /**
48
+ * Reset all metrics (call when agent starts a new turn).
49
+ */
50
+ reset() {
51
+ this.inputTokens = 0;
52
+ this.outputTokens = 0;
53
+ this.thinkingTokens = 0;
54
+ this.cacheReadTokens = 0;
55
+ this.debugPayload = undefined;
56
+ this.startTime = Date.now();
57
+ this.toolCalls = 0;
58
+ this.apiCalls = 0;
59
+ }
60
+ /**
61
+ * Get a snapshot of current metrics.
62
+ */
63
+ getSnapshot() {
64
+ return {
65
+ inputTokens: this.inputTokens,
66
+ outputTokens: this.outputTokens,
67
+ thinkingTokens: this.thinkingTokens,
68
+ cacheReadTokens: this.cacheReadTokens,
69
+ durationMs: this.startTime > 0 ? Date.now() - this.startTime : 0,
70
+ toolCalls: this.toolCalls,
71
+ apiCalls: this.apiCalls,
72
+ debugPayload: this.debugPayload,
73
+ };
74
+ }
75
+ }
@@ -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
+ }