@bastani/atomic 0.9.21-alpha.1 → 0.9.21

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 (516) hide show
  1. package/CHANGELOG.md +56 -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 +22 -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 +23 -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-resolver-defaults.js +1 -1
  116. package/dist/core/model-resolver-defaults.js.map +1 -1
  117. package/dist/core/{model-routing-task.d.ts → model-routing-bytes.d.ts} +1 -4
  118. package/dist/core/model-routing-bytes.d.ts.map +1 -0
  119. package/dist/core/model-routing-bytes.js +33 -0
  120. package/dist/core/model-routing-bytes.js.map +1 -0
  121. package/dist/core/model-routing-candidates.d.ts +42 -0
  122. package/dist/core/model-routing-candidates.d.ts.map +1 -0
  123. package/dist/core/model-routing-candidates.js +309 -0
  124. package/dist/core/model-routing-candidates.js.map +1 -0
  125. package/dist/core/model-routing-constraints.d.ts +4 -0
  126. package/dist/core/model-routing-constraints.d.ts.map +1 -1
  127. package/dist/core/model-routing-constraints.js +13 -1
  128. package/dist/core/model-routing-constraints.js.map +1 -1
  129. package/dist/core/model-routing-debug.d.ts +9 -0
  130. package/dist/core/model-routing-debug.d.ts.map +1 -0
  131. package/dist/core/model-routing-debug.js +14 -0
  132. package/dist/core/model-routing-debug.js.map +1 -0
  133. package/dist/core/model-routing-evals.d.ts +50 -0
  134. package/dist/core/model-routing-evals.d.ts.map +1 -0
  135. package/dist/core/model-routing-evals.js +190 -0
  136. package/dist/core/model-routing-evals.js.map +1 -0
  137. package/dist/core/model-routing-needs.d.ts +75 -0
  138. package/dist/core/model-routing-needs.d.ts.map +1 -0
  139. package/dist/core/model-routing-needs.js +176 -0
  140. package/dist/core/model-routing-needs.js.map +1 -0
  141. package/dist/core/model-runtime-streaming.js +3 -0
  142. package/dist/core/model-runtime-streaming.js.map +1 -1
  143. package/dist/core/model-runtime.js +26 -14
  144. package/dist/core/model-runtime.js.map +1 -1
  145. package/dist/core/models-store.js +2 -3
  146. package/dist/core/models-store.js.map +1 -1
  147. package/dist/core/output-guard.js +1 -0
  148. package/dist/core/output-guard.js.map +1 -1
  149. package/dist/core/package-manager-paths.d.ts +2 -1
  150. package/dist/core/package-manager-paths.d.ts.map +1 -1
  151. package/dist/core/package-manager-paths.js +4 -3
  152. package/dist/core/package-manager-paths.js.map +1 -1
  153. package/dist/core/package-manager.js +1 -0
  154. package/dist/core/package-manager.js.map +1 -1
  155. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  156. package/dist/core/resource-loader-assets.js +9 -7
  157. package/dist/core/resource-loader-assets.js.map +1 -1
  158. package/dist/core/resource-loader-core.js +49 -0
  159. package/dist/core/resource-loader-core.js.map +1 -1
  160. package/dist/core/runtime-credentials.js +2 -1
  161. package/dist/core/runtime-credentials.js.map +1 -1
  162. package/dist/core/session-cwd.js +1 -0
  163. package/dist/core/session-cwd.js.map +1 -1
  164. package/dist/core/session-manager-archive.d.ts.map +1 -1
  165. package/dist/core/session-manager-archive.js +4 -2
  166. package/dist/core/session-manager-archive.js.map +1 -1
  167. package/dist/core/session-manager-core.js +11 -7
  168. package/dist/core/session-manager-core.js.map +1 -1
  169. package/dist/core/session-manager-storage.d.ts +10 -4
  170. package/dist/core/session-manager-storage.d.ts.map +1 -1
  171. package/dist/core/session-manager-storage.js +12 -6
  172. package/dist/core/session-manager-storage.js.map +1 -1
  173. package/dist/core/settings-manager-basic-accessors.d.ts +2 -1
  174. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  175. package/dist/core/settings-manager-basic-accessors.js +21 -0
  176. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  177. package/dist/core/settings-manager-core.js +13 -7
  178. package/dist/core/settings-manager-core.js.map +1 -1
  179. package/dist/core/settings-manager.d.ts +1 -1
  180. package/dist/core/settings-manager.d.ts.map +1 -1
  181. package/dist/core/settings-manager.js.map +1 -1
  182. package/dist/core/settings-storage.js +6 -0
  183. package/dist/core/settings-storage.js.map +1 -1
  184. package/dist/core/settings-types.d.ts +8 -0
  185. package/dist/core/settings-types.d.ts.map +1 -1
  186. package/dist/core/settings-types.js.map +1 -1
  187. package/dist/core/structured-output/index.d.ts.map +1 -1
  188. package/dist/core/structured-output/index.js +4 -1
  189. package/dist/core/structured-output/index.js.map +1 -1
  190. package/dist/core/structured-output/invalid-output.js +1 -0
  191. package/dist/core/structured-output/invalid-output.js.map +1 -1
  192. package/dist/core/tasks/agent-adapter.js +5 -3
  193. package/dist/core/tasks/agent-adapter.js.map +1 -1
  194. package/dist/core/tasks/child-command-owner.js +3 -7
  195. package/dist/core/tasks/child-command-owner.js.map +1 -1
  196. package/dist/core/tasks/completion.js +5 -1
  197. package/dist/core/tasks/completion.js.map +1 -1
  198. package/dist/core/tasks/owner-store.js +12 -8
  199. package/dist/core/tasks/owner-store.js.map +1 -1
  200. package/dist/core/tasks/supervisor.js +14 -35
  201. package/dist/core/tasks/supervisor.js.map +1 -1
  202. package/dist/core/tools/ask-user-question/state/build-questionnaire.js +13 -4
  203. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  204. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +11 -1
  205. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  206. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +1 -0
  207. package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
  208. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +1 -0
  209. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  210. package/dist/core/tools/ask-user-question/view/components/option-list-view.js +1 -0
  211. package/dist/core/tools/ask-user-question/view/components/option-list-view.js.map +1 -1
  212. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js +5 -0
  213. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  214. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +2 -0
  215. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  216. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js +13 -8
  217. package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js.map +1 -1
  218. package/dist/core/tools/ask-user-question/view/components/submit-picker.js +1 -0
  219. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  220. package/dist/core/tools/ask-user-question/view/components/tab-bar.js +1 -0
  221. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  222. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +30 -24
  223. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
  224. package/dist/core/tools/ask-user-question/view/dialog-builder.js +5 -0
  225. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  226. package/dist/core/tools/ask-user-question/view/props-adapter.js +8 -0
  227. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  228. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +4 -4
  229. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  230. package/dist/core/tools/bash.js +5 -8
  231. package/dist/core/tools/bash.js.map +1 -1
  232. package/dist/core/tools/edit-batch.js +4 -0
  233. package/dist/core/tools/edit-batch.js.map +1 -1
  234. package/dist/core/tools/edit.js +2 -0
  235. package/dist/core/tools/edit.js.map +1 -1
  236. package/dist/core/tools/file-mutation-coordinator.js +9 -0
  237. package/dist/core/tools/file-mutation-coordinator.js.map +1 -1
  238. package/dist/core/tools/find.js +1 -1
  239. package/dist/core/tools/find.js.map +1 -1
  240. package/dist/core/tools/hashline-engine/fs.js +1 -1
  241. package/dist/core/tools/hashline-engine/fs.js.map +1 -1
  242. package/dist/core/tools/hashline-engine/input.js +4 -0
  243. package/dist/core/tools/hashline-engine/input.js.map +1 -1
  244. package/dist/core/tools/hashline-engine/mismatch.js +6 -0
  245. package/dist/core/tools/hashline-engine/mismatch.js.map +1 -1
  246. package/dist/core/tools/hashline-engine/patcher.js +13 -0
  247. package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
  248. package/dist/core/tools/hashline-engine/recovery.js +1 -0
  249. package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
  250. package/dist/core/tools/output-accumulator.js +20 -13
  251. package/dist/core/tools/output-accumulator.js.map +1 -1
  252. package/dist/core/tools/persisted-output-file.js +9 -3
  253. package/dist/core/tools/persisted-output-file.js.map +1 -1
  254. package/dist/core/tools/resource-selectors.js +1 -0
  255. package/dist/core/tools/resource-selectors.js.map +1 -1
  256. package/dist/core/tools/write.js +1 -0
  257. package/dist/core/tools/write.js.map +1 -1
  258. package/dist/core/trust-manager.js +1 -0
  259. package/dist/core/trust-manager.js.map +1 -1
  260. package/dist/core/workflow-stage-admission.js +17 -10
  261. package/dist/core/workflow-stage-admission.js.map +1 -1
  262. package/dist/extensions/llama/client.js +2 -0
  263. package/dist/extensions/llama/client.js.map +1 -1
  264. package/dist/extensions/llama/huggingface-ui.js +17 -9
  265. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  266. package/dist/extensions/llama/huggingface.js +2 -0
  267. package/dist/extensions/llama/huggingface.js.map +1 -1
  268. package/dist/extensions/llama/ui.js +11 -3
  269. package/dist/extensions/llama/ui.js.map +1 -1
  270. package/dist/index.d.ts +4 -2
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +3 -1
  273. package/dist/index.js.map +1 -1
  274. package/dist/modes/interactive/components/armin.js +10 -6
  275. package/dist/modes/interactive/components/armin.js.map +1 -1
  276. package/dist/modes/interactive/components/assistant-message.js +10 -2
  277. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  278. package/dist/modes/interactive/components/atomic-working-status.js +10 -2
  279. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  280. package/dist/modes/interactive/components/bash-execution.js +9 -4
  281. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  282. package/dist/modes/interactive/components/bordered-loader.js +3 -0
  283. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  284. package/dist/modes/interactive/components/branch-summary-message.js +4 -1
  285. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  286. package/dist/modes/interactive/components/chat-message-renderer.js +2 -1
  287. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  288. package/dist/modes/interactive/components/chat-session-host-state.js +63 -31
  289. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  290. package/dist/modes/interactive/components/chat-session-host.js +8 -1
  291. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  292. package/dist/modes/interactive/components/chat-transcript.js +24 -14
  293. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  294. package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
  295. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  296. package/dist/modes/interactive/components/config-selector-list.js +15 -6
  297. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  298. package/dist/modes/interactive/components/config-selector.js +7 -1
  299. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  300. package/dist/modes/interactive/components/countdown-timer.js +2 -0
  301. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  302. package/dist/modes/interactive/components/custom-editor.js +21 -1
  303. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  304. package/dist/modes/interactive/components/custom-entry.js +4 -1
  305. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  306. package/dist/modes/interactive/components/custom-message.js +9 -1
  307. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  308. package/dist/modes/interactive/components/daxnuts.js +8 -6
  309. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  310. package/dist/modes/interactive/components/dynamic-border.js +1 -0
  311. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  312. package/dist/modes/interactive/components/extension-editor.js +7 -1
  313. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  314. package/dist/modes/interactive/components/extension-input.js +8 -2
  315. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  316. package/dist/modes/interactive/components/extension-selector.js +9 -1
  317. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  318. package/dist/modes/interactive/components/first-time-setup.js +4 -2
  319. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  320. package/dist/modes/interactive/components/footer.js +5 -2
  321. package/dist/modes/interactive/components/footer.js.map +1 -1
  322. package/dist/modes/interactive/components/host-input-form.js +13 -2
  323. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  324. package/dist/modes/interactive/components/login-dialog.js +9 -3
  325. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  326. package/dist/modes/interactive/components/model-selector.js +24 -12
  327. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  328. package/dist/modes/interactive/components/oauth-selector.js +12 -3
  329. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  330. package/dist/modes/interactive/components/reserved-bottom-overlay.js +11 -2
  331. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  332. package/dist/modes/interactive/components/scoped-models-selector.js +13 -8
  333. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  334. package/dist/modes/interactive/components/scroll-widget.js +4 -0
  335. package/dist/modes/interactive/components/scroll-widget.js.map +1 -1
  336. package/dist/modes/interactive/components/session-selector-header.js +11 -7
  337. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  338. package/dist/modes/interactive/components/session-selector-list.js +25 -12
  339. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  340. package/dist/modes/interactive/components/session-selector.js +23 -15
  341. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  342. package/dist/modes/interactive/components/settings-selector-submenus.js +19 -1
  343. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  344. package/dist/modes/interactive/components/settings-selector.js +1 -0
  345. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  346. package/dist/modes/interactive/components/show-images-selector.js +1 -0
  347. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/skill-invocation-message.js +4 -1
  349. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  350. package/dist/modes/interactive/components/startup-identity.js +8 -3
  351. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  352. package/dist/modes/interactive/components/task-completion-message.js +2 -0
  353. package/dist/modes/interactive/components/task-completion-message.js.map +1 -1
  354. package/dist/modes/interactive/components/task-detail.js +2 -0
  355. package/dist/modes/interactive/components/task-detail.js.map +1 -1
  356. package/dist/modes/interactive/components/task-inspector.js +22 -12
  357. package/dist/modes/interactive/components/task-inspector.js.map +1 -1
  358. package/dist/modes/interactive/components/task-list.js +2 -0
  359. package/dist/modes/interactive/components/task-list.js.map +1 -1
  360. package/dist/modes/interactive/components/task-live-transcript.js +8 -3
  361. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
  362. package/dist/modes/interactive/components/task-navigation.js +5 -2
  363. package/dist/modes/interactive/components/task-navigation.js.map +1 -1
  364. package/dist/modes/interactive/components/task-row.js +2 -0
  365. package/dist/modes/interactive/components/task-row.js.map +1 -1
  366. package/dist/modes/interactive/components/theme-selector.js +2 -0
  367. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  368. package/dist/modes/interactive/components/thinking-selector.js +7 -1
  369. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  370. package/dist/modes/interactive/components/tool-execution.js +25 -10
  371. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  372. package/dist/modes/interactive/components/transcript-follow-indicator.js +1 -0
  373. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  374. package/dist/modes/interactive/components/tree-selector-component.js +7 -3
  375. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  376. package/dist/modes/interactive/components/tree-selector-help.js +1 -0
  377. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  378. package/dist/modes/interactive/components/tree-selector-label-input.js +6 -2
  379. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  380. package/dist/modes/interactive/components/tree-selector-list.js +4 -0
  381. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  382. package/dist/modes/interactive/components/trust-selector.js +6 -0
  383. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  384. package/dist/modes/interactive/components/user-message-selector.js +6 -3
  385. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  386. package/dist/modes/interactive/components/user-message.js +5 -0
  387. package/dist/modes/interactive/components/user-message.js.map +1 -1
  388. package/dist/modes/interactive/components/working-status.js +1 -0
  389. package/dist/modes/interactive/components/working-status.js.map +1 -1
  390. package/dist/modes/interactive/interactive-autocomplete.js +2 -0
  391. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  392. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  393. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  394. package/dist/modes/interactive/interactive-mode-base.js +162 -120
  395. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  396. package/dist/modes/interactive/interactive-mode-helpers.js +3 -0
  397. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -6
  399. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  401. package/dist/modes/interactive/interactive-resource-disclosure.js +0 -4
  402. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  403. package/dist/modes/interactive/interactive-resource-rendering.js +0 -12
  404. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  405. package/dist/modes/interactive/interactive-startup-chat-container.js +1 -4
  406. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
  407. package/dist/modes/interactive/model-catalog-refresh.js +1 -3
  408. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  409. package/dist/modes/interactive/theme/color-utils.d.ts +5 -0
  410. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  411. package/dist/modes/interactive/theme/color-utils.js +11 -0
  412. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  413. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  414. package/dist/modes/interactive/theme/global-theme.js +4 -3
  415. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  416. package/dist/modes/interactive/theme/theme-class.js +7 -0
  417. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  418. package/dist/modes/interactive/theme/theme-controller.js +9 -2
  419. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  420. package/dist/modes/interactive-engine/activity-watchdog.js +8 -3
  421. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
  422. package/dist/modes/interactive-engine/engine-custom-ui.js +12 -8
  423. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  424. package/dist/modes/interactive-engine/engine-dialog-host.js +7 -3
  425. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  426. package/dist/modes/interactive-engine/engine-health.js +23 -13
  427. package/dist/modes/interactive-engine/engine-health.js.map +1 -1
  428. package/dist/modes/interactive-engine/engine-input-form.js +3 -2
  429. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  430. package/dist/modes/interactive-engine/engine-monitor.js +13 -1
  431. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  432. package/dist/modes/interactive-engine/engine-project-trust.js +2 -1
  433. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -1
  434. package/dist/modes/interactive-engine/engine-render-service.js +7 -4
  435. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  436. package/dist/modes/interactive-engine/engine-session-picker.js +3 -2
  437. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.js +5 -1
  439. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  440. package/dist/modes/interactive-engine/isolated-runtime.js +37 -23
  441. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  442. package/dist/modes/interactive-engine/remote-command-catalog.js +4 -3
  443. package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -1
  444. package/dist/modes/interactive-engine/remote-component.js +24 -12
  445. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  446. package/dist/modes/interactive-engine/remote-frame-clamp.js +3 -3
  447. package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -1
  448. package/dist/modes/interactive-engine/remote-model-catalog.js +5 -4
  449. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  450. package/dist/modes/interactive-engine/remote-queue-pause.js +3 -1
  451. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  452. package/dist/modes/interactive-engine/remote-renderer.js +24 -13
  453. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  454. package/dist/modes/interactive-engine/resource-readiness-error.js +1 -0
  455. package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -1
  456. package/dist/modes/interactive-engine/session-picker-host.js +5 -1
  457. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  458. package/dist/modes/interactive-engine/terminal-mode-controller.js +2 -1
  459. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  460. package/dist/modes/rpc/queued-writer.js +13 -4
  461. package/dist/modes/rpc/queued-writer.js.map +1 -1
  462. package/dist/modes/rpc/rpc-bash-request-owners.js +2 -1
  463. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  464. package/dist/modes/rpc/rpc-client-api.d.ts +8 -4
  465. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-client-api.js +10 -3
  467. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  468. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  469. package/dist/modes/rpc/rpc-client.js +35 -22
  470. package/dist/modes/rpc/rpc-client.js.map +1 -1
  471. package/dist/modes/rpc/rpc-command-handler.js +6 -6
  472. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  473. package/dist/modes/rpc/rpc-event-buffer.js +3 -1
  474. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  475. package/dist/modes/rpc/rpc-generation-buffer.js +1 -3
  476. package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -1
  477. package/dist/modes/rpc/rpc-keybindings-reload.js +4 -1
  478. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
  479. package/dist/modes/rpc/rpc-output-buffer.js +3 -4
  480. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  481. package/dist/modes/rpc/rpc-pending-requests.js +1 -3
  482. package/dist/modes/rpc/rpc-pending-requests.js.map +1 -1
  483. package/dist/modes/rpc/rpc-provider-auth.js +3 -1
  484. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  485. package/dist/modes/rpc/rpc-resource-readiness.js +4 -5
  486. package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -1
  487. package/dist/modes/rpc/rpc-session-binding.js +15 -0
  488. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  489. package/dist/modes/rpc/rpc-terminal-drain.js +3 -0
  490. package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -1
  491. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  492. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  493. package/dist/modes/rpc/rpc-types.js.map +1 -1
  494. package/docs/models/evals.md +883 -39
  495. package/docs/models/model-selection.md +7 -8
  496. package/docs/rpc/examples.md +1 -1
  497. package/docs/rpc/protocol.md +9 -3
  498. package/docs/sdk/structured-decisions.md +1 -1
  499. package/docs/sdk.md +3 -3
  500. package/docs/settings.md +24 -3
  501. package/docs/subagents/reference.md +22 -4
  502. package/docs/subagents.md +2 -0
  503. package/docs/usage.md +3 -3
  504. package/docs/workflows/api-reference.md +1 -1
  505. package/docs/workflows/authoring.md +1 -7
  506. package/docs/workflows/builtins.md +1 -1
  507. package/docs/workflows/reliable-design.md +1 -1
  508. package/examples/extensions/custom-provider-gitlab-duo/test.ts +5 -5
  509. package/examples/extensions/gondolin/package.json +1 -1
  510. package/examples/rpc-client.ts +1 -1
  511. package/examples/rpc-extension-ui.ts +1 -1
  512. package/npm-shrinkwrap.json +70 -33
  513. package/package.json +6 -7
  514. package/dist/core/model-routing-task.d.ts.map +0 -1
  515. package/dist/core/model-routing-task.js +0 -120
  516. package/dist/core/model-routing-task.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"persisted-output-file.js","sourceRoot":"","sources":["../../../src/core/tools/persisted-output-file.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bounded writer for persisted tool-output files.\n *\n * Every temp file a tool spills to disk goes through here so no single file can\n * exceed {@link MAX_PERSISTED_OUTPUT_BYTES}. Once the cap is reached the writer\n * stops consuming input and appends {@link PERSISTED_OUTPUT_TRUNCATION_MARKER},\n * so the file stays readable and its size stays bounded even when the producing\n * command never stops.\n */\nimport { Buffer } from \"node:buffer\";\nimport { closeSync, createWriteStream, fchmodSync, fstatSync, openSync, type WriteStream } from \"node:fs\";\nimport { SESSION_TEMP_FILE_MODE } from \"./session-temp-dir.ts\";\nimport { MAX_PERSISTED_OUTPUT_BYTES, PERSISTED_OUTPUT_TRUNCATION_MARKER } from \"./tool-limits.js\";\n\n/**\n * Create a persisted-output file and prove it is owner-only before use.\n *\n * `wx` refuses to reuse anything already at the path, so a foreign file is never\n * truncated or adopted; `fchmod` on the descriptor then removes whatever the\n * umask took away, and the re-stat confirms it. Any failure throws, and every\n * caller turns that into \"no spill file, no advertised path\".\n */\nfunction openFileWithEnforcedMode(path: string): number {\n\tconst fd = openSync(path, \"wx\", SESSION_TEMP_FILE_MODE);\n\tif (process.platform === \"win32\") {\n\t\treturn fd;\n\t}\n\ttry {\n\t\tfchmodSync(fd, SESSION_TEMP_FILE_MODE);\n\t\tconst stat = fstatSync(fd);\n\t\tif ((stat.mode & 0o777) !== SESSION_TEMP_FILE_MODE) {\n\t\t\tthrow new Error(`persisted output file ${path} could not be restricted to 0600`);\n\t\t}\n\t\tconst uid = typeof process.getuid === \"function\" ? process.getuid() : undefined;\n\t\tif (typeof uid === \"number\" && stat.uid !== uid) {\n\t\t\tthrow new Error(`persisted output file ${path} is owned by another account`);\n\t\t}\n\t} catch (error) {\n\t\tcloseSync(fd);\n\t\tthrow error;\n\t}\n\treturn fd;\n}\n\n/** Whether `byte` is a UTF-8 continuation byte (`10xxxxxx`). */\nfunction isUtf8Continuation(byte: number): boolean {\n\treturn byte >= 0x80 && byte <= 0xbf;\n}\n\n/** Expected sequence length for a valid UTF-8 lead; zero for ASCII or an invalid lead. */\nfunction utf8SequenceLength(byte: number): number {\n\tif (byte >= 0xc2 && byte <= 0xdf) return 2;\n\tif (byte >= 0xe0 && byte <= 0xef) return 3;\n\tif (byte >= 0xf0 && byte <= 0xf4) return 4;\n\treturn 0;\n}\n\n/**\n * Validate a continuation byte, including UTF-8's strict second-byte ranges.\n *\n * Those ranges reject overlong encodings (`E0`, `F0`), UTF-16 surrogates\n * (`ED`), and code points above U+10FFFF (`F4`).\n */\nfunction isValidUtf8SequenceByte(buffer: Buffer, leadIndex: number, index: number): boolean {\n\tconst byte = buffer[index]!;\n\tif (!isUtf8Continuation(byte)) return false;\n\tif (index !== leadIndex + 1) return true;\n\n\tconst lead = buffer[leadIndex]!;\n\tif (lead === 0xe0) return byte >= 0xa0;\n\tif (lead === 0xed) return byte <= 0x9f;\n\tif (lead === 0xf0) return byte >= 0x90;\n\tif (lead === 0xf4) return byte <= 0x8f;\n\treturn true;\n}\n\n/**\n * Return `end` unless its prefix ends inside a valid UTF-8 sequence.\n *\n * At most three bytes before the cut can belong to an incomplete sequence. A\n * run of raw continuation bytes, an invalid lead (`C0`, `C1`, `F5`-`F7`), or a\n * sequence with an invalid continuation is binary data and stays untouched.\n */\nfunction utf8SafePrefixLength(buffer: Buffer, end: number): number {\n\tconst cut = Math.max(0, Math.min(end, buffer.length));\n\tif (cut === 0) return 0;\n\n\tlet leadIndex = cut - 1;\n\tlet continuationCount = 0;\n\twhile (leadIndex >= 0 && continuationCount < 3 && isUtf8Continuation(buffer[leadIndex]!)) {\n\t\tleadIndex--;\n\t\tcontinuationCount++;\n\t}\n\tif (leadIndex < 0) return cut;\n\n\tconst sequenceLength = utf8SequenceLength(buffer[leadIndex]!);\n\tif (sequenceLength === 0 || cut - leadIndex >= sequenceLength) return cut;\n\n\tconst availableEnd = Math.min(buffer.length, leadIndex + sequenceLength);\n\tfor (let index = leadIndex + 1; index < availableEnd; index++) {\n\t\tif (!isValidUtf8SequenceByte(buffer, leadIndex, index)) return cut;\n\t}\n\treturn leadIndex;\n}\n\n/** Trim a buffer to at most `maxBytes` without splitting a valid UTF-8 sequence. */\nexport function truncateBufferAtUtf8Boundary(buffer: Buffer, maxBytes: number): Buffer {\n\tif (buffer.length <= maxBytes) return buffer;\n\treturn buffer.subarray(0, utf8SafePrefixLength(buffer, maxBytes));\n}\n\n/**\n * Length of the longest prefix of `buffer` that does not end mid-character.\n * Invalid UTF-8 remains complete raw binary; only a valid partial tail waits.\n */\nexport function completeUtf8PrefixLength(buffer: Buffer): number {\n\treturn utf8SafePrefixLength(buffer, buffer.length);\n}\n\n/**\n * Cap an in-memory string destined for a persisted-output file.\n *\n * Returns the input unchanged when it already fits; otherwise the returned text\n * is the leading portion plus {@link PERSISTED_OUTPUT_TRUNCATION_MARKER}, and the\n * whole result stays within `maxBytes`.\n */\nexport function capPersistedText(text: string, maxBytes: number = MAX_PERSISTED_OUTPUT_BYTES): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= maxBytes) {\n\t\treturn text;\n\t}\n\tconst markerBytes = Buffer.byteLength(PERSISTED_OUTPUT_TRUNCATION_MARKER, \"utf8\");\n\tconst budget = Math.max(0, maxBytes - markerBytes);\n\tconst head = truncateBufferAtUtf8Boundary(Buffer.from(text, \"utf8\"), budget).toString(\"utf8\");\n\treturn `${head}${PERSISTED_OUTPUT_TRUNCATION_MARKER}`;\n}\n\nexport interface PersistedOutputFileOptions {\n\t/** Byte cap for this file. Defaults to {@link MAX_PERSISTED_OUTPUT_BYTES}. */\n\tmaxBytes?: number;\n}\n\n/**\n * A write stream that refuses to grow past its byte cap.\n *\n * Marker space cannot simply be subtracted up front: input that lands *exactly*\n * on the cap is not truncated and must be preserved whole. So the writer keeps a\n * short trailing buffer — everything past `maxBytes - markerBytes` — unwritten\n * until it knows which case it is in. Input that stays within the cap has that\n * tail flushed on close; input that exceeds it gets the UTF-8-safe prefix plus\n * the marker, and the file lands at the cap. Flushes are cut at character\n * boundaries, so the file never ends mid-character.\n *\n * Mirrors the subset of `WriteStream` the spill-file call sites use: `write`, a\n * fire-and-forget `end`, and an awaitable `close`. A stream error is captured by\n * a listener installed at construction, so a spill file that fails to write can\n * never surface as an uncaught exception on the fire-and-forget path.\n */\nexport class PersistedOutputFile {\n\treadonly path: string;\n\tprivate stream: WriteStream | undefined;\n\tprivate readonly maxBytes: number;\n\t/** Bytes that may be written before the marker's reserved space is needed. */\n\tprivate readonly safeLimit: number;\n\tprivate writtenBytes = 0;\n\tprivate pending: Buffer = Buffer.alloc(0);\n\tprivate capReached = false;\n\tprivate failure: Error | undefined;\n\n\tconstructor(path: string, options: PersistedOutputFileOptions = {}) {\n\t\tthis.path = path;\n\t\tthis.maxBytes = options.maxBytes ?? MAX_PERSISTED_OUTPUT_BYTES;\n\t\tconst markerBytes = Buffer.byteLength(PERSISTED_OUTPUT_TRUNCATION_MARKER, \"utf8\");\n\t\tthis.safeLimit = Math.max(0, this.maxBytes - markerBytes);\n\t\t// Own the descriptor so the mode can be enforced before a single byte is\n\t\t// written and before the path is handed to anyone: `mode` on open is only a\n\t\t// request, which the process umask then narrows — a umask of 0o077 is\n\t\t// harmless, but 0o777 leaves the file at 000 and the advertised path\n\t\t// unreadable. Enforcing after close would be too late to fail closed.\n\t\tconst fd = openFileWithEnforcedMode(path);\n\t\tconst stream = createWriteStream(path, { fd, autoClose: true });\n\t\tstream.on(\"error\", (error: Error) => {\n\t\t\tthis.failure ??= error;\n\t\t});\n\t\tthis.stream = stream;\n\t}\n\n\t/** Whether the cap was reached and the marker written. */\n\tget truncated(): boolean {\n\t\treturn this.capReached;\n\t}\n\n\t/** The write error this file failed with, if any. */\n\tget error(): Error | undefined {\n\t\treturn this.failure;\n\t}\n\n\t/** Total input bytes accepted so far, including the unflushed tail. */\n\tprivate get acceptedBytes(): number {\n\t\treturn this.writtenBytes + this.pending.length;\n\t}\n\n\twrite(chunk: Buffer | string): void {\n\t\tconst stream = this.stream;\n\t\tif (!stream || this.capReached) {\n\t\t\treturn;\n\t\t}\n\t\tconst buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, \"utf8\");\n\t\tif (buffer.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending = this.pending.length === 0 ? buffer : Buffer.concat([this.pending, buffer]);\n\n\t\tif (this.acceptedBytes > this.maxBytes) {\n\t\t\t// Past the cap for certain: emit the safe prefix and the marker, then\n\t\t\t// stop consuming input.\n\t\t\tthis.flushUpTo(stream, this.safeLimit - this.writtenBytes);\n\t\t\tthis.pending = Buffer.alloc(0);\n\t\t\tthis.capReached = true;\n\t\t\tstream.write(PERSISTED_OUTPUT_TRUNCATION_MARKER);\n\t\t\treturn;\n\t\t}\n\t\t// Still within the cap: write everything except the marker-sized tail,\n\t\t// which is only decidable once the input ends.\n\t\tthis.flushUpTo(stream, this.safeLimit - this.writtenBytes);\n\t}\n\n\t/**\n\t * Write at most `room` pending bytes, never ending mid-character.\n\t *\n\t * Both cuts matter. Cutting at `room` uses the boundary walk; flushing the\n\t * whole buffer still holds back an incomplete trailing sequence, because its\n\t * continuation bytes arrive in the *next* chunk — and if the cap intervenes\n\t * first, a lead byte already on disk would sit orphaned before the marker.\n\t */\n\tprivate flushUpTo(stream: WriteStream, room: number): void {\n\t\tif (room <= 0 || this.pending.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst head =\n\t\t\tthis.pending.length <= room\n\t\t\t\t? this.pending.subarray(0, completeUtf8PrefixLength(this.pending))\n\t\t\t\t: truncateBufferAtUtf8Boundary(this.pending, room);\n\t\tif (head.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.writtenBytes += head.length;\n\t\tthis.pending = this.pending.subarray(head.length);\n\t\tstream.write(head);\n\t}\n\n\t/** Release the trailing buffer once the input is known to fit within the cap. */\n\tprivate flushRemainder(stream: WriteStream): void {\n\t\tif (this.capReached || this.pending.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst tail = this.pending;\n\t\tthis.pending = Buffer.alloc(0);\n\t\tthis.writtenBytes += tail.length;\n\t\tstream.write(tail);\n\t}\n\n\t/** Close without waiting for the flush to complete. */\n\tend(): void {\n\t\tconst stream = this.stream;\n\t\tif (!stream) {\n\t\t\treturn;\n\t\t}\n\t\tthis.stream = undefined;\n\t\tthis.flushRemainder(stream);\n\t\tstream.end();\n\t}\n\n\t/** Close and wait for the flush, rejecting on a write error. */\n\tasync close(): Promise<void> {\n\t\tconst stream = this.stream;\n\t\tif (!stream) {\n\t\t\tif (this.failure) {\n\t\t\t\tthrow this.failure;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.stream = undefined;\n\t\tthis.flushRemainder(stream);\n\t\tif (this.failure) {\n\t\t\t// The stream already failed and will not emit `finish`; do not wait for it.\n\t\t\tstream.destroy();\n\t\t\tthrow this.failure;\n\t\t}\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tstream.off(\"finish\", onFinish);\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\tconst onFinish = () => {\n\t\t\t\tstream.off(\"error\", onError);\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\tstream.once(\"error\", onError);\n\t\t\tstream.once(\"finish\", onFinish);\n\t\t\tstream.end();\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"persisted-output-file.js","sourceRoot":"","sources":["../../../src/core/tools/persisted-output-file.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bounded writer for persisted tool-output files.\n *\n * Every temp file a tool spills to disk goes through here so no single file can\n * exceed {@link MAX_PERSISTED_OUTPUT_BYTES}. Once the cap is reached the writer\n * stops consuming input and appends {@link PERSISTED_OUTPUT_TRUNCATION_MARKER},\n * so the file stays readable and its size stays bounded even when the producing\n * command never stops.\n */\nimport { Buffer } from \"node:buffer\";\nimport { closeSync, createWriteStream, fchmodSync, fstatSync, openSync, type WriteStream } from \"node:fs\";\nimport { SESSION_TEMP_FILE_MODE } from \"./session-temp-dir.ts\";\nimport { MAX_PERSISTED_OUTPUT_BYTES, PERSISTED_OUTPUT_TRUNCATION_MARKER } from \"./tool-limits.js\";\n\n/**\n * Create a persisted-output file and prove it is owner-only before use.\n *\n * `wx` refuses to reuse anything already at the path, so a foreign file is never\n * truncated or adopted; `fchmod` on the descriptor then removes whatever the\n * umask took away, and the re-stat confirms it. Any failure throws, and every\n * caller turns that into \"no spill file, no advertised path\".\n */\nfunction openFileWithEnforcedMode(path: string): number {\n\tconst fd = openSync(path, \"wx\", SESSION_TEMP_FILE_MODE);\n\tif (process.platform === \"win32\") {\n\t\treturn fd;\n\t}\n\ttry {\n\t\tfchmodSync(fd, SESSION_TEMP_FILE_MODE);\n\t\tconst stat = fstatSync(fd);\n\t\tif ((stat.mode & 0o777) !== SESSION_TEMP_FILE_MODE) {\n\t\t\tthrow new Error(`persisted output file ${path} could not be restricted to 0600`);\n\t\t}\n\t\tconst uid = typeof process.getuid === \"function\" ? process.getuid() : undefined;\n\t\tif (typeof uid === \"number\" && stat.uid !== uid) {\n\t\t\tthrow new Error(`persisted output file ${path} is owned by another account`);\n\t\t}\n\t} catch (error) {\n\t\tcloseSync(fd);\n\t\tthrow error;\n\t}\n\treturn fd;\n}\n\n/** Whether `byte` is a UTF-8 continuation byte (`10xxxxxx`). */\nfunction isUtf8Continuation(byte: number): boolean {\n\treturn byte >= 0x80 && byte <= 0xbf;\n}\n\n/** Expected sequence length for a valid UTF-8 lead; zero for ASCII or an invalid lead. */\nfunction utf8SequenceLength(byte: number): number {\n\tif (byte >= 0xc2 && byte <= 0xdf) return 2;\n\tif (byte >= 0xe0 && byte <= 0xef) return 3;\n\tif (byte >= 0xf0 && byte <= 0xf4) return 4;\n\treturn 0;\n}\n\n/**\n * Validate a continuation byte, including UTF-8's strict second-byte ranges.\n *\n * Those ranges reject overlong encodings (`E0`, `F0`), UTF-16 surrogates\n * (`ED`), and code points above U+10FFFF (`F4`).\n */\nfunction isValidUtf8SequenceByte(buffer: Buffer, leadIndex: number, index: number): boolean {\n\tconst byte = buffer[index]!;\n\tif (!isUtf8Continuation(byte)) return false;\n\tif (index !== leadIndex + 1) return true;\n\n\tconst lead = buffer[leadIndex]!;\n\tif (lead === 0xe0) return byte >= 0xa0;\n\tif (lead === 0xed) return byte <= 0x9f;\n\tif (lead === 0xf0) return byte >= 0x90;\n\tif (lead === 0xf4) return byte <= 0x8f;\n\treturn true;\n}\n\n/**\n * Return `end` unless its prefix ends inside a valid UTF-8 sequence.\n *\n * At most three bytes before the cut can belong to an incomplete sequence. A\n * run of raw continuation bytes, an invalid lead (`C0`, `C1`, `F5`-`F7`), or a\n * sequence with an invalid continuation is binary data and stays untouched.\n */\nfunction utf8SafePrefixLength(buffer: Buffer, end: number): number {\n\tconst cut = Math.max(0, Math.min(end, buffer.length));\n\tif (cut === 0) return 0;\n\n\tlet leadIndex = cut - 1;\n\tlet continuationCount = 0;\n\twhile (leadIndex >= 0 && continuationCount < 3 && isUtf8Continuation(buffer[leadIndex]!)) {\n\t\tleadIndex--;\n\t\tcontinuationCount++;\n\t}\n\tif (leadIndex < 0) return cut;\n\n\tconst sequenceLength = utf8SequenceLength(buffer[leadIndex]!);\n\tif (sequenceLength === 0 || cut - leadIndex >= sequenceLength) return cut;\n\n\tconst availableEnd = Math.min(buffer.length, leadIndex + sequenceLength);\n\tfor (let index = leadIndex + 1; index < availableEnd; index++) {\n\t\tif (!isValidUtf8SequenceByte(buffer, leadIndex, index)) return cut;\n\t}\n\treturn leadIndex;\n}\n\n/** Trim a buffer to at most `maxBytes` without splitting a valid UTF-8 sequence. */\nexport function truncateBufferAtUtf8Boundary(buffer: Buffer, maxBytes: number): Buffer {\n\tif (buffer.length <= maxBytes) return buffer;\n\treturn buffer.subarray(0, utf8SafePrefixLength(buffer, maxBytes));\n}\n\n/**\n * Length of the longest prefix of `buffer` that does not end mid-character.\n * Invalid UTF-8 remains complete raw binary; only a valid partial tail waits.\n */\nexport function completeUtf8PrefixLength(buffer: Buffer): number {\n\treturn utf8SafePrefixLength(buffer, buffer.length);\n}\n\n/**\n * Cap an in-memory string destined for a persisted-output file.\n *\n * Returns the input unchanged when it already fits; otherwise the returned text\n * is the leading portion plus {@link PERSISTED_OUTPUT_TRUNCATION_MARKER}, and the\n * whole result stays within `maxBytes`.\n */\nexport function capPersistedText(text: string, maxBytes: number = MAX_PERSISTED_OUTPUT_BYTES): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= maxBytes) {\n\t\treturn text;\n\t}\n\tconst markerBytes = Buffer.byteLength(PERSISTED_OUTPUT_TRUNCATION_MARKER, \"utf8\");\n\tconst budget = Math.max(0, maxBytes - markerBytes);\n\tconst head = truncateBufferAtUtf8Boundary(Buffer.from(text, \"utf8\"), budget).toString(\"utf8\");\n\treturn `${head}${PERSISTED_OUTPUT_TRUNCATION_MARKER}`;\n}\n\nexport interface PersistedOutputFileOptions {\n\t/** Byte cap for this file. Defaults to {@link MAX_PERSISTED_OUTPUT_BYTES}. */\n\tmaxBytes?: number;\n}\n\n/**\n * A write stream that refuses to grow past its byte cap.\n *\n * Marker space cannot simply be subtracted up front: input that lands *exactly*\n * on the cap is not truncated and must be preserved whole. So the writer keeps a\n * short trailing buffer — everything past `maxBytes - markerBytes` — unwritten\n * until it knows which case it is in. Input that stays within the cap has that\n * tail flushed on close; input that exceeds it gets the UTF-8-safe prefix plus\n * the marker, and the file lands at the cap. Flushes are cut at character\n * boundaries, so the file never ends mid-character.\n *\n * Mirrors the subset of `WriteStream` the spill-file call sites use: `write`, a\n * fire-and-forget `end`, and an awaitable `close`. A stream error is captured by\n * a listener installed at construction, so a spill file that fails to write can\n * never surface as an uncaught exception on the fire-and-forget path.\n */\nexport class PersistedOutputFile {\n\treadonly path: string;\n\tprivate stream: WriteStream | undefined;\n\tprivate readonly maxBytes: number;\n\t/** Bytes that may be written before the marker's reserved space is needed. */\n\tprivate readonly safeLimit: number;\n\tprivate writtenBytes = 0;\n\tprivate pending: Buffer = Buffer.alloc(0);\n\tprivate capReached = false;\n\tprivate failure: Error | undefined;\n\n\tconstructor(path: string, options: PersistedOutputFileOptions = {}) {\n\t\tthis.path = path;\n\t\tthis.maxBytes = options.maxBytes ?? MAX_PERSISTED_OUTPUT_BYTES;\n\t\tconst markerBytes = Buffer.byteLength(PERSISTED_OUTPUT_TRUNCATION_MARKER, \"utf8\");\n\t\tthis.safeLimit = Math.max(0, this.maxBytes - markerBytes);\n\t\t// Own the descriptor so the mode can be enforced before a single byte is\n\t\t// written and before the path is handed to anyone: `mode` on open is only a\n\t\t// request, which the process umask then narrows — a umask of 0o077 is\n\t\t// harmless, but 0o777 leaves the file at 000 and the advertised path\n\t\t// unreadable. Enforcing after close would be too late to fail closed.\n\t\tconst fd = openFileWithEnforcedMode(path);\n\t\tconst stream = createWriteStream(path, { fd, autoClose: true });\n\t\tstream.on(\"error\", (error: Error) => {\n\t\t\tthis.failure ??= error;\n\t\t});\n\t\tthis.stream = stream;\n\t}\n\n\t/** Whether the cap was reached and the marker written. */\n\tget truncated(): boolean {\n\t\treturn this.capReached;\n\t}\n\n\t/** The write error this file failed with, if any. */\n\tget error(): Error | undefined {\n\t\treturn this.failure;\n\t}\n\n\t/** Total input bytes accepted so far, including the unflushed tail. */\n\tprivate get acceptedBytes(): number {\n\t\treturn this.writtenBytes + this.pending.length;\n\t}\n\n\twrite(chunk: Buffer | string): void {\n\t\tconst stream = this.stream;\n\t\tif (!stream || this.capReached) {\n\t\t\treturn;\n\t\t}\n\t\tconst buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, \"utf8\");\n\t\tif (buffer.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending = this.pending.length === 0 ? buffer : Buffer.concat([this.pending, buffer]);\n\n\t\tif (this.acceptedBytes > this.maxBytes) {\n\t\t\t// Past the cap for certain: emit the safe prefix and the marker, then\n\t\t\t// stop consuming input.\n\t\t\tthis.flushUpTo(stream, this.safeLimit - this.writtenBytes);\n\t\t\tthis.pending = Buffer.alloc(0);\n\t\t\tthis.capReached = true;\n\t\t\tstream.write(PERSISTED_OUTPUT_TRUNCATION_MARKER);\n\t\t\treturn;\n\t\t}\n\t\t// Still within the cap: write everything except the marker-sized tail,\n\t\t// which is only decidable once the input ends.\n\t\tthis.flushUpTo(stream, this.safeLimit - this.writtenBytes);\n\t}\n\n\t/**\n\t * Write at most `room` pending bytes, never ending mid-character.\n\t *\n\t * Both cuts matter. Cutting at `room` uses the boundary walk; flushing the\n\t * whole buffer still holds back an incomplete trailing sequence, because its\n\t * continuation bytes arrive in the *next* chunk — and if the cap intervenes\n\t * first, a lead byte already on disk would sit orphaned before the marker.\n\t */\n\tprivate flushUpTo(stream: WriteStream, room: number): void {\n\t\tif (room <= 0 || this.pending.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst head =\n\t\t\tthis.pending.length <= room\n\t\t\t\t? this.pending.subarray(0, completeUtf8PrefixLength(this.pending))\n\t\t\t\t: truncateBufferAtUtf8Boundary(this.pending, room);\n\t\tif (head.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.writtenBytes += head.length;\n\t\tthis.pending = this.pending.subarray(head.length);\n\t\tstream.write(head);\n\t}\n\n\t/** Release the trailing buffer once the input is known to fit within the cap. */\n\tprivate flushRemainder(stream: WriteStream): void {\n\t\tif (this.capReached || this.pending.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst tail = this.pending;\n\t\tthis.pending = Buffer.alloc(0);\n\t\tthis.writtenBytes += tail.length;\n\t\tstream.write(tail);\n\t}\n\n\t/** Close without waiting for the flush to complete. */\n\tend(): void {\n\t\tconst stream = this.stream;\n\t\tif (!stream) {\n\t\t\treturn;\n\t\t}\n\t\tthis.stream = undefined;\n\t\tthis.flushRemainder(stream);\n\t\tstream.end();\n\t}\n\n\t/** Close and wait for the flush, rejecting on a write error. */\n\tasync close(): Promise<void> {\n\t\tconst stream = this.stream;\n\t\tif (!stream) {\n\t\t\tif (this.failure) {\n\t\t\t\tthrow this.failure;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.stream = undefined;\n\t\tthis.flushRemainder(stream);\n\t\tif (this.failure) {\n\t\t\t// The stream already failed and will not emit `finish`; do not wait for it.\n\t\t\tstream.destroy();\n\t\t\tthrow this.failure;\n\t\t}\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tstream.off(\"finish\", onFinish);\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\tconst onFinish = () => {\n\t\t\t\tstream.off(\"error\", onError);\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\tstream.once(\"error\", onError);\n\t\t\tstream.once(\"finish\", onFinish);\n\t\t\tstream.end();\n\t\t});\n\t}\n}\n"]}
