@bastani/atomic 0.9.21-alpha.1 → 0.9.21-alpha.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 (514) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/CHANGELOG.md +11 -0
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/subagents/src/extension/index.bundle.mjs +292 -60
  7. package/dist/builtin/web-access/package.json +1 -1
  8. package/dist/builtin/workflows/CHANGELOG.md +11 -0
  9. package/dist/builtin/workflows/builtin/adversarial-verification.js +3 -3
  10. package/dist/builtin/workflows/builtin/{chunk-cw86srkf.js → chunk-632fxeb8.js} +1 -1
  11. package/dist/builtin/workflows/builtin/{chunk-w18kbz63.js → chunk-94f8zfz1.js} +1 -1
  12. package/dist/builtin/workflows/builtin/{chunk-kspvwc24.js → chunk-9cm2ckq2.js} +1 -1
  13. package/dist/builtin/workflows/builtin/{chunk-jaj27rqc.js → chunk-a1ar035d.js} +1 -1
  14. package/dist/builtin/workflows/builtin/{chunk-wh19f5ee.js → chunk-d3xhj946.js} +5 -4
  15. package/dist/builtin/workflows/builtin/{chunk-crw7q5g1.js → chunk-gyjck9z8.js} +1 -1
  16. package/dist/builtin/workflows/builtin/{chunk-maqv731g.js → chunk-hj8mh07f.js} +10 -6
  17. package/dist/builtin/workflows/builtin/{chunk-0nrgfbag.js → chunk-kb7s3gx2.js} +1 -1
  18. package/dist/builtin/workflows/builtin/{chunk-73c5tayt.js → chunk-kgn5wz1c.js} +19 -1
  19. package/dist/builtin/workflows/builtin/{chunk-2hak3b7g.js → chunk-nkj4qhj6.js} +1 -1
  20. package/dist/builtin/workflows/builtin/{chunk-bzdvx2xr.js → chunk-r97ndfvt.js} +1 -1
  21. package/dist/builtin/workflows/builtin/{chunk-vkmpdat4.js → chunk-wf876n16.js} +1 -1
  22. package/dist/builtin/workflows/builtin/classify-and-act.js +3 -3
  23. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -3
  24. package/dist/builtin/workflows/builtin/generate-and-filter.js +3 -3
  25. package/dist/builtin/workflows/builtin/goal.js +4 -4
  26. package/dist/builtin/workflows/builtin/index.js +12 -12
  27. package/dist/builtin/workflows/builtin/loop-until-done.js +3 -3
  28. package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
  29. package/dist/builtin/workflows/builtin/ralph.js +4 -4
  30. package/dist/builtin/workflows/builtin/steering-context.js +1 -1
  31. package/dist/builtin/workflows/builtin/tournament.js +3 -3
  32. package/dist/builtin/workflows/package.json +1 -1
  33. package/dist/builtin/workflows/src/extension/index.bundle.mjs +40 -11
  34. package/dist/builtin/workflows/src/index.js +9 -3
  35. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +6 -1
  36. package/dist/cli/auth-command.js +5 -0
  37. package/dist/cli/auth-command.js.map +1 -1
  38. package/dist/cli/credential-print.js +2 -0
  39. package/dist/cli/credential-print.js.map +1 -1
  40. package/dist/cli/experimental/command.js +5 -2
  41. package/dist/cli/experimental/command.js.map +1 -1
  42. package/dist/cli.js +1 -1
  43. package/dist/cli.js.map +1 -1
  44. package/dist/config.d.ts +4 -4
  45. package/dist/config.js +4 -4
  46. package/dist/config.js.map +1 -1
  47. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  48. package/dist/core/agent-session-extension-bindings.js +9 -4
  49. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  50. package/dist/core/agent-session-methods.d.ts +4 -4
  51. package/dist/core/agent-session-methods.d.ts.map +1 -1
  52. package/dist/core/agent-session-methods.js.map +1 -1
  53. package/dist/core/agent-session-prompt.d.ts +4 -4
  54. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  55. package/dist/core/agent-session-prompt.js +38 -15
  56. package/dist/core/agent-session-prompt.js.map +1 -1
  57. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  58. package/dist/core/agent-session-runtime.js +14 -9
  59. package/dist/core/agent-session-runtime.js.map +1 -1
  60. package/dist/core/agent-session-types.d.ts +4 -1
  61. package/dist/core/agent-session-types.d.ts.map +1 -1
  62. package/dist/core/agent-session-types.js.map +1 -1
  63. package/dist/core/agent-session.d.ts +1 -1
  64. package/dist/core/agent-session.d.ts.map +1 -1
  65. package/dist/core/agent-session.js +140 -95
  66. package/dist/core/agent-session.js.map +1 -1
  67. package/dist/core/auth-storage-backends.js +2 -3
  68. package/dist/core/auth-storage-backends.js.map +1 -1
  69. package/dist/core/auth-storage.js +4 -1
  70. package/dist/core/auth-storage.js.map +1 -1
  71. package/dist/core/builtin-resource-loader.js +9 -0
  72. package/dist/core/builtin-resource-loader.js.map +1 -1
  73. package/dist/core/cache-warmer.js +8 -1
  74. package/dist/core/cache-warmer.js.map +1 -1
  75. package/dist/core/compaction/range-planner.js +6 -0
  76. package/dist/core/compaction/range-planner.js.map +1 -1
  77. package/dist/core/execution-model-router.d.ts +13 -3
  78. package/dist/core/execution-model-router.d.ts.map +1 -1
  79. package/dist/core/execution-model-router.js +227 -131
  80. package/dist/core/execution-model-router.js.map +1 -1
  81. package/dist/core/export-html/template-js/entries-navigation.js +16 -6
  82. package/dist/core/export-html/template-js/initialization.js +34 -11
  83. package/dist/core/export-html/template.css +10 -0
  84. package/dist/core/export-html/template.js +50 -17
  85. package/dist/core/extensions/context-types.d.ts +2 -0
  86. package/dist/core/extensions/context-types.d.ts.map +1 -1
  87. package/dist/core/extensions/context-types.js.map +1 -1
  88. package/dist/core/extensions/host-input.js +8 -4
  89. package/dist/core/extensions/host-input.js.map +1 -1
  90. package/dist/core/extensions/reactive-widget.js +1 -0
  91. package/dist/core/extensions/reactive-widget.js.map +1 -1
  92. package/dist/core/extensions/runner-context.d.ts +1 -0
  93. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  94. package/dist/core/extensions/runner-context.js +4 -0
  95. package/dist/core/extensions/runner-context.js.map +1 -1
  96. package/dist/core/extensions/runner.d.ts +1 -0
  97. package/dist/core/extensions/runner.d.ts.map +1 -1
  98. package/dist/core/extensions/runner.js +48 -30
  99. package/dist/core/extensions/runner.js.map +1 -1
  100. package/dist/core/extensions/runtime-types.d.ts +1 -0
  101. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  102. package/dist/core/extensions/runtime-types.js.map +1 -1
  103. package/dist/core/extensions/workflow-activity-hub.js +9 -7
  104. package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
  105. package/dist/core/footer-data-provider.js +24 -23
  106. package/dist/core/footer-data-provider.js.map +1 -1
  107. package/dist/core/keybindings.js +1 -0
  108. package/dist/core/keybindings.js.map +1 -1
  109. package/dist/core/mandatory-resource-loader.js +4 -1
  110. package/dist/core/mandatory-resource-loader.js.map +1 -1
  111. package/dist/core/model-config.js +2 -0
  112. package/dist/core/model-config.js.map +1 -1
  113. package/dist/core/model-registry.js +1 -0
  114. package/dist/core/model-registry.js.map +1 -1
  115. package/dist/core/{model-routing-task.d.ts → model-routing-bytes.d.ts} +1 -4
  116. package/dist/core/model-routing-bytes.d.ts.map +1 -0
  117. package/dist/core/model-routing-bytes.js +33 -0
  118. package/dist/core/model-routing-bytes.js.map +1 -0
  119. package/dist/core/model-routing-candidates.d.ts +42 -0
  120. package/dist/core/model-routing-candidates.d.ts.map +1 -0
  121. package/dist/core/model-routing-candidates.js +309 -0
  122. package/dist/core/model-routing-candidates.js.map +1 -0
  123. package/dist/core/model-routing-constraints.d.ts +4 -0
  124. package/dist/core/model-routing-constraints.d.ts.map +1 -1
  125. package/dist/core/model-routing-constraints.js +13 -1
  126. package/dist/core/model-routing-constraints.js.map +1 -1
  127. package/dist/core/model-routing-debug.d.ts +9 -0
  128. package/dist/core/model-routing-debug.d.ts.map +1 -0
  129. package/dist/core/model-routing-debug.js +14 -0
  130. package/dist/core/model-routing-debug.js.map +1 -0
  131. package/dist/core/model-routing-evals.d.ts +50 -0
  132. package/dist/core/model-routing-evals.d.ts.map +1 -0
  133. package/dist/core/model-routing-evals.js +190 -0
  134. package/dist/core/model-routing-evals.js.map +1 -0
  135. package/dist/core/model-routing-needs.d.ts +75 -0
  136. package/dist/core/model-routing-needs.d.ts.map +1 -0
  137. package/dist/core/model-routing-needs.js +176 -0
  138. package/dist/core/model-routing-needs.js.map +1 -0
  139. package/dist/core/model-runtime-streaming.js +3 -0
  140. package/dist/core/model-runtime-streaming.js.map +1 -1
  141. package/dist/core/model-runtime.js +26 -14
  142. package/dist/core/model-runtime.js.map +1 -1
  143. package/dist/core/models-store.js +2 -3
  144. package/dist/core/models-store.js.map +1 -1
  145. package/dist/core/output-guard.js +1 -0
  146. package/dist/core/output-guard.js.map +1 -1
  147. package/dist/core/package-manager-paths.d.ts +2 -1
  148. package/dist/core/package-manager-paths.d.ts.map +1 -1
  149. package/dist/core/package-manager-paths.js +4 -3
  150. package/dist/core/package-manager-paths.js.map +1 -1
  151. package/dist/core/package-manager.js +1 -0
  152. package/dist/core/package-manager.js.map +1 -1
  153. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  154. package/dist/core/resource-loader-assets.js +9 -7
  155. package/dist/core/resource-loader-assets.js.map +1 -1
  156. package/dist/core/resource-loader-core.js +49 -0
  157. package/dist/core/resource-loader-core.js.map +1 -1
  158. package/dist/core/runtime-credentials.js +2 -1
  159. package/dist/core/runtime-credentials.js.map +1 -1
  160. package/dist/core/session-cwd.js +1 -0
  161. package/dist/core/session-cwd.js.map +1 -1
  162. package/dist/core/session-manager-archive.d.ts.map +1 -1
  163. package/dist/core/session-manager-archive.js +4 -2
  164. package/dist/core/session-manager-archive.js.map +1 -1
  165. package/dist/core/session-manager-core.js +11 -7
  166. package/dist/core/session-manager-core.js.map +1 -1
  167. package/dist/core/session-manager-storage.d.ts +10 -4
  168. package/dist/core/session-manager-storage.d.ts.map +1 -1
  169. package/dist/core/session-manager-storage.js +12 -6
  170. package/dist/core/session-manager-storage.js.map +1 -1
  171. package/dist/core/settings-manager-basic-accessors.d.ts +2 -1
  172. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  173. package/dist/core/settings-manager-basic-accessors.js +21 -0
  174. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  175. package/dist/core/settings-manager-core.js +13 -7
  176. package/dist/core/settings-manager-core.js.map +1 -1
  177. package/dist/core/settings-manager.d.ts +1 -1
  178. package/dist/core/settings-manager.d.ts.map +1 -1
  179. package/dist/core/settings-manager.js.map +1 -1
  180. package/dist/core/settings-storage.js +6 -0
  181. package/dist/core/settings-storage.js.map +1 -1
  182. package/dist/core/settings-types.d.ts +8 -0
  183. package/dist/core/settings-types.d.ts.map +1 -1
  184. package/dist/core/settings-types.js.map +1 -1
  185. package/dist/core/structured-output/index.d.ts.map +1 -1
  186. package/dist/core/structured-output/index.js +4 -1
  187. package/dist/core/structured-output/index.js.map +1 -1
  188. package/dist/core/structured-output/invalid-output.js +1 -0
  189. package/dist/core/structured-output/invalid-output.js.map +1 -1
  190. package/dist/core/tasks/agent-adapter.js +5 -3
  191. package/dist/core/tasks/agent-adapter.js.map +1 -1
  192. package/dist/core/tasks/child-command-owner.js +3 -7
  193. package/dist/core/tasks/child-command-owner.js.map +1 -1
  194. package/dist/core/tasks/completion.js +5 -1
  195. package/dist/core/tasks/completion.js.map +1 -1
  196. package/dist/core/tasks/owner-store.js +12 -8
  197. package/dist/core/tasks/owner-store.js.map +1 -1
  198. package/dist/core/tasks/supervisor.js +14 -35
  199. package/dist/core/tasks/supervisor.js.map +1 -1
  200. package/dist/core/tools/ask-user-question/state/build-questionnaire.js +13 -4
  201. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  202. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +11 -1
  203. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  204. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +1 -0
  205. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
  206. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +1 -0
  207. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  208. package/dist/core/tools/ask-user-question/view/components/option-list-view.js +1 -0
  209. package/dist/core/tools/ask-user-question/view/components/option-list-view.js.map +1 -1
  210. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js +5 -0
  211. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  212. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +2 -0
  213. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  214. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js +13 -8
  215. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js.map +1 -1
  216. package/dist/core/tools/ask-user-question/view/components/submit-picker.js +1 -0
  217. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  218. package/dist/core/tools/ask-user-question/view/components/tab-bar.js +1 -0
  219. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  220. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +30 -24
  221. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
  222. package/dist/core/tools/ask-user-question/view/dialog-builder.js +5 -0
  223. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  224. package/dist/core/tools/ask-user-question/view/props-adapter.js +8 -0
  225. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  226. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +4 -4
  227. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  228. package/dist/core/tools/bash.js +5 -8
  229. package/dist/core/tools/bash.js.map +1 -1
  230. package/dist/core/tools/edit-batch.js +4 -0
  231. package/dist/core/tools/edit-batch.js.map +1 -1
  232. package/dist/core/tools/edit.js +2 -0
  233. package/dist/core/tools/edit.js.map +1 -1
  234. package/dist/core/tools/file-mutation-coordinator.js +9 -0
  235. package/dist/core/tools/file-mutation-coordinator.js.map +1 -1
  236. package/dist/core/tools/find.js +1 -1
  237. package/dist/core/tools/find.js.map +1 -1
  238. package/dist/core/tools/hashline-engine/fs.js +1 -1
  239. package/dist/core/tools/hashline-engine/fs.js.map +1 -1
  240. package/dist/core/tools/hashline-engine/input.js +4 -0
  241. package/dist/core/tools/hashline-engine/input.js.map +1 -1
  242. package/dist/core/tools/hashline-engine/mismatch.js +6 -0
  243. package/dist/core/tools/hashline-engine/mismatch.js.map +1 -1
  244. package/dist/core/tools/hashline-engine/patcher.js +13 -0
  245. package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
  246. package/dist/core/tools/hashline-engine/recovery.js +1 -0
  247. package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
  248. package/dist/core/tools/output-accumulator.js +20 -13
  249. package/dist/core/tools/output-accumulator.js.map +1 -1
  250. package/dist/core/tools/persisted-output-file.js +9 -3
  251. package/dist/core/tools/persisted-output-file.js.map +1 -1
  252. package/dist/core/tools/resource-selectors.js +1 -0
  253. package/dist/core/tools/resource-selectors.js.map +1 -1
  254. package/dist/core/tools/write.js +1 -0
  255. package/dist/core/tools/write.js.map +1 -1
  256. package/dist/core/trust-manager.js +1 -0
  257. package/dist/core/trust-manager.js.map +1 -1
  258. package/dist/core/workflow-stage-admission.js +17 -10
  259. package/dist/core/workflow-stage-admission.js.map +1 -1
  260. package/dist/extensions/llama/client.js +2 -0
  261. package/dist/extensions/llama/client.js.map +1 -1
  262. package/dist/extensions/llama/huggingface-ui.js +17 -9
  263. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  264. package/dist/extensions/llama/huggingface.js +2 -0
  265. package/dist/extensions/llama/huggingface.js.map +1 -1
  266. package/dist/extensions/llama/ui.js +11 -3
  267. package/dist/extensions/llama/ui.js.map +1 -1
  268. package/dist/index.d.ts +4 -2
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +3 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/modes/interactive/components/armin.js +10 -6
  273. package/dist/modes/interactive/components/armin.js.map +1 -1
  274. package/dist/modes/interactive/components/assistant-message.js +10 -2
  275. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  276. package/dist/modes/interactive/components/atomic-working-status.js +10 -2
  277. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  278. package/dist/modes/interactive/components/bash-execution.js +9 -4
  279. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  280. package/dist/modes/interactive/components/bordered-loader.js +3 -0
  281. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  282. package/dist/modes/interactive/components/branch-summary-message.js +4 -1
  283. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  284. package/dist/modes/interactive/components/chat-message-renderer.js +2 -1
  285. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  286. package/dist/modes/interactive/components/chat-session-host-state.js +63 -31
  287. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  288. package/dist/modes/interactive/components/chat-session-host.js +8 -1
  289. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  290. package/dist/modes/interactive/components/chat-transcript.js +24 -14
  291. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  292. package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
  293. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  294. package/dist/modes/interactive/components/config-selector-list.js +15 -6
  295. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  296. package/dist/modes/interactive/components/config-selector.js +7 -1
  297. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  298. package/dist/modes/interactive/components/countdown-timer.js +2 -0
  299. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  300. package/dist/modes/interactive/components/custom-editor.js +21 -1
  301. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  302. package/dist/modes/interactive/components/custom-entry.js +4 -1
  303. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  304. package/dist/modes/interactive/components/custom-message.js +9 -1
  305. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  306. package/dist/modes/interactive/components/daxnuts.js +8 -6
  307. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  308. package/dist/modes/interactive/components/dynamic-border.js +1 -0
  309. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  310. package/dist/modes/interactive/components/extension-editor.js +7 -1
  311. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  312. package/dist/modes/interactive/components/extension-input.js +8 -2
  313. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  314. package/dist/modes/interactive/components/extension-selector.js +9 -1
  315. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  316. package/dist/modes/interactive/components/first-time-setup.js +4 -2
  317. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  318. package/dist/modes/interactive/components/footer.js +5 -2
  319. package/dist/modes/interactive/components/footer.js.map +1 -1
  320. package/dist/modes/interactive/components/host-input-form.js +13 -2
  321. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  322. package/dist/modes/interactive/components/login-dialog.js +9 -3
  323. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  324. package/dist/modes/interactive/components/model-selector.js +24 -12
  325. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  326. package/dist/modes/interactive/components/oauth-selector.js +12 -3
  327. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  328. package/dist/modes/interactive/components/reserved-bottom-overlay.js +11 -2
  329. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  330. package/dist/modes/interactive/components/scoped-models-selector.js +13 -8
  331. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  332. package/dist/modes/interactive/components/scroll-widget.js +4 -0
  333. package/dist/modes/interactive/components/scroll-widget.js.map +1 -1
  334. package/dist/modes/interactive/components/session-selector-header.js +11 -7
  335. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  336. package/dist/modes/interactive/components/session-selector-list.js +25 -12
  337. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  338. package/dist/modes/interactive/components/session-selector.js +23 -15
  339. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/settings-selector-submenus.js +19 -1
  341. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  342. package/dist/modes/interactive/components/settings-selector.js +1 -0
  343. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  344. package/dist/modes/interactive/components/show-images-selector.js +1 -0
  345. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  346. package/dist/modes/interactive/components/skill-invocation-message.js +4 -1
  347. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  348. package/dist/modes/interactive/components/startup-identity.js +8 -3
  349. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  350. package/dist/modes/interactive/components/task-completion-message.js +2 -0
  351. package/dist/modes/interactive/components/task-completion-message.js.map +1 -1
  352. package/dist/modes/interactive/components/task-detail.js +2 -0
  353. package/dist/modes/interactive/components/task-detail.js.map +1 -1
  354. package/dist/modes/interactive/components/task-inspector.js +22 -12
  355. package/dist/modes/interactive/components/task-inspector.js.map +1 -1
  356. package/dist/modes/interactive/components/task-list.js +2 -0
  357. package/dist/modes/interactive/components/task-list.js.map +1 -1
  358. package/dist/modes/interactive/components/task-live-transcript.js +8 -3
  359. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
  360. package/dist/modes/interactive/components/task-navigation.js +5 -2
  361. package/dist/modes/interactive/components/task-navigation.js.map +1 -1
  362. package/dist/modes/interactive/components/task-row.js +2 -0
  363. package/dist/modes/interactive/components/task-row.js.map +1 -1
  364. package/dist/modes/interactive/components/theme-selector.js +2 -0
  365. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  366. package/dist/modes/interactive/components/thinking-selector.js +7 -1
  367. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  368. package/dist/modes/interactive/components/tool-execution.js +25 -10
  369. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  370. package/dist/modes/interactive/components/transcript-follow-indicator.js +1 -0
  371. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  372. package/dist/modes/interactive/components/tree-selector-component.js +7 -3
  373. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  374. package/dist/modes/interactive/components/tree-selector-help.js +1 -0
  375. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  376. package/dist/modes/interactive/components/tree-selector-label-input.js +6 -2
  377. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  378. package/dist/modes/interactive/components/tree-selector-list.js +4 -0
  379. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  380. package/dist/modes/interactive/components/trust-selector.js +6 -0
  381. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/user-message-selector.js +6 -3
  383. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  384. package/dist/modes/interactive/components/user-message.js +5 -0
  385. package/dist/modes/interactive/components/user-message.js.map +1 -1
  386. package/dist/modes/interactive/components/working-status.js +1 -0
  387. package/dist/modes/interactive/components/working-status.js.map +1 -1
  388. package/dist/modes/interactive/interactive-autocomplete.js +2 -0
  389. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  390. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  391. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  392. package/dist/modes/interactive/interactive-mode-base.js +162 -120
  393. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  394. package/dist/modes/interactive/interactive-mode-helpers.js +3 -0
  395. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  396. package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -6
  397. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  399. package/dist/modes/interactive/interactive-resource-disclosure.js +0 -4
  400. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  401. package/dist/modes/interactive/interactive-resource-rendering.js +0 -12
  402. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  403. package/dist/modes/interactive/interactive-startup-chat-container.js +1 -4
  404. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
  405. package/dist/modes/interactive/model-catalog-refresh.js +1 -3
  406. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  407. package/dist/modes/interactive/theme/color-utils.d.ts +5 -0
  408. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  409. package/dist/modes/interactive/theme/color-utils.js +11 -0
  410. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  411. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  412. package/dist/modes/interactive/theme/global-theme.js +4 -3
  413. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  414. package/dist/modes/interactive/theme/theme-class.js +7 -0
  415. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  416. package/dist/modes/interactive/theme/theme-controller.js +9 -2
  417. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  418. package/dist/modes/interactive-engine/activity-watchdog.js +8 -3
  419. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
  420. package/dist/modes/interactive-engine/engine-custom-ui.js +12 -8
  421. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  422. package/dist/modes/interactive-engine/engine-dialog-host.js +7 -3
  423. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  424. package/dist/modes/interactive-engine/engine-health.js +23 -13
  425. package/dist/modes/interactive-engine/engine-health.js.map +1 -1
  426. package/dist/modes/interactive-engine/engine-input-form.js +3 -2
  427. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  428. package/dist/modes/interactive-engine/engine-monitor.js +13 -1
  429. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  430. package/dist/modes/interactive-engine/engine-project-trust.js +2 -1
  431. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -1
  432. package/dist/modes/interactive-engine/engine-render-service.js +7 -4
  433. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  434. package/dist/modes/interactive-engine/engine-session-picker.js +3 -2
  435. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
  436. package/dist/modes/interactive-engine/input-form-host.js +5 -1
  437. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  438. package/dist/modes/interactive-engine/isolated-runtime.js +37 -23
  439. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  440. package/dist/modes/interactive-engine/remote-command-catalog.js +4 -3
  441. package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -1
  442. package/dist/modes/interactive-engine/remote-component.js +24 -12
  443. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  444. package/dist/modes/interactive-engine/remote-frame-clamp.js +3 -3
  445. package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -1
  446. package/dist/modes/interactive-engine/remote-model-catalog.js +5 -4
  447. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  448. package/dist/modes/interactive-engine/remote-queue-pause.js +3 -1
  449. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  450. package/dist/modes/interactive-engine/remote-renderer.js +24 -13
  451. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  452. package/dist/modes/interactive-engine/resource-readiness-error.js +1 -0
  453. package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -1
  454. package/dist/modes/interactive-engine/session-picker-host.js +5 -1
  455. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  456. package/dist/modes/interactive-engine/terminal-mode-controller.js +2 -1
  457. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  458. package/dist/modes/rpc/queued-writer.js +13 -4
  459. package/dist/modes/rpc/queued-writer.js.map +1 -1
  460. package/dist/modes/rpc/rpc-bash-request-owners.js +2 -1
  461. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  462. package/dist/modes/rpc/rpc-client-api.d.ts +8 -4
  463. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  464. package/dist/modes/rpc/rpc-client-api.js +10 -3
  465. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  466. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  467. package/dist/modes/rpc/rpc-client.js +35 -22
  468. package/dist/modes/rpc/rpc-client.js.map +1 -1
  469. package/dist/modes/rpc/rpc-command-handler.js +6 -6
  470. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  471. package/dist/modes/rpc/rpc-event-buffer.js +3 -1
  472. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  473. package/dist/modes/rpc/rpc-generation-buffer.js +1 -3
  474. package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -1
  475. package/dist/modes/rpc/rpc-keybindings-reload.js +4 -1
  476. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
  477. package/dist/modes/rpc/rpc-output-buffer.js +3 -4
  478. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  479. package/dist/modes/rpc/rpc-pending-requests.js +1 -3
  480. package/dist/modes/rpc/rpc-pending-requests.js.map +1 -1
  481. package/dist/modes/rpc/rpc-provider-auth.js +3 -1
  482. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  483. package/dist/modes/rpc/rpc-resource-readiness.js +4 -5
  484. package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -1
  485. package/dist/modes/rpc/rpc-session-binding.js +15 -0
  486. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  487. package/dist/modes/rpc/rpc-terminal-drain.js +3 -0
  488. package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -1
  489. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  490. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  491. package/dist/modes/rpc/rpc-types.js.map +1 -1
  492. package/docs/models/evals.md +883 -39
  493. package/docs/models/model-selection.md +7 -8
  494. package/docs/rpc/examples.md +1 -1
  495. package/docs/rpc/protocol.md +9 -3
  496. package/docs/sdk/structured-decisions.md +1 -1
  497. package/docs/sdk.md +3 -3
  498. package/docs/settings.md +24 -3
  499. package/docs/subagents/reference.md +22 -4
  500. package/docs/subagents.md +2 -0
  501. package/docs/usage.md +3 -3
  502. package/docs/workflows/api-reference.md +1 -1
  503. package/docs/workflows/authoring.md +1 -7
  504. package/docs/workflows/builtins.md +1 -1
  505. package/docs/workflows/reliable-design.md +1 -1
  506. package/examples/extensions/custom-provider-gitlab-duo/test.ts +5 -5
  507. package/examples/extensions/gondolin/package.json +1 -1
  508. package/examples/rpc-client.ts +1 -1
  509. package/examples/rpc-extension-ui.ts +1 -1
  510. package/npm-shrinkwrap.json +70 -33
  511. package/package.json +6 -7
  512. package/dist/core/model-routing-task.d.ts.map +0 -1
  513. package/dist/core/model-routing-task.js +0 -120
  514. package/dist/core/model-routing-task.js.map +0 -1