@@ -9,6 +9,7 @@ export function toSqliteBindValues(params) {
9
9
  }
10
10
  function nodeSqliteAdapter(DatabaseSync) {
11
11
  return class NodeSqliteAdapter {
12
+ db;
12
13
  constructor(path, options) {
13
14
  // Passing `undefined` explicitly fails node:sqlite's arity validation.
14
15
  this.db = options?.readonly === true ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);
@@ -1 +1 @@
1
- {"version":3,"file":"resource-selectors.js","sourceRoot":"","sources":["../../../src/core/tools/resource-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { deflateRawSync, gunzipSync, gzipSync, inflateRawSync } from \"node:zlib\";\nimport { loadNativeSearchBinding } from \"./search-native.ts\";\n\nexport interface ArchiveSelector {\n\tarchivePath: string;\n\tmemberPath: string;\n}\nexport interface SqliteSelector {\n\tdatabasePath: string;\n\ttable?: string;\n\trowId?: string;\n\tquery?: string;\n\tlimit?: number;\n\toffset?: number;\n\twhere?: string;\n\torder?: string;\n\tschema?: boolean;\n\tsampleRows?: number;\n}\nexport interface InternalResourceRouter {\n\tread?: (url: string) => string | Buffer | undefined | Promise<string | Buffer | undefined>;\n\twrite?: (url: string, content: string) => void | Promise<void>;\n\tresolve?: (url: string) => string | undefined | Promise<string | undefined>;\n}\nexport interface InternalResourceContext {\n\tinternalRouter?: InternalResourceRouter;\n\tinternalResourceRouter?: InternalResourceRouter;\n\tresolveInternalUrl?: (url: string) => string | undefined | Promise<string | undefined>;\n}\ntype SqliteValue = string | number | boolean | null;\ninterface SqliteQuery {\n\tall(...params: SqliteValue[]): Record<string, SqliteValue>[];\n\tget?(...params: SqliteValue[]): Record<string, SqliteValue> | undefined;\n\titerate?(): Iterable<Record<string, SqliteValue>>;\n\trun(...params: SqliteValue[]): { changes?: number; lastInsertRowid?: number | bigint };\n}\ninterface SqliteDatabase {\n\tquery(sql: string): SqliteQuery;\n\tclose(): void;\n}\ntype SqliteDatabaseConstructor = new (path: string, options?: { readonly?: boolean }) => SqliteDatabase;\n/**\n * SQLite via `node:sqlite`.\n *\n * It is unflagged from Node v22.13.0, it is the module upstream pi uses, and\n * Bun ships it from 1.4.0 (oven-sh/bun#32498), before the current 1.4.2 floor,\n * so both runtimes provide it. The `bun:sqlite` fallback that covered older\n * Bun binaries was removed with the earlier 1.4.0 floor.\n *\n * `better-sqlite3` was evaluated and rejected: it segfaults Bun 1.3.14 on\n * construction, which is worse than a catchable missing-module error.\n *\n * The adapter keeps the `bun:sqlite`-shaped API these selectors were written\n * against and normalizes the deltas: `node:sqlite` spells the option\n * `readOnly` and rejects it when passed explicitly as `undefined`, and it\n * refuses to bind booleans, which are stored as integer 1/0.\n */\ninterface NodeSqliteStatement {\n\tall(...params: unknown[]): Record<string, SqliteValue>[];\n\tget(...params: unknown[]): Record<string, SqliteValue> | undefined;\n\titerate(...params: unknown[]): Iterable<Record<string, SqliteValue>>;\n\trun(...params: unknown[]): { changes?: number | bigint; lastInsertRowid?: number | bigint };\n}\ninterface NodeSqliteDatabase {\n\tprepare(sql: string): NodeSqliteStatement;\n\tclose(): void;\n}\ntype NodeSqliteConstructor = new (path: string, options?: { readOnly?: boolean }) => NodeSqliteDatabase;\n\n/** Callers may pass booleans; `node:sqlite` refuses to bind them, so store integer 1/0. */\nexport function toSqliteBindValues(params: readonly SqliteValue[]): unknown[] {\n\treturn params.map((param) => (typeof param === \"boolean\" ? (param ? 1 : 0) : param));\n}\n\nfunction nodeSqliteAdapter(DatabaseSync: NodeSqliteConstructor): SqliteDatabaseConstructor {\n\treturn class NodeSqliteAdapter implements SqliteDatabase {\n\t\tprivate readonly db: NodeSqliteDatabase;\n\t\tconstructor(path: string, options?: { readonly?: boolean }) {\n\t\t\t// Passing `undefined` explicitly fails node:sqlite's arity validation.\n\t\t\tthis.db = options?.readonly === true ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);\n\t\t}\n\t\tquery(sql: string): SqliteQuery {\n\t\t\tconst statement = this.db.prepare(sql);\n\t\t\treturn {\n\t\t\t\tall: (...params: SqliteValue[]) => statement.all(...toSqliteBindValues(params)),\n\t\t\t\tget: (...params: SqliteValue[]) => statement.get(...toSqliteBindValues(params)),\n\t\t\t\titerate: () => statement.iterate(),\n\t\t\t\trun: (...params: SqliteValue[]) => {\n\t\t\t\t\tconst result = statement.run(...toSqliteBindValues(params));\n\t\t\t\t\treturn { changes: Number(result.changes ?? 0), lastInsertRowid: result.lastInsertRowid };\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tclose(): void {\n\t\t\tthis.db.close();\n\t\t}\n\t};\n}\n\nfunction sqliteDatabase(): SqliteDatabaseConstructor {\n\tconst requireModule = createRequire(import.meta.url);\n\ttry {\n\t\tconst { DatabaseSync } = requireModule(\"node:sqlite\") as { DatabaseSync: NodeSqliteConstructor };\n\t\treturn nodeSqliteAdapter(DatabaseSync);\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite selectors need node:sqlite (Node >= 22.13 or Bun >= 1.4.2); this runtime does not provide it.\",\n\t\t);\n\t}\n}\nfunction existingSqliteFile(path: string): boolean | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path).subarray(0, 16).toString(\"binary\") === \"SQLite format 3\\0\";\n}\nexport function sqliteSelectorForPath(value: string, cwd: string): SqliteSelector | undefined {\n\tconst selector = parseSqliteSelector(value);\n\tif (!selector) return undefined;\n\tconst absolute = resolveContainedLocalPath(cwd, selector.databasePath, \"SQLite selector\");\n\tif (existingSqliteFile(absolute) !== true) return undefined;\n\treturn { ...selector, databasePath: absolute };\n}\n\nconst MAX_TAR_ARCHIVE_BYTES = 256 * 1024 * 1024;\nconst MAX_ARCHIVE_MEMBER_BYTES = 64 * 1024 * 1024;\nconst MAX_ARCHIVE_DIRECTORY_ENTRIES = 500;\n\nconst ARCHIVE_EXTENSIONS = [\"zip\", \"jar\", \"tar\", \"tgz\", \"tar.gz\", \"gz\"] as const;\nconst SQLITE_EXTENSIONS = [\"sqlite\", \"sqlite3\", \"db\", \"db3\"] as const;\n\n/** Whether `value[0..end)` ends with `.<extension>` preceded by at least one character. */\nfunction endsWithExtension(lower: string, end: number, extensions: readonly string[]): boolean {\n\treturn extensions.some((extension) => end > extension.length + 1 && lower.endsWith(`.${extension}`, end));\n}\n\nexport function parseArchiveSelector(value: string): ArchiveSelector | undefined {\n\t// Scan colons right to left so the longest archive path wins, exactly as the\n\t// previous greedy `(.+\\.ext):(.*)` regex did. That regex's ambiguous `.+`\n\t// prefix was flagged as polynomial ReDoS (js/polynomial-redos); this scan is\n\t// linear in the input.\n\tconst lower = value.toLowerCase();\n\tfor (let index = value.lastIndexOf(\":\"); index > 0; index = value.lastIndexOf(\":\", index - 1)) {\n\t\tif (endsWithExtension(lower, index, ARCHIVE_EXTENSIONS)) {\n\t\t\treturn { archivePath: value.slice(0, index), memberPath: value.slice(index + 1) };\n\t\t}\n\t}\n\treturn undefined;\n}\nexport function resolveArchiveSelector(selector: ArchiveSelector, cwd: string): ArchiveSelector {\n\treturn { ...selector, archivePath: resolveContainedLocalPath(cwd, selector.archivePath, \"Archive selector\") };\n}\nconst SQLITE_SELECTOR_SUFFIX = /^(?:\\?q=(.+)|:([^:?]+)(?:\\?(.+))?(?::([^:?]+))?)?$/i;\nexport function parseSqliteSelector(value: string): SqliteSelector | undefined {\n\t// Try each candidate database path from longest to shortest, mirroring the\n\t// previous greedy `(.+\\.ext)` regex prefix without its ambiguity, which was\n\t// flagged as polynomial ReDoS (js/polynomial-redos). The suffix grammar is\n\t// unchanged and unambiguous.\n\tconst lower = value.toLowerCase();\n\tfor (let end = value.length; end > 0; end--) {\n\t\tif (!endsWithExtension(lower, end, SQLITE_EXTENSIONS)) continue;\n\t\tconst match = value.slice(end).match(SQLITE_SELECTOR_SUFFIX);\n\t\tif (!match) continue;\n\t\tconst params = new URLSearchParams(match[3] ?? \"\");\n\t\tconst limit = Number.parseInt(params.get(\"limit\") ?? \"\", 10);\n\t\tconst offset = Number.parseInt(params.get(\"offset\") ?? \"\", 10);\n\t\tconst sampleRows = Number.parseInt(params.get(\"sampleRows\") ?? params.get(\"sample_rows\") ?? \"\", 10);\n\t\treturn {\n\t\t\tdatabasePath: value.slice(0, end),\n\t\t\tquery: match[1] ? decodeURIComponent(match[1]) : undefined,\n\t\t\ttable: match[2],\n\t\t\trowId: match[4] ?? params.get(\"id\") ?? undefined,\n\t\t\tlimit: Number.isFinite(limit) ? Math.max(0, Math.min(500, limit)) : undefined,\n\t\t\toffset: Number.isFinite(offset) ? Math.max(0, offset) : undefined,\n\t\t\twhere: params.get(\"where\") ?? undefined,\n\t\t\torder: params.get(\"order\") ?? undefined,\n\t\t\tschema: params.get(\"schema\") === \"true\" || params.get(\"schema\") === \"1\",\n\t\t\tsampleRows: Number.isFinite(sampleRows) ? Math.max(0, Math.min(100, sampleRows)) : undefined,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction isZipArchive(path: string): boolean {\n\treturn /\\.(?:zip|jar)$/i.test(path);\n}\nfunction isGzipTar(path: string): boolean {\n\treturn /\\.(?:tgz|tar\\.gz|gz)$/i.test(path);\n}\nfunction crc32(data: Buffer): number {\n\tlet crc = ~0;\n\tfor (const byte of data) {\n\t\tcrc ^= byte;\n\t\tfor (let i = 0; i < 8; i++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\n\t}\n\treturn ~crc >>> 0;\n}\nfunction assertZipRange(buf: Buffer, offset: number, length: number, label: string): void {\n\tif (\n\t\t!Number.isSafeInteger(offset) ||\n\t\t!Number.isSafeInteger(length) ||\n\t\toffset < 0 ||\n\t\tlength < 0 ||\n\t\toffset > buf.length - length\n\t)\n\t\tthrow new Error(`Invalid zip entry bounds: ${label}`);\n}\nfunction zipEntryPayload(\n\tbuf: Buffer,\n\tlabel: string,\n\tname: string,\n\tlocalOffset: number,\n\tcompressedSize: number,\n): Buffer {\n\tif (compressedSize > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member compressed data too large: ${name}`);\n\tassertZipRange(buf, localOffset, 30, label);\n\tif (buf.readUInt32LE(localOffset) !== 0x04034b50) throw new Error(`Invalid zip local header: ${label}`);\n\tconst localNameLen = buf.readUInt16LE(localOffset + 26),\n\t\tlocalExtraLen = buf.readUInt16LE(localOffset + 28),\n\t\tstart = localOffset + 30 + localNameLen + localExtraLen;\n\tassertZipRange(buf, start, compressedSize, label);\n\treturn buf.subarray(start, start + compressedSize);\n}\nexport function readZipEntriesFromBuffer(buf: Buffer, label: string): Map<string, Buffer> {\n\tconst entries = new Map<string, Buffer>();\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${label}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10);\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, label);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${label}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, label);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${name}`);\n\t\tconst data = zipEntryPayload(buf, label, name, localOffset, compressedSize);\n\t\tentries.set(\n\t\t\tname,\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})(),\n\t\t);\n\t}\n\treturn entries;\n}\nexport function readZipEntries(path: string): Map<string, Buffer> {\n\treturn readZipEntriesFromBuffer(readFileSync(path), path);\n}\nfunction writeZipEntries(path: string, entries: Map<string, Buffer>): void {\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tfor (const [name, data] of entries) {\n\t\tconst nameBuf = Buffer.from(name),\n\t\t\tcompressed = deflateRawSync(data),\n\t\t\tcrc = crc32(data);\n\t\tconst local = Buffer.alloc(30);\n\t\tlocal.writeUInt32LE(0x04034b50, 0);\n\t\tlocal.writeUInt16LE(20, 4);\n\t\tlocal.writeUInt16LE(8, 8);\n\t\tlocal.writeUInt32LE(crc, 14);\n\t\tlocal.writeUInt32LE(compressed.length, 18);\n\t\tlocal.writeUInt32LE(data.length, 22);\n\t\tlocal.writeUInt16LE(nameBuf.length, 26);\n\t\tlocals.push(local, nameBuf, compressed);\n\t\tconst central = Buffer.alloc(46);\n\t\tcentral.writeUInt32LE(0x02014b50, 0);\n\t\tcentral.writeUInt16LE(20, 4);\n\t\tcentral.writeUInt16LE(20, 6);\n\t\tcentral.writeUInt16LE(8, 10);\n\t\tcentral.writeUInt32LE(crc, 16);\n\t\tcentral.writeUInt32LE(compressed.length, 20);\n\t\tcentral.writeUInt32LE(data.length, 24);\n\t\tcentral.writeUInt16LE(nameBuf.length, 28);\n\t\tcentral.writeUInt32LE(offset, 42);\n\t\tcentrals.push(central, nameBuf);\n\t\toffset += local.length + nameBuf.length + compressed.length;\n\t}\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0);\n\tconst eocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(entries.size, 8);\n\teocd.writeUInt16LE(entries.size, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\nfunction parseTar(path: string): Map<string, Buffer> {\n\tconst raw = readFileSync(path);\n\tif (raw.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst buf = isGzipTar(path) ? gunzipSync(raw, { maxOutputLength: MAX_TAR_ARCHIVE_BYTES }) : raw;\n\tif (buf.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst entries = new Map<string, Buffer>();\n\tfor (let offset = 0; offset + 512 <= buf.length; ) {\n\t\tconst header = buf.subarray(offset, offset + 512);\n\t\tif (header.every((byte) => byte === 0)) break;\n\t\tconst name = header.subarray(0, 100).toString().replace(/\\0.*$/, \"\");\n\t\tconst prefix = header.subarray(345, 500).toString().replace(/\\0.*$/, \"\");\n\t\tconst fullName = prefix ? `${prefix}/${name}` : name;\n\t\tconst size = Number.parseInt(header.subarray(124, 136).toString().replace(/\\0.*$/, \"\").trim() || \"0\", 8);\n\t\tconst type = String.fromCharCode(header[156] ?? 48);\n\t\tconst dataStart = offset + 512;\n\t\tif (type !== \"5\" && fullName) {\n\t\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${fullName}`);\n\t\t\tentries.set(fullName, Buffer.from(buf.subarray(dataStart, dataStart + size)));\n\t\t}\n\t\toffset = dataStart + Math.ceil(size / 512) * 512;\n\t}\n\treturn entries;\n}\nfunction tarHeader(name: string, size: number): Buffer {\n\tconst header = Buffer.alloc(512);\n\tconst nameBytes = Buffer.from(name);\n\tnameBytes.copy(header, 0, 0, Math.min(100, nameBytes.length));\n\theader.write(\"0000644\\0\", 100);\n\theader.write(\"0000000\\0\", 108);\n\theader.write(\"0000000\\0\", 116);\n\theader.write(`${size.toString(8).padStart(11, \"0\")}\\0`, 124);\n\theader.write(\"00000000000\\0\", 136);\n\theader.fill(0x20, 148, 156);\n\theader[156] = 48;\n\theader.write(\"ustar\\0\", 257);\n\theader.write(\"00\", 263);\n\tlet sum = 0;\n\tfor (const byte of header) sum += byte;\n\theader.write(`${sum.toString(8).padStart(6, \"0\")}\\0 `, 148);\n\treturn header;\n}\nfunction writeTar(path: string, entries: Map<string, Buffer>): void {\n\tconst parts: Buffer[] = [];\n\tfor (const [name, data] of entries) {\n\t\tparts.push(tarHeader(name, data.length), data);\n\t\tconst pad = (512 - (data.length % 512)) % 512;\n\t\tif (pad) parts.push(Buffer.alloc(pad));\n\t}\n\tparts.push(Buffer.alloc(1024));\n\tconst out = Buffer.concat(parts);\n\twriteFileSync(path, isGzipTar(path) ? gzipSync(out) : out);\n}\nfunction listArchiveDirectory(names: Iterable<string>, memberPath: string): string {\n\tconst prefix = memberPath ? `${memberPath.replace(/\\/+$/g, \"\")}/` : \"\";\n\tconst children = new Set<string>();\n\tfor (const name of names) {\n\t\tif (!name.startsWith(prefix) || name === prefix) continue;\n\t\tconst rest = name.slice(prefix.length);\n\t\tconst [first, ...more] = rest.split(\"/\");\n\t\tif (first) children.add(more.length > 0 ? `${first}/` : first);\n\t}\n\treturn [...children].sort().slice(0, MAX_ARCHIVE_DIRECTORY_ENTRIES).join(\"\\n\");\n}\n\nfunction readZipSelector(path: string, memberPath: string): string {\n\tconst buf = readFileSync(path);\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10),\n\t\tnames: string[] = [];\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, path);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${path}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tnames.push(name);\n\t\tif (memberPath && name !== memberPath) continue;\n\t\tif (!memberPath) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${memberPath}`);\n\t\tconst data = zipEntryPayload(buf, path, name, localOffset, compressedSize);\n\t\treturn (\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})()\n\t\t).toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(names, memberPath);\n\tif (listing) return listing;\n\tif (!memberPath) return \"\";\n\tthrow new Error(`Archive member not found: ${memberPath}`);\n}\n\nexport function readArchiveSelector(selector: ArchiveSelector): string {\n\tif (isZipArchive(selector.archivePath)) return readZipSelector(selector.archivePath, selector.memberPath);\n\tconst entries = parseTar(selector.archivePath);\n\tif (!selector.memberPath) return listArchiveDirectory(entries.keys(), \"\");\n\tconst data = entries.get(selector.memberPath);\n\tif (data) {\n\t\tif (data.length > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${selector.memberPath}`);\n\t\treturn data.toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(entries.keys(), selector.memberPath);\n\tif (listing) return listing;\n\tthrow new Error(`Archive member not found: ${selector.memberPath}`);\n}\nfunction validateArchiveMemberPath(memberPath: string): void {\n\tif (!memberPath || memberPath.startsWith(\"/\") || memberPath.endsWith(\"/\") || memberPath.split(\"/\").includes(\"..\"))\n\t\tthrow new Error(`Invalid archive member path: ${memberPath}`);\n}\nfunction writeZipEntrySelective(path: string, memberPath: string, data: Buffer): void {\n\tconst source = existsSync(path) ? readFileSync(path) : Buffer.alloc(0);\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tif (source.length > 0) {\n\t\tlet eocd = -1;\n\t\tfor (let i = source.length - 22; i >= 0; i--)\n\t\t\tif (source.readUInt32LE(i) === 0x06054b50) {\n\t\t\t\teocd = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\t\tlet ptr = source.readUInt32LE(eocd + 16);\n\t\tconst total = source.readUInt16LE(eocd + 10);\n\t\tfor (let n = 0; n < total; n++) {\n\t\t\tassertZipRange(source, ptr, 46, path);\n\t\t\tconst start = ptr,\n\t\t\t\tflags = source.readUInt16LE(ptr + 8),\n\t\t\t\tnameLen = source.readUInt16LE(ptr + 28),\n\t\t\t\textraLen = source.readUInt16LE(ptr + 30),\n\t\t\t\tcommentLen = source.readUInt16LE(ptr + 32),\n\t\t\t\tlocalOffset = source.readUInt32LE(ptr + 42),\n\t\t\t\tcompressedSize = source.readUInt32LE(ptr + 20);\n\t\t\tassertZipRange(source, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\t\tconst name = source.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\t\tif (name === memberPath) continue;\n\t\t\tif ((flags & 0x0008) !== 0) throw new Error(`Unsupported zip data descriptor during selective write: ${name}`);\n\t\t\tassertZipRange(source, localOffset, 30, path);\n\t\t\tconst localNameLen = source.readUInt16LE(localOffset + 26),\n\t\t\t\tlocalExtraLen = source.readUInt16LE(localOffset + 28),\n\t\t\t\tlocalEnd = localOffset + 30 + localNameLen + localExtraLen + compressedSize;\n\t\t\tassertZipRange(source, localOffset, localEnd - localOffset, path);\n\t\t\tconst local = source.subarray(localOffset, localEnd),\n\t\t\t\tcentral = Buffer.from(source.subarray(start, ptr));\n\t\t\tcentral.writeUInt32LE(offset, 42);\n\t\t\tlocals.push(local);\n\t\t\tcentrals.push(central);\n\t\t\toffset += local.length;\n\t\t}\n\t}\n\tconst tmp = `${path}.atomic-entry-${Date.now()}`;\n\twriteZipEntries(tmp, new Map([[memberPath, data]]));\n\tconst built = readFileSync(tmp);\n\trmSync(tmp, { force: true });\n\tconst eocdStart = built.length - 22,\n\t\tlocalLen = built.readUInt32LE(eocdStart + 16),\n\t\tcentralSizeOne = built.readUInt32LE(eocdStart + 12);\n\tconst central = Buffer.from(built.subarray(localLen, localLen + centralSizeOne));\n\tcentral.writeUInt32LE(offset, 42);\n\tlocals.push(built.subarray(0, localLen));\n\tcentrals.push(central);\n\toffset += localLen;\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0),\n\t\teocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(centrals.length, 8);\n\teocd.writeUInt16LE(centrals.length, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\n\nexport function writeArchiveSelector(selector: ArchiveSelector, content: string): void {\n\tvalidateArchiveMemberPath(selector.memberPath);\n\tmkdirSync(dirname(selector.archivePath), { recursive: true });\n\tif (isZipArchive(selector.archivePath)) {\n\t\twriteZipEntrySelective(selector.archivePath, selector.memberPath, Buffer.from(content));\n\t\treturn;\n\t}\n\tconst entries = existsSync(selector.archivePath) ? parseTar(selector.archivePath) : new Map<string, Buffer>();\n\tentries.set(selector.memberPath, Buffer.from(content));\n\twriteTar(selector.archivePath, entries);\n}\nconst SEARCH_LINE_LIMIT = 512;\nfunction truncateSearchLine(line: string): string {\n\treturn line.length > SEARCH_LINE_LIMIT ? `${line.slice(0, SEARCH_LINE_LIMIT)}… [truncated]` : line;\n}\nfunction stripExtendedRegexWhitespace(pattern: string): string {\n\tlet out = \"\",\n\t\tescaped = false,\n\t\tinClass = false,\n\t\tinComment = false;\n\tfor (const ch of pattern) {\n\t\tif (inComment) {\n\t\t\tif (ch === \"\\n\" || ch === \"\\r\") inComment = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tout += ch;\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\") inClass = false;\n\t\tif (!inClass && ch === \"#\") {\n\t\t\tinComment = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!inClass && /\\s/.test(ch)) continue;\n\t\tout += ch;\n\t}\n\treturn out;\n}\n\nfunction normalizeSearchPattern(pattern: string, ignoreCase: boolean): { pattern: string; flags: string } {\n\tconst match = pattern.match(/^\\(\\?([imsUx-]+)\\)([\\s\\S]*)$/);\n\tconst flags = new Set<string>();\n\tif (ignoreCase) flags.add(\"i\");\n\tif (match) {\n\t\tconst inline = match[1] ?? \"\";\n\t\tfor (const flag of inline) {\n\t\t\tif (flag === \"i\" || flag === \"m\" || flag === \"s\") flags.add(flag);\n\t\t}\n\t\treturn {\n\t\t\tpattern: inline.includes(\"x\") ? stripExtendedRegexWhitespace(match[2] ?? \"\") : (match[2] ?? \"\"),\n\t\t\tflags: [...flags].join(\"\"),\n\t\t};\n\t}\n\treturn { pattern, flags: [...flags].join(\"\") };\n}\n\nfunction searchTextSelectorLines(\n\tlabel: string,\n\ttext: string,\n\tpattern: string,\n\tignoreCase: boolean,\n\tliteral: boolean,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string[] {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tif (!literal && !normalized.pattern.includes(\"\\n\") && !pattern.includes(\"\\\\n\"))\n\t\ttry {\n\t\t\tconst native = loadNativeSearchBinding()?.search?.(text, {\n\t\t\t\tpattern: normalized.pattern,\n\t\t\t\tignoreCase: normalized.flags.includes(\"i\"),\n\t\t\t\tmultiline: normalized.flags.includes(\"m\") || normalized.flags.includes(\"s\"),\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t});\n\t\t\tif (native && !native.error)\n\t\t\t\treturn native.matches.flatMap((match) => [\n\t\t\t\t\t...(match.contextBefore ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t\t`${label}:${match.lineNumber}: ${truncateSearchLine(match.line)}`,\n\t\t\t\t\t...(match.contextAfter ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t} catch {}\n\tconst matcher = literal ? undefined : new RegExp(normalized.pattern, normalized.flags);\n\tconst needle = normalized.flags.includes(\"i\") ? normalized.pattern.toLowerCase() : normalized.pattern;\n\tconst lines = text.split(\"\\n\");\n\tconst matchLines = new Set<number>();\n\tlines.forEach((line, index) => {\n\t\tconst haystack = normalized.flags.includes(\"i\") ? line.toLowerCase() : line;\n\t\tif (matcher ? matcher.test(line) : haystack.includes(needle)) matchLines.add(index + 1);\n\t});\n\tif (matchLines.size === 0 && matcher) {\n\t\tconst match = new RegExp(normalized.pattern, normalized.flags).exec(text);\n\t\tif (match?.[0]) {\n\t\t\tconst start = text.slice(0, match.index).split(\"\\n\").length;\n\t\t\tfor (let line = start; line < start + match[0].split(\"\\n\").length; line++) matchLines.add(line);\n\t\t}\n\t}\n\tconst outputLines = new Set<number>();\n\tfor (const line of matchLines)\n\t\tfor (let n = Math.max(1, line - contextBefore); n <= Math.min(lines.length, line + contextAfter); n++)\n\t\t\toutputLines.add(n);\n\treturn [...outputLines]\n\t\t.sort((a, b) => a - b)\n\t\t.map(\n\t\t\t(line) =>\n\t\t\t\t`${label}${matchLines.has(line) ? \":\" : \"-\"}${line}${matchLines.has(line) ? \":\" : \"-\"} ${truncateSearchLine(lines[line - 1] ?? \"\")}`,\n\t\t);\n}\n\nexport function searchArchiveSelector(\n\tselector: ArchiveSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tif (isZipArchive(selector.archivePath) && selector.memberPath)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.archivePath}:${selector.memberPath}`,\n\t\t\treadArchiveSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tliteral,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst entries = isZipArchive(selector.archivePath)\n\t\t? readZipEntries(selector.archivePath)\n\t\t: parseTar(selector.archivePath);\n\tconst out: string[] = [];\n\tfor (const [name, data] of entries) {\n\t\tif (selector.memberPath && name !== selector.memberPath) continue;\n\t\tout.push(\n\t\t\t...searchTextSelectorLines(\n\t\t\t\t`${selector.archivePath}:${name}`,\n\t\t\t\tdata.toString(\"utf8\"),\n\t\t\t\tpattern,\n\t\t\t\tignoreCase,\n\t\t\t\tliteral,\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t),\n\t\t);\n\t}\n\treturn out.join(\"\\n\");\n}\n\nfunction routerFromContext(context?: InternalResourceContext): InternalResourceRouter | undefined {\n\treturn context?.internalRouter ?? context?.internalResourceRouter;\n}\nasync function resolveViaRouter(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string | undefined> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.resolve?.(value);\n\tif (routed) return routed;\n\tconst resolved = await context?.resolveInternalUrl?.(value);\n\tif (resolved) return resolved;\n\treturn resolveInternalSelector(value, cwd);\n}\nfunction isContained(root: string, candidate: string): boolean {\n\tconst rel = relative(root, candidate);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\nfunction nearestExistingAncestor(pathValue: string): string {\n\tlet current = pathValue;\n\twhile (!existsSync(current)) {\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) return current;\n\t\tcurrent = parent;\n\t}\n\treturn current;\n}\nfunction realpathExisting(pathValue: string): string {\n\treturn realpathSync.native(nearestExistingAncestor(pathValue));\n}\nfunction resolveContainedPath(root: string, pathValue: string, label: string): string {\n\tconst lexicalRoot = resolve(root),\n\t\tresolved = resolve(root, pathValue);\n\tif (!isContained(lexicalRoot, resolved)) throw new Error(`${label} escapes the workspace: ${pathValue}`);\n\tif (!isContained(realpathExisting(lexicalRoot), realpathExisting(resolved)))\n\t\tthrow new Error(`${label} escapes the workspace: ${pathValue}`);\n\treturn resolved;\n}\nfunction resolveContainedLocalPath(cwd: string, pathValue: string, label = \"local:// resource\"): string {\n\treturn resolveContainedPath(cwd, pathValue, label);\n}\n\nfunction fallbackInternalPath(value: string, cwd: string): string | undefined {\n\tconst skill = value.match(/^skill:\\/\\/([^/]+)(?:\\/(.*))?$/);\n\tif (skill) {\n\t\tconst name = skill[1] ?? \"\",\n\t\t\trest = skill[2] || \"SKILL.md\";\n\t\treturn [\".agents/skills\", \"packages/subagents/skills\", \"packages/workflows/skills\"]\n\t\t\t.map((base) =>\n\t\t\t\tresolveContainedPath(\n\t\t\t\t\tresolveContainedLocalPath(cwd, base, \"skill:// resource\"),\n\t\t\t\t\t`${name}/${rest}`,\n\t\t\t\t\t\"skill:// resource\",\n\t\t\t\t),\n\t\t\t)\n\t\t\t.find((candidate) => existsSync(candidate));\n\t}\n\tconst local = value.match(/^local:\\/\\/(.+)$/);\n\tif (local) return resolveContainedLocalPath(cwd, local[1] ?? \"\");\n\treturn undefined;\n}\nexport function resolveInternalSelector(value: string, cwd: string): string | undefined {\n\treturn fallbackInternalPath(value, cwd);\n}\nexport async function readInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.read?.(value);\n\tif (typeof routed === \"string\") return routed;\n\tif (Buffer.isBuffer(routed)) return routed.toString(\"utf8\");\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved || !existsSync(resolved))\n\t\tthrow new Error(`Internal resource not found or no session router supports it: ${value}`);\n\treturn readFileSync(resolved, \"utf8\");\n}\nexport async function writeInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontent: string,\n\tcontext?: InternalResourceContext,\n): Promise<void> {\n\tconst router = routerFromContext(context);\n\tif (router?.write) {\n\t\tawait router.write(value, content);\n\t\treturn;\n\t}\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved) throw new Error(`Unsupported writable internal resource without a session router: ${value}`);\n\tmkdirSync(dirname(resolved), { recursive: true });\n\twriteFileSync(resolved, content);\n}\nexport async function searchInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontext?: InternalResourceContext,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): Promise<string> {\n\treturn searchTextSelectorLines(\n\t\tvalue,\n\t\tawait readInternalSelector(value, cwd, context),\n\t\tpattern,\n\t\tignoreCase,\n\t\tliteral,\n\t\tcontextBefore,\n\t\tcontextAfter,\n\t).join(\"\\n\");\n}\nfunction shellQuote(value: string, dialect: \"posix\" | \"powershell\"): string {\n\t// PowerShell also treats U+2018–U+201B as single-quote delimiters.\n\treturn dialect === \"powershell\"\n\t\t? `'${value.replace(/['\\u2018-\\u201b]/g, \"$&$&\")}'`\n\t\t: `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nexport async function expandShellInternalUrls(\n\ttext: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n\tquote = false,\n\tdialect: \"posix\" | \"powershell\" = \"posix\",\n): Promise<string> {\n\tconst pattern = /(?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\\/\\/[^\\s'\"`$)]+/gi;\n\tconst replacements = new Map<string, string>();\n\tfor (const match of new Set(text.match(pattern) ?? [])) {\n\t\tconst resolved = await resolveViaRouter(match, cwd, context);\n\t\tif (!resolved) continue;\n\t\t// This is deliberately not a Bash parser. Only expand in plain shell\n\t\t// words: quotes, escapes, substitutions and heredocs change how inserted\n\t\t// quotes are interpreted. Leave arbitrary shell syntax without URLs alone.\n\t\tif (quote && !/^[a-zA-Z0-9_ ./:%+=,@~;|&\\t-]*$/.test(text)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Internal URL shell expansion requires plain unquoted words; use a filesystem path for quotes, substitutions, escapes or heredocs.\",\n\t\t\t);\n\t\t}\n\t\treplacements.set(match, quote ? shellQuote(resolved, dialect) : resolved);\n\t}\n\t// Replace original occurrences only; never reinterpret a router's result.\n\treturn text.replace(pattern, (match) => replacements.get(match) ?? match);\n}\n\nconst ROW_COUNT_PROBE_CAP = 50_000;\nconst MAX_RAW_QUERY_ROWS = 1000;\n\nfunction quoteSqliteIdent(value: string): string {\n\treturn `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\nfunction formatSqliteOrder(order: string | undefined): string {\n\tif (!order) return \"\";\n\treturn order\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [column, direction] = part.split(\":\");\n\t\t\tif (!column || !/^[A-Za-z_][\\w$]*$/.test(column)) throw new Error(`Invalid SQLite order column: ${part}`);\n\t\t\tconst dir = direction?.toLowerCase() === \"desc\" ? \"desc\" : \"asc\";\n\t\t\treturn `${quoteSqliteIdent(column)} ${dir}`;\n\t\t})\n\t\t.join(\", \");\n}\nconst FORBIDDEN_WHERE_KEYWORDS = new Set([\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"select\",\n\t\"load_extension\",\n]);\nfunction validateSqliteWhere(where: string | undefined): string | undefined {\n\tconst trimmed = where?.trim();\n\tif (!trimmed) return undefined;\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (token && (FORBIDDEN_WHERE_KEYWORDS.has(lower) || lower.startsWith(\"pragma_\") || lower.startsWith(\"sqlite_\")))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\treturn trimmed;\n}\nfunction rowsToJsonLines(rows: Record<string, SqliteValue>[]): string {\n\treturn rows.map((row) => JSON.stringify(row)).join(\"\\n\");\n}\n\nconst FORBIDDEN_RAW_QUERY_KEYWORDS = new Set([\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"drop\",\n\t\"alter\",\n\t\"create\",\n\t\"replace\",\n\t\"vacuum\",\n\t\"reindex\",\n\t\"load_extension\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n]);\nfunction validateRawSqliteQuery(query: string): string {\n\tconst trimmed = query.trim();\n\tif (!trimmed) throw new Error(\"SQLite raw query must not be empty\");\n\tif (!/^select\\b/i.test(trimmed)) throw new Error(\"Invalid raw SQLite query\");\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (\n\t\t\tlower &&\n\t\t\t(FORBIDDEN_RAW_QUERY_KEYWORDS.has(lower) || lower.startsWith(\"sqlite_\") || lower.startsWith(\"pragma_\"))\n\t\t)\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\tif (quote) throw new Error(\"Invalid raw SQLite query\");\n\treturn trimmed;\n}\n\nfunction readRawSqliteRows(query: SqliteQuery): Record<string, SqliteValue>[] {\n\tconst rows: Record<string, SqliteValue>[] = [];\n\tconst iterable = query.iterate?.();\n\tif (!iterable) return query.all().slice(0, MAX_RAW_QUERY_ROWS);\n\tfor (const row of iterable) {\n\t\tif (rows.length >= MAX_RAW_QUERY_ROWS) break;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nfunction sqliteTableColumns(db: SqliteDatabase, table: string): string[] {\n\treturn (db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string }>)\n\t\t.map((row) => String(row.name ?? \"\"))\n\t\t.filter(Boolean);\n}\n\nfunction boundedSqliteRowCount(db: SqliteDatabase, table: string): string | number {\n\tconst row = db\n\t\t.query(\n\t\t\t`select count(*) as count from (select 1 from ${quoteSqliteIdent(table)} limit ${ROW_COUNT_PROBE_CAP + 1})`,\n\t\t)\n\t\t.all()[0];\n\tconst count = Number(row?.count ?? 0);\n\treturn count > ROW_COUNT_PROBE_CAP ? `${ROW_COUNT_PROBE_CAP}+` : count;\n}\nfunction normalizeSqliteWriteValue(value: unknown, column: string): SqliteValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\")\n\t\treturn value;\n\tthrow new Error(`SQLite column '${column}' only accepts JSON scalar values or null`);\n}\n\nfunction sqlitePrimaryKey(db: SqliteDatabase, table: string): string {\n\treturn (\n\t\t(db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string; pk?: number }>).find(\n\t\t\t(row) => row.pk === 1,\n\t\t)?.name ?? \"rowid\"\n\t);\n}\nexport function readSqliteSelector(selector: SqliteSelector): string {\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tif (selector.query) return rowsToJsonLines(readRawSqliteRows(db.query(validateRawSqliteQuery(selector.query))));\n\t\tif (!selector.table) {\n\t\t\tconst tables = db\n\t\t\t\t.query(\"select name from sqlite_master where type='table' and name not like 'sqlite_%' order by name\")\n\t\t\t\t.all()\n\t\t\t\t.slice(0, 500);\n\t\t\treturn tables\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst name = String(row.name ?? \"\");\n\t\t\t\t\treturn JSON.stringify({ table: name, rows: boundedSqliteRowCount(db, name) });\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t\tconst schemaRows = db.query(`pragma table_info(${quoteSqliteIdent(selector.table)})`).all();\n\t\tif (selector.schema) return rowsToJsonLines(schemaRows);\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst isQuery = selector.limit !== undefined || selector.offset !== undefined || selector.where || selector.order;\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? (isQuery ? 20 : 5);\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst sql = [\n\t\t\t`select * from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\tif (selector.rowId || isQuery || selector.sampleRows !== undefined) return rowsToJsonLines(rows);\n\t\treturn [`# ${selector.table}`, \"Schema:\", rowsToJsonLines(schemaRows), \"Rows:\", rowsToJsonLines(rows)].join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\nfunction stripJson5Comments(input: string): string {\n\tlet out = \"\",\n\t\tquote = \"\",\n\t\tescaped = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!,\n\t\t\tnext = input[i + 1];\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tout += ch;\n\t\t\tif (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === quote) quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tout += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"/\") {\n\t\t\twhile (i < input.length && input[i] !== \"\\n\") i++;\n\t\t\tout += \"\\n\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\ti += 2;\n\t\t\twhile (i < input.length && !(input[i] === \"*\" && input[i + 1] === \"/\")) i++;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tout += ch;\n\t}\n\treturn out;\n}\nfunction parseLooseJsonObject(content: string): Record<string, SqliteValue> {\n\tconst trimmed = stripJson5Comments(content.trim());\n\tif (!trimmed)\n\t\tthrow new Error(\n\t\t\t\"SQLite write content must be a JSON object; empty content only deletes a row when a row id is present.\",\n\t\t);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch {\n\t\tconst normalized = trimmed\n\t\t\t.replace(/([{,]\\s*)([A-Za-z_$][\\w$]*)\\s*:/g, '$1\"$2\":')\n\t\t\t.replace(/:\\s*\\+(-?\\d+(?:\\.\\d+)?)/g, \":$1\")\n\t\t\t.replace(\n\t\t\t\t/(:\\s*)0x[0-9a-fA-F]+/g,\n\t\t\t\t(match, prefix: string) => `${prefix}${Number.parseInt(match.slice(prefix.length + 2), 16)}`,\n\t\t\t)\n\t\t\t.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, (_match, body: string) => JSON.stringify(body.replace(/\\\\'/g, \"'\")))\n\t\t\t.replace(/,\\s*([}\\]])/g, \"$1\");\n\t\tparsed = JSON.parse(normalized);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n\t\tthrow new Error(\"SQLite write content must be a JSON object.\");\n\treturn Object.fromEntries(\n\t\tObject.entries(parsed as Record<string, unknown>).map(([column, value]) => [\n\t\t\tcolumn,\n\t\t\tnormalizeSqliteWriteValue(value, column),\n\t\t]),\n\t);\n}\nexport function writeSqliteSelector(selector: SqliteSelector, content: string): string {\n\tif (!selector.table) throw new Error(\"SQLite write target must include a table name\");\n\tif (!existsSync(selector.databasePath)) throw new Error(`SQLite database does not exist: ${selector.databasePath}`);\n\tif (content.trim() === \"\") {\n\t\tif (!selector.rowId) throw new Error(\"SQLite empty content deletes a row only when a row id is present.\");\n\t\tconst Database = sqliteDatabase();\n\t\tconst db = new Database(selector.databasePath);\n\t\ttry {\n\t\t\tconst table = selector.table;\n\t\t\tconst result = db\n\t\t\t\t.query(`delete from ${quoteSqliteIdent(table)} where ${quoteSqliteIdent(sqlitePrimaryKey(db, table))} = ?`)\n\t\t\t\t.run(selector.rowId);\n\t\t\treturn (result.changes ?? 0) > 0\n\t\t\t\t? `Deleted row '${selector.rowId}' in ${table}`\n\t\t\t\t: `No row deleted for '${selector.rowId}' in ${table}`;\n\t\t} finally {\n\t\t\tdb.close();\n\t\t}\n\t}\n\tconst data = parseLooseJsonObject(content);\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath);\n\ttry {\n\t\tconst table = selector.table;\n\t\tconst quotedTable = quoteSqliteIdent(table);\n\t\tconst key = sqlitePrimaryKey(db, table);\n\t\tconst quotedKey = quoteSqliteIdent(key);\n\t\tconst validColumns = new Set(sqliteTableColumns(db, table));\n\t\tif (!selector.rowId && key !== \"id\" && Object.hasOwn(data, \"id\") && !Object.hasOwn(data, key)) {\n\t\t\tdata[key] = data.id;\n\t\t\tdelete data.id;\n\t\t}\n\t\tconst columns = Object.keys(data);\n\t\tfor (const column of columns)\n\t\t\tif (!validColumns.has(column)) throw new Error(`SQLite table '${table}' has no column named '${column}'`);\n\t\tif (columns.length === 0) {\n\t\t\tif (!selector.rowId) {\n\t\t\t\tdb.query(`insert into ${quotedTable} default values`).run();\n\t\t\t\treturn `Inserted row into ${table}`;\n\t\t\t}\n\t\t\tthrow new Error(\"SQLite update content must include at least one column.\");\n\t\t}\n\t\tif (!selector.rowId) {\n\t\t\tconst quoted = columns.map(quoteSqliteIdent).join(\", \");\n\t\t\tdb.query(`insert into ${quotedTable} (${quoted}) values (${columns.map(() => \"?\").join(\", \")})`).run(\n\t\t\t\t...columns.map((column) => data[column]),\n\t\t\t);\n\t\t\treturn `Inserted row into ${table}`;\n\t\t}\n\t\tconst assignments = columns.map((column) => `${quoteSqliteIdent(column)} = ?`).join(\", \");\n\t\tconst result = db\n\t\t\t.query(`update ${quotedTable} set ${assignments} where ${quotedKey} = ?`)\n\t\t\t.run(...columns.map((column) => data[column]), selector.rowId);\n\t\treturn (result.changes ?? 0) > 0\n\t\t\t? `Updated row '${selector.rowId}' in ${table}`\n\t\t\t: `No row updated for '${selector.rowId}' in ${table}`;\n\t} finally {\n\t\tdb.close();\n\t}\n}\nexport function searchSqliteSelector(\n\tselector: SqliteSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tconst matcher = new RegExp(normalized.pattern, normalized.flags);\n\tif (!selector.table || selector.query)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.databasePath}:${selector.table ?? \"tables\"}`,\n\t\t\treadSqliteSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tfalse,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? 1000;\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst rowIdAlias = \"__atomic_rowid__\";\n\t\tconst selectList = key === \"rowid\" ? `rowid as ${quoteSqliteIdent(rowIdAlias)}, *` : \"*\";\n\t\tconst sql = [\n\t\t\t`select ${selectList} from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\treturn rows\n\t\t\t.map((rawRow, index) => {\n\t\t\t\tconst row = rawRow as Record<string, unknown>;\n\t\t\t\tconst rowKey = key === \"rowid\" ? row[rowIdAlias] : row[key];\n\t\t\t\tif (key === \"rowid\") delete row[rowIdAlias];\n\t\t\t\treturn { row, key: String(rowKey ?? offset + index + 1) };\n\t\t\t})\n\t\t\t.filter(({ row }) => matcher.test(JSON.stringify(row)))\n\t\t\t.map(\n\t\t\t\t({ row, key }) =>\n\t\t\t\t\t`${selector.databasePath}:${selector.table}:${key}: ${truncateSearchLine(JSON.stringify(row))}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\n"]}
1
+ {"version":3,"file":"resource-selectors.js","sourceRoot":"","sources":["../../../src/core/tools/resource-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { deflateRawSync, gunzipSync, gzipSync, inflateRawSync } from \"node:zlib\";\nimport { loadNativeSearchBinding } from \"./search-native.ts\";\n\nexport interface ArchiveSelector {\n\tarchivePath: string;\n\tmemberPath: string;\n}\nexport interface SqliteSelector {\n\tdatabasePath: string;\n\ttable?: string;\n\trowId?: string;\n\tquery?: string;\n\tlimit?: number;\n\toffset?: number;\n\twhere?: string;\n\torder?: string;\n\tschema?: boolean;\n\tsampleRows?: number;\n}\nexport interface InternalResourceRouter {\n\tread?: (url: string) => string | Buffer | undefined | Promise<string | Buffer | undefined>;\n\twrite?: (url: string, content: string) => void | Promise<void>;\n\tresolve?: (url: string) => string | undefined | Promise<string | undefined>;\n}\nexport interface InternalResourceContext {\n\tinternalRouter?: InternalResourceRouter;\n\tinternalResourceRouter?: InternalResourceRouter;\n\tresolveInternalUrl?: (url: string) => string | undefined | Promise<string | undefined>;\n}\ntype SqliteValue = string | number | boolean | null;\ninterface SqliteQuery {\n\tall(...params: SqliteValue[]): Record<string, SqliteValue>[];\n\tget?(...params: SqliteValue[]): Record<string, SqliteValue> | undefined;\n\titerate?(): Iterable<Record<string, SqliteValue>>;\n\trun(...params: SqliteValue[]): { changes?: number; lastInsertRowid?: number | bigint };\n}\ninterface SqliteDatabase {\n\tquery(sql: string): SqliteQuery;\n\tclose(): void;\n}\ntype SqliteDatabaseConstructor = new (path: string, options?: { readonly?: boolean }) => SqliteDatabase;\n/**\n * SQLite via `node:sqlite`.\n *\n * It is unflagged from Node v22.13.0, it is the module upstream pi uses, and\n * Bun ships it from 1.4.0 (oven-sh/bun#32498), before the current 1.4.2 floor,\n * so both runtimes provide it. The `bun:sqlite` fallback that covered older\n * Bun binaries was removed with the earlier 1.4.0 floor.\n *\n * `better-sqlite3` was evaluated and rejected: it segfaults Bun 1.3.14 on\n * construction, which is worse than a catchable missing-module error.\n *\n * The adapter keeps the `bun:sqlite`-shaped API these selectors were written\n * against and normalizes the deltas: `node:sqlite` spells the option\n * `readOnly` and rejects it when passed explicitly as `undefined`, and it\n * refuses to bind booleans, which are stored as integer 1/0.\n */\ninterface NodeSqliteStatement {\n\tall(...params: unknown[]): Record<string, SqliteValue>[];\n\tget(...params: unknown[]): Record<string, SqliteValue> | undefined;\n\titerate(...params: unknown[]): Iterable<Record<string, SqliteValue>>;\n\trun(...params: unknown[]): { changes?: number | bigint; lastInsertRowid?: number | bigint };\n}\ninterface NodeSqliteDatabase {\n\tprepare(sql: string): NodeSqliteStatement;\n\tclose(): void;\n}\ntype NodeSqliteConstructor = new (path: string, options?: { readOnly?: boolean }) => NodeSqliteDatabase;\n\n/** Callers may pass booleans; `node:sqlite` refuses to bind them, so store integer 1/0. */\nexport function toSqliteBindValues(params: readonly SqliteValue[]): unknown[] {\n\treturn params.map((param) => (typeof param === \"boolean\" ? (param ? 1 : 0) : param));\n}\n\nfunction nodeSqliteAdapter(DatabaseSync: NodeSqliteConstructor): SqliteDatabaseConstructor {\n\treturn class NodeSqliteAdapter implements SqliteDatabase {\n\t\tprivate readonly db: NodeSqliteDatabase;\n\t\tconstructor(path: string, options?: { readonly?: boolean }) {\n\t\t\t// Passing `undefined` explicitly fails node:sqlite's arity validation.\n\t\t\tthis.db = options?.readonly === true ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);\n\t\t}\n\t\tquery(sql: string): SqliteQuery {\n\t\t\tconst statement = this.db.prepare(sql);\n\t\t\treturn {\n\t\t\t\tall: (...params: SqliteValue[]) => statement.all(...toSqliteBindValues(params)),\n\t\t\t\tget: (...params: SqliteValue[]) => statement.get(...toSqliteBindValues(params)),\n\t\t\t\titerate: () => statement.iterate(),\n\t\t\t\trun: (...params: SqliteValue[]) => {\n\t\t\t\t\tconst result = statement.run(...toSqliteBindValues(params));\n\t\t\t\t\treturn { changes: Number(result.changes ?? 0), lastInsertRowid: result.lastInsertRowid };\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tclose(): void {\n\t\t\tthis.db.close();\n\t\t}\n\t};\n}\n\nfunction sqliteDatabase(): SqliteDatabaseConstructor {\n\tconst requireModule = createRequire(import.meta.url);\n\ttry {\n\t\tconst { DatabaseSync } = requireModule(\"node:sqlite\") as { DatabaseSync: NodeSqliteConstructor };\n\t\treturn nodeSqliteAdapter(DatabaseSync);\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite selectors need node:sqlite (Node >= 22.13 or Bun >= 1.4.2); this runtime does not provide it.\",\n\t\t);\n\t}\n}\nfunction existingSqliteFile(path: string): boolean | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path).subarray(0, 16).toString(\"binary\") === \"SQLite format 3\\0\";\n}\nexport function sqliteSelectorForPath(value: string, cwd: string): SqliteSelector | undefined {\n\tconst selector = parseSqliteSelector(value);\n\tif (!selector) return undefined;\n\tconst absolute = resolveContainedLocalPath(cwd, selector.databasePath, \"SQLite selector\");\n\tif (existingSqliteFile(absolute) !== true) return undefined;\n\treturn { ...selector, databasePath: absolute };\n}\n\nconst MAX_TAR_ARCHIVE_BYTES = 256 * 1024 * 1024;\nconst MAX_ARCHIVE_MEMBER_BYTES = 64 * 1024 * 1024;\nconst MAX_ARCHIVE_DIRECTORY_ENTRIES = 500;\n\nconst ARCHIVE_EXTENSIONS = [\"zip\", \"jar\", \"tar\", \"tgz\", \"tar.gz\", \"gz\"] as const;\nconst SQLITE_EXTENSIONS = [\"sqlite\", \"sqlite3\", \"db\", \"db3\"] as const;\n\n/** Whether `value[0..end)` ends with `.<extension>` preceded by at least one character. */\nfunction endsWithExtension(lower: string, end: number, extensions: readonly string[]): boolean {\n\treturn extensions.some((extension) => end > extension.length + 1 && lower.endsWith(`.${extension}`, end));\n}\n\nexport function parseArchiveSelector(value: string): ArchiveSelector | undefined {\n\t// Scan colons right to left so the longest archive path wins, exactly as the\n\t// previous greedy `(.+\\.ext):(.*)` regex did. That regex's ambiguous `.+`\n\t// prefix was flagged as polynomial ReDoS (js/polynomial-redos); this scan is\n\t// linear in the input.\n\tconst lower = value.toLowerCase();\n\tfor (let index = value.lastIndexOf(\":\"); index > 0; index = value.lastIndexOf(\":\", index - 1)) {\n\t\tif (endsWithExtension(lower, index, ARCHIVE_EXTENSIONS)) {\n\t\t\treturn { archivePath: value.slice(0, index), memberPath: value.slice(index + 1) };\n\t\t}\n\t}\n\treturn undefined;\n}\nexport function resolveArchiveSelector(selector: ArchiveSelector, cwd: string): ArchiveSelector {\n\treturn { ...selector, archivePath: resolveContainedLocalPath(cwd, selector.archivePath, \"Archive selector\") };\n}\nconst SQLITE_SELECTOR_SUFFIX = /^(?:\\?q=(.+)|:([^:?]+)(?:\\?(.+))?(?::([^:?]+))?)?$/i;\nexport function parseSqliteSelector(value: string): SqliteSelector | undefined {\n\t// Try each candidate database path from longest to shortest, mirroring the\n\t// previous greedy `(.+\\.ext)` regex prefix without its ambiguity, which was\n\t// flagged as polynomial ReDoS (js/polynomial-redos). The suffix grammar is\n\t// unchanged and unambiguous.\n\tconst lower = value.toLowerCase();\n\tfor (let end = value.length; end > 0; end--) {\n\t\tif (!endsWithExtension(lower, end, SQLITE_EXTENSIONS)) continue;\n\t\tconst match = value.slice(end).match(SQLITE_SELECTOR_SUFFIX);\n\t\tif (!match) continue;\n\t\tconst params = new URLSearchParams(match[3] ?? \"\");\n\t\tconst limit = Number.parseInt(params.get(\"limit\") ?? \"\", 10);\n\t\tconst offset = Number.parseInt(params.get(\"offset\") ?? \"\", 10);\n\t\tconst sampleRows = Number.parseInt(params.get(\"sampleRows\") ?? params.get(\"sample_rows\") ?? \"\", 10);\n\t\treturn {\n\t\t\tdatabasePath: value.slice(0, end),\n\t\t\tquery: match[1] ? decodeURIComponent(match[1]) : undefined,\n\t\t\ttable: match[2],\n\t\t\trowId: match[4] ?? params.get(\"id\") ?? undefined,\n\t\t\tlimit: Number.isFinite(limit) ? Math.max(0, Math.min(500, limit)) : undefined,\n\t\t\toffset: Number.isFinite(offset) ? Math.max(0, offset) : undefined,\n\t\t\twhere: params.get(\"where\") ?? undefined,\n\t\t\torder: params.get(\"order\") ?? undefined,\n\t\t\tschema: params.get(\"schema\") === \"true\" || params.get(\"schema\") === \"1\",\n\t\t\tsampleRows: Number.isFinite(sampleRows) ? Math.max(0, Math.min(100, sampleRows)) : undefined,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction isZipArchive(path: string): boolean {\n\treturn /\\.(?:zip|jar)$/i.test(path);\n}\nfunction isGzipTar(path: string): boolean {\n\treturn /\\.(?:tgz|tar\\.gz|gz)$/i.test(path);\n}\nfunction crc32(data: Buffer): number {\n\tlet crc = ~0;\n\tfor (const byte of data) {\n\t\tcrc ^= byte;\n\t\tfor (let i = 0; i < 8; i++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\n\t}\n\treturn ~crc >>> 0;\n}\nfunction assertZipRange(buf: Buffer, offset: number, length: number, label: string): void {\n\tif (\n\t\t!Number.isSafeInteger(offset) ||\n\t\t!Number.isSafeInteger(length) ||\n\t\toffset < 0 ||\n\t\tlength < 0 ||\n\t\toffset > buf.length - length\n\t)\n\t\tthrow new Error(`Invalid zip entry bounds: ${label}`);\n}\nfunction zipEntryPayload(\n\tbuf: Buffer,\n\tlabel: string,\n\tname: string,\n\tlocalOffset: number,\n\tcompressedSize: number,\n): Buffer {\n\tif (compressedSize > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member compressed data too large: ${name}`);\n\tassertZipRange(buf, localOffset, 30, label);\n\tif (buf.readUInt32LE(localOffset) !== 0x04034b50) throw new Error(`Invalid zip local header: ${label}`);\n\tconst localNameLen = buf.readUInt16LE(localOffset + 26),\n\t\tlocalExtraLen = buf.readUInt16LE(localOffset + 28),\n\t\tstart = localOffset + 30 + localNameLen + localExtraLen;\n\tassertZipRange(buf, start, compressedSize, label);\n\treturn buf.subarray(start, start + compressedSize);\n}\nexport function readZipEntriesFromBuffer(buf: Buffer, label: string): Map<string, Buffer> {\n\tconst entries = new Map<string, Buffer>();\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${label}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10);\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, label);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${label}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, label);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${name}`);\n\t\tconst data = zipEntryPayload(buf, label, name, localOffset, compressedSize);\n\t\tentries.set(\n\t\t\tname,\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})(),\n\t\t);\n\t}\n\treturn entries;\n}\nexport function readZipEntries(path: string): Map<string, Buffer> {\n\treturn readZipEntriesFromBuffer(readFileSync(path), path);\n}\nfunction writeZipEntries(path: string, entries: Map<string, Buffer>): void {\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tfor (const [name, data] of entries) {\n\t\tconst nameBuf = Buffer.from(name),\n\t\t\tcompressed = deflateRawSync(data),\n\t\t\tcrc = crc32(data);\n\t\tconst local = Buffer.alloc(30);\n\t\tlocal.writeUInt32LE(0x04034b50, 0);\n\t\tlocal.writeUInt16LE(20, 4);\n\t\tlocal.writeUInt16LE(8, 8);\n\t\tlocal.writeUInt32LE(crc, 14);\n\t\tlocal.writeUInt32LE(compressed.length, 18);\n\t\tlocal.writeUInt32LE(data.length, 22);\n\t\tlocal.writeUInt16LE(nameBuf.length, 26);\n\t\tlocals.push(local, nameBuf, compressed);\n\t\tconst central = Buffer.alloc(46);\n\t\tcentral.writeUInt32LE(0x02014b50, 0);\n\t\tcentral.writeUInt16LE(20, 4);\n\t\tcentral.writeUInt16LE(20, 6);\n\t\tcentral.writeUInt16LE(8, 10);\n\t\tcentral.writeUInt32LE(crc, 16);\n\t\tcentral.writeUInt32LE(compressed.length, 20);\n\t\tcentral.writeUInt32LE(data.length, 24);\n\t\tcentral.writeUInt16LE(nameBuf.length, 28);\n\t\tcentral.writeUInt32LE(offset, 42);\n\t\tcentrals.push(central, nameBuf);\n\t\toffset += local.length + nameBuf.length + compressed.length;\n\t}\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0);\n\tconst eocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(entries.size, 8);\n\teocd.writeUInt16LE(entries.size, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\nfunction parseTar(path: string): Map<string, Buffer> {\n\tconst raw = readFileSync(path);\n\tif (raw.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst buf = isGzipTar(path) ? gunzipSync(raw, { maxOutputLength: MAX_TAR_ARCHIVE_BYTES }) : raw;\n\tif (buf.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst entries = new Map<string, Buffer>();\n\tfor (let offset = 0; offset + 512 <= buf.length; ) {\n\t\tconst header = buf.subarray(offset, offset + 512);\n\t\tif (header.every((byte) => byte === 0)) break;\n\t\tconst name = header.subarray(0, 100).toString().replace(/\\0.*$/, \"\");\n\t\tconst prefix = header.subarray(345, 500).toString().replace(/\\0.*$/, \"\");\n\t\tconst fullName = prefix ? `${prefix}/${name}` : name;\n\t\tconst size = Number.parseInt(header.subarray(124, 136).toString().replace(/\\0.*$/, \"\").trim() || \"0\", 8);\n\t\tconst type = String.fromCharCode(header[156] ?? 48);\n\t\tconst dataStart = offset + 512;\n\t\tif (type !== \"5\" && fullName) {\n\t\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${fullName}`);\n\t\t\tentries.set(fullName, Buffer.from(buf.subarray(dataStart, dataStart + size)));\n\t\t}\n\t\toffset = dataStart + Math.ceil(size / 512) * 512;\n\t}\n\treturn entries;\n}\nfunction tarHeader(name: string, size: number): Buffer {\n\tconst header = Buffer.alloc(512);\n\tconst nameBytes = Buffer.from(name);\n\tnameBytes.copy(header, 0, 0, Math.min(100, nameBytes.length));\n\theader.write(\"0000644\\0\", 100);\n\theader.write(\"0000000\\0\", 108);\n\theader.write(\"0000000\\0\", 116);\n\theader.write(`${size.toString(8).padStart(11, \"0\")}\\0`, 124);\n\theader.write(\"00000000000\\0\", 136);\n\theader.fill(0x20, 148, 156);\n\theader[156] = 48;\n\theader.write(\"ustar\\0\", 257);\n\theader.write(\"00\", 263);\n\tlet sum = 0;\n\tfor (const byte of header) sum += byte;\n\theader.write(`${sum.toString(8).padStart(6, \"0\")}\\0 `, 148);\n\treturn header;\n}\nfunction writeTar(path: string, entries: Map<string, Buffer>): void {\n\tconst parts: Buffer[] = [];\n\tfor (const [name, data] of entries) {\n\t\tparts.push(tarHeader(name, data.length), data);\n\t\tconst pad = (512 - (data.length % 512)) % 512;\n\t\tif (pad) parts.push(Buffer.alloc(pad));\n\t}\n\tparts.push(Buffer.alloc(1024));\n\tconst out = Buffer.concat(parts);\n\twriteFileSync(path, isGzipTar(path) ? gzipSync(out) : out);\n}\nfunction listArchiveDirectory(names: Iterable<string>, memberPath: string): string {\n\tconst prefix = memberPath ? `${memberPath.replace(/\\/+$/g, \"\")}/` : \"\";\n\tconst children = new Set<string>();\n\tfor (const name of names) {\n\t\tif (!name.startsWith(prefix) || name === prefix) continue;\n\t\tconst rest = name.slice(prefix.length);\n\t\tconst [first, ...more] = rest.split(\"/\");\n\t\tif (first) children.add(more.length > 0 ? `${first}/` : first);\n\t}\n\treturn [...children].sort().slice(0, MAX_ARCHIVE_DIRECTORY_ENTRIES).join(\"\\n\");\n}\n\nfunction readZipSelector(path: string, memberPath: string): string {\n\tconst buf = readFileSync(path);\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10),\n\t\tnames: string[] = [];\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, path);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${path}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tnames.push(name);\n\t\tif (memberPath && name !== memberPath) continue;\n\t\tif (!memberPath) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${memberPath}`);\n\t\tconst data = zipEntryPayload(buf, path, name, localOffset, compressedSize);\n\t\treturn (\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})()\n\t\t).toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(names, memberPath);\n\tif (listing) return listing;\n\tif (!memberPath) return \"\";\n\tthrow new Error(`Archive member not found: ${memberPath}`);\n}\n\nexport function readArchiveSelector(selector: ArchiveSelector): string {\n\tif (isZipArchive(selector.archivePath)) return readZipSelector(selector.archivePath, selector.memberPath);\n\tconst entries = parseTar(selector.archivePath);\n\tif (!selector.memberPath) return listArchiveDirectory(entries.keys(), \"\");\n\tconst data = entries.get(selector.memberPath);\n\tif (data) {\n\t\tif (data.length > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${selector.memberPath}`);\n\t\treturn data.toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(entries.keys(), selector.memberPath);\n\tif (listing) return listing;\n\tthrow new Error(`Archive member not found: ${selector.memberPath}`);\n}\nfunction validateArchiveMemberPath(memberPath: string): void {\n\tif (!memberPath || memberPath.startsWith(\"/\") || memberPath.endsWith(\"/\") || memberPath.split(\"/\").includes(\"..\"))\n\t\tthrow new Error(`Invalid archive member path: ${memberPath}`);\n}\nfunction writeZipEntrySelective(path: string, memberPath: string, data: Buffer): void {\n\tconst source = existsSync(path) ? readFileSync(path) : Buffer.alloc(0);\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tif (source.length > 0) {\n\t\tlet eocd = -1;\n\t\tfor (let i = source.length - 22; i >= 0; i--)\n\t\t\tif (source.readUInt32LE(i) === 0x06054b50) {\n\t\t\t\teocd = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\t\tlet ptr = source.readUInt32LE(eocd + 16);\n\t\tconst total = source.readUInt16LE(eocd + 10);\n\t\tfor (let n = 0; n < total; n++) {\n\t\t\tassertZipRange(source, ptr, 46, path);\n\t\t\tconst start = ptr,\n\t\t\t\tflags = source.readUInt16LE(ptr + 8),\n\t\t\t\tnameLen = source.readUInt16LE(ptr + 28),\n\t\t\t\textraLen = source.readUInt16LE(ptr + 30),\n\t\t\t\tcommentLen = source.readUInt16LE(ptr + 32),\n\t\t\t\tlocalOffset = source.readUInt32LE(ptr + 42),\n\t\t\t\tcompressedSize = source.readUInt32LE(ptr + 20);\n\t\t\tassertZipRange(source, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\t\tconst name = source.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\t\tif (name === memberPath) continue;\n\t\t\tif ((flags & 0x0008) !== 0) throw new Error(`Unsupported zip data descriptor during selective write: ${name}`);\n\t\t\tassertZipRange(source, localOffset, 30, path);\n\t\t\tconst localNameLen = source.readUInt16LE(localOffset + 26),\n\t\t\t\tlocalExtraLen = source.readUInt16LE(localOffset + 28),\n\t\t\t\tlocalEnd = localOffset + 30 + localNameLen + localExtraLen + compressedSize;\n\t\t\tassertZipRange(source, localOffset, localEnd - localOffset, path);\n\t\t\tconst local = source.subarray(localOffset, localEnd),\n\t\t\t\tcentral = Buffer.from(source.subarray(start, ptr));\n\t\t\tcentral.writeUInt32LE(offset, 42);\n\t\t\tlocals.push(local);\n\t\t\tcentrals.push(central);\n\t\t\toffset += local.length;\n\t\t}\n\t}\n\tconst tmp = `${path}.atomic-entry-${Date.now()}`;\n\twriteZipEntries(tmp, new Map([[memberPath, data]]));\n\tconst built = readFileSync(tmp);\n\trmSync(tmp, { force: true });\n\tconst eocdStart = built.length - 22,\n\t\tlocalLen = built.readUInt32LE(eocdStart + 16),\n\t\tcentralSizeOne = built.readUInt32LE(eocdStart + 12);\n\tconst central = Buffer.from(built.subarray(localLen, localLen + centralSizeOne));\n\tcentral.writeUInt32LE(offset, 42);\n\tlocals.push(built.subarray(0, localLen));\n\tcentrals.push(central);\n\toffset += localLen;\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0),\n\t\teocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(centrals.length, 8);\n\teocd.writeUInt16LE(centrals.length, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\n\nexport function writeArchiveSelector(selector: ArchiveSelector, content: string): void {\n\tvalidateArchiveMemberPath(selector.memberPath);\n\tmkdirSync(dirname(selector.archivePath), { recursive: true });\n\tif (isZipArchive(selector.archivePath)) {\n\t\twriteZipEntrySelective(selector.archivePath, selector.memberPath, Buffer.from(content));\n\t\treturn;\n\t}\n\tconst entries = existsSync(selector.archivePath) ? parseTar(selector.archivePath) : new Map<string, Buffer>();\n\tentries.set(selector.memberPath, Buffer.from(content));\n\twriteTar(selector.archivePath, entries);\n}\nconst SEARCH_LINE_LIMIT = 512;\nfunction truncateSearchLine(line: string): string {\n\treturn line.length > SEARCH_LINE_LIMIT ? `${line.slice(0, SEARCH_LINE_LIMIT)}… [truncated]` : line;\n}\nfunction stripExtendedRegexWhitespace(pattern: string): string {\n\tlet out = \"\",\n\t\tescaped = false,\n\t\tinClass = false,\n\t\tinComment = false;\n\tfor (const ch of pattern) {\n\t\tif (inComment) {\n\t\t\tif (ch === \"\\n\" || ch === \"\\r\") inComment = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tout += ch;\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\") inClass = false;\n\t\tif (!inClass && ch === \"#\") {\n\t\t\tinComment = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!inClass && /\\s/.test(ch)) continue;\n\t\tout += ch;\n\t}\n\treturn out;\n}\n\nfunction normalizeSearchPattern(pattern: string, ignoreCase: boolean): { pattern: string; flags: string } {\n\tconst match = pattern.match(/^\\(\\?([imsUx-]+)\\)([\\s\\S]*)$/);\n\tconst flags = new Set<string>();\n\tif (ignoreCase) flags.add(\"i\");\n\tif (match) {\n\t\tconst inline = match[1] ?? \"\";\n\t\tfor (const flag of inline) {\n\t\t\tif (flag === \"i\" || flag === \"m\" || flag === \"s\") flags.add(flag);\n\t\t}\n\t\treturn {\n\t\t\tpattern: inline.includes(\"x\") ? stripExtendedRegexWhitespace(match[2] ?? \"\") : (match[2] ?? \"\"),\n\t\t\tflags: [...flags].join(\"\"),\n\t\t};\n\t}\n\treturn { pattern, flags: [...flags].join(\"\") };\n}\n\nfunction searchTextSelectorLines(\n\tlabel: string,\n\ttext: string,\n\tpattern: string,\n\tignoreCase: boolean,\n\tliteral: boolean,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string[] {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tif (!literal && !normalized.pattern.includes(\"\\n\") && !pattern.includes(\"\\\\n\"))\n\t\ttry {\n\t\t\tconst native = loadNativeSearchBinding()?.search?.(text, {\n\t\t\t\tpattern: normalized.pattern,\n\t\t\t\tignoreCase: normalized.flags.includes(\"i\"),\n\t\t\t\tmultiline: normalized.flags.includes(\"m\") || normalized.flags.includes(\"s\"),\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t});\n\t\t\tif (native && !native.error)\n\t\t\t\treturn native.matches.flatMap((match) => [\n\t\t\t\t\t...(match.contextBefore ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t\t`${label}:${match.lineNumber}: ${truncateSearchLine(match.line)}`,\n\t\t\t\t\t...(match.contextAfter ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t} catch {}\n\tconst matcher = literal ? undefined : new RegExp(normalized.pattern, normalized.flags);\n\tconst needle = normalized.flags.includes(\"i\") ? normalized.pattern.toLowerCase() : normalized.pattern;\n\tconst lines = text.split(\"\\n\");\n\tconst matchLines = new Set<number>();\n\tlines.forEach((line, index) => {\n\t\tconst haystack = normalized.flags.includes(\"i\") ? line.toLowerCase() : line;\n\t\tif (matcher ? matcher.test(line) : haystack.includes(needle)) matchLines.add(index + 1);\n\t});\n\tif (matchLines.size === 0 && matcher) {\n\t\tconst match = new RegExp(normalized.pattern, normalized.flags).exec(text);\n\t\tif (match?.[0]) {\n\t\t\tconst start = text.slice(0, match.index).split(\"\\n\").length;\n\t\t\tfor (let line = start; line < start + match[0].split(\"\\n\").length; line++) matchLines.add(line);\n\t\t}\n\t}\n\tconst outputLines = new Set<number>();\n\tfor (const line of matchLines)\n\t\tfor (let n = Math.max(1, line - contextBefore); n <= Math.min(lines.length, line + contextAfter); n++)\n\t\t\toutputLines.add(n);\n\treturn [...outputLines]\n\t\t.sort((a, b) => a - b)\n\t\t.map(\n\t\t\t(line) =>\n\t\t\t\t`${label}${matchLines.has(line) ? \":\" : \"-\"}${line}${matchLines.has(line) ? \":\" : \"-\"} ${truncateSearchLine(lines[line - 1] ?? \"\")}`,\n\t\t);\n}\n\nexport function searchArchiveSelector(\n\tselector: ArchiveSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tif (isZipArchive(selector.archivePath) && selector.memberPath)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.archivePath}:${selector.memberPath}`,\n\t\t\treadArchiveSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tliteral,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst entries = isZipArchive(selector.archivePath)\n\t\t? readZipEntries(selector.archivePath)\n\t\t: parseTar(selector.archivePath);\n\tconst out: string[] = [];\n\tfor (const [name, data] of entries) {\n\t\tif (selector.memberPath && name !== selector.memberPath) continue;\n\t\tout.push(\n\t\t\t...searchTextSelectorLines(\n\t\t\t\t`${selector.archivePath}:${name}`,\n\t\t\t\tdata.toString(\"utf8\"),\n\t\t\t\tpattern,\n\t\t\t\tignoreCase,\n\t\t\t\tliteral,\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t),\n\t\t);\n\t}\n\treturn out.join(\"\\n\");\n}\n\nfunction routerFromContext(context?: InternalResourceContext): InternalResourceRouter | undefined {\n\treturn context?.internalRouter ?? context?.internalResourceRouter;\n}\nasync function resolveViaRouter(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string | undefined> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.resolve?.(value);\n\tif (routed) return routed;\n\tconst resolved = await context?.resolveInternalUrl?.(value);\n\tif (resolved) return resolved;\n\treturn resolveInternalSelector(value, cwd);\n}\nfunction isContained(root: string, candidate: string): boolean {\n\tconst rel = relative(root, candidate);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\nfunction nearestExistingAncestor(pathValue: string): string {\n\tlet current = pathValue;\n\twhile (!existsSync(current)) {\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) return current;\n\t\tcurrent = parent;\n\t}\n\treturn current;\n}\nfunction realpathExisting(pathValue: string): string {\n\treturn realpathSync.native(nearestExistingAncestor(pathValue));\n}\nfunction resolveContainedPath(root: string, pathValue: string, label: string): string {\n\tconst lexicalRoot = resolve(root),\n\t\tresolved = resolve(root, pathValue);\n\tif (!isContained(lexicalRoot, resolved)) throw new Error(`${label} escapes the workspace: ${pathValue}`);\n\tif (!isContained(realpathExisting(lexicalRoot), realpathExisting(resolved)))\n\t\tthrow new Error(`${label} escapes the workspace: ${pathValue}`);\n\treturn resolved;\n}\nfunction resolveContainedLocalPath(cwd: string, pathValue: string, label = \"local:// resource\"): string {\n\treturn resolveContainedPath(cwd, pathValue, label);\n}\n\nfunction fallbackInternalPath(value: string, cwd: string): string | undefined {\n\tconst skill = value.match(/^skill:\\/\\/([^/]+)(?:\\/(.*))?$/);\n\tif (skill) {\n\t\tconst name = skill[1] ?? \"\",\n\t\t\trest = skill[2] || \"SKILL.md\";\n\t\treturn [\".agents/skills\", \"packages/subagents/skills\", \"packages/workflows/skills\"]\n\t\t\t.map((base) =>\n\t\t\t\tresolveContainedPath(\n\t\t\t\t\tresolveContainedLocalPath(cwd, base, \"skill:// resource\"),\n\t\t\t\t\t`${name}/${rest}`,\n\t\t\t\t\t\"skill:// resource\",\n\t\t\t\t),\n\t\t\t)\n\t\t\t.find((candidate) => existsSync(candidate));\n\t}\n\tconst local = value.match(/^local:\\/\\/(.+)$/);\n\tif (local) return resolveContainedLocalPath(cwd, local[1] ?? \"\");\n\treturn undefined;\n}\nexport function resolveInternalSelector(value: string, cwd: string): string | undefined {\n\treturn fallbackInternalPath(value, cwd);\n}\nexport async function readInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.read?.(value);\n\tif (typeof routed === \"string\") return routed;\n\tif (Buffer.isBuffer(routed)) return routed.toString(\"utf8\");\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved || !existsSync(resolved))\n\t\tthrow new Error(`Internal resource not found or no session router supports it: ${value}`);\n\treturn readFileSync(resolved, \"utf8\");\n}\nexport async function writeInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontent: string,\n\tcontext?: InternalResourceContext,\n): Promise<void> {\n\tconst router = routerFromContext(context);\n\tif (router?.write) {\n\t\tawait router.write(value, content);\n\t\treturn;\n\t}\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved) throw new Error(`Unsupported writable internal resource without a session router: ${value}`);\n\tmkdirSync(dirname(resolved), { recursive: true });\n\twriteFileSync(resolved, content);\n}\nexport async function searchInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontext?: InternalResourceContext,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): Promise<string> {\n\treturn searchTextSelectorLines(\n\t\tvalue,\n\t\tawait readInternalSelector(value, cwd, context),\n\t\tpattern,\n\t\tignoreCase,\n\t\tliteral,\n\t\tcontextBefore,\n\t\tcontextAfter,\n\t).join(\"\\n\");\n}\nfunction shellQuote(value: string, dialect: \"posix\" | \"powershell\"): string {\n\t// PowerShell also treats U+2018–U+201B as single-quote delimiters.\n\treturn dialect === \"powershell\"\n\t\t? `'${value.replace(/['\\u2018-\\u201b]/g, \"$&$&\")}'`\n\t\t: `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nexport async function expandShellInternalUrls(\n\ttext: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n\tquote = false,\n\tdialect: \"posix\" | \"powershell\" = \"posix\",\n): Promise<string> {\n\tconst pattern = /(?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\\/\\/[^\\s'\"`$)]+/gi;\n\tconst replacements = new Map<string, string>();\n\tfor (const match of new Set(text.match(pattern) ?? [])) {\n\t\tconst resolved = await resolveViaRouter(match, cwd, context);\n\t\tif (!resolved) continue;\n\t\t// This is deliberately not a Bash parser. Only expand in plain shell\n\t\t// words: quotes, escapes, substitutions and heredocs change how inserted\n\t\t// quotes are interpreted. Leave arbitrary shell syntax without URLs alone.\n\t\tif (quote && !/^[a-zA-Z0-9_ ./:%+=,@~;|&\\t-]*$/.test(text)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Internal URL shell expansion requires plain unquoted words; use a filesystem path for quotes, substitutions, escapes or heredocs.\",\n\t\t\t);\n\t\t}\n\t\treplacements.set(match, quote ? shellQuote(resolved, dialect) : resolved);\n\t}\n\t// Replace original occurrences only; never reinterpret a router's result.\n\treturn text.replace(pattern, (match) => replacements.get(match) ?? match);\n}\n\nconst ROW_COUNT_PROBE_CAP = 50_000;\nconst MAX_RAW_QUERY_ROWS = 1000;\n\nfunction quoteSqliteIdent(value: string): string {\n\treturn `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\nfunction formatSqliteOrder(order: string | undefined): string {\n\tif (!order) return \"\";\n\treturn order\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [column, direction] = part.split(\":\");\n\t\t\tif (!column || !/^[A-Za-z_][\\w$]*$/.test(column)) throw new Error(`Invalid SQLite order column: ${part}`);\n\t\t\tconst dir = direction?.toLowerCase() === \"desc\" ? \"desc\" : \"asc\";\n\t\t\treturn `${quoteSqliteIdent(column)} ${dir}`;\n\t\t})\n\t\t.join(\", \");\n}\nconst FORBIDDEN_WHERE_KEYWORDS = new Set([\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"select\",\n\t\"load_extension\",\n]);\nfunction validateSqliteWhere(where: string | undefined): string | undefined {\n\tconst trimmed = where?.trim();\n\tif (!trimmed) return undefined;\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (token && (FORBIDDEN_WHERE_KEYWORDS.has(lower) || lower.startsWith(\"pragma_\") || lower.startsWith(\"sqlite_\")))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\treturn trimmed;\n}\nfunction rowsToJsonLines(rows: Record<string, SqliteValue>[]): string {\n\treturn rows.map((row) => JSON.stringify(row)).join(\"\\n\");\n}\n\nconst FORBIDDEN_RAW_QUERY_KEYWORDS = new Set([\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"drop\",\n\t\"alter\",\n\t\"create\",\n\t\"replace\",\n\t\"vacuum\",\n\t\"reindex\",\n\t\"load_extension\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n]);\nfunction validateRawSqliteQuery(query: string): string {\n\tconst trimmed = query.trim();\n\tif (!trimmed) throw new Error(\"SQLite raw query must not be empty\");\n\tif (!/^select\\b/i.test(trimmed)) throw new Error(\"Invalid raw SQLite query\");\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (\n\t\t\tlower &&\n\t\t\t(FORBIDDEN_RAW_QUERY_KEYWORDS.has(lower) || lower.startsWith(\"sqlite_\") || lower.startsWith(\"pragma_\"))\n\t\t)\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\tif (quote) throw new Error(\"Invalid raw SQLite query\");\n\treturn trimmed;\n}\n\nfunction readRawSqliteRows(query: SqliteQuery): Record<string, SqliteValue>[] {\n\tconst rows: Record<string, SqliteValue>[] = [];\n\tconst iterable = query.iterate?.();\n\tif (!iterable) return query.all().slice(0, MAX_RAW_QUERY_ROWS);\n\tfor (const row of iterable) {\n\t\tif (rows.length >= MAX_RAW_QUERY_ROWS) break;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nfunction sqliteTableColumns(db: SqliteDatabase, table: string): string[] {\n\treturn (db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string }>)\n\t\t.map((row) => String(row.name ?? \"\"))\n\t\t.filter(Boolean);\n}\n\nfunction boundedSqliteRowCount(db: SqliteDatabase, table: string): string | number {\n\tconst row = db\n\t\t.query(\n\t\t\t`select count(*) as count from (select 1 from ${quoteSqliteIdent(table)} limit ${ROW_COUNT_PROBE_CAP + 1})`,\n\t\t)\n\t\t.all()[0];\n\tconst count = Number(row?.count ?? 0);\n\treturn count > ROW_COUNT_PROBE_CAP ? `${ROW_COUNT_PROBE_CAP}+` : count;\n}\nfunction normalizeSqliteWriteValue(value: unknown, column: string): SqliteValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\")\n\t\treturn value;\n\tthrow new Error(`SQLite column '${column}' only accepts JSON scalar values or null`);\n}\n\nfunction sqlitePrimaryKey(db: SqliteDatabase, table: string): string {\n\treturn (\n\t\t(db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string; pk?: number }>).find(\n\t\t\t(row) => row.pk === 1,\n\t\t)?.name ?? \"rowid\"\n\t);\n}\nexport function readSqliteSelector(selector: SqliteSelector): string {\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tif (selector.query) return rowsToJsonLines(readRawSqliteRows(db.query(validateRawSqliteQuery(selector.query))));\n\t\tif (!selector.table) {\n\t\t\tconst tables = db\n\t\t\t\t.query(\"select name from sqlite_master where type='table' and name not like 'sqlite_%' order by name\")\n\t\t\t\t.all()\n\t\t\t\t.slice(0, 500);\n\t\t\treturn tables\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst name = String(row.name ?? \"\");\n\t\t\t\t\treturn JSON.stringify({ table: name, rows: boundedSqliteRowCount(db, name) });\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t\tconst schemaRows = db.query(`pragma table_info(${quoteSqliteIdent(selector.table)})`).all();\n\t\tif (selector.schema) return rowsToJsonLines(schemaRows);\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst isQuery = selector.limit !== undefined || selector.offset !== undefined || selector.where || selector.order;\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? (isQuery ? 20 : 5);\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst sql = [\n\t\t\t`select * from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\tif (selector.rowId || isQuery || selector.sampleRows !== undefined) return rowsToJsonLines(rows);\n\t\treturn [`# ${selector.table}`, \"Schema:\", rowsToJsonLines(schemaRows), \"Rows:\", rowsToJsonLines(rows)].join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\nfunction stripJson5Comments(input: string): string {\n\tlet out = \"\",\n\t\tquote = \"\",\n\t\tescaped = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!,\n\t\t\tnext = input[i + 1];\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tout += ch;\n\t\t\tif (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === quote) quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tout += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"/\") {\n\t\t\twhile (i < input.length && input[i] !== \"\\n\") i++;\n\t\t\tout += \"\\n\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\ti += 2;\n\t\t\twhile (i < input.length && !(input[i] === \"*\" && input[i + 1] === \"/\")) i++;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tout += ch;\n\t}\n\treturn out;\n}\nfunction parseLooseJsonObject(content: string): Record<string, SqliteValue> {\n\tconst trimmed = stripJson5Comments(content.trim());\n\tif (!trimmed)\n\t\tthrow new Error(\n\t\t\t\"SQLite write content must be a JSON object; empty content only deletes a row when a row id is present.\",\n\t\t);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch {\n\t\tconst normalized = trimmed\n\t\t\t.replace(/([{,]\\s*)([A-Za-z_$][\\w$]*)\\s*:/g, '$1\"$2\":')\n\t\t\t.replace(/:\\s*\\+(-?\\d+(?:\\.\\d+)?)/g, \":$1\")\n\t\t\t.replace(\n\t\t\t\t/(:\\s*)0x[0-9a-fA-F]+/g,\n\t\t\t\t(match, prefix: string) => `${prefix}${Number.parseInt(match.slice(prefix.length + 2), 16)}`,\n\t\t\t)\n\t\t\t.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, (_match, body: string) => JSON.stringify(body.replace(/\\\\'/g, \"'\")))\n\t\t\t.replace(/,\\s*([}\\]])/g, \"$1\");\n\t\tparsed = JSON.parse(normalized);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n\t\tthrow new Error(\"SQLite write content must be a JSON object.\");\n\treturn Object.fromEntries(\n\t\tObject.entries(parsed as Record<string, unknown>).map(([column, value]) => [\n\t\t\tcolumn,\n\t\t\tnormalizeSqliteWriteValue(value, column),\n\t\t]),\n\t);\n}\nexport function writeSqliteSelector(selector: SqliteSelector, content: string): string {\n\tif (!selector.table) throw new Error(\"SQLite write target must include a table name\");\n\tif (!existsSync(selector.databasePath)) throw new Error(`SQLite database does not exist: ${selector.databasePath}`);\n\tif (content.trim() === \"\") {\n\t\tif (!selector.rowId) throw new Error(\"SQLite empty content deletes a row only when a row id is present.\");\n\t\tconst Database = sqliteDatabase();\n\t\tconst db = new Database(selector.databasePath);\n\t\ttry {\n\t\t\tconst table = selector.table;\n\t\t\tconst result = db\n\t\t\t\t.query(`delete from ${quoteSqliteIdent(table)} where ${quoteSqliteIdent(sqlitePrimaryKey(db, table))} = ?`)\n\t\t\t\t.run(selector.rowId);\n\t\t\treturn (result.changes ?? 0) > 0\n\t\t\t\t? `Deleted row '${selector.rowId}' in ${table}`\n\t\t\t\t: `No row deleted for '${selector.rowId}' in ${table}`;\n\t\t} finally {\n\t\t\tdb.close();\n\t\t}\n\t}\n\tconst data = parseLooseJsonObject(content);\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath);\n\ttry {\n\t\tconst table = selector.table;\n\t\tconst quotedTable = quoteSqliteIdent(table);\n\t\tconst key = sqlitePrimaryKey(db, table);\n\t\tconst quotedKey = quoteSqliteIdent(key);\n\t\tconst validColumns = new Set(sqliteTableColumns(db, table));\n\t\tif (!selector.rowId && key !== \"id\" && Object.hasOwn(data, \"id\") && !Object.hasOwn(data, key)) {\n\t\t\tdata[key] = data.id;\n\t\t\tdelete data.id;\n\t\t}\n\t\tconst columns = Object.keys(data);\n\t\tfor (const column of columns)\n\t\t\tif (!validColumns.has(column)) throw new Error(`SQLite table '${table}' has no column named '${column}'`);\n\t\tif (columns.length === 0) {\n\t\t\tif (!selector.rowId) {\n\t\t\t\tdb.query(`insert into ${quotedTable} default values`).run();\n\t\t\t\treturn `Inserted row into ${table}`;\n\t\t\t}\n\t\t\tthrow new Error(\"SQLite update content must include at least one column.\");\n\t\t}\n\t\tif (!selector.rowId) {\n\t\t\tconst quoted = columns.map(quoteSqliteIdent).join(\", \");\n\t\t\tdb.query(`insert into ${quotedTable} (${quoted}) values (${columns.map(() => \"?\").join(\", \")})`).run(\n\t\t\t\t...columns.map((column) => data[column]),\n\t\t\t);\n\t\t\treturn `Inserted row into ${table}`;\n\t\t}\n\t\tconst assignments = columns.map((column) => `${quoteSqliteIdent(column)} = ?`).join(\", \");\n\t\tconst result = db\n\t\t\t.query(`update ${quotedTable} set ${assignments} where ${quotedKey} = ?`)\n\t\t\t.run(...columns.map((column) => data[column]), selector.rowId);\n\t\treturn (result.changes ?? 0) > 0\n\t\t\t? `Updated row '${selector.rowId}' in ${table}`\n\t\t\t: `No row updated for '${selector.rowId}' in ${table}`;\n\t} finally {\n\t\tdb.close();\n\t}\n}\nexport function searchSqliteSelector(\n\tselector: SqliteSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tconst matcher = new RegExp(normalized.pattern, normalized.flags);\n\tif (!selector.table || selector.query)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.databasePath}:${selector.table ?? \"tables\"}`,\n\t\t\treadSqliteSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tfalse,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? 1000;\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst rowIdAlias = \"__atomic_rowid__\";\n\t\tconst selectList = key === \"rowid\" ? `rowid as ${quoteSqliteIdent(rowIdAlias)}, *` : \"*\";\n\t\tconst sql = [\n\t\t\t`select ${selectList} from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\treturn rows\n\t\t\t.map((rawRow, index) => {\n\t\t\t\tconst row = rawRow as Record<string, unknown>;\n\t\t\t\tconst rowKey = key === \"rowid\" ? row[rowIdAlias] : row[key];\n\t\t\t\tif (key === \"rowid\") delete row[rowIdAlias];\n\t\t\t\treturn { row, key: String(rowKey ?? offset + index + 1) };\n\t\t\t})\n\t\t\t.filter(({ row }) => matcher.test(JSON.stringify(row)))\n\t\t\t.map(\n\t\t\t\t({ row, key }) =>\n\t\t\t\t\t`${selector.databasePath}:${selector.table}:${key}: ${truncateSearchLine(JSON.stringify(row))}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\n"]}
@@ -136,6 +136,7 @@ const defaultWriteOperations = {
136
136
  },
137
137
  };
138
138
  class WriteCallRenderComponent extends Text {
139
+ cache;
139
140
  constructor() {
140
141
  super("", 0, 0);
141
142
  }