@@ -3,9 +3,7 @@ import { getAgentDir } from "../config.js";
3
3
  import { stripBom } from "../utils/text.js";
4
4
  import { FileAuthStorageBackend } from "./auth-storage-backends.js";
5
5
  export class InMemoryCodingAgentModelsStore {
6
- constructor() {
7
- this.entries = new Map();
8
- }
6
+ entries = new Map();
9
7
  async read(providerId) {
10
8
  return this.entries.get(providerId);
11
9
  }
@@ -18,6 +16,7 @@ export class InMemoryCodingAgentModelsStore {
18
16
  }
19
17
  /** Locked JSON-backed storage for dynamically refreshed provider catalogs. */
20
18
  export class FileModelsStore {
19
+ storage;
21
20
  constructor(path = join(getAgentDir(), "models-store.json")) {
22
21
  this.storage = new FileAuthStorageBackend(path);
23
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"models-store.js","sourceRoot":"","sources":["../../src/core/models-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAA2B,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAI7F,MAAM,OAAO,8BAA8B;IAA3C;QACkB,YAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAahE,CAAC;IAXA,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB;QACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;CACD;AAED,8EAA8E;AAC9E,MAAM,OAAO,eAAe;IAG3B,YAAY,IAAI,GAAW,IAAI,CAAC,WAAW,EAAE,EAAE,mBAAmB,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,OAA2B;QACxC,OAAO,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;SACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB;QACtD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;CACD","sourcesContent":["import { join } from \"node:path\";\nimport type { ModelsStore, ModelsStoreEntry } from \"@bastani/pi-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { type AuthStorageBackend, FileAuthStorageBackend } from \"./auth-storage-backends.ts\";\n\ntype StoredModels = Record<string, ModelsStoreEntry>;\n\nexport class InMemoryCodingAgentModelsStore implements ModelsStore {\n\tprivate readonly entries = new Map<string, ModelsStoreEntry>();\n\n\tasync read(providerId: string): Promise<ModelsStoreEntry | undefined> {\n\t\treturn this.entries.get(providerId);\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry): Promise<void> {\n\t\tthis.entries.set(providerId, entry);\n\t}\n\n\tasync delete(providerId: string): Promise<void> {\n\t\tthis.entries.delete(providerId);\n\t}\n}\n\n/** Locked JSON-backed storage for dynamically refreshed provider catalogs. */\nexport class FileModelsStore implements ModelsStore {\n\tprivate readonly storage: AuthStorageBackend;\n\n\tconstructor(path: string = join(getAgentDir(), \"models-store.json\")) {\n\t\tthis.storage = new FileAuthStorageBackend(path);\n\t}\n\n\tprivate parse(content: string | undefined): StoredModels {\n\t\treturn content ? (JSON.parse(stripBom(content)) as StoredModels) : {};\n\t}\n\n\tasync read(providerId: string): Promise<ModelsStoreEntry | undefined> {\n\t\treturn this.storage.withLock((content) => ({\n\t\t\tresult: structuredClone(this.parse(content)[providerId]),\n\t\t}));\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry): Promise<void> {\n\t\tawait this.storage.withLockAsync(async (content) => {\n\t\t\tconst current = this.parse(content);\n\t\t\tcurrent[providerId] = structuredClone(entry);\n\t\t\treturn { result: undefined, next: JSON.stringify(current, null, 2) };\n\t\t});\n\t}\n\n\tasync delete(providerId: string): Promise<void> {\n\t\tawait this.storage.withLockAsync(async (content) => {\n\t\t\tconst current = this.parse(content);\n\t\t\tdelete current[providerId];\n\t\t\treturn { result: undefined, next: JSON.stringify(current, null, 2) };\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"models-store.js","sourceRoot":"","sources":["../../src/core/models-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAA2B,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAI7F,MAAM,OAAO,8BAA8B;IACzB,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB;QACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;CACD;AAED,8EAA8E;AAC9E,MAAM,OAAO,eAAe;IACV,OAAO,CAAqB;IAE7C,YAAY,IAAI,GAAW,IAAI,CAAC,WAAW,EAAE,EAAE,mBAAmB,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,OAA2B;QACxC,OAAO,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;SACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB;QACtD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;CACD","sourcesContent":["import { join } from \"node:path\";\nimport type { ModelsStore, ModelsStoreEntry } from \"@bastani/pi-ai\";\nimport { getAgentDir } from \"../config.js\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { type AuthStorageBackend, FileAuthStorageBackend } from \"./auth-storage-backends.ts\";\n\ntype StoredModels = Record<string, ModelsStoreEntry>;\n\nexport class InMemoryCodingAgentModelsStore implements ModelsStore {\n\tprivate readonly entries = new Map<string, ModelsStoreEntry>();\n\n\tasync read(providerId: string): Promise<ModelsStoreEntry | undefined> {\n\t\treturn this.entries.get(providerId);\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry): Promise<void> {\n\t\tthis.entries.set(providerId, entry);\n\t}\n\n\tasync delete(providerId: string): Promise<void> {\n\t\tthis.entries.delete(providerId);\n\t}\n}\n\n/** Locked JSON-backed storage for dynamically refreshed provider catalogs. */\nexport class FileModelsStore implements ModelsStore {\n\tprivate readonly storage: AuthStorageBackend;\n\n\tconstructor(path: string = join(getAgentDir(), \"models-store.json\")) {\n\t\tthis.storage = new FileAuthStorageBackend(path);\n\t}\n\n\tprivate parse(content: string | undefined): StoredModels {\n\t\treturn content ? (JSON.parse(stripBom(content)) as StoredModels) : {};\n\t}\n\n\tasync read(providerId: string): Promise<ModelsStoreEntry | undefined> {\n\t\treturn this.storage.withLock((content) => ({\n\t\t\tresult: structuredClone(this.parse(content)[providerId]),\n\t\t}));\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry): Promise<void> {\n\t\tawait this.storage.withLockAsync(async (content) => {\n\t\t\tconst current = this.parse(content);\n\t\t\tcurrent[providerId] = structuredClone(entry);\n\t\t\treturn { result: undefined, next: JSON.stringify(current, null, 2) };\n\t\t});\n\t}\n\n\tasync delete(providerId: string): Promise<void> {\n\t\tawait this.storage.withLockAsync(async (content) => {\n\t\t\tconst current = this.parse(content);\n\t\t\tdelete current[providerId];\n\t\t\treturn { result: undefined, next: JSON.stringify(current, null, 2) };\n\t\t});\n\t}\n}\n"]}
@@ -117,6 +117,7 @@ export function writeRawStdout(text) {
117
117
  });
118
118
  }
119
119
  export class RawStdoutWriteError extends Error {
120
+ emitted;
120
121
  constructor(message, options) {
121
122
  super(message, { cause: options.cause });
122
123
  this.name = "RawStdoutWriteError";
@@ -1 +1 @@
1
- {"version":3,"file":"output-guard.js","sourceRoot":"","sources":["../../src/core/output-guard.ts"],"names":[],"mappings":"AAYA,IAAI,mBAAoD,CAAC;AAEzD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,IAAI,kBAAkB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1D,SAAS,iBAAiB;IACzB,IAAI,mBAAmB,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC,cAAc,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAI,CAAC;oBACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACnC,IAAI,KAAK;4BAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;4BACpB,OAAO,EAAE,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAI,UAAyC,CAAC,IAAI,CAAC;YAC7D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBACvE,MAAM,UAAU,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACzB,OAAO;IACR,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;IAC1G,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;IAC1G,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CACvB,KAA0B,EAC1B,kBAAsE,EACtE,QAAyC,EAC/B,EAAE;QACZ,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAgC,CAAC;IAElC,gFAAgF;IAChF,sEAAsE;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,eAAe,GAAG;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;KAC9B,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC3C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAuB,CAAC;IACzB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC5C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAwB,CAAC;IAC1B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC7C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAyB,CAAC;IAC3B,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC3C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAuB,CAAC;IAEzB,mBAAmB,GAAG;QACrB,cAAc;QACd,cAAc;QACd,mBAAmB;QACnB,eAAe;KACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO;IACR,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;IAC/D,OAAO,CAAC,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC;IACtD,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC;IACxD,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC;IAC1D,OAAO,CAAC,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC;IACtD,mBAAmB,GAAG,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,mBAAmB,KAAK,SAAS,CAAC;AAC1C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI,CAAC;QACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACR,CAAC;IACD,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC;AAyBD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG7C,YAAY,OAAe,EAAE,OAAuD;QACnF,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;CACD;AAED,sEAAsE;AACtE,SAAS,qBAAqB;IAC7B,MAAM,OAAO,GAAI,OAAO,CAAC,MAAqC,CAAC,YAAY,CAAC;IAC5E,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CACxB,MAA0B,EAC1B,KAAyB,EACzB,YAAoB;IAEpB,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/D,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,OAAO,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CACpC,GAAG,EAAE,CACJ,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,IAAI,CAAC;YACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;oBACV,OAAO;gBACR,CAAC;gBACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,YAAY,CAAC,CAAC;gBAChF,MAAM,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CACL,IAAI,mBAAmB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC/E,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,MAAM;aACf,CAAC,CACF,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CACH,CAAC;IACF,6EAA6E;IAC7E,yDAAyD;IACzD,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAC9B,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;IACF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B;IACjD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAChC,MAAM,IAAI,CAAC;QACX,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACjC,OAAO;QACR,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,MAAM,4BAA4B,EAAE,CAAC;IACrC,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["interface StdoutTakeoverState {\n\trawStdoutWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\trawStderrWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\toriginalStdoutWrite: typeof process.stdout.write;\n\toriginalConsole: {\n\t\tlog: typeof console.log;\n\t\tinfo: typeof console.info;\n\t\tdebug: typeof console.debug;\n\t\tdir: typeof console.dir;\n\t};\n}\n\nlet stdoutTakeoverState: StdoutTakeoverState | undefined;\n\nconst RAW_STDOUT_RETRY_DELAY_MS = 10;\n\nlet rawStdoutWriteTail: Promise<void> = Promise.resolve();\n\nfunction getRawStdoutWrite(): StdoutTakeoverState[\"rawStdoutWrite\"] {\n\tif (stdoutTakeoverState) {\n\t\treturn stdoutTakeoverState.rawStdoutWrite;\n\t}\n\treturn process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n}\n\nasync function writeRawStdoutChunk(text: string): Promise<void> {\n\twhile (true) {\n\t\ttry {\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\ttry {\n\t\t\t\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\t\t\t\tif (error) reject(error);\n\t\t\t\t\t\telse resolve();\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tconst writeError = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst code = (writeError as Error & { code?: unknown }).code;\n\t\t\tif (code !== \"ENOBUFS\" && code !== \"EAGAIN\" && code !== \"EWOULDBLOCK\") {\n\t\t\t\tthrow writeError;\n\t\t\t}\n\t\t\tawait new Promise<void>((resolve) => setTimeout(resolve, RAW_STDOUT_RETRY_DELAY_MS));\n\t\t}\n\t}\n}\n\nexport function takeOverStdout(): void {\n\tif (stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tconst rawStdoutWrite = process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n\tconst rawStderrWrite = process.stderr.write.bind(process.stderr) as StdoutTakeoverState[\"rawStderrWrite\"];\n\tconst originalStdoutWrite = process.stdout.write;\n\n\tprocess.stdout.write = ((\n\t\tchunk: string | Uint8Array,\n\t\tencodingOrCallback?: BufferEncoding | ((error?: Error | null) => void),\n\t\tcallback?: (error?: Error | null) => void,\n\t): boolean => {\n\t\tif (typeof encodingOrCallback === \"function\") {\n\t\t\treturn rawStderrWrite(String(chunk), encodingOrCallback);\n\t\t}\n\t\treturn rawStderrWrite(String(chunk), callback);\n\t}) as typeof process.stdout.write;\n\n\t// Some runtimes (notably Bun) implement console.log/info/debug/dir natively and\n\t// write directly to the stdout file descriptor, bypassing the patched\n\t// process.stdout.write above. Redirect the stdout-bound console methods to\n\t// stderr (via console.error, which formats identically) so non-interactive\n\t// modes keep real stdout clean for machine-readable output across runtimes.\n\tconst originalConsole = {\n\t\tlog: console.log.bind(console),\n\t\tinfo: console.info.bind(console),\n\t\tdebug: console.debug.bind(console),\n\t\tdir: console.dir.bind(console),\n\t};\n\tconst errorConsole = console.error.bind(console);\n\tconsole.log = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.log;\n\tconsole.info = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.info;\n\tconsole.debug = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.debug;\n\tconsole.dir = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.dir;\n\n\tstdoutTakeoverState = {\n\t\trawStdoutWrite,\n\t\trawStderrWrite,\n\t\toriginalStdoutWrite,\n\t\toriginalConsole,\n\t};\n}\n\nexport function restoreStdout(): void {\n\tif (!stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tprocess.stdout.write = stdoutTakeoverState.originalStdoutWrite;\n\tconsole.log = stdoutTakeoverState.originalConsole.log;\n\tconsole.info = stdoutTakeoverState.originalConsole.info;\n\tconsole.debug = stdoutTakeoverState.originalConsole.debug;\n\tconsole.dir = stdoutTakeoverState.originalConsole.dir;\n\tstdoutTakeoverState = undefined;\n}\n\nexport function isStdoutTakenOver(): boolean {\n\treturn stdoutTakeoverState !== undefined;\n}\n\n/** Hand a small control frame directly to the OS pipe before synchronous user code begins. */\nexport function writeRawStdoutControl(text: string): void {\n\tif (text.length === 0) return;\n\ttry {\n\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\tif (error) process.exit(1);\n\t\t});\n\t} catch {\n\t\tprocess.exit(1);\n\t}\n}\n\nexport function writeRawStdout(text: string): void {\n\tif (text.length === 0) {\n\t\treturn;\n\t}\n\trawStdoutWriteTail = rawStdoutWriteTail.then(() => writeRawStdoutChunk(text));\n\tvoid rawStdoutWriteTail.catch(() => {\n\t\tprocess.exit(1);\n\t});\n}\n\n/**\n * A `writeRawStdoutOnce` failure, carrying how much of the payload reached the\n * stream.\n *\n * `emitted` is the answer the credential egress needs, and \"some\" is a distinct\n * answer from \"all\": bytes that escaped cannot be recalled, but a caller told\n * only that *something* left would report a truncated secret as a whole one.\n *\n * - `\"none\"` — the write call threw before the stream accepted anything, or\n * the callback failed with `bytesWritten` unmoved, so the chunk was\n * buffered and dropped without a syscall. stdout is provably empty.\n * - `\"partial\"` — the counter advanced by less than the payload. stdout\n * carries a fragment, which is not a usable credential.\n * - `\"all\"` — the counter advanced by the whole payload and the failure came\n * after. stdout carries the credential.\n *\n * `bytesWritten` exists on the socket stdout is when it is a TTY or a pipe. A\n * file redirect gets `SyncWriteStream`, which has no counter and writes\n * synchronously — there a callback error means the `writeSync` itself failed,\n * so nothing was emitted.\n */\nexport type RawStdoutEmission = \"none\" | \"partial\" | \"all\";\n\nexport class RawStdoutWriteError extends Error {\n\treadonly emitted: RawStdoutEmission;\n\n\tconstructor(message: string, options: { cause: unknown; emitted: RawStdoutEmission }) {\n\t\tsuper(message, { cause: options.cause });\n\t\tthis.name = \"RawStdoutWriteError\";\n\t\tthis.emitted = options.emitted;\n\t}\n}\n\n/** Bytes stdout has handed to the OS, when the stream counts them. */\nfunction rawStdoutBytesWritten(): number | undefined {\n\tconst counted = (process.stdout as { bytesWritten?: unknown }).bytesWritten;\n\treturn typeof counted === \"number\" ? counted : undefined;\n}\n\nfunction classifyEmission(\n\tbefore: number | undefined,\n\tafter: number | undefined,\n\tpayloadBytes: number,\n): RawStdoutEmission {\n\tif (before === undefined || after === undefined) return \"none\";\n\tconst flushed = after - before;\n\tif (flushed <= 0) return \"none\";\n\treturn flushed >= payloadBytes ? \"all\" : \"partial\";\n}\n\n/**\n * Write one chunk to the real stdout as a single awaited operation.\n *\n * Differs from `writeRawStdout` in the two ways the credential egress needs.\n * The rejection reaches the caller instead of exiting the process, so the\n * caller can report a cause of its own. And the chunk is handed to stdout\n * exactly once — the ENOBUFS/EAGAIN retry in `writeRawStdoutChunk` would\n * re-send the whole payload, which for a secret risks emitting it twice.\n *\n * Rejects with `RawStdoutWriteError`, whose `emitted` says how much left. A\n * caller that must never report a failure over a stream carrying a whole\n * credential — nor claim success over one carrying none of it, nor part of it —\n * branches on that rather than on the presence of an error.\n */\nexport function writeRawStdoutOnce(text: string): Promise<void> {\n\tif (text.length === 0) {\n\t\treturn Promise.resolve();\n\t}\n\tconst payloadBytes = Buffer.byteLength(text);\n\tconst write = rawStdoutWriteTail.then(\n\t\t() =>\n\t\t\tnew Promise<void>((resolve, reject) => {\n\t\t\t\tconst before = rawStdoutBytesWritten();\n\t\t\t\ttry {\n\t\t\t\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\t\t\t\tif (!error) {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst emitted = classifyEmission(before, rawStdoutBytesWritten(), payloadBytes);\n\t\t\t\t\t\treject(new RawStdoutWriteError(error.message, { cause: error, emitted }));\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew RawStdoutWriteError(error instanceof Error ? error.message : String(error), {\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\temitted: \"none\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}),\n\t);\n\t// The failure belongs to this caller alone; the shared tail stays settled so\n\t// a later writer is not handed someone else's rejection.\n\trawStdoutWriteTail = write.then(\n\t\t() => {},\n\t\t() => {},\n\t);\n\treturn write;\n}\n\nexport async function waitForRawStdoutBackpressure(): Promise<void> {\n\twhile (true) {\n\t\tconst tail = rawStdoutWriteTail;\n\t\tawait tail;\n\t\tif (tail === rawStdoutWriteTail) {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nexport async function flushRawStdout(): Promise<void> {\n\tawait waitForRawStdoutBackpressure();\n\tawait writeRawStdoutChunk(\"\");\n}\n"]}
1
+ {"version":3,"file":"output-guard.js","sourceRoot":"","sources":["../../src/core/output-guard.ts"],"names":[],"mappings":"AAYA,IAAI,mBAAoD,CAAC;AAEzD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,IAAI,kBAAkB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1D,SAAS,iBAAiB;IACzB,IAAI,mBAAmB,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC,cAAc,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAI,CAAC;oBACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACnC,IAAI,KAAK;4BAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;4BACpB,OAAO,EAAE,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAI,UAAyC,CAAC,IAAI,CAAC;YAC7D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBACvE,MAAM,UAAU,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACzB,OAAO;IACR,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;IAC1G,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAA0C,CAAC;IAC1G,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CACvB,KAA0B,EAC1B,kBAAsE,EACtE,QAAyC,EAC/B,EAAE;QACZ,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAgC,CAAC;IAElC,gFAAgF;IAChF,sEAAsE;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,eAAe,GAAG;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;KAC9B,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC3C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAuB,CAAC;IACzB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC5C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAwB,CAAC;IAC1B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC7C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAyB,CAAC;IAC3B,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC3C,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAuB,CAAC;IAEzB,mBAAmB,GAAG;QACrB,cAAc;QACd,cAAc;QACd,mBAAmB;QACnB,eAAe;KACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO;IACR,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;IAC/D,OAAO,CAAC,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC;IACtD,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC;IACxD,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC;IAC1D,OAAO,CAAC,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC;IACtD,mBAAmB,GAAG,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,mBAAmB,KAAK,SAAS,CAAC;AAC1C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI,CAAC;QACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACR,CAAC;IACD,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC;AAyBD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACpC,OAAO,CAAoB;IAEpC,YAAY,OAAe,EAAE,OAAuD;QACnF,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;CACD;AAED,sEAAsE;AACtE,SAAS,qBAAqB;IAC7B,MAAM,OAAO,GAAI,OAAO,CAAC,MAAqC,CAAC,YAAY,CAAC;IAC5E,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CACxB,MAA0B,EAC1B,KAAyB,EACzB,YAAoB;IAEpB,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/D,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,OAAO,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CACpC,GAAG,EAAE,CACJ,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,IAAI,CAAC;YACJ,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;oBACV,OAAO;gBACR,CAAC;gBACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,YAAY,CAAC,CAAC;gBAChF,MAAM,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CACL,IAAI,mBAAmB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC/E,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,MAAM;aACf,CAAC,CACF,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CACH,CAAC;IACF,6EAA6E;IAC7E,yDAAyD;IACzD,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAC9B,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;IACF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B;IACjD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAChC,MAAM,IAAI,CAAC;QACX,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACjC,OAAO;QACR,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,MAAM,4BAA4B,EAAE,CAAC;IACrC,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["interface StdoutTakeoverState {\n\trawStdoutWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\trawStderrWrite: (chunk: string, callback?: (error?: Error | null) => void) => boolean;\n\toriginalStdoutWrite: typeof process.stdout.write;\n\toriginalConsole: {\n\t\tlog: typeof console.log;\n\t\tinfo: typeof console.info;\n\t\tdebug: typeof console.debug;\n\t\tdir: typeof console.dir;\n\t};\n}\n\nlet stdoutTakeoverState: StdoutTakeoverState | undefined;\n\nconst RAW_STDOUT_RETRY_DELAY_MS = 10;\n\nlet rawStdoutWriteTail: Promise<void> = Promise.resolve();\n\nfunction getRawStdoutWrite(): StdoutTakeoverState[\"rawStdoutWrite\"] {\n\tif (stdoutTakeoverState) {\n\t\treturn stdoutTakeoverState.rawStdoutWrite;\n\t}\n\treturn process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n}\n\nasync function writeRawStdoutChunk(text: string): Promise<void> {\n\twhile (true) {\n\t\ttry {\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\ttry {\n\t\t\t\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\t\t\t\tif (error) reject(error);\n\t\t\t\t\t\telse resolve();\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tconst writeError = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst code = (writeError as Error & { code?: unknown }).code;\n\t\t\tif (code !== \"ENOBUFS\" && code !== \"EAGAIN\" && code !== \"EWOULDBLOCK\") {\n\t\t\t\tthrow writeError;\n\t\t\t}\n\t\t\tawait new Promise<void>((resolve) => setTimeout(resolve, RAW_STDOUT_RETRY_DELAY_MS));\n\t\t}\n\t}\n}\n\nexport function takeOverStdout(): void {\n\tif (stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tconst rawStdoutWrite = process.stdout.write.bind(process.stdout) as StdoutTakeoverState[\"rawStdoutWrite\"];\n\tconst rawStderrWrite = process.stderr.write.bind(process.stderr) as StdoutTakeoverState[\"rawStderrWrite\"];\n\tconst originalStdoutWrite = process.stdout.write;\n\n\tprocess.stdout.write = ((\n\t\tchunk: string | Uint8Array,\n\t\tencodingOrCallback?: BufferEncoding | ((error?: Error | null) => void),\n\t\tcallback?: (error?: Error | null) => void,\n\t): boolean => {\n\t\tif (typeof encodingOrCallback === \"function\") {\n\t\t\treturn rawStderrWrite(String(chunk), encodingOrCallback);\n\t\t}\n\t\treturn rawStderrWrite(String(chunk), callback);\n\t}) as typeof process.stdout.write;\n\n\t// Some runtimes (notably Bun) implement console.log/info/debug/dir natively and\n\t// write directly to the stdout file descriptor, bypassing the patched\n\t// process.stdout.write above. Redirect the stdout-bound console methods to\n\t// stderr (via console.error, which formats identically) so non-interactive\n\t// modes keep real stdout clean for machine-readable output across runtimes.\n\tconst originalConsole = {\n\t\tlog: console.log.bind(console),\n\t\tinfo: console.info.bind(console),\n\t\tdebug: console.debug.bind(console),\n\t\tdir: console.dir.bind(console),\n\t};\n\tconst errorConsole = console.error.bind(console);\n\tconsole.log = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.log;\n\tconsole.info = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.info;\n\tconsole.debug = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.debug;\n\tconsole.dir = ((...args: unknown[]): void => {\n\t\terrorConsole(...args);\n\t}) as typeof console.dir;\n\n\tstdoutTakeoverState = {\n\t\trawStdoutWrite,\n\t\trawStderrWrite,\n\t\toriginalStdoutWrite,\n\t\toriginalConsole,\n\t};\n}\n\nexport function restoreStdout(): void {\n\tif (!stdoutTakeoverState) {\n\t\treturn;\n\t}\n\n\tprocess.stdout.write = stdoutTakeoverState.originalStdoutWrite;\n\tconsole.log = stdoutTakeoverState.originalConsole.log;\n\tconsole.info = stdoutTakeoverState.originalConsole.info;\n\tconsole.debug = stdoutTakeoverState.originalConsole.debug;\n\tconsole.dir = stdoutTakeoverState.originalConsole.dir;\n\tstdoutTakeoverState = undefined;\n}\n\nexport function isStdoutTakenOver(): boolean {\n\treturn stdoutTakeoverState !== undefined;\n}\n\n/** Hand a small control frame directly to the OS pipe before synchronous user code begins. */\nexport function writeRawStdoutControl(text: string): void {\n\tif (text.length === 0) return;\n\ttry {\n\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\tif (error) process.exit(1);\n\t\t});\n\t} catch {\n\t\tprocess.exit(1);\n\t}\n}\n\nexport function writeRawStdout(text: string): void {\n\tif (text.length === 0) {\n\t\treturn;\n\t}\n\trawStdoutWriteTail = rawStdoutWriteTail.then(() => writeRawStdoutChunk(text));\n\tvoid rawStdoutWriteTail.catch(() => {\n\t\tprocess.exit(1);\n\t});\n}\n\n/**\n * A `writeRawStdoutOnce` failure, carrying how much of the payload reached the\n * stream.\n *\n * `emitted` is the answer the credential egress needs, and \"some\" is a distinct\n * answer from \"all\": bytes that escaped cannot be recalled, but a caller told\n * only that *something* left would report a truncated secret as a whole one.\n *\n * - `\"none\"` — the write call threw before the stream accepted anything, or\n * the callback failed with `bytesWritten` unmoved, so the chunk was\n * buffered and dropped without a syscall. stdout is provably empty.\n * - `\"partial\"` — the counter advanced by less than the payload. stdout\n * carries a fragment, which is not a usable credential.\n * - `\"all\"` — the counter advanced by the whole payload and the failure came\n * after. stdout carries the credential.\n *\n * `bytesWritten` exists on the socket stdout is when it is a TTY or a pipe. A\n * file redirect gets `SyncWriteStream`, which has no counter and writes\n * synchronously — there a callback error means the `writeSync` itself failed,\n * so nothing was emitted.\n */\nexport type RawStdoutEmission = \"none\" | \"partial\" | \"all\";\n\nexport class RawStdoutWriteError extends Error {\n\treadonly emitted: RawStdoutEmission;\n\n\tconstructor(message: string, options: { cause: unknown; emitted: RawStdoutEmission }) {\n\t\tsuper(message, { cause: options.cause });\n\t\tthis.name = \"RawStdoutWriteError\";\n\t\tthis.emitted = options.emitted;\n\t}\n}\n\n/** Bytes stdout has handed to the OS, when the stream counts them. */\nfunction rawStdoutBytesWritten(): number | undefined {\n\tconst counted = (process.stdout as { bytesWritten?: unknown }).bytesWritten;\n\treturn typeof counted === \"number\" ? counted : undefined;\n}\n\nfunction classifyEmission(\n\tbefore: number | undefined,\n\tafter: number | undefined,\n\tpayloadBytes: number,\n): RawStdoutEmission {\n\tif (before === undefined || after === undefined) return \"none\";\n\tconst flushed = after - before;\n\tif (flushed <= 0) return \"none\";\n\treturn flushed >= payloadBytes ? \"all\" : \"partial\";\n}\n\n/**\n * Write one chunk to the real stdout as a single awaited operation.\n *\n * Differs from `writeRawStdout` in the two ways the credential egress needs.\n * The rejection reaches the caller instead of exiting the process, so the\n * caller can report a cause of its own. And the chunk is handed to stdout\n * exactly once — the ENOBUFS/EAGAIN retry in `writeRawStdoutChunk` would\n * re-send the whole payload, which for a secret risks emitting it twice.\n *\n * Rejects with `RawStdoutWriteError`, whose `emitted` says how much left. A\n * caller that must never report a failure over a stream carrying a whole\n * credential — nor claim success over one carrying none of it, nor part of it —\n * branches on that rather than on the presence of an error.\n */\nexport function writeRawStdoutOnce(text: string): Promise<void> {\n\tif (text.length === 0) {\n\t\treturn Promise.resolve();\n\t}\n\tconst payloadBytes = Buffer.byteLength(text);\n\tconst write = rawStdoutWriteTail.then(\n\t\t() =>\n\t\t\tnew Promise<void>((resolve, reject) => {\n\t\t\t\tconst before = rawStdoutBytesWritten();\n\t\t\t\ttry {\n\t\t\t\t\tgetRawStdoutWrite()(text, (error) => {\n\t\t\t\t\t\tif (!error) {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst emitted = classifyEmission(before, rawStdoutBytesWritten(), payloadBytes);\n\t\t\t\t\t\treject(new RawStdoutWriteError(error.message, { cause: error, emitted }));\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew RawStdoutWriteError(error instanceof Error ? error.message : String(error), {\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\temitted: \"none\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}),\n\t);\n\t// The failure belongs to this caller alone; the shared tail stays settled so\n\t// a later writer is not handed someone else's rejection.\n\trawStdoutWriteTail = write.then(\n\t\t() => {},\n\t\t() => {},\n\t);\n\treturn write;\n}\n\nexport async function waitForRawStdoutBackpressure(): Promise<void> {\n\twhile (true) {\n\t\tconst tail = rawStdoutWriteTail;\n\t\tawait tail;\n\t\tif (tail === rawStdoutWriteTail) {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nexport async function flushRawStdout(): Promise<void> {\n\tawait waitForRawStdoutBackpressure();\n\tawait writeRawStdoutChunk(\"\");\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { PackageManagerContext, SourceScope } from "./package-manager-types.ts";
2
2
  export declare function getHomeDir(): string;
3
- export declare function getTemporaryDir(prefix: string, suffix?: string): string;
3
+ export declare function getTemporaryDir(prefix: string, suffix?: string, ref?: string): string;
4
4
  export declare function getBaseDirsForScope(context: PackageManagerContext, scope: SourceScope): string[];
5
5
  export declare function getBaseDirForScope(context: PackageManagerContext, scope: SourceScope): string;
6
6
  export declare function resolveManagerPath(context: PackageManagerContext, input: string): string;
@@ -9,6 +9,7 @@ export declare function getNpmInstallRoot(context: PackageManagerContext, scope:
9
9
  export declare function getGitInstallPath(context: PackageManagerContext, source: {
10
10
  host: string;
11
11
  path: string;
12
+ ref?: string;
12
13
  }, scope: SourceScope): string;
13
14
  export declare function getGitInstallRoot(context: PackageManagerContext, scope: SourceScope): string | undefined;
14
15
  //# sourceMappingURL=package-manager-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-paths.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQhG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAQhH;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACtC,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAQxG"}
1
+ {"version":3,"file":"package-manager-paths.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAQhG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAQhH;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,KAAK,EAAE,WAAW,GAChB,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAQxG"}
@@ -6,9 +6,9 @@ import { resolvePath } from "../utils/paths.js";
6
6
  export function getHomeDir() {
7
7
  return process.env.HOME || homedir();
8
8
  }
9
- export function getTemporaryDir(prefix, suffix) {
9
+ export function getTemporaryDir(prefix, suffix, ref) {
10
10
  const hash = createHash("sha256")
11
- .update(`${prefix}-${suffix ?? ""}`)
11
+ .update(`${prefix}-${suffix ?? ""}${ref ? `@${ref}` : ""}`)
12
12
  .digest("hex")
13
13
  .slice(0, 8);
14
14
  return join(tmpdir(), `${APP_NAME}-extensions`, prefix, hash, suffix ?? "");
@@ -42,7 +42,8 @@ export function getNpmInstallRoot(context, scope, temporary) {
42
42
  }
43
43
  export function getGitInstallPath(context, source, scope) {
44
44
  if (scope === "temporary") {
45
- return getTemporaryDir(`git-${source.host}`, source.path);
45
+ // Include the ref in the hash so each pinned ref gets its own checkout.
46
+ return getTemporaryDir(`git-${source.host}`, source.path, source.ref);
46
47
  }
47
48
  if (scope === "project") {
48
49
  return join(context.cwd, CONFIG_DIR_NAME, "git", source.host, source.path);
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-paths.js","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { APP_NAME, CONFIG_DIR_NAME, getAgentDir, getAgentDirs, getProjectConfigDirs } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nexport function getHomeDir(): string {\n\treturn process.env.HOME || homedir();\n}\n\nexport function getTemporaryDir(prefix: string, suffix?: string): string {\n\tconst hash = createHash(\"sha256\")\n\t\t.update(`${prefix}-${suffix ?? \"\"}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 8);\n\treturn join(tmpdir(), `${APP_NAME}-extensions`, prefix, hash, suffix ?? \"\");\n}\n\nexport function getBaseDirsForScope(context: PackageManagerContext, scope: SourceScope): string[] {\n\tif (scope === \"project\") {\n\t\treturn getProjectConfigDirs(context.cwd);\n\t}\n\tif (scope === \"user\") {\n\t\treturn context.agentDir === getAgentDir() ? getAgentDirs() : [context.agentDir];\n\t}\n\treturn [context.cwd];\n}\n\nexport function getBaseDirForScope(context: PackageManagerContext, scope: SourceScope): string {\n\treturn getBaseDirsForScope(context, scope)[0]!;\n}\n\nexport function resolveManagerPath(context: PackageManagerContext, input: string): string {\n\treturn resolvePath(input, context.cwd, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function resolvePathFromBase(input: string, baseDir: string): string {\n\treturn resolvePath(input, baseDir, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function getNpmInstallRoot(context: PackageManagerContext, scope: SourceScope, temporary: boolean): string {\n\tif (temporary) {\n\t\treturn getTemporaryDir(\"npm\");\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\");\n\t}\n\treturn join(context.agentDir, \"npm\");\n}\n\nexport function getGitInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: { host: string; path: string },\n\tscope: SourceScope,\n): string {\n\tif (scope === \"temporary\") {\n\t\treturn getTemporaryDir(`git-${source.host}`, source.path);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\", source.host, source.path);\n\t}\n\treturn join(context.agentDir, \"git\", source.host, source.path);\n}\n\nexport function getGitInstallRoot(context: PackageManagerContext, scope: SourceScope): string | undefined {\n\tif (scope === \"temporary\") {\n\t\treturn undefined;\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\");\n\t}\n\treturn join(context.agentDir, \"git\");\n}\n"]}
1
+ {"version":3,"file":"package-manager-paths.js","sourceRoot":"","sources":["../../src/core/package-manager-paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { APP_NAME, CONFIG_DIR_NAME, getAgentDir, getAgentDirs, getProjectConfigDirs } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport type { PackageManagerContext, SourceScope } from \"./package-manager-types.ts\";\n\nexport function getHomeDir(): string {\n\treturn process.env.HOME || homedir();\n}\n\nexport function getTemporaryDir(prefix: string, suffix?: string, ref?: string): string {\n\tconst hash = createHash(\"sha256\")\n\t\t.update(`${prefix}-${suffix ?? \"\"}${ref ? `@${ref}` : \"\"}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 8);\n\treturn join(tmpdir(), `${APP_NAME}-extensions`, prefix, hash, suffix ?? \"\");\n}\n\nexport function getBaseDirsForScope(context: PackageManagerContext, scope: SourceScope): string[] {\n\tif (scope === \"project\") {\n\t\treturn getProjectConfigDirs(context.cwd);\n\t}\n\tif (scope === \"user\") {\n\t\treturn context.agentDir === getAgentDir() ? getAgentDirs() : [context.agentDir];\n\t}\n\treturn [context.cwd];\n}\n\nexport function getBaseDirForScope(context: PackageManagerContext, scope: SourceScope): string {\n\treturn getBaseDirsForScope(context, scope)[0]!;\n}\n\nexport function resolveManagerPath(context: PackageManagerContext, input: string): string {\n\treturn resolvePath(input, context.cwd, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function resolvePathFromBase(input: string, baseDir: string): string {\n\treturn resolvePath(input, baseDir, { homeDir: getHomeDir(), trim: true });\n}\n\nexport function getNpmInstallRoot(context: PackageManagerContext, scope: SourceScope, temporary: boolean): string {\n\tif (temporary) {\n\t\treturn getTemporaryDir(\"npm\");\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\");\n\t}\n\treturn join(context.agentDir, \"npm\");\n}\n\nexport function getGitInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: { host: string; path: string; ref?: string },\n\tscope: SourceScope,\n): string {\n\tif (scope === \"temporary\") {\n\t\t// Include the ref in the hash so each pinned ref gets its own checkout.\n\t\treturn getTemporaryDir(`git-${source.host}`, source.path, source.ref);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\", source.host, source.path);\n\t}\n\treturn join(context.agentDir, \"git\", source.host, source.path);\n}\n\nexport function getGitInstallRoot(context: PackageManagerContext, scope: SourceScope): string | undefined {\n\tif (scope === \"temporary\") {\n\t\treturn undefined;\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"git\");\n\t}\n\treturn join(context.agentDir, \"git\");\n}\n"]}
@@ -10,6 +10,7 @@ import { resolveExtensionSources as resolveExtensionSourcesFromContext, resolveP
10
10
  import { addSourceToSettings as addSourceToSettingsInContext, getInstalledPath as getInstalledPathFromContext, listConfiguredPackages as listConfiguredPackagesFromContext, removeSourceFromSettings as removeSourceFromSettingsInContext, } from "./package-manager-settings.js";
11
11
  import { getPackageIdentity as getPackageIdentityFromContext, parseSource as parsePackageSource, } from "./package-manager-source.js";
12
12
  export class DefaultPackageManager {
13
+ context;
13
14
  constructor(options) {
14
15
  this.context = {
15
16
  cwd: resolveAbsolutePath(options.cwd),
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess, ChildProcessByStdio } from \"node:child_process\";\nimport type { Readable } from \"node:stream\";\nimport { spawnProcess, spawnProcessSync } from \"../utils/child-process.ts\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { resolvePath as resolveAbsolutePath } from \"../utils/paths.ts\";\nimport { isStdoutTakenOver } from \"./output-guard.ts\";\nimport { getCommandEnv } from \"./package-manager-env.ts\";\nimport {\n\tgetLocalGitUpdateTarget as getLocalGitUpdateTargetFromContext,\n\tgitHasAvailableUpdate as gitHasAvailableUpdateFromContext,\n\trefreshTemporaryGitSource as refreshTemporaryGitSourceFromContext,\n\tupdateGit as updateGitFromContext,\n} from \"./package-manager-git.ts\";\nimport {\n\tgetGlobalNpmRoot as getGlobalNpmRootFromContext,\n\tgetLatestNpmVersion as getLatestNpmVersionFromContext,\n} from \"./package-manager-npm.ts\";\nimport {\n\tcheckForAvailableUpdates as checkForAvailableUpdatesFromContext,\n\tinstall as installFromContext,\n\tinstallParsedSource as installParsedSourceFromContext,\n\tremove as removeFromContext,\n\tupdate as updateFromContext,\n} from \"./package-manager-operations.ts\";\nimport { getGitInstallPath as getGitInstallPathFromContext } from \"./package-manager-paths.ts\";\nimport {\n\tresolveExtensionSources as resolveExtensionSourcesFromContext,\n\tresolvePackages,\n} from \"./package-manager-resolver.ts\";\nimport {\n\taddSourceToSettings as addSourceToSettingsInContext,\n\tgetInstalledPath as getInstalledPathFromContext,\n\tlistConfiguredPackages as listConfiguredPackagesFromContext,\n\tremoveSourceFromSettings as removeSourceFromSettingsInContext,\n} from \"./package-manager-settings.ts\";\nimport {\n\tgetPackageIdentity as getPackageIdentityFromContext,\n\tparseSource as parsePackageSource,\n} from \"./package-manager-source.ts\";\nimport type {\n\tConfiguredPackage,\n\tGitUpdateTargetInfo,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerContext,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tParsedSource,\n\tProgressCallback,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nexport type {\n\tConfiguredPackage,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n\tResolveExtensionSourcesOptions,\n\tResourceConfigurationOrigin,\n} from \"./package-manager-types.ts\";\n\nexport class DefaultPackageManager implements PackageManager {\n\tprivate readonly context: PackageManagerContext;\n\n\tconstructor(options: PackageManagerOptions) {\n\t\tthis.context = {\n\t\t\tcwd: resolveAbsolutePath(options.cwd),\n\t\t\tagentDir: resolveAbsolutePath(options.agentDir),\n\t\t\tsettingsManager: options.settingsManager,\n\t\t};\n\t\tthis.context.driver = {\n\t\t\trunCommand: (command, args, runOptions) => this.runCommand(command, args, runOptions),\n\t\t\trunCommandCapture: (command, args, runOptions) => this.runCommandCapture(command, args, runOptions),\n\t\t\trunCommandSync: (command, args) => this.runCommandSync(command, args),\n\t\t\tinstallParsedSource: (parsed, scope) => this.installParsedSource(parsed, scope),\n\t\t\tupdateGit: (source, scope) => this.updateGit(source, scope),\n\t\t\tgitHasAvailableUpdate: (installedPath) => this.gitHasAvailableUpdate(installedPath),\n\t\t\trefreshTemporaryGitSource: (source, sourceStr) => this.refreshTemporaryGitSource(source, sourceStr),\n\t\t\tgetLocalGitUpdateTarget: (installedPath) => this.getLocalGitUpdateTarget(installedPath),\n\t\t\tgetGlobalNpmRoot: () => this.getGlobalNpmRoot(),\n\t\t\tparseSource: (source) => this.parseSource(source),\n\t\t\tgetPackageIdentity: (source, scope) => this.getPackageIdentity(source, scope),\n\t\t\tgetGitInstallPath: (source, scope) => this.getGitInstallPath(source, scope),\n\t\t\tgetLatestNpmVersion: (packageSpec, range) => this.getLatestNpmVersion(packageSpec, range),\n\t\t};\n\t}\n\n\tsetProgressCallback(callback: ProgressCallback | undefined): void {\n\t\tthis.context.progressCallback = callback;\n\t}\n\n\taddSourceToSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn addSourceToSettingsInContext(this.context, source, options);\n\t}\n\n\tremoveSourceFromSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn removeSourceFromSettingsInContext(this.context, source, options);\n\t}\n\n\tgetInstalledPath(source: string, scope: \"user\" | \"project\"): string | undefined {\n\t\treturn getInstalledPathFromContext(this.context, source, scope);\n\t}\n\n\tasync resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths> {\n\t\treturn resolvePackages(this.context, onMissing);\n\t}\n\n\tasync resolveExtensionSources(\n\t\tsources: PackageSource[],\n\t\toptions?: ResolveExtensionSourcesOptions,\n\t): Promise<ResolvedPaths> {\n\t\treturn resolveExtensionSourcesFromContext(this.context, sources, options);\n\t}\n\n\tlistConfiguredPackages(): ConfiguredPackage[] {\n\t\treturn listConfiguredPackagesFromContext(this.context);\n\t}\n\n\tasync install(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait installFromContext(this.context, source, options);\n\t}\n\n\tasync installAndPersist(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait this.install(source, options);\n\t\tthis.addSourceToSettings(source, options);\n\t}\n\n\tasync remove(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait removeFromContext(this.context, source, options);\n\t}\n\n\tasync removeAndPersist(source: string, options?: { local?: boolean }): Promise<boolean> {\n\t\tawait this.remove(source, options);\n\t\treturn this.removeSourceFromSettings(source, options);\n\t}\n\n\tasync update(source?: string): Promise<void> {\n\t\tawait updateFromContext(this.context, source);\n\t}\n\n\tasync checkForAvailableUpdates(): Promise<PackageUpdate[]> {\n\t\treturn checkForAvailableUpdatesFromContext(this.context);\n\t}\n\n\tprivate parseSource(source: string): ParsedSource {\n\t\treturn parsePackageSource(source);\n\t}\n\n\tprivate getPackageIdentity(source: string, scope?: SourceScope): string {\n\t\treturn getPackageIdentityFromContext(this.context, source, scope);\n\t}\n\n\tprivate getGitInstallPath(source: GitSource, scope: SourceScope): string {\n\t\treturn getGitInstallPathFromContext(this.context, source, scope);\n\t}\n\n\tprivate async installParsedSource(parsed: ParsedSource, scope: SourceScope): Promise<void> {\n\t\tawait installParsedSourceFromContext(this.context, parsed, scope);\n\t}\n\n\tprivate async updateGit(source: GitSource, scope: SourceScope): Promise<void> {\n\t\tawait updateGitFromContext(this.context, source, scope);\n\t}\n\n\tprivate async gitHasAvailableUpdate(installedPath: string): Promise<boolean> {\n\t\treturn gitHasAvailableUpdateFromContext(this.context, installedPath);\n\t}\n\n\tprivate async refreshTemporaryGitSource(source: GitSource, sourceStr: string): Promise<void> {\n\t\tawait refreshTemporaryGitSourceFromContext(this.context, source, sourceStr);\n\t}\n\n\tprivate async getLocalGitUpdateTarget(installedPath: string): Promise<GitUpdateTargetInfo> {\n\t\treturn getLocalGitUpdateTargetFromContext(this.context, installedPath);\n\t}\n\n\tprivate getGlobalNpmRoot(): string {\n\t\treturn getGlobalNpmRootFromContext(this.context);\n\t}\n\n\tprivate async getLatestNpmVersion(packageSpec: string, range?: string): Promise<string> {\n\t\treturn getLatestNpmVersionFromContext(this.context, packageSpec, range);\n\t}\n\n\tprivate spawnCommand(command: string, args: string[], options?: { cwd?: string }): ChildProcess {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: isStdoutTakenOver() ? [\"ignore\", 2, 2] : \"inherit\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t}\n\n\tprivate spawnCaptureCommand(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; env?: Record<string, string> },\n\t): ChildProcessByStdio<null, Readable, Readable> {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tenv: getCommandEnv(command, options?.env),\n\t\t});\n\t}\n\n\tprivate runCommandCapture(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n\t): Promise<string> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCaptureCommand(command, args, options);\n\t\t\tlet stdout = \"\";\n\t\t\tlet stderr = \"\";\n\t\t\tlet timedOut = false;\n\t\t\tconst timeout =\n\t\t\t\ttypeof options?.timeoutMs === \"number\"\n\t\t\t\t\t? setTimeout(() => {\n\t\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\t\tchild.kill();\n\t\t\t\t\t\t}, options.timeoutMs)\n\t\t\t\t\t: undefined;\n\n\t\t\tchild.stdout?.on(\"data\", (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\t\t\tchild.stderr?.on(\"data\", (data) => {\n\t\t\t\tstderr += data.toString();\n\t\t\t});\n\t\t\tchild.once(\"error\", (error) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t\tchild.once(\"close\", (code, signal) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (timedOut) {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} timed out after ${options?.timeoutMs}ms`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise(stdout.trim());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst exitStatus = code === null ? `signal ${signal ?? \"unknown\"}` : `code ${code}`;\n\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${exitStatus}: ${stderr || stdout}`));\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCommand(command, args, options);\n\t\t\tchild.on(\"error\", reject);\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise();\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with code ${code}`));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommandSync(command: string, args: string[]): string {\n\t\tconst result = spawnProcessSync(command, args, {\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tencoding: \"utf-8\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t\tif (result.error || result.status !== 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to run ${command} ${args.join(\" \")}: ${result.error?.message || result.stderr || result.stdout}`,\n\t\t\t);\n\t\t}\n\t\treturn (result.stdout || result.stderr || \"\").trim();\n\t}\n}\n"]}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/core/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess, ChildProcessByStdio } from \"node:child_process\";\nimport type { Readable } from \"node:stream\";\nimport { spawnProcess, spawnProcessSync } from \"../utils/child-process.ts\";\nimport type { GitSource } from \"../utils/git.ts\";\nimport { resolvePath as resolveAbsolutePath } from \"../utils/paths.ts\";\nimport { isStdoutTakenOver } from \"./output-guard.ts\";\nimport { getCommandEnv } from \"./package-manager-env.ts\";\nimport {\n\tgetLocalGitUpdateTarget as getLocalGitUpdateTargetFromContext,\n\tgitHasAvailableUpdate as gitHasAvailableUpdateFromContext,\n\trefreshTemporaryGitSource as refreshTemporaryGitSourceFromContext,\n\tupdateGit as updateGitFromContext,\n} from \"./package-manager-git.ts\";\nimport {\n\tgetGlobalNpmRoot as getGlobalNpmRootFromContext,\n\tgetLatestNpmVersion as getLatestNpmVersionFromContext,\n} from \"./package-manager-npm.ts\";\nimport {\n\tcheckForAvailableUpdates as checkForAvailableUpdatesFromContext,\n\tinstall as installFromContext,\n\tinstallParsedSource as installParsedSourceFromContext,\n\tremove as removeFromContext,\n\tupdate as updateFromContext,\n} from \"./package-manager-operations.ts\";\nimport { getGitInstallPath as getGitInstallPathFromContext } from \"./package-manager-paths.ts\";\nimport {\n\tresolveExtensionSources as resolveExtensionSourcesFromContext,\n\tresolvePackages,\n} from \"./package-manager-resolver.ts\";\nimport {\n\taddSourceToSettings as addSourceToSettingsInContext,\n\tgetInstalledPath as getInstalledPathFromContext,\n\tlistConfiguredPackages as listConfiguredPackagesFromContext,\n\tremoveSourceFromSettings as removeSourceFromSettingsInContext,\n} from \"./package-manager-settings.ts\";\nimport {\n\tgetPackageIdentity as getPackageIdentityFromContext,\n\tparseSource as parsePackageSource,\n} from \"./package-manager-source.ts\";\nimport type {\n\tConfiguredPackage,\n\tGitUpdateTargetInfo,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerContext,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tParsedSource,\n\tProgressCallback,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nexport type {\n\tConfiguredPackage,\n\tMissingSourceAction,\n\tPackageManager,\n\tPackageManagerOptions,\n\tPackageUpdate,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n\tResolveExtensionSourcesOptions,\n\tResourceConfigurationOrigin,\n} from \"./package-manager-types.ts\";\n\nexport class DefaultPackageManager implements PackageManager {\n\tprivate readonly context: PackageManagerContext;\n\n\tconstructor(options: PackageManagerOptions) {\n\t\tthis.context = {\n\t\t\tcwd: resolveAbsolutePath(options.cwd),\n\t\t\tagentDir: resolveAbsolutePath(options.agentDir),\n\t\t\tsettingsManager: options.settingsManager,\n\t\t};\n\t\tthis.context.driver = {\n\t\t\trunCommand: (command, args, runOptions) => this.runCommand(command, args, runOptions),\n\t\t\trunCommandCapture: (command, args, runOptions) => this.runCommandCapture(command, args, runOptions),\n\t\t\trunCommandSync: (command, args) => this.runCommandSync(command, args),\n\t\t\tinstallParsedSource: (parsed, scope) => this.installParsedSource(parsed, scope),\n\t\t\tupdateGit: (source, scope) => this.updateGit(source, scope),\n\t\t\tgitHasAvailableUpdate: (installedPath) => this.gitHasAvailableUpdate(installedPath),\n\t\t\trefreshTemporaryGitSource: (source, sourceStr) => this.refreshTemporaryGitSource(source, sourceStr),\n\t\t\tgetLocalGitUpdateTarget: (installedPath) => this.getLocalGitUpdateTarget(installedPath),\n\t\t\tgetGlobalNpmRoot: () => this.getGlobalNpmRoot(),\n\t\t\tparseSource: (source) => this.parseSource(source),\n\t\t\tgetPackageIdentity: (source, scope) => this.getPackageIdentity(source, scope),\n\t\t\tgetGitInstallPath: (source, scope) => this.getGitInstallPath(source, scope),\n\t\t\tgetLatestNpmVersion: (packageSpec, range) => this.getLatestNpmVersion(packageSpec, range),\n\t\t};\n\t}\n\n\tsetProgressCallback(callback: ProgressCallback | undefined): void {\n\t\tthis.context.progressCallback = callback;\n\t}\n\n\taddSourceToSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn addSourceToSettingsInContext(this.context, source, options);\n\t}\n\n\tremoveSourceFromSettings(source: string, options?: { local?: boolean }): boolean {\n\t\treturn removeSourceFromSettingsInContext(this.context, source, options);\n\t}\n\n\tgetInstalledPath(source: string, scope: \"user\" | \"project\"): string | undefined {\n\t\treturn getInstalledPathFromContext(this.context, source, scope);\n\t}\n\n\tasync resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths> {\n\t\treturn resolvePackages(this.context, onMissing);\n\t}\n\n\tasync resolveExtensionSources(\n\t\tsources: PackageSource[],\n\t\toptions?: ResolveExtensionSourcesOptions,\n\t): Promise<ResolvedPaths> {\n\t\treturn resolveExtensionSourcesFromContext(this.context, sources, options);\n\t}\n\n\tlistConfiguredPackages(): ConfiguredPackage[] {\n\t\treturn listConfiguredPackagesFromContext(this.context);\n\t}\n\n\tasync install(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait installFromContext(this.context, source, options);\n\t}\n\n\tasync installAndPersist(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait this.install(source, options);\n\t\tthis.addSourceToSettings(source, options);\n\t}\n\n\tasync remove(source: string, options?: { local?: boolean }): Promise<void> {\n\t\tawait removeFromContext(this.context, source, options);\n\t}\n\n\tasync removeAndPersist(source: string, options?: { local?: boolean }): Promise<boolean> {\n\t\tawait this.remove(source, options);\n\t\treturn this.removeSourceFromSettings(source, options);\n\t}\n\n\tasync update(source?: string): Promise<void> {\n\t\tawait updateFromContext(this.context, source);\n\t}\n\n\tasync checkForAvailableUpdates(): Promise<PackageUpdate[]> {\n\t\treturn checkForAvailableUpdatesFromContext(this.context);\n\t}\n\n\tprivate parseSource(source: string): ParsedSource {\n\t\treturn parsePackageSource(source);\n\t}\n\n\tprivate getPackageIdentity(source: string, scope?: SourceScope): string {\n\t\treturn getPackageIdentityFromContext(this.context, source, scope);\n\t}\n\n\tprivate getGitInstallPath(source: GitSource, scope: SourceScope): string {\n\t\treturn getGitInstallPathFromContext(this.context, source, scope);\n\t}\n\n\tprivate async installParsedSource(parsed: ParsedSource, scope: SourceScope): Promise<void> {\n\t\tawait installParsedSourceFromContext(this.context, parsed, scope);\n\t}\n\n\tprivate async updateGit(source: GitSource, scope: SourceScope): Promise<void> {\n\t\tawait updateGitFromContext(this.context, source, scope);\n\t}\n\n\tprivate async gitHasAvailableUpdate(installedPath: string): Promise<boolean> {\n\t\treturn gitHasAvailableUpdateFromContext(this.context, installedPath);\n\t}\n\n\tprivate async refreshTemporaryGitSource(source: GitSource, sourceStr: string): Promise<void> {\n\t\tawait refreshTemporaryGitSourceFromContext(this.context, source, sourceStr);\n\t}\n\n\tprivate async getLocalGitUpdateTarget(installedPath: string): Promise<GitUpdateTargetInfo> {\n\t\treturn getLocalGitUpdateTargetFromContext(this.context, installedPath);\n\t}\n\n\tprivate getGlobalNpmRoot(): string {\n\t\treturn getGlobalNpmRootFromContext(this.context);\n\t}\n\n\tprivate async getLatestNpmVersion(packageSpec: string, range?: string): Promise<string> {\n\t\treturn getLatestNpmVersionFromContext(this.context, packageSpec, range);\n\t}\n\n\tprivate spawnCommand(command: string, args: string[], options?: { cwd?: string }): ChildProcess {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: isStdoutTakenOver() ? [\"ignore\", 2, 2] : \"inherit\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t}\n\n\tprivate spawnCaptureCommand(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; env?: Record<string, string> },\n\t): ChildProcessByStdio<null, Readable, Readable> {\n\t\treturn spawnProcess(command, args, {\n\t\t\tcwd: options?.cwd,\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tenv: getCommandEnv(command, options?.env),\n\t\t});\n\t}\n\n\tprivate runCommandCapture(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n\t): Promise<string> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCaptureCommand(command, args, options);\n\t\t\tlet stdout = \"\";\n\t\t\tlet stderr = \"\";\n\t\t\tlet timedOut = false;\n\t\t\tconst timeout =\n\t\t\t\ttypeof options?.timeoutMs === \"number\"\n\t\t\t\t\t? setTimeout(() => {\n\t\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\t\tchild.kill();\n\t\t\t\t\t\t}, options.timeoutMs)\n\t\t\t\t\t: undefined;\n\n\t\t\tchild.stdout?.on(\"data\", (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\t\t\tchild.stderr?.on(\"data\", (data) => {\n\t\t\t\tstderr += data.toString();\n\t\t\t});\n\t\t\tchild.once(\"error\", (error) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t\tchild.once(\"close\", (code, signal) => {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (timedOut) {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} timed out after ${options?.timeoutMs}ms`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise(stdout.trim());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst exitStatus = code === null ? `signal ${signal ?? \"unknown\"}` : `code ${code}`;\n\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with ${exitStatus}: ${stderr || stdout}`));\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void> {\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tconst child = this.spawnCommand(command, args, options);\n\t\t\tchild.on(\"error\", reject);\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) {\n\t\t\t\t\tresolvePromise();\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error(`${command} ${args.join(\" \")} failed with code ${code}`));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate runCommandSync(command: string, args: string[]): string {\n\t\tconst result = spawnProcessSync(command, args, {\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\tencoding: \"utf-8\",\n\t\t\tenv: getCommandEnv(command),\n\t\t});\n\t\tif (result.error || result.status !== 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to run ${command} ${args.join(\" \")}: ${result.error?.message || result.stderr || result.stdout}`,\n\t\t\t);\n\t\t}\n\t\treturn (result.stdout || result.stderr || \"\").trim();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader-assets.d.ts","sourceRoot":"","sources":["../../src/core/resource-loader-assets.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AA4CvE,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAOf;AAmBD,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAqBD,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"resource-loader-assets.d.ts","sourceRoot":"","sources":["../../src/core/resource-loader-assets.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AA4CvE,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAOf;AAmBD,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAqBD,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -1,6 +1,7 @@
1
1
  import { access, readdir, readFile, stat } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { getProjectConfigDirs } from "../config.js";
4
+ import { resolveColorMode } from "../modes/interactive/theme/color-utils.js";
4
5
  import { loadThemeFromContent } from "../modes/interactive/theme/theme.js";
5
6
  import { yieldToEventLoopIfSlow } from "../utils/event-loop.js";
6
7
  import { loadPromptTemplatesAsync } from "./prompt-templates-async.js";
@@ -110,6 +111,7 @@ function loadAndDedupeThemes(loaded) {
110
111
  }
111
112
  async function loadThemesAsync(loader, paths, includeDefaults = true) {
112
113
  const state = resourceInternals(loader);
114
+ const colorMode = resolveColorMode(state.settingsManager.getTerminalCapabilityOverrides().trueColor);
113
115
  const themes = [];
114
116
  const diagnostics = [];
115
117
  if (includeDefaults) {
@@ -117,7 +119,7 @@ async function loadThemesAsync(loader, paths, includeDefaults = true) {
117
119
  ...getLoaderAgentDirs(state.agentDir).map((agentDir) => join(agentDir, "themes")),
118
120
  ...getProjectThemeDirs(state.cwd),
119
121
  ]) {
120
- await loadThemesFromDirAsync(dir, themes, diagnostics);
122
+ await loadThemesFromDirAsync(dir, themes, diagnostics, colorMode);
121
123
  }
122
124
  }
123
125
  const startedAt = Date.now();
@@ -131,9 +133,9 @@ async function loadThemesAsync(loader, paths, includeDefaults = true) {
131
133
  try {
132
134
  const stats = await stat(resolved);
133
135
  if (stats.isDirectory())
134
- await loadThemesFromDirAsync(resolved, themes, diagnostics);
136
+ await loadThemesFromDirAsync(resolved, themes, diagnostics, colorMode);
135
137
  else if (stats.isFile() && resolved.endsWith(".json"))
136
- await loadThemeFromFileAsync(resolved, themes, diagnostics);
138
+ await loadThemeFromFileAsync(resolved, themes, diagnostics, colorMode);
137
139
  else
138
140
  diagnostics.push({ type: "warning", message: "theme path is not a json file", path: resolved });
139
141
  }
@@ -147,7 +149,7 @@ async function loadThemesAsync(loader, paths, includeDefaults = true) {
147
149
  function getProjectThemeDirs(cwd) {
148
150
  return getProjectConfigDirs(cwd).map((configDir) => join(configDir, "themes"));
149
151
  }
150
- async function loadThemesFromDirAsync(dir, themes, diagnostics) {
152
+ async function loadThemesFromDirAsync(dir, themes, diagnostics, colorMode) {
151
153
  if (!(await existsAsync(dir)))
152
154
  return;
153
155
  const startedAt = Date.now();
@@ -165,7 +167,7 @@ async function loadThemesFromDirAsync(dir, themes, diagnostics) {
165
167
  }
166
168
  }
167
169
  if (isFile && entry.name.endsWith(".json"))
168
- await loadThemeFromFileAsync(join(dir, entry.name), themes, diagnostics);
170
+ await loadThemeFromFileAsync(join(dir, entry.name), themes, diagnostics, colorMode);
169
171
  }
170
172
  }
171
173
  catch (error) {
@@ -173,9 +175,9 @@ async function loadThemesFromDirAsync(dir, themes, diagnostics) {
173
175
  diagnostics.push({ type: "warning", message, path: dir });
174
176
  }
175
177
  }
176
- async function loadThemeFromFileAsync(filePath, themes, diagnostics) {
178
+ async function loadThemeFromFileAsync(filePath, themes, diagnostics, colorMode) {
177
179
  try {
178
- themes.push(loadThemeFromContent(filePath, await readFile(filePath, "utf-8")));
180
+ themes.push(loadThemeFromContent(filePath, await readFile(filePath, "utf-8"), colorMode));
179
181
  }
180
182
  catch (error) {
181
183
  const message = error instanceof Error ? error.message : "failed to load theme";
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader-assets.js","sourceRoot":"","sources":["../../src/core/resource-loader-assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.js\";\nimport { loadThemeFromContent, type Theme } from \"../modes/interactive/theme/theme.js\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport type { ResourceDiagnostic, ResourceOverlap } from \"./diagnostics.ts\";\nimport type { PathMetadata } from \"./package-manager.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport { loadPromptTemplatesAsync } from \"./prompt-templates-async.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport { getLoaderAgentDirs, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport { findSourceInfoForPath, getDefaultSourceInfoForPath } from \"./resource-loader-source-info.ts\";\nimport { buildSkillCatalog, decorateSkillDiagnostics } from \"./skill-catalog.ts\";\nimport type { LoadSkillsResult, Skill } from \"./skills.ts\";\nimport { loadSkillsAsync } from \"./skills-async.ts\";\n\nconst RESOURCE_LOAD_YIELD_AFTER_MS = 8;\n\nasync function existsAsync(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction applySkillsResult(\n\tloader: DefaultResourceLoader,\n\tskillsResult: LoadSkillsResult,\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst withSourceInfo = (skill: Skill): Skill => ({\n\t\t...skill,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, skill.filePath, state.extensionSkillSourceInfos, metadataByPath) ??\n\t\t\tskill.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, skill.filePath),\n\t});\n\tconst sourcedResult = {\n\t\tskills: skillsResult.skills.map(withSourceInfo),\n\t\tdiagnostics: skillsResult.diagnostics,\n\t};\n\tconst resolvedSkills = state.skillsOverride ? state.skillsOverride(sourcedResult) : sourcedResult;\n\tstate.skills = resolvedSkills.skills.map(withSourceInfo);\n\tconst retainedNames = new Set(state.skills.map((skill) => skill.name));\n\tconst candidates = skillsResult.candidates.map(withSourceInfo).filter((skill) => retainedNames.has(skill.name));\n\tstate.skillCatalog = buildSkillCatalog(candidates, state.skills);\n\tstate.skillDiagnostics = decorateSkillDiagnostics(resolvedSkills.diagnostics, state.skillCatalog);\n}\n\nexport async function updateSkillsFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tskillPaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst skillsResult =\n\t\tstate.noSkills && skillPaths.length === 0\n\t\t\t? { skills: [], candidates: [], diagnostics: [] }\n\t\t\t: await loadSkillsAsync({ cwd: state.cwd, agentDir: state.agentDir, skillPaths, includeDefaults: false });\n\tapplySkillsResult(loader, skillsResult, metadataByPath);\n}\n\nfunction applyPromptsResult(\n\tloader: DefaultResourceLoader,\n\tpromptsResult: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] },\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst resolvedPrompts = state.promptsOverride ? state.promptsOverride(promptsResult) : promptsResult;\n\tstate.prompts = resolvedPrompts.prompts.map((prompt) => ({\n\t\t...prompt,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, prompt.filePath, state.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\tprompt.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, prompt.filePath),\n\t}));\n\tstate.promptDiagnostics = resolvedPrompts.diagnostics;\n}\n\nexport async function updatePromptsFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tpromptPaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst loaded =\n\t\tstate.noPromptTemplates && promptPaths.length === 0\n\t\t\t? { templates: [], diagnostics: [] }\n\t\t\t: await loadPromptTemplatesAsync({\n\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\tpromptPaths,\n\t\t\t\t\tincludeDefaults: false,\n\t\t\t\t});\n\tconst sourcedPrompts = loaded.templates.map((prompt) => ({\n\t\t...prompt,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, prompt.filePath, state.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\tprompt.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, prompt.filePath),\n\t}));\n\tfor (const prompt of sourcedPrompts) {\n\t\tif (prompt.sourceInfo) state.extensionPromptSourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t}\n\tconst deduped = dedupePrompts(sourcedPrompts);\n\tstate.extensionsResult.overlaps ??= [];\n\tconst overlaps = state.extensionsResult.overlaps;\n\tconst extensionOverlaps = overlaps.filter((overlap) => overlap.resourceType !== \"prompt\");\n\toverlaps.splice(0, overlaps.length, ...extensionOverlaps, ...deduped.overlaps);\n\tapplyPromptsResult(\n\t\tloader,\n\t\t{ prompts: deduped.prompts, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] },\n\t\tmetadataByPath,\n\t);\n}\n\nfunction applyThemesResult(\n\tloader: DefaultResourceLoader,\n\tthemesResult: { themes: Theme[]; diagnostics: ResourceDiagnostic[] },\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst resolvedThemes = state.themesOverride ? state.themesOverride(themesResult) : themesResult;\n\tstate.themes = resolvedThemes.themes.map((theme) => {\n\t\tconst sourcePath = theme.sourcePath;\n\t\ttheme.sourceInfo = sourcePath\n\t\t\t? (findSourceInfoForPath(loader, sourcePath, state.extensionThemeSourceInfos, metadataByPath) ??\n\t\t\t\ttheme.sourceInfo ??\n\t\t\t\tgetDefaultSourceInfoForPath(loader, sourcePath))\n\t\t\t: theme.sourceInfo;\n\t\treturn theme;\n\t});\n\tstate.themeDiagnostics = resolvedThemes.diagnostics;\n}\n\nexport async function updateThemesFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tthemePaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst themesResult =\n\t\tstate.noThemes && themePaths.length === 0\n\t\t\t? { themes: [], diagnostics: [] }\n\t\t\t: loadAndDedupeThemes(await loadThemesAsync(loader, themePaths, false));\n\tapplyThemesResult(loader, themesResult, metadataByPath);\n}\n\nfunction loadAndDedupeThemes(loaded: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }): {\n\tthemes: Theme[];\n\tdiagnostics: ResourceDiagnostic[];\n} {\n\tconst deduped = dedupeThemes(loaded.themes);\n\treturn { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };\n}\n\nasync function loadThemesAsync(\n\tloader: DefaultResourceLoader,\n\tpaths: string[],\n\tincludeDefaults = true,\n): Promise<{ themes: Theme[]; diagnostics: ResourceDiagnostic[] }> {\n\tconst state = resourceInternals(loader);\n\tconst themes: Theme[] = [];\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tif (includeDefaults) {\n\t\tfor (const dir of [\n\t\t\t...getLoaderAgentDirs(state.agentDir).map((agentDir) => join(agentDir, \"themes\")),\n\t\t\t...getProjectThemeDirs(state.cwd),\n\t\t]) {\n\t\t\tawait loadThemesFromDirAsync(dir, themes, diagnostics);\n\t\t}\n\t}\n\tconst startedAt = Date.now();\n\tfor (const p of paths) {\n\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_LOAD_YIELD_AFTER_MS);\n\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\tif (!(await existsAsync(resolved))) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path does not exist\", path: resolved });\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stats = await stat(resolved);\n\t\t\tif (stats.isDirectory()) await loadThemesFromDirAsync(resolved, themes, diagnostics);\n\t\t\telse if (stats.isFile() && resolved.endsWith(\".json\"))\n\t\t\t\tawait loadThemeFromFileAsync(resolved, themes, diagnostics);\n\t\t\telse diagnostics.push({ type: \"warning\", message: \"theme path is not a json file\", path: resolved });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme path\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: resolved });\n\t\t}\n\t}\n\treturn { themes, diagnostics };\n}\n\nfunction getProjectThemeDirs(cwd: string): string[] {\n\treturn getProjectConfigDirs(cwd).map((configDir) => join(configDir, \"themes\"));\n}\n\nasync function loadThemesFromDirAsync(dir: string, themes: Theme[], diagnostics: ResourceDiagnostic[]): Promise<void> {\n\tif (!(await existsAsync(dir))) return;\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_LOAD_YIELD_AFTER_MS);\n\t\t\tlet isFile = entry.isFile();\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tisFile = (await stat(join(dir, entry.name))).isFile();\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isFile && entry.name.endsWith(\".json\"))\n\t\t\t\tawait loadThemeFromFileAsync(join(dir, entry.name), themes, diagnostics);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"failed to read theme directory\";\n\t\tdiagnostics.push({ type: \"warning\", message, path: dir });\n\t}\n}\n\nasync function loadThemeFromFileAsync(\n\tfilePath: string,\n\tthemes: Theme[],\n\tdiagnostics: ResourceDiagnostic[],\n): Promise<void> {\n\ttry {\n\t\tthemes.push(loadThemeFromContent(filePath, await readFile(filePath, \"utf-8\")));\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"failed to load theme\";\n\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t}\n}\n\nfunction dedupePrompts(prompts: PromptTemplate[]): {\n\tprompts: PromptTemplate[];\n\tdiagnostics: ResourceDiagnostic[];\n\toverlaps: ResourceOverlap[];\n} {\n\tconst bundledByName = new Map<string, PromptTemplate>();\n\tfor (const prompt of prompts) {\n\t\tif (prompt.sourceInfo?.configurationOrigin === \"bundled\" && !bundledByName.has(prompt.name)) {\n\t\t\tbundledByName.set(prompt.name, prompt);\n\t\t}\n\t}\n\tconst seen = new Map<string, PromptTemplate>();\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tconst overlaps: ResourceOverlap[] = [];\n\tfor (const prompt of prompts) {\n\t\tconst bundled = bundledByName.get(prompt.name);\n\t\tif (prompt.sourceInfo?.configurationOrigin === \"inherited-pi\" && bundled?.sourceInfo) {\n\t\t\toverlaps.push({\n\t\t\t\tresourceType: \"prompt\",\n\t\t\t\tname: prompt.name,\n\t\t\t\tbundled: bundled.sourceInfo,\n\t\t\t\tinherited: prompt.sourceInfo,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = seen.get(prompt.name);\n\t\tif (existing) {\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"collision\",\n\t\t\t\tmessage: `name \"/${prompt.name}\" collision`,\n\t\t\t\tpath: prompt.filePath,\n\t\t\t\tcollision: {\n\t\t\t\t\tresourceType: \"prompt\",\n\t\t\t\t\tname: prompt.name,\n\t\t\t\t\twinnerPath: existing.filePath,\n\t\t\t\t\tloserPath: prompt.filePath,\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tseen.set(prompt.name, prompt);\n\t\t}\n\t}\n\treturn { prompts: Array.from(seen.values()), diagnostics, overlaps };\n}\n\nfunction dedupeThemes(themes: Theme[]): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\tconst seen = new Map<string, Theme>();\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tfor (const t of themes) {\n\t\tconst name = t.name ?? \"unnamed\";\n\t\tconst existing = seen.get(name);\n\t\tif (existing) {\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"collision\",\n\t\t\t\tmessage: `name \"${name}\" collision`,\n\t\t\t\tpath: t.sourcePath,\n\t\t\t\tcollision: {\n\t\t\t\t\tresourceType: \"theme\",\n\t\t\t\t\tname,\n\t\t\t\t\twinnerPath: existing.sourcePath ?? \"<builtin>\",\n\t\t\t\t\tloserPath: t.sourcePath ?? \"<builtin>\",\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tseen.set(name, t);\n\t\t}\n\t}\n\treturn { themes: Array.from(seen.values()), diagnostics };\n}\n"]}
1
+ {"version":3,"file":"resource-loader-assets.js","sourceRoot":"","sources":["../../src/core/resource-loader-assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getProjectConfigDirs } from \"../config.js\";\nimport { type ColorMode, resolveColorMode } from \"../modes/interactive/theme/color-utils.ts\";\nimport { loadThemeFromContent, type Theme } from \"../modes/interactive/theme/theme.js\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport type { ResourceDiagnostic, ResourceOverlap } from \"./diagnostics.ts\";\nimport type { PathMetadata } from \"./package-manager.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport { loadPromptTemplatesAsync } from \"./prompt-templates-async.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport { getLoaderAgentDirs, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport { findSourceInfoForPath, getDefaultSourceInfoForPath } from \"./resource-loader-source-info.ts\";\nimport { buildSkillCatalog, decorateSkillDiagnostics } from \"./skill-catalog.ts\";\nimport type { LoadSkillsResult, Skill } from \"./skills.ts\";\nimport { loadSkillsAsync } from \"./skills-async.ts\";\n\nconst RESOURCE_LOAD_YIELD_AFTER_MS = 8;\n\nasync function existsAsync(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction applySkillsResult(\n\tloader: DefaultResourceLoader,\n\tskillsResult: LoadSkillsResult,\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst withSourceInfo = (skill: Skill): Skill => ({\n\t\t...skill,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, skill.filePath, state.extensionSkillSourceInfos, metadataByPath) ??\n\t\t\tskill.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, skill.filePath),\n\t});\n\tconst sourcedResult = {\n\t\tskills: skillsResult.skills.map(withSourceInfo),\n\t\tdiagnostics: skillsResult.diagnostics,\n\t};\n\tconst resolvedSkills = state.skillsOverride ? state.skillsOverride(sourcedResult) : sourcedResult;\n\tstate.skills = resolvedSkills.skills.map(withSourceInfo);\n\tconst retainedNames = new Set(state.skills.map((skill) => skill.name));\n\tconst candidates = skillsResult.candidates.map(withSourceInfo).filter((skill) => retainedNames.has(skill.name));\n\tstate.skillCatalog = buildSkillCatalog(candidates, state.skills);\n\tstate.skillDiagnostics = decorateSkillDiagnostics(resolvedSkills.diagnostics, state.skillCatalog);\n}\n\nexport async function updateSkillsFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tskillPaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst skillsResult =\n\t\tstate.noSkills && skillPaths.length === 0\n\t\t\t? { skills: [], candidates: [], diagnostics: [] }\n\t\t\t: await loadSkillsAsync({ cwd: state.cwd, agentDir: state.agentDir, skillPaths, includeDefaults: false });\n\tapplySkillsResult(loader, skillsResult, metadataByPath);\n}\n\nfunction applyPromptsResult(\n\tloader: DefaultResourceLoader,\n\tpromptsResult: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] },\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst resolvedPrompts = state.promptsOverride ? state.promptsOverride(promptsResult) : promptsResult;\n\tstate.prompts = resolvedPrompts.prompts.map((prompt) => ({\n\t\t...prompt,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, prompt.filePath, state.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\tprompt.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, prompt.filePath),\n\t}));\n\tstate.promptDiagnostics = resolvedPrompts.diagnostics;\n}\n\nexport async function updatePromptsFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tpromptPaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst loaded =\n\t\tstate.noPromptTemplates && promptPaths.length === 0\n\t\t\t? { templates: [], diagnostics: [] }\n\t\t\t: await loadPromptTemplatesAsync({\n\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\tpromptPaths,\n\t\t\t\t\tincludeDefaults: false,\n\t\t\t\t});\n\tconst sourcedPrompts = loaded.templates.map((prompt) => ({\n\t\t...prompt,\n\t\tsourceInfo:\n\t\t\tfindSourceInfoForPath(loader, prompt.filePath, state.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\tprompt.sourceInfo ??\n\t\t\tgetDefaultSourceInfoForPath(loader, prompt.filePath),\n\t}));\n\tfor (const prompt of sourcedPrompts) {\n\t\tif (prompt.sourceInfo) state.extensionPromptSourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t}\n\tconst deduped = dedupePrompts(sourcedPrompts);\n\tstate.extensionsResult.overlaps ??= [];\n\tconst overlaps = state.extensionsResult.overlaps;\n\tconst extensionOverlaps = overlaps.filter((overlap) => overlap.resourceType !== \"prompt\");\n\toverlaps.splice(0, overlaps.length, ...extensionOverlaps, ...deduped.overlaps);\n\tapplyPromptsResult(\n\t\tloader,\n\t\t{ prompts: deduped.prompts, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] },\n\t\tmetadataByPath,\n\t);\n}\n\nfunction applyThemesResult(\n\tloader: DefaultResourceLoader,\n\tthemesResult: { themes: Theme[]; diagnostics: ResourceDiagnostic[] },\n\tmetadataByPath?: Map<string, PathMetadata>,\n): void {\n\tconst state = resourceInternals(loader);\n\tconst resolvedThemes = state.themesOverride ? state.themesOverride(themesResult) : themesResult;\n\tstate.themes = resolvedThemes.themes.map((theme) => {\n\t\tconst sourcePath = theme.sourcePath;\n\t\ttheme.sourceInfo = sourcePath\n\t\t\t? (findSourceInfoForPath(loader, sourcePath, state.extensionThemeSourceInfos, metadataByPath) ??\n\t\t\t\ttheme.sourceInfo ??\n\t\t\t\tgetDefaultSourceInfoForPath(loader, sourcePath))\n\t\t\t: theme.sourceInfo;\n\t\treturn theme;\n\t});\n\tstate.themeDiagnostics = resolvedThemes.diagnostics;\n}\n\nexport async function updateThemesFromPathsAsync(\n\tloader: DefaultResourceLoader,\n\tthemePaths: string[],\n\tmetadataByPath?: Map<string, PathMetadata>,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tconst themesResult =\n\t\tstate.noThemes && themePaths.length === 0\n\t\t\t? { themes: [], diagnostics: [] }\n\t\t\t: loadAndDedupeThemes(await loadThemesAsync(loader, themePaths, false));\n\tapplyThemesResult(loader, themesResult, metadataByPath);\n}\n\nfunction loadAndDedupeThemes(loaded: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }): {\n\tthemes: Theme[];\n\tdiagnostics: ResourceDiagnostic[];\n} {\n\tconst deduped = dedupeThemes(loaded.themes);\n\treturn { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };\n}\n\nasync function loadThemesAsync(\n\tloader: DefaultResourceLoader,\n\tpaths: string[],\n\tincludeDefaults = true,\n): Promise<{ themes: Theme[]; diagnostics: ResourceDiagnostic[] }> {\n\tconst state = resourceInternals(loader);\n\tconst colorMode = resolveColorMode(state.settingsManager.getTerminalCapabilityOverrides().trueColor);\n\tconst themes: Theme[] = [];\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tif (includeDefaults) {\n\t\tfor (const dir of [\n\t\t\t...getLoaderAgentDirs(state.agentDir).map((agentDir) => join(agentDir, \"themes\")),\n\t\t\t...getProjectThemeDirs(state.cwd),\n\t\t]) {\n\t\t\tawait loadThemesFromDirAsync(dir, themes, diagnostics, colorMode);\n\t\t}\n\t}\n\tconst startedAt = Date.now();\n\tfor (const p of paths) {\n\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_LOAD_YIELD_AFTER_MS);\n\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\tif (!(await existsAsync(resolved))) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path does not exist\", path: resolved });\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stats = await stat(resolved);\n\t\t\tif (stats.isDirectory()) await loadThemesFromDirAsync(resolved, themes, diagnostics, colorMode);\n\t\t\telse if (stats.isFile() && resolved.endsWith(\".json\"))\n\t\t\t\tawait loadThemeFromFileAsync(resolved, themes, diagnostics, colorMode);\n\t\t\telse diagnostics.push({ type: \"warning\", message: \"theme path is not a json file\", path: resolved });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme path\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: resolved });\n\t\t}\n\t}\n\treturn { themes, diagnostics };\n}\n\nfunction getProjectThemeDirs(cwd: string): string[] {\n\treturn getProjectConfigDirs(cwd).map((configDir) => join(configDir, \"themes\"));\n}\n\nasync function loadThemesFromDirAsync(\n\tdir: string,\n\tthemes: Theme[],\n\tdiagnostics: ResourceDiagnostic[],\n\tcolorMode: ColorMode,\n): Promise<void> {\n\tif (!(await existsAsync(dir))) return;\n\tconst startedAt = Date.now();\n\ttry {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tawait yieldToEventLoopIfSlow(startedAt, RESOURCE_LOAD_YIELD_AFTER_MS);\n\t\t\tlet isFile = entry.isFile();\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tisFile = (await stat(join(dir, entry.name))).isFile();\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isFile && entry.name.endsWith(\".json\"))\n\t\t\t\tawait loadThemeFromFileAsync(join(dir, entry.name), themes, diagnostics, colorMode);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"failed to read theme directory\";\n\t\tdiagnostics.push({ type: \"warning\", message, path: dir });\n\t}\n}\n\nasync function loadThemeFromFileAsync(\n\tfilePath: string,\n\tthemes: Theme[],\n\tdiagnostics: ResourceDiagnostic[],\n\tcolorMode: ColorMode,\n): Promise<void> {\n\ttry {\n\t\tthemes.push(loadThemeFromContent(filePath, await readFile(filePath, \"utf-8\"), colorMode));\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : \"failed to load theme\";\n\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t}\n}\n\nfunction dedupePrompts(prompts: PromptTemplate[]): {\n\tprompts: PromptTemplate[];\n\tdiagnostics: ResourceDiagnostic[];\n\toverlaps: ResourceOverlap[];\n} {\n\tconst bundledByName = new Map<string, PromptTemplate>();\n\tfor (const prompt of prompts) {\n\t\tif (prompt.sourceInfo?.configurationOrigin === \"bundled\" && !bundledByName.has(prompt.name)) {\n\t\t\tbundledByName.set(prompt.name, prompt);\n\t\t}\n\t}\n\tconst seen = new Map<string, PromptTemplate>();\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tconst overlaps: ResourceOverlap[] = [];\n\tfor (const prompt of prompts) {\n\t\tconst bundled = bundledByName.get(prompt.name);\n\t\tif (prompt.sourceInfo?.configurationOrigin === \"inherited-pi\" && bundled?.sourceInfo) {\n\t\t\toverlaps.push({\n\t\t\t\tresourceType: \"prompt\",\n\t\t\t\tname: prompt.name,\n\t\t\t\tbundled: bundled.sourceInfo,\n\t\t\t\tinherited: prompt.sourceInfo,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = seen.get(prompt.name);\n\t\tif (existing) {\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"collision\",\n\t\t\t\tmessage: `name \"/${prompt.name}\" collision`,\n\t\t\t\tpath: prompt.filePath,\n\t\t\t\tcollision: {\n\t\t\t\t\tresourceType: \"prompt\",\n\t\t\t\t\tname: prompt.name,\n\t\t\t\t\twinnerPath: existing.filePath,\n\t\t\t\t\tloserPath: prompt.filePath,\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tseen.set(prompt.name, prompt);\n\t\t}\n\t}\n\treturn { prompts: Array.from(seen.values()), diagnostics, overlaps };\n}\n\nfunction dedupeThemes(themes: Theme[]): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\tconst seen = new Map<string, Theme>();\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\tfor (const t of themes) {\n\t\tconst name = t.name ?? \"unnamed\";\n\t\tconst existing = seen.get(name);\n\t\tif (existing) {\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"collision\",\n\t\t\t\tmessage: `name \"${name}\" collision`,\n\t\t\t\tpath: t.sourcePath,\n\t\t\t\tcollision: {\n\t\t\t\t\tresourceType: \"theme\",\n\t\t\t\t\tname,\n\t\t\t\t\twinnerPath: existing.sourcePath ?? \"<builtin>\",\n\t\t\t\t\tloserPath: t.sourcePath ?? \"<builtin>\",\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tseen.set(name, t);\n\t\t}\n\t}\n\treturn { themes: Array.from(seen.values()), diagnostics };\n}\n"]}
@@ -11,6 +11,55 @@ import { lifecycleScopeForOwner, sessionLifecycleCreation, sessionLifecycleScope
11
11
  import { SettingsManager } from "./settings-manager.js";
12
12
  import { buildSkillCatalog } from "./skill-catalog.js";
13
13
  export class DefaultResourceLoader {
14
+ cwd;
15
+ agentDir;
16
+ settingsManager;
17
+ eventBus;
18
+ packageManager;
19
+ additionalExtensionPaths;
20
+ additionalSkillPaths;
21
+ additionalPromptTemplatePaths;
22
+ additionalThemePaths;
23
+ builtinPackagePaths;
24
+ extensionFactories;
25
+ noExtensions;
26
+ noSkills;
27
+ noPromptTemplates;
28
+ noThemes;
29
+ noContextFiles;
30
+ systemPromptSource;
31
+ appendSystemPromptSource;
32
+ extensionsOverride;
33
+ skillsOverride;
34
+ promptsOverride;
35
+ themesOverride;
36
+ agentsFilesOverride;
37
+ systemPromptOverride;
38
+ appendSystemPromptOverride;
39
+ extensionsResult;
40
+ skills;
41
+ skillDiagnostics;
42
+ skillCatalog;
43
+ prompts;
44
+ promptDiagnostics;
45
+ themes;
46
+ themeDiagnostics;
47
+ agentsFiles;
48
+ systemPrompt;
49
+ systemPromptSourcePath;
50
+ appendSystemPrompt;
51
+ appendSystemPromptSourcePaths;
52
+ workflowResources;
53
+ trustedBorrowedProjectLocalSources;
54
+ lastSkillPaths;
55
+ extensionSkillSourceInfos;
56
+ resourceMetadataByPath;
57
+ extensionPromptSourceInfos;
58
+ extensionThemeSourceInfos;
59
+ lastPromptPaths;
60
+ lastThemePaths;
61
+ loaded;
62
+ loadOptions;
14
63
  constructor(options) {
15
64
  const inheritanceSnapshot = options.resourceLoaderInheritanceSnapshot;
16
65
  const inheritedSettingsOptions = inheritanceSnapshot?.projectTrusted === undefined