@bastani/atomic 0.9.12 → 0.9.13-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1187) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +35 -17
  3. package/dist/builtin/i-have-adhd/CHANGELOG.md +17 -0
  4. package/dist/builtin/i-have-adhd/LICENSE +21 -0
  5. package/dist/builtin/i-have-adhd/README.md +18 -0
  6. package/dist/builtin/i-have-adhd/index.ts +238 -0
  7. package/dist/builtin/i-have-adhd/package.json +56 -0
  8. package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +140 -0
  9. package/dist/builtin/intercom/CHANGELOG.md +25 -0
  10. package/dist/builtin/intercom/README.md +30 -16
  11. package/dist/builtin/intercom/broker/bounded-stderr-install.ts +18 -0
  12. package/dist/builtin/intercom/broker/bounded-stderr.ts +132 -0
  13. package/dist/builtin/intercom/broker/broker.ts +12 -23
  14. package/dist/builtin/intercom/broker/client.ts +81 -5
  15. package/dist/builtin/intercom/broker/paths.ts +9 -0
  16. package/dist/builtin/intercom/broker/presence-handler.ts +103 -0
  17. package/dist/builtin/intercom/broker/spawn.ts +128 -29
  18. package/dist/builtin/intercom/contact-supervisor-tool.ts +13 -3
  19. package/dist/builtin/intercom/foreground-detach-handoff.ts +30 -14
  20. package/dist/builtin/intercom/group.ts +64 -25
  21. package/dist/builtin/intercom/index-heavy.ts +51 -8
  22. package/dist/builtin/intercom/index.ts +50 -22
  23. package/dist/builtin/intercom/intercom-tool.ts +82 -5
  24. package/dist/builtin/intercom/intercom-utils.ts +15 -29
  25. package/dist/builtin/intercom/lazy-subagent-ack.ts +11 -6
  26. package/dist/builtin/intercom/package.json +2 -3
  27. package/dist/builtin/intercom/runtime-group.ts +13 -0
  28. package/dist/builtin/intercom/skills/intercom/SKILL.md +30 -2
  29. package/dist/builtin/intercom/source-ownership.ts +9 -12
  30. package/dist/builtin/intercom/subagent-relay.ts +32 -16
  31. package/dist/builtin/intercom/terminal-ordering-barrier.ts +21 -4
  32. package/dist/builtin/intercom/types.ts +3 -1
  33. package/dist/builtin/intercom/ui/compose.ts +8 -6
  34. package/dist/builtin/intercom/ui/session-list.ts +7 -5
  35. package/dist/builtin/mcp/CHANGELOG.md +19 -0
  36. package/dist/builtin/mcp/README.md +3 -1
  37. package/dist/builtin/mcp/glimpse-ui.ts +2 -1
  38. package/dist/builtin/mcp/index.ts +10 -26
  39. package/dist/builtin/mcp/mcp-panel.ts +35 -34
  40. package/dist/builtin/mcp/mcp-setup-panel.ts +35 -33
  41. package/dist/builtin/mcp/npx-resolver.ts +3 -2
  42. package/dist/builtin/mcp/package.json +3 -3
  43. package/dist/builtin/mcp/sampling-handler.ts +5 -1
  44. package/dist/builtin/mcp/server-manager.ts +4 -7
  45. package/dist/builtin/mcp/startup-warmup.ts +20 -8
  46. package/dist/builtin/subagents/CHANGELOG.md +63 -0
  47. package/dist/builtin/subagents/README.md +144 -351
  48. package/dist/builtin/subagents/agents/worker.md +1 -1
  49. package/dist/builtin/subagents/package.json +5 -5
  50. package/dist/builtin/subagents/prompts/parallel-context-build.md +2 -2
  51. package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +4 -4
  52. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  53. package/dist/builtin/subagents/skills/subagent/SKILL.md +39 -102
  54. package/dist/builtin/subagents/src/agents/agent-discovery.ts +1 -29
  55. package/dist/builtin/subagents/src/agents/agent-loaders.ts +1 -40
  56. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +6 -135
  57. package/dist/builtin/subagents/src/agents/agent-management.ts +52 -282
  58. package/dist/builtin/subagents/src/agents/agent-paths.ts +0 -22
  59. package/dist/builtin/subagents/src/agents/agent-types.ts +0 -40
  60. package/dist/builtin/subagents/src/agents/agents.ts +0 -3
  61. package/dist/builtin/subagents/src/agents/identity.ts +2 -4
  62. package/dist/builtin/subagents/src/agents/skills-paths.ts +8 -1
  63. package/dist/builtin/subagents/src/extension/doctor.ts +4 -24
  64. package/dist/builtin/subagents/src/extension/fanout-child.ts +76 -56
  65. package/dist/builtin/subagents/src/extension/index.ts +32 -39
  66. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +2 -2
  67. package/dist/builtin/subagents/src/extension/schemas.ts +1 -157
  68. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +25 -46
  69. package/dist/builtin/subagents/src/extension/tool-description.ts +4 -13
  70. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -2
  71. package/dist/builtin/subagents/src/intercom/result-intercom.ts +27 -29
  72. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +9 -2
  73. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +248 -435
  74. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +8 -3
  75. package/dist/builtin/subagents/src/runs/background/notify.ts +83 -26
  76. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -281
  77. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +0 -5
  78. package/dist/builtin/subagents/src/runs/foreground/execution.ts +1 -4
  79. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +559 -0
  80. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +103 -259
  81. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +29 -31
  82. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +10 -173
  83. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +7 -5
  84. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +13 -6
  85. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +1 -646
  86. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -7
  87. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -7
  88. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +39 -20
  89. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +16 -11
  90. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +1 -14
  91. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +194 -104
  92. package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +195 -0
  93. package/dist/builtin/subagents/src/runs/inprocess/background.ts +90 -0
  94. package/dist/builtin/subagents/src/runs/inprocess/child-policy.ts +27 -0
  95. package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +55 -0
  96. package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +106 -0
  97. package/dist/builtin/subagents/src/runs/inprocess/index.ts +50 -0
  98. package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +218 -0
  99. package/dist/builtin/subagents/src/runs/{shared/subagent-prompt-runtime.ts → inprocess/prompt-behavior.ts} +37 -75
  100. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +1392 -0
  101. package/dist/builtin/subagents/src/runs/{shared/nested-events.ts → inprocess/runtime-support/nested-api.ts} +13 -7
  102. package/dist/builtin/subagents/src/runs/{shared/nested-events-control.ts → inprocess/runtime-support/nested-control.ts} +18 -17
  103. package/dist/builtin/subagents/src/runs/{shared/nested-events-core.ts → inprocess/runtime-support/nested-core.ts} +14 -61
  104. package/dist/builtin/subagents/src/runs/{shared/nested-events-projection.ts → inprocess/runtime-support/nested-projection.ts} +4 -12
  105. package/dist/builtin/subagents/src/runs/{shared/nested-events-registry.ts → inprocess/runtime-support/nested-registry.ts} +19 -4
  106. package/dist/builtin/subagents/src/runs/{shared/nested-render.ts → inprocess/runtime-support/nested-rendering.ts} +3 -3
  107. package/dist/builtin/subagents/src/runs/{shared/nested-events-sanitize.ts → inprocess/runtime-support/nested-sanitize.ts} +4 -6
  108. package/dist/builtin/subagents/src/runs/inprocess.ts +1 -0
  109. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +23 -7
  110. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +0 -1
  111. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +15 -492
  112. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +13 -97
  113. package/dist/builtin/subagents/src/runs/shared/run-history.ts +3 -5
  114. package/dist/builtin/subagents/src/runs/shared/single-output.ts +4 -4
  115. package/dist/builtin/subagents/src/runs/shared/worktree.ts +7 -2
  116. package/dist/builtin/subagents/src/shared/formatters.ts +2 -56
  117. package/dist/builtin/subagents/src/shared/settings.ts +14 -350
  118. package/dist/builtin/subagents/src/shared/types-async.ts +8 -32
  119. package/dist/builtin/subagents/src/shared/types-config.ts +29 -13
  120. package/dist/builtin/subagents/src/shared/types-depth.ts +30 -56
  121. package/dist/builtin/subagents/src/shared/types-results.ts +18 -60
  122. package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -1
  123. package/dist/builtin/subagents/src/shared/utils.ts +5 -0
  124. package/dist/builtin/subagents/src/slash/bridge-settlement.ts +87 -0
  125. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +49 -10
  126. package/dist/builtin/subagents/src/slash/slash-bridge.ts +27 -7
  127. package/dist/builtin/subagents/src/slash/slash-commands.ts +37 -82
  128. package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -94
  129. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +3 -35
  130. package/dist/builtin/subagents/src/tui/render-progress.ts +89 -0
  131. package/dist/builtin/subagents/src/tui/render-result-compact.ts +77 -68
  132. package/dist/builtin/subagents/src/tui/render-result.ts +79 -99
  133. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -6
  134. package/dist/builtin/subagents/src/tui/render-status-progress.ts +8 -5
  135. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +6 -63
  136. package/dist/builtin/subagents/src/tui/render-widget.ts +0 -24
  137. package/dist/builtin/web-access/CHANGELOG.md +14 -0
  138. package/dist/builtin/web-access/chrome-cookies.ts +3 -2
  139. package/dist/builtin/web-access/github-api.ts +7 -6
  140. package/dist/builtin/web-access/github-extract.ts +2 -1
  141. package/dist/builtin/web-access/package.json +3 -3
  142. package/dist/builtin/web-access/subprocess.ts +3 -1
  143. package/dist/builtin/web-access/summary-review.ts +2 -2
  144. package/dist/builtin/web-access/web-search-features.ts +38 -22
  145. package/dist/builtin/web-access/web-search-summary.ts +2 -2
  146. package/dist/builtin/workflows/CHANGELOG.md +70 -0
  147. package/dist/builtin/workflows/README.md +54 -4
  148. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +3 -0
  149. package/dist/builtin/workflows/builtin/ralph-models.ts +25 -20
  150. package/dist/builtin/workflows/builtin/shared-prompts.ts +5 -2
  151. package/dist/builtin/workflows/package.json +2 -2
  152. package/dist/builtin/workflows/src/durable/backend.ts +25 -1
  153. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +60 -3
  154. package/dist/builtin/workflows/src/durable/completed-catalog.ts +67 -1
  155. package/dist/builtin/workflows/src/durable/completed-subtree.ts +22 -7
  156. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +15 -1
  157. package/dist/builtin/workflows/src/durable/local-command.ts +2 -1
  158. package/dist/builtin/workflows/src/durable/resume-runtime.ts +1 -0
  159. package/dist/builtin/workflows/src/durable/tool-primitive.ts +4 -28
  160. package/dist/builtin/workflows/src/durable/types.ts +22 -1
  161. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +3 -1
  162. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +1 -1
  163. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +10 -2
  164. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +9 -2
  165. package/dist/builtin/workflows/src/engine/run.ts +17 -1
  166. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +18 -39
  167. package/dist/builtin/workflows/src/extension/companions.ts +1 -1
  168. package/dist/builtin/workflows/src/extension/config-file-loader.ts +10 -1
  169. package/dist/builtin/workflows/src/extension/config-loader.ts +1 -1
  170. package/dist/builtin/workflows/src/extension/dispatcher.ts +4 -0
  171. package/dist/builtin/workflows/src/extension/index.bundle.mjs +2095 -1181
  172. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +332 -39
  173. package/dist/builtin/workflows/src/extension/mcp.ts +13 -2
  174. package/dist/builtin/workflows/src/extension/render-result.ts +5 -0
  175. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +6 -3
  176. package/dist/builtin/workflows/src/extension/runtime.ts +7 -1
  177. package/dist/builtin/workflows/src/extension/ui-surface.ts +7 -20
  178. package/dist/builtin/workflows/src/extension/wiring.ts +86 -17
  179. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +12 -3
  180. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +5 -2
  181. package/dist/builtin/workflows/src/extension/workflow-ports.ts +14 -6
  182. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +11 -6
  183. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +17 -7
  184. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +11 -0
  185. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +18 -1
  186. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +12 -8
  187. package/dist/builtin/workflows/src/extension/workflow-tool.ts +9 -4
  188. package/dist/builtin/workflows/src/intercom/intercom-routing.ts +12 -6
  189. package/dist/builtin/workflows/src/intercom/result-intercom.ts +35 -4
  190. package/dist/builtin/workflows/src/runs/background/quit.ts +28 -4
  191. package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +2 -1
  192. package/dist/builtin/workflows/src/runs/background/status.ts +70 -8
  193. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +11 -3
  194. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +2 -1
  195. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +4 -0
  196. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +26 -2
  197. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +3 -1
  198. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +3 -2
  199. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +1 -1
  200. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +1 -1
  201. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +688 -38
  202. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +3 -1
  203. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +19 -514
  204. package/dist/builtin/workflows/src/runs/shared/retry.ts +44 -0
  205. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +5 -2
  206. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +2 -0
  207. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +10 -3
  208. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +11 -3
  209. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -1
  210. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
  211. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +34 -2
  212. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +28 -6
  213. package/dist/builtin/workflows/src/shared/persistence-restore.ts +3 -0
  214. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  215. package/dist/builtin/workflows/src/shared/run-indicator-status.ts +75 -0
  216. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +10 -4
  217. package/dist/builtin/workflows/src/shared/store-public-types.ts +47 -9
  218. package/dist/builtin/workflows/src/shared/store-run-methods.ts +42 -8
  219. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +31 -8
  220. package/dist/builtin/workflows/src/shared/store-types.ts +35 -1
  221. package/dist/builtin/workflows/src/shared/timing.ts +10 -0
  222. package/dist/builtin/workflows/src/shared/workflow-artifact-env.ts +21 -0
  223. package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +2 -5
  224. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +22 -2
  225. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +37 -2
  226. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +0 -15
  227. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +38 -47
  228. package/dist/builtin/workflows/src/tui/graph-view-input.ts +48 -45
  229. package/dist/builtin/workflows/src/tui/graph-view-layout.ts +266 -0
  230. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +1 -86
  231. package/dist/builtin/workflows/src/tui/graph-view-render.ts +209 -91
  232. package/dist/builtin/workflows/src/tui/graph-view-state.ts +5 -7
  233. package/dist/builtin/workflows/src/tui/graph-view-types.ts +13 -7
  234. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +8 -6
  235. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -1
  236. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +7 -4
  237. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +66 -0
  238. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +1 -0
  239. package/dist/builtin/workflows/src/tui/node-card.ts +1 -1
  240. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +18 -46
  241. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +15 -26
  242. package/dist/builtin/workflows/src/tui/session-list.ts +1 -1
  243. package/dist/builtin/workflows/src/tui/session-overlays.ts +19 -12
  244. package/dist/builtin/workflows/src/tui/session-picker.ts +47 -4
  245. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +5 -14
  246. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +8 -7
  247. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +12 -3
  248. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +1 -11
  249. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +0 -8
  250. package/dist/builtin/workflows/src/tui/status-list.ts +32 -47
  251. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +9 -5
  252. package/dist/builtin/workflows/src/tui/widget.ts +16 -46
  253. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -15
  254. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +2 -26
  255. package/dist/builtin/workflows/src/tui/workflow-status.ts +3 -3
  256. package/dist/bun/split-loader.js +2 -0
  257. package/dist/bun/split-loader.js.map +1 -1
  258. package/dist/cli/args.d.ts.map +1 -1
  259. package/dist/cli/args.js +6 -2
  260. package/dist/cli/args.js.map +1 -1
  261. package/dist/cli/auth-check.d.ts +35 -0
  262. package/dist/cli/auth-check.d.ts.map +1 -0
  263. package/dist/cli/auth-check.js +100 -0
  264. package/dist/cli/auth-check.js.map +1 -0
  265. package/dist/cli/auth-command.d.ts +27 -0
  266. package/dist/cli/auth-command.d.ts.map +1 -0
  267. package/dist/cli/auth-command.js +150 -0
  268. package/dist/cli/auth-command.js.map +1 -0
  269. package/dist/cli/config-selector.js +2 -2
  270. package/dist/cli/config-selector.js.map +1 -1
  271. package/dist/cli/credential-print.d.ts +18 -23
  272. package/dist/cli/credential-print.d.ts.map +1 -1
  273. package/dist/cli/credential-print.js +42 -88
  274. package/dist/cli/credential-print.js.map +1 -1
  275. package/dist/cli/experimental/auth.d.ts +16 -0
  276. package/dist/cli/experimental/auth.d.ts.map +1 -0
  277. package/dist/cli/experimental/auth.js +13 -0
  278. package/dist/cli/experimental/auth.js.map +1 -0
  279. package/dist/cli/experimental/cli.d.ts +6 -0
  280. package/dist/cli/experimental/cli.d.ts.map +1 -0
  281. package/dist/cli/experimental/cli.js +5 -0
  282. package/dist/cli/experimental/cli.js.map +1 -0
  283. package/dist/cli/experimental/command-options.d.ts +17 -0
  284. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  285. package/dist/cli/experimental/command-options.js +35 -0
  286. package/dist/cli/experimental/command-options.js.map +1 -0
  287. package/dist/cli/experimental/command.d.ts +63 -0
  288. package/dist/cli/experimental/command.d.ts.map +1 -0
  289. package/dist/cli/experimental/command.js +127 -0
  290. package/dist/cli/experimental/command.js.map +1 -0
  291. package/dist/cli/experimental/commands/client.d.ts +13 -0
  292. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  293. package/dist/cli/experimental/commands/client.js +25 -0
  294. package/dist/cli/experimental/commands/client.js.map +1 -0
  295. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  296. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  297. package/dist/cli/experimental/commands/pi.js +28 -0
  298. package/dist/cli/experimental/commands/pi.js.map +1 -0
  299. package/dist/cli/experimental/commands/server.d.ts +13 -0
  300. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  301. package/dist/cli/experimental/commands/server.js +25 -0
  302. package/dist/cli/experimental/commands/server.js.map +1 -0
  303. package/dist/cli/experimental/transport-address.d.ts +10 -0
  304. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  305. package/dist/cli/experimental/transport-address.js +38 -0
  306. package/dist/cli/experimental/transport-address.js.map +1 -0
  307. package/dist/cli/session-picker.js +2 -2
  308. package/dist/cli/session-picker.js.map +1 -1
  309. package/dist/cli/startup-ui.d.ts.map +1 -1
  310. package/dist/cli/startup-ui.js +4 -10
  311. package/dist/cli/startup-ui.js.map +1 -1
  312. package/dist/cli.js +2 -0
  313. package/dist/cli.js.map +1 -1
  314. package/dist/client/index.d.ts +3 -0
  315. package/dist/client/index.d.ts.map +1 -0
  316. package/dist/client/index.js +3 -0
  317. package/dist/client/index.js.map +1 -0
  318. package/dist/client/remote-session.d.ts +64 -0
  319. package/dist/client/remote-session.d.ts.map +1 -0
  320. package/dist/client/remote-session.js +351 -0
  321. package/dist/client/remote-session.js.map +1 -0
  322. package/dist/client/transcript.d.ts +12 -0
  323. package/dist/client/transcript.d.ts.map +1 -0
  324. package/dist/client/transcript.js +98 -0
  325. package/dist/client/transcript.js.map +1 -0
  326. package/dist/core/agent-session-auto-compaction.d.ts +17 -13
  327. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  328. package/dist/core/agent-session-auto-compaction.js +192 -67
  329. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  330. package/dist/core/agent-session-bash.d.ts.map +1 -1
  331. package/dist/core/agent-session-bash.js +2 -0
  332. package/dist/core/agent-session-bash.js.map +1 -1
  333. package/dist/core/agent-session-compaction.d.ts +3 -6
  334. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  335. package/dist/core/agent-session-compaction.js +64 -28
  336. package/dist/core/agent-session-compaction.js.map +1 -1
  337. package/dist/core/agent-session-events.d.ts +1 -11
  338. package/dist/core/agent-session-events.d.ts.map +1 -1
  339. package/dist/core/agent-session-events.js +64 -37
  340. package/dist/core/agent-session-events.js.map +1 -1
  341. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  342. package/dist/core/agent-session-extension-bindings.js +4 -2
  343. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  344. package/dist/core/agent-session-methods.d.ts +19 -2
  345. package/dist/core/agent-session-methods.d.ts.map +1 -1
  346. package/dist/core/agent-session-methods.js.map +1 -1
  347. package/dist/core/agent-session-models.d.ts +1 -0
  348. package/dist/core/agent-session-models.d.ts.map +1 -1
  349. package/dist/core/agent-session-models.js +23 -5
  350. package/dist/core/agent-session-models.js.map +1 -1
  351. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  352. package/dist/core/agent-session-post-tool-compaction.js +22 -6
  353. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  354. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  355. package/dist/core/agent-session-prompt.js +4 -0
  356. package/dist/core/agent-session-prompt.js.map +1 -1
  357. package/dist/core/agent-session-retry.d.ts +21 -4
  358. package/dist/core/agent-session-retry.d.ts.map +1 -1
  359. package/dist/core/agent-session-retry.js +232 -106
  360. package/dist/core/agent-session-retry.js.map +1 -1
  361. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  362. package/dist/core/agent-session-runtime-auth.js +3 -0
  363. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  364. package/dist/core/agent-session-state.d.ts.map +1 -1
  365. package/dist/core/agent-session-state.js +2 -1
  366. package/dist/core/agent-session-state.js.map +1 -1
  367. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  368. package/dist/core/agent-session-tool-hooks.js +37 -14
  369. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  370. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  371. package/dist/core/agent-session-tool-registry.js +5 -1
  372. package/dist/core/agent-session-tool-registry.js.map +1 -1
  373. package/dist/core/agent-session-types.d.ts +5 -1
  374. package/dist/core/agent-session-types.d.ts.map +1 -1
  375. package/dist/core/agent-session-types.js.map +1 -1
  376. package/dist/core/agent-session.d.ts +18 -1
  377. package/dist/core/agent-session.d.ts.map +1 -1
  378. package/dist/core/agent-session.js +37 -0
  379. package/dist/core/agent-session.js.map +1 -1
  380. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  381. package/dist/core/atomic-guide-command.js +2 -3
  382. package/dist/core/atomic-guide-command.js.map +1 -1
  383. package/dist/core/auth-storage.d.ts +18 -1
  384. package/dist/core/auth-storage.d.ts.map +1 -1
  385. package/dist/core/auth-storage.js +83 -0
  386. package/dist/core/auth-storage.js.map +1 -1
  387. package/dist/core/bash-executor.d.ts +5 -0
  388. package/dist/core/bash-executor.d.ts.map +1 -1
  389. package/dist/core/bash-executor.js +43 -19
  390. package/dist/core/bash-executor.js.map +1 -1
  391. package/dist/core/builtin-packages.d.ts.map +1 -1
  392. package/dist/core/builtin-packages.js +6 -0
  393. package/dist/core/builtin-packages.js.map +1 -1
  394. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  395. package/dist/core/codex-fast-mode.js +8 -3
  396. package/dist/core/codex-fast-mode.js.map +1 -1
  397. package/dist/core/exec.d.ts.map +1 -1
  398. package/dist/core/exec.js +4 -3
  399. package/dist/core/exec.js.map +1 -1
  400. package/dist/core/extensions/agent-events.d.ts +0 -1
  401. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  402. package/dist/core/extensions/agent-events.js.map +1 -1
  403. package/dist/core/extensions/api-types.d.ts +5 -3
  404. package/dist/core/extensions/api-types.d.ts.map +1 -1
  405. package/dist/core/extensions/api-types.js.map +1 -1
  406. package/dist/core/extensions/context-types.d.ts +40 -0
  407. package/dist/core/extensions/context-types.d.ts.map +1 -1
  408. package/dist/core/extensions/context-types.js.map +1 -1
  409. package/dist/core/extensions/event-results.d.ts +5 -0
  410. package/dist/core/extensions/event-results.d.ts.map +1 -1
  411. package/dist/core/extensions/event-results.js.map +1 -1
  412. package/dist/core/extensions/index.d.ts +2 -1
  413. package/dist/core/extensions/index.d.ts.map +1 -1
  414. package/dist/core/extensions/index.js +1 -0
  415. package/dist/core/extensions/index.js.map +1 -1
  416. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  417. package/dist/core/extensions/loader-api.js +14 -1
  418. package/dist/core/extensions/loader-api.js.map +1 -1
  419. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  420. package/dist/core/extensions/loader-discovery.js +3 -23
  421. package/dist/core/extensions/loader-discovery.js.map +1 -1
  422. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  423. package/dist/core/extensions/loader-runtime.js +20 -3
  424. package/dist/core/extensions/loader-runtime.js.map +1 -1
  425. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  426. package/dist/core/extensions/loader-virtual-modules.js +7 -1
  427. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  428. package/dist/core/extensions/message-types.d.ts +6 -0
  429. package/dist/core/extensions/message-types.d.ts.map +1 -1
  430. package/dist/core/extensions/message-types.js.map +1 -1
  431. package/dist/core/extensions/provider-types.d.ts +9 -3
  432. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  433. package/dist/core/extensions/provider-types.js.map +1 -1
  434. package/dist/core/extensions/runner-context.d.ts +2 -1
  435. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  436. package/dist/core/extensions/runner-context.js +4 -0
  437. package/dist/core/extensions/runner-context.js.map +1 -1
  438. package/dist/core/extensions/runner-registries.d.ts +2 -1
  439. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  440. package/dist/core/extensions/runner-registries.js +3 -0
  441. package/dist/core/extensions/runner-registries.js.map +1 -1
  442. package/dist/core/extensions/runner-ui.d.ts.map +1 -1
  443. package/dist/core/extensions/runner-ui.js +1 -0
  444. package/dist/core/extensions/runner-ui.js.map +1 -1
  445. package/dist/core/extensions/runner.d.ts +4 -2
  446. package/dist/core/extensions/runner.d.ts.map +1 -1
  447. package/dist/core/extensions/runner.js +9 -3
  448. package/dist/core/extensions/runner.js.map +1 -1
  449. package/dist/core/extensions/runtime-types.d.ts +4 -1
  450. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  451. package/dist/core/extensions/runtime-types.js.map +1 -1
  452. package/dist/core/extensions/stale-context.d.ts +5 -0
  453. package/dist/core/extensions/stale-context.d.ts.map +1 -0
  454. package/dist/core/extensions/stale-context.js +11 -0
  455. package/dist/core/extensions/stale-context.js.map +1 -0
  456. package/dist/core/extensions/ui-types.d.ts +14 -11
  457. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  458. package/dist/core/extensions/ui-types.js.map +1 -1
  459. package/dist/core/footer-data-provider.d.ts.map +1 -1
  460. package/dist/core/footer-data-provider.js +3 -2
  461. package/dist/core/footer-data-provider.js.map +1 -1
  462. package/dist/core/index.d.ts +1 -1
  463. package/dist/core/index.d.ts.map +1 -1
  464. package/dist/core/index.js.map +1 -1
  465. package/dist/core/intercom-runtime-group.d.ts +13 -0
  466. package/dist/core/intercom-runtime-group.d.ts.map +1 -0
  467. package/dist/core/intercom-runtime-group.js +23 -0
  468. package/dist/core/intercom-runtime-group.js.map +1 -0
  469. package/dist/core/keybindings.d.ts +44 -4
  470. package/dist/core/keybindings.d.ts.map +1 -1
  471. package/dist/core/model-config.d.ts +39 -5
  472. package/dist/core/model-config.d.ts.map +1 -1
  473. package/dist/core/model-config.js +6 -0
  474. package/dist/core/model-config.js.map +1 -1
  475. package/dist/core/model-fallback-failures.d.ts +30 -0
  476. package/dist/core/model-fallback-failures.d.ts.map +1 -0
  477. package/dist/core/model-fallback-failures.js +610 -0
  478. package/dist/core/model-fallback-failures.js.map +1 -0
  479. package/dist/core/model-registry.d.ts +12 -5
  480. package/dist/core/model-registry.d.ts.map +1 -1
  481. package/dist/core/model-registry.js +20 -12
  482. package/dist/core/model-registry.js.map +1 -1
  483. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  484. package/dist/core/model-resolver-cli.js +46 -14
  485. package/dist/core/model-resolver-cli.js.map +1 -1
  486. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  487. package/dist/core/model-resolver-defaults.js +2 -0
  488. package/dist/core/model-resolver-defaults.js.map +1 -1
  489. package/dist/core/model-resolver-scope.d.ts +2 -0
  490. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  491. package/dist/core/model-resolver-scope.js +12 -9
  492. package/dist/core/model-resolver-scope.js.map +1 -1
  493. package/dist/core/model-resolver.d.ts +1 -1
  494. package/dist/core/model-resolver.d.ts.map +1 -1
  495. package/dist/core/model-resolver.js +1 -1
  496. package/dist/core/model-resolver.js.map +1 -1
  497. package/dist/core/model-runtime-snapshot.d.ts +10 -0
  498. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  499. package/dist/core/model-runtime-snapshot.js +14 -1
  500. package/dist/core/model-runtime-snapshot.js.map +1 -1
  501. package/dist/core/model-runtime-streaming.d.ts +3 -1
  502. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  503. package/dist/core/model-runtime-streaming.js +16 -0
  504. package/dist/core/model-runtime-streaming.js.map +1 -1
  505. package/dist/core/model-runtime-types.d.ts +2 -0
  506. package/dist/core/model-runtime-types.d.ts.map +1 -1
  507. package/dist/core/model-runtime-types.js.map +1 -1
  508. package/dist/core/model-runtime.d.ts +37 -10
  509. package/dist/core/model-runtime.d.ts.map +1 -1
  510. package/dist/core/model-runtime.js +312 -113
  511. package/dist/core/model-runtime.js.map +1 -1
  512. package/dist/core/oauth-login.d.ts.map +1 -1
  513. package/dist/core/oauth-login.js +2 -1
  514. package/dist/core/oauth-login.js.map +1 -1
  515. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  516. package/dist/core/openai-responses-payload-sanitizer.js +18 -2
  517. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  518. package/dist/core/package-manager-git.d.ts.map +1 -1
  519. package/dist/core/package-manager-git.js +56 -10
  520. package/dist/core/package-manager-git.js.map +1 -1
  521. package/dist/core/package-manager-manifest.d.ts +1 -1
  522. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  523. package/dist/core/package-manager-manifest.js +19 -9
  524. package/dist/core/package-manager-manifest.js.map +1 -1
  525. package/dist/core/package-manager-resource-collector.js.map +1 -1
  526. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  527. package/dist/core/package-manager-resource-files.js +1 -2
  528. package/dist/core/package-manager-resource-files.js.map +1 -1
  529. package/dist/core/provider-composer-internal.d.ts +10 -2
  530. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  531. package/dist/core/provider-composer-internal.js +7 -3
  532. package/dist/core/provider-composer-internal.js.map +1 -1
  533. package/dist/core/provider-composer.d.ts.map +1 -1
  534. package/dist/core/provider-composer.js +19 -12
  535. package/dist/core/provider-composer.js.map +1 -1
  536. package/dist/core/provider-display-names.d.ts.map +1 -1
  537. package/dist/core/provider-display-names.js +2 -0
  538. package/dist/core/provider-display-names.js.map +1 -1
  539. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  540. package/dist/core/remote-catalog-provider.js +77 -67
  541. package/dist/core/remote-catalog-provider.js.map +1 -1
  542. package/dist/core/resolve-config-value.d.ts.map +1 -1
  543. package/dist/core/resolve-config-value.js +3 -0
  544. package/dist/core/resolve-config-value.js.map +1 -1
  545. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  546. package/dist/core/resource-loader-context-files.js +13 -5
  547. package/dist/core/resource-loader-context-files.js.map +1 -1
  548. package/dist/core/retry-policy.d.ts +30 -0
  549. package/dist/core/retry-policy.d.ts.map +1 -0
  550. package/dist/core/retry-policy.js +25 -0
  551. package/dist/core/retry-policy.js.map +1 -0
  552. package/dist/core/runtime-credentials.d.ts +5 -5
  553. package/dist/core/runtime-credentials.d.ts.map +1 -1
  554. package/dist/core/runtime-credentials.js +8 -8
  555. package/dist/core/runtime-credentials.js.map +1 -1
  556. package/dist/core/sdk-types.d.ts +8 -2
  557. package/dist/core/sdk-types.d.ts.map +1 -1
  558. package/dist/core/sdk-types.js.map +1 -1
  559. package/dist/core/sdk.d.ts.map +1 -1
  560. package/dist/core/sdk.js +6 -1
  561. package/dist/core/sdk.js.map +1 -1
  562. package/dist/core/session-manager-core.d.ts +2 -0
  563. package/dist/core/session-manager-core.d.ts.map +1 -1
  564. package/dist/core/session-manager-core.js +7 -0
  565. package/dist/core/session-manager-core.js.map +1 -1
  566. package/dist/core/session-manager-list.d.ts.map +1 -1
  567. package/dist/core/session-manager-list.js +3 -1
  568. package/dist/core/session-manager-list.js.map +1 -1
  569. package/dist/core/settings-manager-ui-accessors.d.ts +8 -1
  570. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  571. package/dist/core/settings-manager-ui-accessors.js +31 -0
  572. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  573. package/dist/core/settings-manager.d.ts +2 -1
  574. package/dist/core/settings-manager.d.ts.map +1 -1
  575. package/dist/core/settings-manager.js.map +1 -1
  576. package/dist/core/settings-merge.d.ts.map +1 -1
  577. package/dist/core/settings-merge.js +13 -16
  578. package/dist/core/settings-merge.js.map +1 -1
  579. package/dist/core/settings-types.d.ts +5 -0
  580. package/dist/core/settings-types.d.ts.map +1 -1
  581. package/dist/core/settings-types.js.map +1 -1
  582. package/dist/core/slash-commands.d.ts.map +1 -1
  583. package/dist/core/slash-commands.js +0 -2
  584. package/dist/core/slash-commands.js.map +1 -1
  585. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +2 -2
  586. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  587. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +39 -2
  588. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  589. package/dist/core/tools/bash-async-execution.d.ts +2 -0
  590. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  591. package/dist/core/tools/bash-async-execution.js +4 -1
  592. package/dist/core/tools/bash-async-execution.js.map +1 -1
  593. package/dist/core/tools/bash-async-output.d.ts +1 -0
  594. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  595. package/dist/core/tools/bash-async-output.js +62 -27
  596. package/dist/core/tools/bash-async-output.js.map +1 -1
  597. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  598. package/dist/core/tools/bash-pty-native.js +2 -1
  599. package/dist/core/tools/bash-pty-native.js.map +1 -1
  600. package/dist/core/tools/bash.d.ts +9 -0
  601. package/dist/core/tools/bash.d.ts.map +1 -1
  602. package/dist/core/tools/bash.js +34 -16
  603. package/dist/core/tools/bash.js.map +1 -1
  604. package/dist/core/tools/directory-tree.d.ts +11 -0
  605. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  606. package/dist/core/tools/directory-tree.js +26 -0
  607. package/dist/core/tools/directory-tree.js.map +1 -1
  608. package/dist/core/tools/edit.d.ts +4 -0
  609. package/dist/core/tools/edit.d.ts.map +1 -1
  610. package/dist/core/tools/edit.js +12 -8
  611. package/dist/core/tools/edit.js.map +1 -1
  612. package/dist/core/tools/errno.d.ts +25 -0
  613. package/dist/core/tools/errno.d.ts.map +1 -0
  614. package/dist/core/tools/errno.js +29 -0
  615. package/dist/core/tools/errno.js.map +1 -0
  616. package/dist/core/tools/find.d.ts +8 -1
  617. package/dist/core/tools/find.d.ts.map +1 -1
  618. package/dist/core/tools/find.js +20 -15
  619. package/dist/core/tools/find.js.map +1 -1
  620. package/dist/core/tools/grep.d.ts.map +1 -1
  621. package/dist/core/tools/grep.js +5 -1
  622. package/dist/core/tools/grep.js.map +1 -1
  623. package/dist/core/tools/index.d.ts +7 -7
  624. package/dist/core/tools/index.d.ts.map +1 -1
  625. package/dist/core/tools/index.js +7 -7
  626. package/dist/core/tools/index.js.map +1 -1
  627. package/dist/core/tools/ls.d.ts +4 -0
  628. package/dist/core/tools/ls.d.ts.map +1 -1
  629. package/dist/core/tools/ls.js +5 -1
  630. package/dist/core/tools/ls.js.map +1 -1
  631. package/dist/core/tools/output-accumulator.d.ts +8 -1
  632. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  633. package/dist/core/tools/output-accumulator.js +50 -28
  634. package/dist/core/tools/output-accumulator.js.map +1 -1
  635. package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
  636. package/dist/core/tools/oversized-tool-result.js +129 -22
  637. package/dist/core/tools/oversized-tool-result.js.map +1 -1
  638. package/dist/core/tools/persisted-output-file.d.ts +80 -0
  639. package/dist/core/tools/persisted-output-file.d.ts.map +1 -0
  640. package/dist/core/tools/persisted-output-file.js +284 -0
  641. package/dist/core/tools/persisted-output-file.js.map +1 -0
  642. package/dist/core/tools/read.d.ts +10 -0
  643. package/dist/core/tools/read.d.ts.map +1 -1
  644. package/dist/core/tools/read.js +20 -8
  645. package/dist/core/tools/read.js.map +1 -1
  646. package/dist/core/tools/search.d.ts +4 -0
  647. package/dist/core/tools/search.d.ts.map +1 -1
  648. package/dist/core/tools/search.js +5 -1
  649. package/dist/core/tools/search.js.map +1 -1
  650. package/dist/core/tools/session-temp-cleanup.d.ts +133 -0
  651. package/dist/core/tools/session-temp-cleanup.d.ts.map +1 -0
  652. package/dist/core/tools/session-temp-cleanup.js +669 -0
  653. package/dist/core/tools/session-temp-cleanup.js.map +1 -0
  654. package/dist/core/tools/session-temp-dir.d.ts +116 -0
  655. package/dist/core/tools/session-temp-dir.d.ts.map +1 -0
  656. package/dist/core/tools/session-temp-dir.js +409 -0
  657. package/dist/core/tools/session-temp-dir.js.map +1 -0
  658. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  659. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  660. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  661. package/dist/core/tools/tool-limits.d.ts +11 -0
  662. package/dist/core/tools/tool-limits.d.ts.map +1 -1
  663. package/dist/core/tools/tool-limits.js +11 -0
  664. package/dist/core/tools/tool-limits.js.map +1 -1
  665. package/dist/core/tools/windows-directory-security.d.ts +82 -0
  666. package/dist/core/tools/windows-directory-security.d.ts.map +1 -0
  667. package/dist/core/tools/windows-directory-security.js +238 -0
  668. package/dist/core/tools/windows-directory-security.js.map +1 -0
  669. package/dist/core/tools/write.d.ts +4 -0
  670. package/dist/core/tools/write.d.ts.map +1 -1
  671. package/dist/core/tools/write.js +8 -4
  672. package/dist/core/tools/write.js.map +1 -1
  673. package/dist/core/trust-manager.js +1 -1
  674. package/dist/core/trust-manager.js.map +1 -1
  675. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  676. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -1
  677. package/dist/extensions/llama/huggingface-ui.js +6 -5
  678. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  679. package/dist/extensions/llama/index.d.ts.map +1 -1
  680. package/dist/extensions/llama/index.js +11 -2
  681. package/dist/extensions/llama/index.js.map +1 -1
  682. package/dist/extensions/llama/provider.d.ts.map +1 -1
  683. package/dist/extensions/llama/provider.js +24 -8
  684. package/dist/extensions/llama/provider.js.map +1 -1
  685. package/dist/extensions/llama/ui.d.ts.map +1 -1
  686. package/dist/extensions/llama/ui.js +5 -2
  687. package/dist/extensions/llama/ui.js.map +1 -1
  688. package/dist/index-extensions.d.ts +2 -2
  689. package/dist/index-extensions.d.ts.map +1 -1
  690. package/dist/index-extensions.js +1 -1
  691. package/dist/index-extensions.js.map +1 -1
  692. package/dist/index.d.ts +8 -2
  693. package/dist/index.d.ts.map +1 -1
  694. package/dist/index.js +8 -2
  695. package/dist/index.js.map +1 -1
  696. package/dist/main-runtime-api-key.d.ts +2 -2
  697. package/dist/main-runtime-api-key.d.ts.map +1 -1
  698. package/dist/main-runtime-api-key.js +7 -2
  699. package/dist/main-runtime-api-key.js.map +1 -1
  700. package/dist/main-session.js +2 -2
  701. package/dist/main-session.js.map +1 -1
  702. package/dist/main.d.ts.map +1 -1
  703. package/dist/main.js +130 -26
  704. package/dist/main.js.map +1 -1
  705. package/dist/modes/index.d.ts +1 -0
  706. package/dist/modes/index.d.ts.map +1 -1
  707. package/dist/modes/index.js.map +1 -1
  708. package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
  709. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  710. package/dist/modes/interactive/components/assistant-message.js +18 -5
  711. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  712. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  713. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  714. package/dist/modes/interactive/components/bordered-loader.js +5 -4
  715. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  716. package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
  717. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  718. package/dist/modes/interactive/components/branch-summary-message.js +3 -2
  719. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  720. package/dist/modes/interactive/components/chat-message-renderer.d.ts +17 -7
  721. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  722. package/dist/modes/interactive/components/chat-message-renderer.js +35 -69
  723. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  724. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  725. package/dist/modes/interactive/components/chat-session-host-actions.js +11 -3
  726. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  727. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  728. package/dist/modes/interactive/components/chat-session-host-events.js +25 -15
  729. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  730. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  731. package/dist/modes/interactive/components/chat-session-host-rendering.js +9 -4
  732. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  733. package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
  734. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  735. package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
  736. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  737. package/dist/modes/interactive/components/chat-session-host.d.ts +9 -0
  738. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  739. package/dist/modes/interactive/components/chat-session-host.js +14 -0
  740. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  741. package/dist/modes/interactive/components/chat-transcript.d.ts +32 -0
  742. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  743. package/dist/modes/interactive/components/chat-transcript.js +173 -5
  744. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  745. package/dist/modes/interactive/components/config-selector-list.d.ts +1 -1
  746. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  747. package/dist/modes/interactive/components/config-selector-list.js +9 -8
  748. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  749. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  750. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  751. package/dist/modes/interactive/components/custom-editor.js +32 -10
  752. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  753. package/dist/modes/interactive/components/custom-message.d.ts +2 -1
  754. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  755. package/dist/modes/interactive/components/custom-message.js +3 -2
  756. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  757. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  758. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  759. package/dist/modes/interactive/components/extension-editor.js +3 -2
  760. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  761. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  762. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  763. package/dist/modes/interactive/components/extension-input.js +1 -0
  764. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  765. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  766. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  767. package/dist/modes/interactive/components/extension-selector.js +4 -0
  768. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  769. package/dist/modes/interactive/components/fast-mode-selector.d.ts +1 -1
  770. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +1 -1
  771. package/dist/modes/interactive/components/fast-mode-selector.js +7 -5
  772. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  773. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  774. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  775. package/dist/modes/interactive/components/first-time-setup.js +3 -0
  776. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  777. package/dist/modes/interactive/components/footer.js +1 -1
  778. package/dist/modes/interactive/components/footer.js.map +1 -1
  779. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  780. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  781. package/dist/modes/interactive/components/host-input-form.js +6 -5
  782. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  783. package/dist/modes/interactive/components/index.d.ts +1 -1
  784. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  785. package/dist/modes/interactive/components/index.js.map +1 -1
  786. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  787. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  788. package/dist/modes/interactive/components/login-dialog.js +2 -1
  789. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  790. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  791. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  792. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  793. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  794. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  795. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  796. package/dist/modes/interactive/components/mermaid.js +81 -0
  797. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  798. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  799. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  800. package/dist/modes/interactive/components/model-selector.js +9 -6
  801. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  802. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  803. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  804. package/dist/modes/interactive/components/oauth-selector.js +3 -2
  805. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  806. package/dist/modes/interactive/components/scoped-models-selector.d.ts +6 -2
  807. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  808. package/dist/modes/interactive/components/scoped-models-selector.js +39 -13
  809. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  810. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -1
  811. package/dist/modes/interactive/components/session-selector-delete.js +2 -1
  812. package/dist/modes/interactive/components/session-selector-delete.js.map +1 -1
  813. package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
  814. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  815. package/dist/modes/interactive/components/session-selector-list.js +12 -11
  816. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  817. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  818. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  819. package/dist/modes/interactive/components/session-selector.js +3 -3
  820. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  821. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  822. package/dist/modes/interactive/components/settings-selector-handlers.js +9 -0
  823. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  824. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  825. package/dist/modes/interactive/components/settings-selector-items.js +21 -0
  826. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  827. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +3 -3
  828. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  829. package/dist/modes/interactive/components/settings-selector-submenus.js +6 -1
  830. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  831. package/dist/modes/interactive/components/settings-selector-types.d.ts +8 -1
  832. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  833. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  834. package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
  835. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  836. package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
  837. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  838. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  839. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  840. package/dist/modes/interactive/components/tool-execution.js +50 -27
  841. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  842. package/dist/modes/interactive/components/tree-selector-component.d.ts +1 -1
  843. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -1
  844. package/dist/modes/interactive/components/tree-selector-component.js +2 -3
  845. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  846. package/dist/modes/interactive/components/tree-selector-help.d.ts +1 -1
  847. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -1
  848. package/dist/modes/interactive/components/tree-selector-help.js +3 -1
  849. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  850. package/dist/modes/interactive/components/tree-selector-label-input.d.ts +1 -1
  851. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -1
  852. package/dist/modes/interactive/components/tree-selector-label-input.js +1 -0
  853. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  854. package/dist/modes/interactive/components/tree-selector-list.d.ts +1 -1
  855. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -1
  856. package/dist/modes/interactive/components/tree-selector-list.js +3 -0
  857. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  858. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  859. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  860. package/dist/modes/interactive/components/trust-selector.js +4 -0
  861. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  862. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  863. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  864. package/dist/modes/interactive/components/user-message-selector.js +4 -0
  865. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  866. package/dist/modes/interactive/components/user-message.d.ts +4 -1
  867. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  868. package/dist/modes/interactive/components/user-message.js +10 -2
  869. package/dist/modes/interactive/components/user-message.js.map +1 -1
  870. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  871. package/dist/modes/interactive/external-editor.js +2 -1
  872. package/dist/modes/interactive/external-editor.js.map +1 -1
  873. package/dist/modes/interactive/interactive-agent-events.js +36 -18
  874. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  875. package/dist/modes/interactive/interactive-auth-login.js +9 -2
  876. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  877. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  878. package/dist/modes/interactive/interactive-auth-routing.js +5 -1
  879. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  880. package/dist/modes/interactive/interactive-bash-compact.js +16 -4
  881. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  882. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  883. package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
  884. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  885. package/dist/modes/interactive/interactive-editor-actions.js +2 -0
  886. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  887. package/dist/modes/interactive/interactive-extension-context.js +12 -7
  888. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  889. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
  890. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  891. package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
  892. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  893. package/dist/modes/interactive/interactive-extension-widgets.js +7 -24
  894. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  895. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  896. package/dist/modes/interactive/interactive-input-handling.js +9 -8
  897. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  898. package/dist/modes/interactive/interactive-mode-base.d.ts +52 -3
  899. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  900. package/dist/modes/interactive/interactive-mode-base.js +143 -5
  901. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  902. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  903. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  904. package/dist/modes/interactive/interactive-mode-deps.js +2 -2
  905. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  906. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -3
  907. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  908. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  909. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  910. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  911. package/dist/modes/interactive/interactive-mode.js +1 -0
  912. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  913. package/dist/modes/interactive/interactive-model-routing.js +107 -41
  914. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  915. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  916. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  917. package/dist/modes/interactive/interactive-render-chat.js +24 -6
  918. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  919. package/dist/modes/interactive/interactive-selectors.js +44 -5
  920. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  921. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  922. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  923. package/dist/modes/interactive/interactive-slash-commands.js +9 -4
  924. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  925. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  926. package/dist/modes/interactive/interactive-startup.js +37 -18
  927. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  928. package/dist/modes/interactive/interactive-tui.d.ts +21 -0
  929. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -0
  930. package/dist/modes/interactive/interactive-tui.js +279 -0
  931. package/dist/modes/interactive/interactive-tui.js.map +1 -0
  932. package/dist/modes/interactive/streaming-assistant-message.d.ts +34 -0
  933. package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -0
  934. package/dist/modes/interactive/streaming-assistant-message.js +76 -0
  935. package/dist/modes/interactive/streaming-assistant-message.js.map +1 -0
  936. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -0
  937. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -0
  938. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -0
  939. package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -0
  940. package/dist/modes/interactive/theme/dark.json +1 -0
  941. package/dist/modes/interactive/theme/light.json +1 -0
  942. package/dist/modes/interactive/theme/terminal-detection.d.ts +10 -0
  943. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
  944. package/dist/modes/interactive/theme/terminal-detection.js +19 -0
  945. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
  946. package/dist/modes/interactive/theme/theme-class.d.ts +2 -2
  947. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  948. package/dist/modes/interactive/theme/theme-class.js +5 -1
  949. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  950. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -1
  951. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  952. package/dist/modes/interactive/theme/theme-controller.js +10 -13
  953. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  954. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  955. package/dist/modes/interactive/theme/theme-loading.js +1 -0
  956. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  957. package/dist/modes/interactive/theme/theme-schema.d.ts +4 -0
  958. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  959. package/dist/modes/interactive/theme/theme-schema.js +2 -1
  960. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  961. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  962. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  963. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  964. package/dist/modes/interactive/theme/theme.js +1 -1
  965. package/dist/modes/interactive/theme/theme.js.map +1 -1
  966. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +1 -1
  967. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  968. package/dist/modes/interactive-engine/engine-custom-ui.js +28 -11
  969. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  970. package/dist/modes/interactive-engine/engine-render-service.js +3 -3
  971. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  972. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -1
  973. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  974. package/dist/modes/interactive-engine/extension-ui-bridge.js +2 -2
  975. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  976. package/dist/modes/interactive-engine/isolated-runtime.d.ts +7 -0
  977. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  978. package/dist/modes/interactive-engine/isolated-runtime.js +7 -0
  979. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  980. package/dist/modes/interactive-engine/protocol.d.ts +12 -10
  981. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  982. package/dist/modes/interactive-engine/protocol.js +14 -11
  983. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  984. package/dist/modes/interactive-engine/remote-component.d.ts +11 -1
  985. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  986. package/dist/modes/interactive-engine/remote-component.js +48 -8
  987. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  988. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +19 -12
  989. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -1
  990. package/dist/modes/interactive-engine/terminal-mode-controller.js +54 -35
  991. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
  992. package/dist/modes/json-event.d.ts +28 -0
  993. package/dist/modes/json-event.d.ts.map +1 -0
  994. package/dist/modes/json-event.js +12 -0
  995. package/dist/modes/json-event.js.map +1 -0
  996. package/dist/modes/print-mode.d.ts.map +1 -1
  997. package/dist/modes/print-mode.js +2 -1
  998. package/dist/modes/print-mode.js.map +1 -1
  999. package/dist/modes/rpc/rpc-client-process.d.ts +1 -0
  1000. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  1001. package/dist/modes/rpc/rpc-client-process.js +5 -1
  1002. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  1003. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1004. package/dist/modes/rpc/rpc-client.js +7 -2
  1005. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1006. package/dist/modes/rpc/rpc-command-handler.js +1 -1
  1007. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  1008. package/dist/modes/rpc/rpc-event-buffer.d.ts +9 -0
  1009. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
  1010. package/dist/modes/rpc/rpc-event-buffer.js +10 -5
  1011. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  1012. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  1013. package/dist/modes/rpc/rpc-extension-ui.js +3 -0
  1014. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  1015. package/dist/modes/rpc/rpc-input.js +1 -1
  1016. package/dist/modes/rpc/rpc-input.js.map +1 -1
  1017. package/dist/modes/rpc/rpc-output-buffer.d.ts +9 -0
  1018. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  1019. package/dist/modes/rpc/rpc-output-buffer.js +10 -5
  1020. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  1021. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  1022. package/dist/modes/rpc/rpc-provider-auth.js +3 -0
  1023. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  1024. package/dist/modes/rpc/rpc-responses.d.ts +1 -1
  1025. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  1026. package/dist/modes/rpc/rpc-responses.js +13 -1
  1027. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1028. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  1029. package/dist/modes/rpc/rpc-session-binding.js +2 -1
  1030. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  1031. package/dist/modes/rpc/rpc-types.d.ts +9 -2
  1032. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1033. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1034. package/dist/rpc-entry.js +2 -0
  1035. package/dist/rpc-entry.js.map +1 -1
  1036. package/dist/self-update-plan.d.ts.map +1 -1
  1037. package/dist/self-update-plan.js +5 -4
  1038. package/dist/self-update-plan.js.map +1 -1
  1039. package/dist/server/create-harness.d.ts +53 -0
  1040. package/dist/server/create-harness.d.ts.map +1 -0
  1041. package/dist/server/create-harness.js +349 -0
  1042. package/dist/server/create-harness.js.map +1 -0
  1043. package/dist/utils/agent-attribution.d.ts +2 -0
  1044. package/dist/utils/agent-attribution.d.ts.map +1 -0
  1045. package/dist/utils/agent-attribution.js +2 -0
  1046. package/dist/utils/agent-attribution.js.map +1 -0
  1047. package/dist/utils/child-process.d.ts +3 -1
  1048. package/dist/utils/child-process.d.ts.map +1 -1
  1049. package/dist/utils/child-process.js +24 -4
  1050. package/dist/utils/child-process.js.map +1 -1
  1051. package/dist/utils/clipboard-image.d.ts.map +1 -1
  1052. package/dist/utils/clipboard-image.js +2 -1
  1053. package/dist/utils/clipboard-image.js.map +1 -1
  1054. package/dist/utils/clipboard.d.ts.map +1 -1
  1055. package/dist/utils/clipboard.js +12 -3
  1056. package/dist/utils/clipboard.js.map +1 -1
  1057. package/dist/utils/management-http.d.ts +23 -0
  1058. package/dist/utils/management-http.d.ts.map +1 -0
  1059. package/dist/utils/management-http.js +50 -0
  1060. package/dist/utils/management-http.js.map +1 -0
  1061. package/dist/utils/open-browser.d.ts.map +1 -1
  1062. package/dist/utils/open-browser.js +2 -1
  1063. package/dist/utils/open-browser.js.map +1 -1
  1064. package/dist/utils/paths.d.ts +2 -0
  1065. package/dist/utils/paths.d.ts.map +1 -1
  1066. package/dist/utils/paths.js +13 -0
  1067. package/dist/utils/paths.js.map +1 -1
  1068. package/dist/utils/shell.d.ts.map +1 -1
  1069. package/dist/utils/shell.js +17 -4
  1070. package/dist/utils/shell.js.map +1 -1
  1071. package/dist/utils/tool-result-images.d.ts +17 -0
  1072. package/dist/utils/tool-result-images.d.ts.map +1 -0
  1073. package/dist/utils/tool-result-images.js +41 -0
  1074. package/dist/utils/tool-result-images.js.map +1 -0
  1075. package/dist/utils/tools-manager.d.ts.map +1 -1
  1076. package/dist/utils/tools-manager.js +7 -8
  1077. package/dist/utils/tools-manager.js.map +1 -1
  1078. package/dist/utils/version-check.d.ts +4 -0
  1079. package/dist/utils/version-check.d.ts.map +1 -1
  1080. package/dist/utils/version-check.js +20 -2
  1081. package/dist/utils/version-check.js.map +1 -1
  1082. package/docs/compaction.md +2 -1
  1083. package/docs/custom-provider.md +15 -7
  1084. package/docs/development.md +1 -0
  1085. package/docs/docs.json +1 -0
  1086. package/docs/environment-variables.md +4 -0
  1087. package/docs/extensions.md +102 -18
  1088. package/docs/i-have-adhd.md +36 -0
  1089. package/docs/intercom.md +31 -16
  1090. package/docs/json.md +2 -2
  1091. package/docs/keybindings.md +55 -12
  1092. package/docs/models/model-selection.md +34 -8
  1093. package/docs/models.md +28 -3
  1094. package/docs/providers.md +20 -2
  1095. package/docs/quickstart.md +5 -5
  1096. package/docs/rpc.md +18 -12
  1097. package/docs/sdk.md +43 -7
  1098. package/docs/security.md +10 -10
  1099. package/docs/sessions.md +2 -0
  1100. package/docs/settings.md +32 -6
  1101. package/docs/subagents.md +30 -45
  1102. package/docs/themes.md +5 -3
  1103. package/docs/tools.md +21 -1
  1104. package/docs/tui.md +41 -24
  1105. package/docs/usage.md +40 -14
  1106. package/docs/windows.md +2 -0
  1107. package/docs/workflows.md +237 -25
  1108. package/examples/extensions/custom-provider-anthropic/index.ts +9 -2
  1109. package/examples/extensions/custom-provider-gitlab-duo/index.ts +9 -2
  1110. package/examples/extensions/gondolin/package-lock.json +3 -3
  1111. package/examples/extensions/modal-editor.ts +8 -10
  1112. package/examples/extensions/rainbow-editor.ts +3 -2
  1113. package/examples/extensions/subagent/README.md +16 -45
  1114. package/examples/extensions/subagent/index.ts +6 -96
  1115. package/examples/extensions/subagent/render.ts +0 -78
  1116. package/examples/extensions/subagent/runner.ts +0 -3
  1117. package/examples/extensions/subagent/schemas.ts +0 -13
  1118. package/examples/extensions/subagent/types.ts +1 -2
  1119. package/examples/sdk/09-api-keys-and-oauth.ts +6 -2
  1120. package/examples/sdk/12-full-control.ts +8 -2
  1121. package/examples/sdk/README.md +4 -1
  1122. package/npm-shrinkwrap.json +191 -634
  1123. package/package.json +14 -7
  1124. package/dist/builtin/subagents/src/agents/chain-serializer.ts +0 -257
  1125. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +0 -112
  1126. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +0 -543
  1127. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +0 -140
  1128. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +0 -279
  1129. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +0 -99
  1130. package/dist/builtin/subagents/src/runs/background/async-execution.ts +0 -17
  1131. package/dist/builtin/subagents/src/runs/background/async-resume.ts +0 -402
  1132. package/dist/builtin/subagents/src/runs/background/async-status.ts +0 -411
  1133. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +0 -196
  1134. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +0 -102
  1135. package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +0 -59
  1136. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +0 -300
  1137. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +0 -166
  1138. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +0 -77
  1139. package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +0 -48
  1140. package/dist/builtin/subagents/src/runs/background/result-status.ts +0 -87
  1141. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +0 -72
  1142. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +0 -320
  1143. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +0 -105
  1144. package/dist/builtin/subagents/src/runs/background/run-status.ts +0 -358
  1145. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +0 -457
  1146. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +0 -376
  1147. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +0 -150
  1148. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +0 -109
  1149. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +0 -128
  1150. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +0 -309
  1151. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +0 -173
  1152. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +0 -578
  1153. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +0 -330
  1154. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +0 -330
  1155. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +0 -210
  1156. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +0 -69
  1157. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +0 -90
  1158. package/dist/builtin/subagents/src/runs/background/top-level-async.ts +0 -12
  1159. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +0 -38
  1160. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +0 -280
  1161. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +0 -217
  1162. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +0 -271
  1163. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +0 -271
  1164. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +0 -200
  1165. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +0 -184
  1166. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +0 -140
  1167. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +0 -108
  1168. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +0 -17
  1169. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +0 -558
  1170. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +0 -83
  1171. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +0 -109
  1172. package/dist/builtin/subagents/src/runs/shared/attempt-watchdog.ts +0 -126
  1173. package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +0 -126
  1174. package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +0 -387
  1175. package/dist/builtin/subagents/src/runs/shared/final-drain.ts +0 -39
  1176. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +0 -339
  1177. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +0 -165
  1178. package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +0 -21
  1179. package/dist/builtin/subagents/src/runs/shared/structured-output.ts +0 -150
  1180. package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +0 -232
  1181. package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +0 -86
  1182. package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +0 -60
  1183. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +0 -335
  1184. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  1185. package/examples/extensions/subagent/prompts/implement.md +0 -10
  1186. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
  1187. /package/dist/builtin/subagents/src/runs/{shared/nested-path.ts → inprocess/runtime-support/nested-paths.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"child-process.js","sourceRoot":"","sources":["../../src/utils/child-process.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype ChildProcess,\n\ttype ChildProcessByStdio,\n\tspawn as nodeSpawn,\n\tspawnSync as nodeSpawnSync,\n\ttype SpawnOptions,\n\ttype SpawnOptionsWithStdioTuple,\n\ttype SpawnSyncOptionsWithStringEncoding,\n\ttype SpawnSyncReturns,\n\ttype StdioNull,\n\ttype StdioPipe,\n} from \"node:child_process\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport crossSpawn from \"cross-spawn\";\n\nconst EXIT_STDIO_IDLE_GRACE_MS = 100;\nconst EXIT_STDIO_ACTIVE_DRAIN_HARD_CAP_MS = 5_000;\nconst WINDOWS_EXIT_POLL_INTERVAL_MS = 50;\nconst WINDOWS_EXIT_CODE_GRACE_MS = 1_000;\n\ntype WaitForChildProcessOptions = {\n\tplatform?: NodeJS.Platform;\n\tisWindowsProcessAlive?: (pid: number) => boolean;\n\twindowsExitPollIntervalMs?: number;\n\twindowsExitCodeGraceMs?: number;\n};\n\nconst WINDOWS_SHELL_COMMANDS = new Set([\"bun\", \"npm\", \"npx\", \"pnpm\", \"yarn\", \"yarnpkg\", \"corepack\"]);\n\nexport function shouldUseWindowsShell(command: string): boolean {\n\tif (process.platform !== \"win32\") return false;\n\tconst commandName = basename(command).toLowerCase();\n\treturn commandName.endsWith(\".cmd\") || commandName.endsWith(\".bat\") || WINDOWS_SHELL_COMMANDS.has(commandName);\n}\n\nexport function spawnProcess(\n\tcommand: string,\n\targs: string[],\n\toptions: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,\n): ChildProcessByStdio<null, Readable, Readable>;\nexport function spawnProcess(command: string, args: string[], options: SpawnOptions): ChildProcess;\nexport function spawnProcess(command: string, args: string[], options: SpawnOptions): ChildProcess {\n\treturn process.platform === \"win32\" ? crossSpawn(command, args, options) : nodeSpawn(command, args, options);\n}\n\nexport function spawnProcessSync(\n\tcommand: string,\n\targs: string[],\n\toptions: SpawnSyncOptionsWithStringEncoding,\n): SpawnSyncReturns<string> {\n\treturn process.platform === \"win32\"\n\t\t? crossSpawn.sync(command, args, options)\n\t\t: nodeSpawnSync(command, args, options);\n}\n\nfunction isWindowsProcessAlive(pid: number): boolean {\n\tconst result = nodeSpawnSync(\"tasklist\", [\"/FI\", `PID eq ${pid}`, \"/NH\"], { encoding: \"utf-8\", windowsHide: true });\n\tif (result.status !== 0) return true;\n\treturn new RegExp(`\\\\b${pid}\\\\b`).test(result.stdout);\n}\n\n/**\n * Wait for a child process to terminate without hanging on inherited stdio handles.\n *\n * A short-lived child can `exit` while a detached descendant keeps its stdout/stderr\n * pipe open. We must not resolve and destroy the streams on a short fixed deadline\n * measured from `exit`, or finite post-exit output still being written past that\n * deadline is silently lost (earendil-works/pi#5303). Instead, after `exit` we wait\n * for the pipes to fall idle: the grace timer is re-armed on every chunk, so finite\n * post-exit writers drain while active, while a quiet inherited handle (e.g. a\n * Windows daemonized descendant that never lets `close` fire) releases promptly\n * after the grace elapses. A longer active-drain hard cap is armed once on `exit`\n * so an endlessly noisy descendant cannot keep the wait pending forever.\n */\nexport function waitForChildProcess(\n\tchild: ChildProcess,\n\toptions: WaitForChildProcessOptions = {},\n): Promise<number | null> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet exited = false;\n\t\tlet exitCode: number | null = null;\n\t\tlet postExitIdleTimer: NodeJS.Timeout | undefined;\n\t\tlet postExitActiveDrainHardCapTimer: NodeJS.Timeout | undefined;\n\t\tlet stdoutEnded = child.stdout === null;\n\t\tlet stderrEnded = child.stderr === null;\n\t\tlet windowsExitPoll: NodeJS.Timeout | undefined;\n\t\tlet windowsExitCodeGraceTimer: NodeJS.Timeout | undefined;\n\t\tconst platform = options.platform ?? process.platform;\n\t\tconst processAlive = options.isWindowsProcessAlive ?? isWindowsProcessAlive;\n\t\tconst windowsExitPollIntervalMs = options.windowsExitPollIntervalMs ?? WINDOWS_EXIT_POLL_INTERVAL_MS;\n\t\tconst windowsExitCodeGraceMs = options.windowsExitCodeGraceMs ?? WINDOWS_EXIT_CODE_GRACE_MS;\n\n\t\tconst cleanup = () => {\n\t\t\tif (windowsExitPoll) {\n\t\t\t\tclearInterval(windowsExitPoll);\n\t\t\t\twindowsExitPoll = undefined;\n\t\t\t}\n\t\t\tif (postExitIdleTimer) {\n\t\t\t\tclearTimeout(postExitIdleTimer);\n\t\t\t\tpostExitIdleTimer = undefined;\n\t\t\t}\n\t\t\tif (postExitActiveDrainHardCapTimer) {\n\t\t\t\tclearTimeout(postExitActiveDrainHardCapTimer);\n\t\t\t\tpostExitActiveDrainHardCapTimer = undefined;\n\t\t\t}\n\t\t\tif (windowsExitCodeGraceTimer) {\n\t\t\t\tclearTimeout(windowsExitCodeGraceTimer);\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t}\n\t\t\tchild.removeListener(\"error\", onError);\n\t\t\tchild.removeListener(\"exit\", onExit);\n\t\t\tchild.removeListener(\"close\", onClose);\n\t\t\tchild.stdout?.removeListener(\"end\", onStdoutEnd);\n\t\t\tchild.stderr?.removeListener(\"end\", onStderrEnd);\n\t\t\tchild.stdout?.removeListener(\"data\", onData);\n\t\t\tchild.stderr?.removeListener(\"data\", onData);\n\t\t};\n\n\t\tconst finalize = (code: number | null) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tchild.stdout?.destroy();\n\t\t\tchild.stderr?.destroy();\n\t\t\tresolve(code);\n\t\t};\n\n\t\tconst maybeFinalizeAfterExit = () => {\n\t\t\tif (!exited || settled) return;\n\t\t\tif (stdoutEnded && stderrEnded) {\n\t\t\t\tfinalize(exitCode);\n\t\t\t}\n\t\t};\n\n\t\tconst armIdleTimer = () => {\n\t\t\tif (postExitIdleTimer) clearTimeout(postExitIdleTimer);\n\t\t\tpostExitIdleTimer = setTimeout(() => finalize(exitCode), EXIT_STDIO_IDLE_GRACE_MS);\n\t\t};\n\n\t\tconst armActiveDrainHardCapTimer = () => {\n\t\t\tif (postExitActiveDrainHardCapTimer) return;\n\t\t\tpostExitActiveDrainHardCapTimer = setTimeout(() => finalize(exitCode), EXIT_STDIO_ACTIVE_DRAIN_HARD_CAP_MS);\n\t\t};\n\n\t\tconst onData = () => {\n\t\t\t// Output is still arriving after exit; keep extending the idle grace\n\t\t\t// so active finite writers can drain without truncating the tail.\n\t\t\tif (exited && !settled) armIdleTimer();\n\t\t};\n\n\t\tconst onStdoutEnd = () => {\n\t\t\tstdoutEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\n\t\tconst onStderrEnd = () => {\n\t\t\tstderrEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\n\t\tconst onError = (err: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(err);\n\t\t};\n\n\t\tconst onExit = (code: number | null) => {\n\t\t\tif (windowsExitCodeGraceTimer) {\n\t\t\t\tclearTimeout(windowsExitCodeGraceTimer);\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t}\n\t\t\texited = true;\n\t\t\texitCode = code;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t\tif (!settled) {\n\t\t\t\tarmActiveDrainHardCapTimer();\n\t\t\t\tarmIdleTimer();\n\t\t\t}\n\t\t};\n\n\t\tconst armWindowsExitCodeGraceTimer = () => {\n\t\t\tif (windowsExitCodeGraceTimer) return;\n\t\t\tif (windowsExitPoll) {\n\t\t\t\tclearInterval(windowsExitPoll);\n\t\t\t\twindowsExitPoll = undefined;\n\t\t\t}\n\t\t\twindowsExitCodeGraceTimer = setTimeout(() => {\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t\tonExit(child.exitCode ?? 0);\n\t\t\t}, windowsExitCodeGraceMs);\n\t\t};\n\n\t\tconst pollWindowsExit = () => {\n\t\t\tif (platform !== \"win32\" || !child.pid || exited || settled) return;\n\t\t\tif (!processAlive(child.pid)) {\n\t\t\t\tif (child.exitCode !== null) {\n\t\t\t\t\tonExit(child.exitCode);\n\t\t\t\t} else {\n\t\t\t\t\tarmWindowsExitCodeGraceTimer();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst onClose = (code: number | null) => {\n\t\t\tfinalize(code);\n\t\t};\n\n\t\tif (platform === \"win32\" && child.pid) {\n\t\t\twindowsExitPoll = setInterval(pollWindowsExit, windowsExitPollIntervalMs);\n\t\t}\n\t\tchild.stdout?.once(\"end\", onStdoutEnd);\n\t\tchild.stderr?.once(\"end\", onStderrEnd);\n\t\tchild.stdout?.on(\"data\", onData);\n\t\tchild.stderr?.on(\"data\", onData);\n\t\tchild.once(\"error\", onError);\n\t\tchild.once(\"exit\", onExit);\n\t\tchild.once(\"close\", onClose);\n\t});\n}\n"]}
1
+ {"version":3,"file":"child-process.js","sourceRoot":"","sources":["../../src/utils/child-process.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype ChildProcess,\n\ttype ChildProcessByStdio,\n\tspawn as nodeSpawn,\n\tspawnSync as nodeSpawnSync,\n\ttype SpawnOptions,\n\ttype SpawnOptionsWithStdioTuple,\n\ttype SpawnSyncOptionsWithStringEncoding,\n\ttype SpawnSyncReturns,\n\ttype StdioNull,\n\ttype StdioPipe,\n} from \"node:child_process\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport crossSpawn from \"cross-spawn\";\nimport { ATOMIC_AI_AGENT } from \"./agent-attribution.ts\";\n\nconst EXIT_STDIO_IDLE_GRACE_MS = 100;\nconst EXIT_STDIO_ACTIVE_DRAIN_HARD_CAP_MS = 5_000;\nconst WINDOWS_EXIT_POLL_INTERVAL_MS = 50;\nconst WINDOWS_EXIT_CODE_GRACE_MS = 1_000;\n\n/** Build the environment for every Atomic child process. */\nexport { ATOMIC_AI_AGENT } from \"./agent-attribution.ts\";\nexport function createChildProcessEnvironment(\n\toverrides?: NodeJS.ProcessEnv,\n\tbaseEnv: NodeJS.ProcessEnv = process.env,\n): NodeJS.ProcessEnv {\n\treturn { ...baseEnv, ...overrides, AI_AGENT: ATOMIC_AI_AGENT };\n}\n\ntype WaitForChildProcessOptions = {\n\tplatform?: NodeJS.Platform;\n\tisWindowsProcessAlive?: (pid: number) => boolean;\n\twindowsExitPollIntervalMs?: number;\n\twindowsExitCodeGraceMs?: number;\n};\n\nconst WINDOWS_SHELL_COMMANDS = new Set([\"bun\", \"npm\", \"npx\", \"pnpm\", \"yarn\", \"yarnpkg\", \"corepack\"]);\n\nexport function shouldUseWindowsShell(command: string): boolean {\n\tif (process.platform !== \"win32\") return false;\n\tconst commandName = basename(command).toLowerCase();\n\treturn commandName.endsWith(\".cmd\") || commandName.endsWith(\".bat\") || WINDOWS_SHELL_COMMANDS.has(commandName);\n}\n\nexport function spawnProcess(\n\tcommand: string,\n\targs: string[],\n\toptions: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,\n): ChildProcessByStdio<null, Readable, Readable>;\nexport function spawnProcess(command: string, args: string[], options: SpawnOptions): ChildProcess;\nexport function spawnProcess(command: string, args: string[], options: SpawnOptions): ChildProcess {\n\tconst childOptions = {\n\t\t...options,\n\t\tenv: options.env ? createChildProcessEnvironment(undefined, options.env) : createChildProcessEnvironment(),\n\t};\n\treturn process.platform === \"win32\"\n\t\t? crossSpawn(command, args, childOptions)\n\t\t: nodeSpawn(command, args, childOptions);\n}\n\nexport function spawnProcessSync(\n\tcommand: string,\n\targs: string[],\n\toptions: SpawnSyncOptionsWithStringEncoding,\n): SpawnSyncReturns<string> {\n\tconst childOptions = {\n\t\t...options,\n\t\tenv: options.env ? createChildProcessEnvironment(undefined, options.env) : createChildProcessEnvironment(),\n\t};\n\treturn process.platform === \"win32\"\n\t\t? crossSpawn.sync(command, args, childOptions)\n\t\t: nodeSpawnSync(command, args, childOptions);\n}\n\nfunction isWindowsProcessAlive(pid: number): boolean {\n\tconst result = nodeSpawnSync(\"tasklist\", [\"/FI\", `PID eq ${pid}`, \"/NH\"], {\n\t\tencoding: \"utf-8\",\n\t\twindowsHide: true,\n\t\tenv: createChildProcessEnvironment(),\n\t});\n\tif (result.status !== 0) return true;\n\treturn new RegExp(`\\\\b${pid}\\\\b`).test(result.stdout);\n}\n\n/**\n * Wait for a child process to terminate without hanging on inherited stdio handles.\n *\n * A short-lived child can `exit` while a detached descendant keeps its stdout/stderr\n * pipe open. We must not resolve and destroy the streams on a short fixed deadline\n * measured from `exit`, or finite post-exit output still being written past that\n * deadline is silently lost (earendil-works/pi#5303). Instead, after `exit` we wait\n * for the pipes to fall idle: the grace timer is re-armed on every chunk, so finite\n * post-exit writers drain while active, while a quiet inherited handle (e.g. a\n * Windows daemonized descendant that never lets `close` fire) releases promptly\n * after the grace elapses. A longer active-drain hard cap is armed once on `exit`\n * so an endlessly noisy descendant cannot keep the wait pending forever.\n */\nexport function waitForChildProcess(\n\tchild: ChildProcess,\n\toptions: WaitForChildProcessOptions = {},\n): Promise<number | null> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet exited = false;\n\t\tlet exitCode: number | null = null;\n\t\tlet postExitIdleTimer: NodeJS.Timeout | undefined;\n\t\tlet postExitActiveDrainHardCapTimer: NodeJS.Timeout | undefined;\n\t\tlet stdoutEnded = child.stdout === null;\n\t\tlet stderrEnded = child.stderr === null;\n\t\tlet windowsExitPoll: NodeJS.Timeout | undefined;\n\t\tlet windowsExitCodeGraceTimer: NodeJS.Timeout | undefined;\n\t\tconst platform = options.platform ?? process.platform;\n\t\tconst processAlive = options.isWindowsProcessAlive ?? isWindowsProcessAlive;\n\t\tconst windowsExitPollIntervalMs = options.windowsExitPollIntervalMs ?? WINDOWS_EXIT_POLL_INTERVAL_MS;\n\t\tconst windowsExitCodeGraceMs = options.windowsExitCodeGraceMs ?? WINDOWS_EXIT_CODE_GRACE_MS;\n\n\t\tconst cleanup = () => {\n\t\t\tif (windowsExitPoll) {\n\t\t\t\tclearInterval(windowsExitPoll);\n\t\t\t\twindowsExitPoll = undefined;\n\t\t\t}\n\t\t\tif (postExitIdleTimer) {\n\t\t\t\tclearTimeout(postExitIdleTimer);\n\t\t\t\tpostExitIdleTimer = undefined;\n\t\t\t}\n\t\t\tif (postExitActiveDrainHardCapTimer) {\n\t\t\t\tclearTimeout(postExitActiveDrainHardCapTimer);\n\t\t\t\tpostExitActiveDrainHardCapTimer = undefined;\n\t\t\t}\n\t\t\tif (windowsExitCodeGraceTimer) {\n\t\t\t\tclearTimeout(windowsExitCodeGraceTimer);\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t}\n\t\t\tchild.removeListener(\"error\", onError);\n\t\t\tchild.removeListener(\"exit\", onExit);\n\t\t\tchild.removeListener(\"close\", onClose);\n\t\t\tchild.stdout?.removeListener(\"end\", onStdoutEnd);\n\t\t\tchild.stderr?.removeListener(\"end\", onStderrEnd);\n\t\t\tchild.stdout?.removeListener(\"data\", onData);\n\t\t\tchild.stderr?.removeListener(\"data\", onData);\n\t\t};\n\n\t\tconst finalize = (code: number | null) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tchild.stdout?.destroy();\n\t\t\tchild.stderr?.destroy();\n\t\t\tresolve(code);\n\t\t};\n\n\t\tconst maybeFinalizeAfterExit = () => {\n\t\t\tif (!exited || settled) return;\n\t\t\tif (stdoutEnded && stderrEnded) {\n\t\t\t\tfinalize(exitCode);\n\t\t\t}\n\t\t};\n\n\t\tconst armIdleTimer = () => {\n\t\t\tif (postExitIdleTimer) clearTimeout(postExitIdleTimer);\n\t\t\tpostExitIdleTimer = setTimeout(() => finalize(exitCode), EXIT_STDIO_IDLE_GRACE_MS);\n\t\t};\n\n\t\tconst armActiveDrainHardCapTimer = () => {\n\t\t\tif (postExitActiveDrainHardCapTimer) return;\n\t\t\tpostExitActiveDrainHardCapTimer = setTimeout(() => finalize(exitCode), EXIT_STDIO_ACTIVE_DRAIN_HARD_CAP_MS);\n\t\t};\n\n\t\tconst onData = () => {\n\t\t\t// Output is still arriving after exit; keep extending the idle grace\n\t\t\t// so active finite writers can drain without truncating the tail.\n\t\t\tif (exited && !settled) armIdleTimer();\n\t\t};\n\n\t\tconst onStdoutEnd = () => {\n\t\t\tstdoutEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\n\t\tconst onStderrEnd = () => {\n\t\t\tstderrEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\n\t\tconst onError = (err: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(err);\n\t\t};\n\n\t\tconst onExit = (code: number | null) => {\n\t\t\tif (windowsExitCodeGraceTimer) {\n\t\t\t\tclearTimeout(windowsExitCodeGraceTimer);\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t}\n\t\t\texited = true;\n\t\t\texitCode = code;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t\tif (!settled) {\n\t\t\t\tarmActiveDrainHardCapTimer();\n\t\t\t\tarmIdleTimer();\n\t\t\t}\n\t\t};\n\n\t\tconst armWindowsExitCodeGraceTimer = () => {\n\t\t\tif (windowsExitCodeGraceTimer) return;\n\t\t\tif (windowsExitPoll) {\n\t\t\t\tclearInterval(windowsExitPoll);\n\t\t\t\twindowsExitPoll = undefined;\n\t\t\t}\n\t\t\twindowsExitCodeGraceTimer = setTimeout(() => {\n\t\t\t\twindowsExitCodeGraceTimer = undefined;\n\t\t\t\tonExit(child.exitCode ?? 0);\n\t\t\t}, windowsExitCodeGraceMs);\n\t\t};\n\n\t\tconst pollWindowsExit = () => {\n\t\t\tif (platform !== \"win32\" || !child.pid || exited || settled) return;\n\t\t\tif (!processAlive(child.pid)) {\n\t\t\t\tif (child.exitCode !== null) {\n\t\t\t\t\tonExit(child.exitCode);\n\t\t\t\t} else {\n\t\t\t\t\tarmWindowsExitCodeGraceTimer();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst onClose = (code: number | null) => {\n\t\t\tfinalize(code);\n\t\t};\n\n\t\tif (platform === \"win32\" && child.pid) {\n\t\t\twindowsExitPoll = setInterval(pollWindowsExit, windowsExitPollIntervalMs);\n\t\t}\n\t\tchild.stdout?.once(\"end\", onStdoutEnd);\n\t\tchild.stderr?.once(\"end\", onStderrEnd);\n\t\tchild.stdout?.on(\"data\", onData);\n\t\tchild.stderr?.on(\"data\", onData);\n\t\tchild.once(\"error\", onError);\n\t\tchild.once(\"exit\", onExit);\n\t\tchild.once(\"close\", onClose);\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard-image.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard-image.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AASF,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE9E;AAMD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazE;AAmND,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA8CjC"}
1
+ {"version":3,"file":"clipboard-image.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard-image.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AASF,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE9E;AAMD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazE;AAmND,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA8CjC"}
@@ -3,6 +3,7 @@ import { randomUUID } from "crypto";
3
3
  import { readFileSync, unlinkSync } from "fs";
4
4
  import { tmpdir } from "os";
5
5
  import { join } from "path";
6
+ import { createChildProcessEnvironment } from "./child-process.js";
6
7
  import { clipboard } from "./clipboard-native.js";
7
8
  import { loadPhoton } from "./photon.js";
8
9
  const SUPPORTED_IMAGE_MIME_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif"];
@@ -76,7 +77,7 @@ function runCommand(command, args, options) {
76
77
  const result = spawnSync(command, args, {
77
78
  timeout: timeoutMs,
78
79
  maxBuffer: maxBufferBytes,
79
- env: options?.env,
80
+ env: options?.env ? createChildProcessEnvironment(undefined, options.env) : createChildProcessEnvironment(),
80
81
  });
81
82
  if (result.error) {
82
83
  return { ok: false, stdout: Buffer.alloc(0) };
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard-image.js","sourceRoot":"","sources":["../../src/utils/clipboard-image.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"child_process\";\nimport { randomUUID } from \"crypto\";\nimport { readFileSync, unlinkSync } from \"fs\";\nimport { tmpdir } from \"os\";\nimport { join } from \"path\";\n\nimport { clipboard } from \"./clipboard-native.ts\";\nimport { loadPhoton } from \"./photon.ts\";\n\nexport type ClipboardImage = {\n\tbytes: Uint8Array;\n\tmimeType: string;\n};\n\nconst SUPPORTED_IMAGE_MIME_TYPES = [\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"] as const;\n\nconst DEFAULT_LIST_TIMEOUT_MS = 1000;\nconst DEFAULT_READ_TIMEOUT_MS = 3000;\nconst DEFAULT_POWERSHELL_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_BUFFER_BYTES = 50 * 1024 * 1024;\n\nexport function isWaylandSession(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn Boolean(env.WAYLAND_DISPLAY) || env.XDG_SESSION_TYPE === \"wayland\";\n}\n\nfunction baseMimeType(mimeType: string): string {\n\treturn mimeType.split(\";\")[0]?.trim().toLowerCase() ?? mimeType.toLowerCase();\n}\n\nexport function extensionForImageMimeType(mimeType: string): string | null {\n\tswitch (baseMimeType(mimeType)) {\n\t\tcase \"image/png\":\n\t\t\treturn \"png\";\n\t\tcase \"image/jpeg\":\n\t\t\treturn \"jpg\";\n\t\tcase \"image/webp\":\n\t\t\treturn \"webp\";\n\t\tcase \"image/gif\":\n\t\t\treturn \"gif\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction selectPreferredImageMimeType(mimeTypes: string[]): string | null {\n\tconst normalized = mimeTypes\n\t\t.map((t) => t.trim())\n\t\t.filter(Boolean)\n\t\t.map((t) => ({ raw: t, base: baseMimeType(t) }));\n\n\tfor (const preferred of SUPPORTED_IMAGE_MIME_TYPES) {\n\t\tconst match = normalized.find((t) => t.base === preferred);\n\t\tif (match) {\n\t\t\treturn match.raw;\n\t\t}\n\t}\n\n\tconst anyImage = normalized.find((t) => t.base.startsWith(\"image/\"));\n\treturn anyImage?.raw ?? null;\n}\n\nfunction isSupportedImageMimeType(mimeType: string): boolean {\n\tconst base = baseMimeType(mimeType);\n\treturn SUPPORTED_IMAGE_MIME_TYPES.some((t) => t === base);\n}\n\n/**\n * Convert unsupported image formats to PNG using Photon.\n * Returns null if conversion is unavailable or fails.\n */\nasync function convertToPng(bytes: Uint8Array): Promise<Uint8Array | null> {\n\tconst photon = await loadPhoton();\n\tif (!photon) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst image = photon.PhotonImage.new_from_byteslice(bytes);\n\t\ttry {\n\t\t\treturn image.get_bytes();\n\t\t} finally {\n\t\t\timage.free();\n\t\t}\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\toptions?: { timeoutMs?: number; maxBufferBytes?: number; env?: NodeJS.ProcessEnv },\n): { stdout: Buffer; ok: boolean } {\n\tconst timeoutMs = options?.timeoutMs ?? DEFAULT_READ_TIMEOUT_MS;\n\tconst maxBufferBytes = options?.maxBufferBytes ?? DEFAULT_MAX_BUFFER_BYTES;\n\n\tconst result = spawnSync(command, args, {\n\t\ttimeout: timeoutMs,\n\t\tmaxBuffer: maxBufferBytes,\n\t\tenv: options?.env,\n\t});\n\n\tif (result.error) {\n\t\treturn { ok: false, stdout: Buffer.alloc(0) };\n\t}\n\n\tif (result.status !== 0) {\n\t\treturn { ok: false, stdout: Buffer.alloc(0) };\n\t}\n\n\tconst stdout = Buffer.isBuffer(result.stdout)\n\t\t? result.stdout\n\t\t: Buffer.from(result.stdout ?? \"\", typeof result.stdout === \"string\" ? \"utf-8\" : undefined);\n\n\treturn { ok: true, stdout };\n}\n\nfunction readClipboardImageViaWlPaste(): ClipboardImage | null {\n\tconst list = runCommand(\"wl-paste\", [\"--list-types\"], { timeoutMs: DEFAULT_LIST_TIMEOUT_MS });\n\tif (!list.ok) {\n\t\treturn null;\n\t}\n\n\tconst types = list.stdout\n\t\t.toString(\"utf-8\")\n\t\t.split(/\\r?\\n/)\n\t\t.map((t) => t.trim())\n\t\t.filter(Boolean);\n\n\tconst selectedType = selectPreferredImageMimeType(types);\n\tif (!selectedType) {\n\t\treturn null;\n\t}\n\n\tconst data = runCommand(\"wl-paste\", [\"--type\", selectedType, \"--no-newline\"]);\n\tif (!data.ok || data.stdout.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn { bytes: data.stdout, mimeType: baseMimeType(selectedType) };\n}\n\nfunction isWSL(env: NodeJS.ProcessEnv = process.env): boolean {\n\tif (env.WSL_DISTRO_NAME || env.WSLENV) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tconst release = readFileSync(\"/proc/version\", \"utf-8\");\n\t\treturn /microsoft|wsl/i.test(release);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * On WSL, the Linux clipboard (Wayland/X11) does not receive image data from\n * Windows screenshots (Win+Shift+S). PowerShell can access the Windows clipboard\n * directly, so we use it as a fallback.\n */\nfunction readClipboardImageViaPowerShell(): ClipboardImage | null {\n\tconst tmpFile = join(tmpdir(), `pi-wsl-clip-${randomUUID()}.png`);\n\n\ttry {\n\t\tconst winPathResult = runCommand(\"wslpath\", [\"-w\", tmpFile], { timeoutMs: DEFAULT_LIST_TIMEOUT_MS });\n\t\tif (!winPathResult.ok) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst winPath = winPathResult.stdout.toString(\"utf-8\").trim();\n\t\tif (!winPath) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst psQuotedWinPath = winPath.replaceAll(\"'\", \"''\");\n\t\tconst psScript = [\n\t\t\t\"Add-Type -AssemblyName System.Windows.Forms\",\n\t\t\t\"Add-Type -AssemblyName System.Drawing\",\n\t\t\t`$path = '${psQuotedWinPath}'`,\n\t\t\t\"$img = [System.Windows.Forms.Clipboard]::GetImage()\",\n\t\t\t\"if ($img) { $img.Save($path, [System.Drawing.Imaging.ImageFormat]::Png); Write-Output 'ok' } else { Write-Output 'empty' }\",\n\t\t].join(\"; \");\n\n\t\tconst result = runCommand(\"powershell.exe\", [\"-NoProfile\", \"-Command\", psScript], {\n\t\t\ttimeoutMs: DEFAULT_POWERSHELL_TIMEOUT_MS,\n\t\t});\n\t\tif (!result.ok) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst output = result.stdout.toString(\"utf-8\").trim();\n\t\tif (output !== \"ok\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst bytes = readFileSync(tmpFile);\n\t\tif (bytes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { bytes: new Uint8Array(bytes), mimeType: \"image/png\" };\n\t} catch {\n\t\treturn null;\n\t} finally {\n\t\ttry {\n\t\t\tunlinkSync(tmpFile);\n\t\t} catch {\n\t\t\t// Ignore cleanup errors.\n\t\t}\n\t}\n}\n\nfunction readClipboardImageViaXclip(): ClipboardImage | null {\n\tconst targets = runCommand(\"xclip\", [\"-selection\", \"clipboard\", \"-t\", \"TARGETS\", \"-o\"], {\n\t\ttimeoutMs: DEFAULT_LIST_TIMEOUT_MS,\n\t});\n\n\tlet candidateTypes: string[] = [];\n\tif (targets.ok) {\n\t\tcandidateTypes = targets.stdout\n\t\t\t.toString(\"utf-8\")\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((t) => t.trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\tconst preferred = candidateTypes.length > 0 ? selectPreferredImageMimeType(candidateTypes) : null;\n\tconst tryTypes = preferred ? [preferred, ...SUPPORTED_IMAGE_MIME_TYPES] : [...SUPPORTED_IMAGE_MIME_TYPES];\n\n\tfor (const mimeType of tryTypes) {\n\t\tconst data = runCommand(\"xclip\", [\"-selection\", \"clipboard\", \"-t\", mimeType, \"-o\"]);\n\t\tif (data.ok && data.stdout.length > 0) {\n\t\t\treturn { bytes: data.stdout, mimeType: baseMimeType(mimeType) };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nasync function readClipboardImageViaNativeClipboard(): Promise<ClipboardImage | null> {\n\tif (!clipboard?.hasImage()) {\n\t\treturn null;\n\t}\n\n\tconst imageData = await clipboard.getImageBinary();\n\tif (!imageData || imageData.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst bytes = imageData instanceof Uint8Array ? imageData : Uint8Array.from(imageData);\n\treturn { bytes, mimeType: \"image/png\" };\n}\n\nexport async function readClipboardImage(options?: {\n\tenv?: NodeJS.ProcessEnv;\n\tplatform?: NodeJS.Platform;\n}): Promise<ClipboardImage | null> {\n\tconst env = options?.env ?? process.env;\n\tconst platform = options?.platform ?? process.platform;\n\n\tif (env.TERMUX_VERSION) {\n\t\treturn null;\n\t}\n\n\tlet image: ClipboardImage | null = null;\n\n\tif (platform === \"linux\") {\n\t\tconst wsl = isWSL(env);\n\t\tconst wayland = isWaylandSession(env);\n\n\t\tif (wayland || wsl) {\n\t\t\timage = readClipboardImageViaWlPaste() ?? readClipboardImageViaXclip();\n\t\t}\n\n\t\tif (!image && wsl) {\n\t\t\timage = readClipboardImageViaPowerShell();\n\t\t}\n\n\t\tif (!image && !wayland) {\n\t\t\timage = await readClipboardImageViaNativeClipboard();\n\t\t\tif (!image) {\n\t\t\t\timage = readClipboardImageViaXclip();\n\t\t\t}\n\t\t}\n\t} else {\n\t\timage = await readClipboardImageViaNativeClipboard();\n\t}\n\n\tif (!image) {\n\t\treturn null;\n\t}\n\n\t// Convert unsupported formats (e.g., BMP from WSLg) to PNG\n\tif (!isSupportedImageMimeType(image.mimeType)) {\n\t\tconst pngBytes = await convertToPng(image.bytes);\n\t\tif (!pngBytes) {\n\t\t\treturn null;\n\t\t}\n\t\treturn { bytes: pngBytes, mimeType: \"image/png\" };\n\t}\n\n\treturn image;\n}\n"]}
1
+ {"version":3,"file":"clipboard-image.js","sourceRoot":"","sources":["../../src/utils/clipboard-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,MAAM,0BAA0B,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAEnG,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAC3C,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACzD,QAAQ,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,WAAW;YACf,OAAO,KAAK,CAAC;QACd,KAAK,YAAY;YAChB,OAAO,KAAK,CAAC;QACd,KAAK,YAAY;YAChB,OAAO,MAAM,CAAC;QACf,KAAK,WAAW;YACf,OAAO,KAAK,CAAC;QACd;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAmB;IACxD,MAAM,UAAU,GAAG,SAAS;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElD,KAAK,MAAM,SAAS,IAAI,0BAA0B,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC3D,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,GAAG,CAAC;QAClB,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,OAAO,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC;YACJ,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACV,KAAK,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAClB,OAAe,EACf,IAAc,EACd,OAAkF;IAElF,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,uBAAuB,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,wBAAwB,CAAC;IAE3E,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACvC,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,cAAc;QACzB,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE;KAC3G,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,4BAA4B;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;SACvB,QAAQ,CAAC,OAAO,CAAC;SACjB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,YAAY,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,KAAK,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAClD,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,SAAS,+BAA+B;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,UAAU,EAAE,MAAM,CAAC,CAAC;IAElE,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG;YAChB,6CAA6C;YAC7C,uCAAuC;YACvC,YAAY,eAAe,GAAG;YAC9B,qDAAqD;YACrD,4HAA4H;SAC5H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;YACjF,SAAS,EAAE,6BAA6B;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,UAAU,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACR,yBAAyB;QAC1B,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,0BAA0B;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;QACvF,SAAS,EAAE,uBAAuB;KAClC,CAAC,CAAC;IAEH,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,cAAc,GAAG,OAAO,CAAC,MAAM;aAC7B,QAAQ,CAAC,OAAO,CAAC;aACjB,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,0BAA0B,CAAC,CAAC;IAE1G,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,KAAK,UAAU,oCAAoC;IAClD,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;IACnD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAGxC;IACA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAEvD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK,GAA0B,IAAI,CAAC;IAExC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YACpB,KAAK,GAAG,4BAA4B,EAAE,IAAI,0BAA0B,EAAE,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;YACnB,KAAK,GAAG,+BAA+B,EAAE,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,GAAG,MAAM,oCAAoC,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,KAAK,GAAG,0BAA0B,EAAE,CAAC;YACtC,CAAC;QACF,CAAC;IACF,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,MAAM,oCAAoC,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACb,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["import { spawnSync } from \"child_process\";\nimport { randomUUID } from \"crypto\";\nimport { readFileSync, unlinkSync } from \"fs\";\nimport { tmpdir } from \"os\";\nimport { join } from \"path\";\n\nimport { createChildProcessEnvironment } from \"./child-process.ts\";\nimport { clipboard } from \"./clipboard-native.ts\";\nimport { loadPhoton } from \"./photon.ts\";\n\nexport type ClipboardImage = {\n\tbytes: Uint8Array;\n\tmimeType: string;\n};\n\nconst SUPPORTED_IMAGE_MIME_TYPES = [\"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"] as const;\n\nconst DEFAULT_LIST_TIMEOUT_MS = 1000;\nconst DEFAULT_READ_TIMEOUT_MS = 3000;\nconst DEFAULT_POWERSHELL_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_BUFFER_BYTES = 50 * 1024 * 1024;\n\nexport function isWaylandSession(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn Boolean(env.WAYLAND_DISPLAY) || env.XDG_SESSION_TYPE === \"wayland\";\n}\n\nfunction baseMimeType(mimeType: string): string {\n\treturn mimeType.split(\";\")[0]?.trim().toLowerCase() ?? mimeType.toLowerCase();\n}\n\nexport function extensionForImageMimeType(mimeType: string): string | null {\n\tswitch (baseMimeType(mimeType)) {\n\t\tcase \"image/png\":\n\t\t\treturn \"png\";\n\t\tcase \"image/jpeg\":\n\t\t\treturn \"jpg\";\n\t\tcase \"image/webp\":\n\t\t\treturn \"webp\";\n\t\tcase \"image/gif\":\n\t\t\treturn \"gif\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction selectPreferredImageMimeType(mimeTypes: string[]): string | null {\n\tconst normalized = mimeTypes\n\t\t.map((t) => t.trim())\n\t\t.filter(Boolean)\n\t\t.map((t) => ({ raw: t, base: baseMimeType(t) }));\n\n\tfor (const preferred of SUPPORTED_IMAGE_MIME_TYPES) {\n\t\tconst match = normalized.find((t) => t.base === preferred);\n\t\tif (match) {\n\t\t\treturn match.raw;\n\t\t}\n\t}\n\n\tconst anyImage = normalized.find((t) => t.base.startsWith(\"image/\"));\n\treturn anyImage?.raw ?? null;\n}\n\nfunction isSupportedImageMimeType(mimeType: string): boolean {\n\tconst base = baseMimeType(mimeType);\n\treturn SUPPORTED_IMAGE_MIME_TYPES.some((t) => t === base);\n}\n\n/**\n * Convert unsupported image formats to PNG using Photon.\n * Returns null if conversion is unavailable or fails.\n */\nasync function convertToPng(bytes: Uint8Array): Promise<Uint8Array | null> {\n\tconst photon = await loadPhoton();\n\tif (!photon) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst image = photon.PhotonImage.new_from_byteslice(bytes);\n\t\ttry {\n\t\t\treturn image.get_bytes();\n\t\t} finally {\n\t\t\timage.free();\n\t\t}\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\toptions?: { timeoutMs?: number; maxBufferBytes?: number; env?: NodeJS.ProcessEnv },\n): { stdout: Buffer; ok: boolean } {\n\tconst timeoutMs = options?.timeoutMs ?? DEFAULT_READ_TIMEOUT_MS;\n\tconst maxBufferBytes = options?.maxBufferBytes ?? DEFAULT_MAX_BUFFER_BYTES;\n\n\tconst result = spawnSync(command, args, {\n\t\ttimeout: timeoutMs,\n\t\tmaxBuffer: maxBufferBytes,\n\t\tenv: options?.env ? createChildProcessEnvironment(undefined, options.env) : createChildProcessEnvironment(),\n\t});\n\n\tif (result.error) {\n\t\treturn { ok: false, stdout: Buffer.alloc(0) };\n\t}\n\n\tif (result.status !== 0) {\n\t\treturn { ok: false, stdout: Buffer.alloc(0) };\n\t}\n\n\tconst stdout = Buffer.isBuffer(result.stdout)\n\t\t? result.stdout\n\t\t: Buffer.from(result.stdout ?? \"\", typeof result.stdout === \"string\" ? \"utf-8\" : undefined);\n\n\treturn { ok: true, stdout };\n}\n\nfunction readClipboardImageViaWlPaste(): ClipboardImage | null {\n\tconst list = runCommand(\"wl-paste\", [\"--list-types\"], { timeoutMs: DEFAULT_LIST_TIMEOUT_MS });\n\tif (!list.ok) {\n\t\treturn null;\n\t}\n\n\tconst types = list.stdout\n\t\t.toString(\"utf-8\")\n\t\t.split(/\\r?\\n/)\n\t\t.map((t) => t.trim())\n\t\t.filter(Boolean);\n\n\tconst selectedType = selectPreferredImageMimeType(types);\n\tif (!selectedType) {\n\t\treturn null;\n\t}\n\n\tconst data = runCommand(\"wl-paste\", [\"--type\", selectedType, \"--no-newline\"]);\n\tif (!data.ok || data.stdout.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn { bytes: data.stdout, mimeType: baseMimeType(selectedType) };\n}\n\nfunction isWSL(env: NodeJS.ProcessEnv = process.env): boolean {\n\tif (env.WSL_DISTRO_NAME || env.WSLENV) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tconst release = readFileSync(\"/proc/version\", \"utf-8\");\n\t\treturn /microsoft|wsl/i.test(release);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * On WSL, the Linux clipboard (Wayland/X11) does not receive image data from\n * Windows screenshots (Win+Shift+S). PowerShell can access the Windows clipboard\n * directly, so we use it as a fallback.\n */\nfunction readClipboardImageViaPowerShell(): ClipboardImage | null {\n\tconst tmpFile = join(tmpdir(), `pi-wsl-clip-${randomUUID()}.png`);\n\n\ttry {\n\t\tconst winPathResult = runCommand(\"wslpath\", [\"-w\", tmpFile], { timeoutMs: DEFAULT_LIST_TIMEOUT_MS });\n\t\tif (!winPathResult.ok) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst winPath = winPathResult.stdout.toString(\"utf-8\").trim();\n\t\tif (!winPath) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst psQuotedWinPath = winPath.replaceAll(\"'\", \"''\");\n\t\tconst psScript = [\n\t\t\t\"Add-Type -AssemblyName System.Windows.Forms\",\n\t\t\t\"Add-Type -AssemblyName System.Drawing\",\n\t\t\t`$path = '${psQuotedWinPath}'`,\n\t\t\t\"$img = [System.Windows.Forms.Clipboard]::GetImage()\",\n\t\t\t\"if ($img) { $img.Save($path, [System.Drawing.Imaging.ImageFormat]::Png); Write-Output 'ok' } else { Write-Output 'empty' }\",\n\t\t].join(\"; \");\n\n\t\tconst result = runCommand(\"powershell.exe\", [\"-NoProfile\", \"-Command\", psScript], {\n\t\t\ttimeoutMs: DEFAULT_POWERSHELL_TIMEOUT_MS,\n\t\t});\n\t\tif (!result.ok) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst output = result.stdout.toString(\"utf-8\").trim();\n\t\tif (output !== \"ok\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst bytes = readFileSync(tmpFile);\n\t\tif (bytes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { bytes: new Uint8Array(bytes), mimeType: \"image/png\" };\n\t} catch {\n\t\treturn null;\n\t} finally {\n\t\ttry {\n\t\t\tunlinkSync(tmpFile);\n\t\t} catch {\n\t\t\t// Ignore cleanup errors.\n\t\t}\n\t}\n}\n\nfunction readClipboardImageViaXclip(): ClipboardImage | null {\n\tconst targets = runCommand(\"xclip\", [\"-selection\", \"clipboard\", \"-t\", \"TARGETS\", \"-o\"], {\n\t\ttimeoutMs: DEFAULT_LIST_TIMEOUT_MS,\n\t});\n\n\tlet candidateTypes: string[] = [];\n\tif (targets.ok) {\n\t\tcandidateTypes = targets.stdout\n\t\t\t.toString(\"utf-8\")\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((t) => t.trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\tconst preferred = candidateTypes.length > 0 ? selectPreferredImageMimeType(candidateTypes) : null;\n\tconst tryTypes = preferred ? [preferred, ...SUPPORTED_IMAGE_MIME_TYPES] : [...SUPPORTED_IMAGE_MIME_TYPES];\n\n\tfor (const mimeType of tryTypes) {\n\t\tconst data = runCommand(\"xclip\", [\"-selection\", \"clipboard\", \"-t\", mimeType, \"-o\"]);\n\t\tif (data.ok && data.stdout.length > 0) {\n\t\t\treturn { bytes: data.stdout, mimeType: baseMimeType(mimeType) };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nasync function readClipboardImageViaNativeClipboard(): Promise<ClipboardImage | null> {\n\tif (!clipboard?.hasImage()) {\n\t\treturn null;\n\t}\n\n\tconst imageData = await clipboard.getImageBinary();\n\tif (!imageData || imageData.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst bytes = imageData instanceof Uint8Array ? imageData : Uint8Array.from(imageData);\n\treturn { bytes, mimeType: \"image/png\" };\n}\n\nexport async function readClipboardImage(options?: {\n\tenv?: NodeJS.ProcessEnv;\n\tplatform?: NodeJS.Platform;\n}): Promise<ClipboardImage | null> {\n\tconst env = options?.env ?? process.env;\n\tconst platform = options?.platform ?? process.platform;\n\n\tif (env.TERMUX_VERSION) {\n\t\treturn null;\n\t}\n\n\tlet image: ClipboardImage | null = null;\n\n\tif (platform === \"linux\") {\n\t\tconst wsl = isWSL(env);\n\t\tconst wayland = isWaylandSession(env);\n\n\t\tif (wayland || wsl) {\n\t\t\timage = readClipboardImageViaWlPaste() ?? readClipboardImageViaXclip();\n\t\t}\n\n\t\tif (!image && wsl) {\n\t\t\timage = readClipboardImageViaPowerShell();\n\t\t}\n\n\t\tif (!image && !wayland) {\n\t\t\timage = await readClipboardImageViaNativeClipboard();\n\t\t\tif (!image) {\n\t\t\t\timage = readClipboardImageViaXclip();\n\t\t\t}\n\t\t}\n\t} else {\n\t\timage = await readClipboardImageViaNativeClipboard();\n\t}\n\n\tif (!image) {\n\t\treturn null;\n\t}\n\n\t// Convert unsupported formats (e.g., BMP from WSLg) to PNG\n\tif (!isSupportedImageMimeType(image.mimeType)) {\n\t\tconst pngBytes = await convertToPng(image.bytes);\n\t\tif (!pngBytes) {\n\t\t\treturn null;\n\t\t}\n\t\treturn { bytes: pngBytes, mimeType: \"image/png\" };\n\t}\n\n\treturn image;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAkCA,wBAAsB,iBAAiB,CACtC,MAAM,GAAE;IAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAgB,GACvD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGjE"}
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAoCA,wBAAsB,iBAAiB,CACtC,MAAM,GAAE;IAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAgB,GACvD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GjE"}
@@ -1,5 +1,6 @@
1
1
  import { execSync, spawn } from "child_process";
2
2
  import { platform } from "os";
3
+ import { createChildProcessEnvironment } from "./child-process.js";
3
4
  import { isWaylandSession } from "./clipboard-image.js";
4
5
  import { clipboard } from "./clipboard-native.js";
5
6
  function copyToX11Clipboard(options) {
@@ -58,7 +59,12 @@ export async function copyToClipboard(text) {
58
59
  if (copied && !remote) {
59
60
  return;
60
61
  }
61
- const options = { input: text, timeout: 5000, stdio: ["pipe", "ignore", "ignore"] };
62
+ const options = {
63
+ input: text,
64
+ timeout: 5000,
65
+ stdio: ["pipe", "ignore", "ignore"],
66
+ env: createChildProcessEnvironment(),
67
+ };
62
68
  if (!copied) {
63
69
  try {
64
70
  if (p === "darwin") {
@@ -87,11 +93,14 @@ export async function copyToClipboard(text) {
87
93
  if (isWayland && hasWaylandDisplay) {
88
94
  try {
89
95
  // Verify wl-copy exists (spawn errors are async and won't be caught)
90
- execSync("which wl-copy", { stdio: "ignore" });
96
+ execSync("which wl-copy", { stdio: "ignore", env: createChildProcessEnvironment() });
91
97
  // wl-copy with execSync hangs due to fork behavior; use spawn instead.
92
98
  // Await its terminal event so failures can fall through to X11 or OSC 52.
93
99
  const exitCode = await new Promise((resolve) => {
94
- const proc = spawn("wl-copy", [], { stdio: ["pipe", "ignore", "ignore"] });
100
+ const proc = spawn("wl-copy", [], {
101
+ stdio: ["pipe", "ignore", "ignore"],
102
+ env: createChildProcessEnvironment(),
103
+ });
95
104
  let settled = false;
96
105
  const finish = (code) => {
97
106
  if (settled)
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync, spawn } from \"child_process\";\nimport { platform } from \"os\";\nimport { isWaylandSession } from \"./clipboard-image.ts\";\nimport { clipboard } from \"./clipboard-native.ts\";\n\ntype NativeClipboardExecOptions = {\n\tinput: string;\n\ttimeout: number;\n\tstdio: [\"pipe\", \"ignore\", \"ignore\"];\n};\n\nfunction copyToX11Clipboard(options: NativeClipboardExecOptions): void {\n\ttry {\n\t\texecSync(\"xclip -selection clipboard\", options);\n\t} catch {\n\t\texecSync(\"xsel --clipboard --input\", options);\n\t}\n}\n\nconst MAX_OSC52_ENCODED_LENGTH = 100_000;\n\nfunction isRemoteSession(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn Boolean(env.SSH_CONNECTION || env.SSH_CLIENT || env.MOSH_CONNECTION);\n}\n\nfunction emitOsc52(text: string): boolean {\n\tconst encoded = Buffer.from(text).toString(\"base64\");\n\tif (encoded.length > MAX_OSC52_ENCODED_LENGTH) {\n\t\treturn false;\n\t}\n\tprocess.stdout.write(`\\x1b]52;c;${encoded}\\x07`);\n\treturn true;\n}\n\nexport async function readClipboardText(\n\tsource: { getText(): Promise<string> } | null = clipboard,\n): Promise<string | null> {\n\ttry {\n\t\tif (!source) return null;\n\t\treturn await source.getText();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport async function copyToClipboard(text: string): Promise<void> {\n\tlet copied = false;\n\n\tconst p = platform();\n\n\t// Prefer direct clipboard writes. Emitting OSC 52 first can make terminals\n\t// write the same native clipboard concurrently with the addon, and very large\n\t// OSC 52 payloads can desynchronize terminal rendering.\n\t//\n\t// On Linux, skip the native addon. The underlying `clipboard-rs` crate is\n\t// X11-only and does not retain selection ownership after `set_text`\n\t// resolves, so on Wayland-only compositors (Hyprland, Niri, ...) and even\n\t// some X11 sessions the call resolves successfully without populating the\n\t// clipboard. The platform tools below (wl-copy, xclip, xsel) properly\n\t// daemonize and keep ownership.\n\ttry {\n\t\tif (clipboard && p !== \"linux\") {\n\t\t\tawait clipboard.setText(text);\n\t\t\tcopied = true;\n\t\t}\n\t} catch {\n\t\t// Fall through to platform-specific clipboard tools.\n\t}\n\n\tconst remote = isRemoteSession();\n\tif (copied && !remote) {\n\t\treturn;\n\t}\n\n\tconst options: NativeClipboardExecOptions = { input: text, timeout: 5000, stdio: [\"pipe\", \"ignore\", \"ignore\"] };\n\n\tif (!copied) {\n\t\ttry {\n\t\t\tif (p === \"darwin\") {\n\t\t\t\texecSync(\"pbcopy\", options);\n\t\t\t\tcopied = true;\n\t\t\t} else if (p === \"win32\") {\n\t\t\t\texecSync(\"clip\", options);\n\t\t\t\tcopied = true;\n\t\t\t} else {\n\t\t\t\t// Linux. Try Termux, Wayland, or X11 clipboard tools.\n\t\t\t\tif (process.env.TERMUX_VERSION) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\texecSync(\"termux-clipboard-set\", options);\n\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Fall back to Wayland or X11 tools.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!copied) {\n\t\t\t\t\tconst hasWaylandDisplay = Boolean(process.env.WAYLAND_DISPLAY);\n\t\t\t\t\tconst hasX11Display = Boolean(process.env.DISPLAY);\n\t\t\t\t\tconst isWayland = isWaylandSession();\n\t\t\t\t\tif (isWayland && hasWaylandDisplay) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Verify wl-copy exists (spawn errors are async and won't be caught)\n\t\t\t\t\t\t\texecSync(\"which wl-copy\", { stdio: \"ignore\" });\n\t\t\t\t\t\t\t// wl-copy with execSync hangs due to fork behavior; use spawn instead.\n\t\t\t\t\t\t\t// Await its terminal event so failures can fall through to X11 or OSC 52.\n\t\t\t\t\t\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\t\t\t\t\t\tconst proc = spawn(\"wl-copy\", [], { stdio: [\"pipe\", \"ignore\", \"ignore\"] });\n\t\t\t\t\t\t\t\tlet settled = false;\n\t\t\t\t\t\t\t\tconst finish = (code: number) => {\n\t\t\t\t\t\t\t\t\tif (settled) return;\n\t\t\t\t\t\t\t\t\tsettled = true;\n\t\t\t\t\t\t\t\t\tresolve(code);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tproc.once(\"error\", () => finish(1));\n\t\t\t\t\t\t\t\tproc.once(\"close\", (code) => finish(code ?? 1));\n\t\t\t\t\t\t\t\tproc.stdin.on(\"error\", () => {});\n\t\t\t\t\t\t\t\tproc.stdin.end(text);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (exitCode === 0) copied = true;\n\t\t\t\t\t\t\telse if (hasX11Display) {\n\t\t\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tif (hasX11Display) {\n\t\t\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (hasX11Display) {\n\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fall through to OSC 52 fallback.\n\t\t}\n\t}\n\n\tif (remote || !copied) {\n\t\tconst osc52Copied = emitOsc52(text);\n\t\tcopied = copied || osc52Copied;\n\t}\n\n\tif (!copied) {\n\t\tthrow new Error(\"Failed to copy to clipboard\");\n\t}\n}\n"]}
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AASlD,SAAS,kBAAkB,CAAC,OAAmC;IAC9D,IAAI,CAAC;QACJ,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACR,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;AACF,CAAC;AAED,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEzC,SAAS,eAAe,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,MAAM,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,MAAM,GAA0C,SAAS;IAEzD,IAAI,CAAC;QACJ,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IACjD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IAErB,2EAA2E;IAC3E,8EAA8E;IAC9E,wDAAwD;IACxD,EAAE;IACF,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,gCAAgC;IAChC,IAAI,CAAC;QACJ,IAAI,SAAS,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,qDAAqD;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAA+B;QAC3C,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACnC,GAAG,EAAE,6BAA6B,EAAE;KACpC,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACpB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC5B,MAAM,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1B,MAAM,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,sDAAsD;gBACtD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACJ,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;wBAC1C,MAAM,GAAG,IAAI,CAAC;oBACf,CAAC;oBAAC,MAAM,CAAC;wBACR,qCAAqC;oBACtC,CAAC;gBACF,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACnD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;oBACrC,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;wBACpC,IAAI,CAAC;4BACJ,qEAAqE;4BACrE,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,6BAA6B,EAAE,EAAE,CAAC,CAAC;4BACrF,uEAAuE;4BACvE,0EAA0E;4BAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gCACtD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE;oCACjC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;oCACnC,GAAG,EAAE,6BAA6B,EAAE;iCACpC,CAAC,CAAC;gCACH,IAAI,OAAO,GAAG,KAAK,CAAC;gCACpB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;oCAC/B,IAAI,OAAO;wCAAE,OAAO;oCACpB,OAAO,GAAG,IAAI,CAAC;oCACf,OAAO,CAAC,IAAI,CAAC,CAAC;gCACf,CAAC,CAAC;gCACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gCACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gCAChD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gCACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BACtB,CAAC,CAAC,CAAC;4BACH,IAAI,QAAQ,KAAK,CAAC;gCAAE,MAAM,GAAG,IAAI,CAAC;iCAC7B,IAAI,aAAa,EAAE,CAAC;gCACxB,kBAAkB,CAAC,OAAO,CAAC,CAAC;gCAC5B,MAAM,GAAG,IAAI,CAAC;4BACf,CAAC;wBACF,CAAC;wBAAC,MAAM,CAAC;4BACR,IAAI,aAAa,EAAE,CAAC;gCACnB,kBAAkB,CAAC,OAAO,CAAC,CAAC;gCAC5B,MAAM,GAAG,IAAI,CAAC;4BACf,CAAC;wBACF,CAAC;oBACF,CAAC;yBAAM,IAAI,aAAa,EAAE,CAAC;wBAC1B,kBAAkB,CAAC,OAAO,CAAC,CAAC;wBAC5B,MAAM,GAAG,IAAI,CAAC;oBACf,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,mCAAmC;QACpC,CAAC;IACF,CAAC;IAED,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;AACF,CAAC","sourcesContent":["import { execSync, spawn } from \"child_process\";\nimport { platform } from \"os\";\nimport { createChildProcessEnvironment } from \"./child-process.ts\";\nimport { isWaylandSession } from \"./clipboard-image.ts\";\nimport { clipboard } from \"./clipboard-native.ts\";\n\ntype NativeClipboardExecOptions = {\n\tinput: string;\n\ttimeout: number;\n\tstdio: [\"pipe\", \"ignore\", \"ignore\"];\n\tenv: NodeJS.ProcessEnv;\n};\n\nfunction copyToX11Clipboard(options: NativeClipboardExecOptions): void {\n\ttry {\n\t\texecSync(\"xclip -selection clipboard\", options);\n\t} catch {\n\t\texecSync(\"xsel --clipboard --input\", options);\n\t}\n}\n\nconst MAX_OSC52_ENCODED_LENGTH = 100_000;\n\nfunction isRemoteSession(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn Boolean(env.SSH_CONNECTION || env.SSH_CLIENT || env.MOSH_CONNECTION);\n}\n\nfunction emitOsc52(text: string): boolean {\n\tconst encoded = Buffer.from(text).toString(\"base64\");\n\tif (encoded.length > MAX_OSC52_ENCODED_LENGTH) {\n\t\treturn false;\n\t}\n\tprocess.stdout.write(`\\x1b]52;c;${encoded}\\x07`);\n\treturn true;\n}\n\nexport async function readClipboardText(\n\tsource: { getText(): Promise<string> } | null = clipboard,\n): Promise<string | null> {\n\ttry {\n\t\tif (!source) return null;\n\t\treturn await source.getText();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport async function copyToClipboard(text: string): Promise<void> {\n\tlet copied = false;\n\n\tconst p = platform();\n\n\t// Prefer direct clipboard writes. Emitting OSC 52 first can make terminals\n\t// write the same native clipboard concurrently with the addon, and very large\n\t// OSC 52 payloads can desynchronize terminal rendering.\n\t//\n\t// On Linux, skip the native addon. The underlying `clipboard-rs` crate is\n\t// X11-only and does not retain selection ownership after `set_text`\n\t// resolves, so on Wayland-only compositors (Hyprland, Niri, ...) and even\n\t// some X11 sessions the call resolves successfully without populating the\n\t// clipboard. The platform tools below (wl-copy, xclip, xsel) properly\n\t// daemonize and keep ownership.\n\ttry {\n\t\tif (clipboard && p !== \"linux\") {\n\t\t\tawait clipboard.setText(text);\n\t\t\tcopied = true;\n\t\t}\n\t} catch {\n\t\t// Fall through to platform-specific clipboard tools.\n\t}\n\n\tconst remote = isRemoteSession();\n\tif (copied && !remote) {\n\t\treturn;\n\t}\n\n\tconst options: NativeClipboardExecOptions = {\n\t\tinput: text,\n\t\ttimeout: 5000,\n\t\tstdio: [\"pipe\", \"ignore\", \"ignore\"],\n\t\tenv: createChildProcessEnvironment(),\n\t};\n\n\tif (!copied) {\n\t\ttry {\n\t\t\tif (p === \"darwin\") {\n\t\t\t\texecSync(\"pbcopy\", options);\n\t\t\t\tcopied = true;\n\t\t\t} else if (p === \"win32\") {\n\t\t\t\texecSync(\"clip\", options);\n\t\t\t\tcopied = true;\n\t\t\t} else {\n\t\t\t\t// Linux. Try Termux, Wayland, or X11 clipboard tools.\n\t\t\t\tif (process.env.TERMUX_VERSION) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\texecSync(\"termux-clipboard-set\", options);\n\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Fall back to Wayland or X11 tools.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!copied) {\n\t\t\t\t\tconst hasWaylandDisplay = Boolean(process.env.WAYLAND_DISPLAY);\n\t\t\t\t\tconst hasX11Display = Boolean(process.env.DISPLAY);\n\t\t\t\t\tconst isWayland = isWaylandSession();\n\t\t\t\t\tif (isWayland && hasWaylandDisplay) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Verify wl-copy exists (spawn errors are async and won't be caught)\n\t\t\t\t\t\t\texecSync(\"which wl-copy\", { stdio: \"ignore\", env: createChildProcessEnvironment() });\n\t\t\t\t\t\t\t// wl-copy with execSync hangs due to fork behavior; use spawn instead.\n\t\t\t\t\t\t\t// Await its terminal event so failures can fall through to X11 or OSC 52.\n\t\t\t\t\t\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\t\t\t\t\t\tconst proc = spawn(\"wl-copy\", [], {\n\t\t\t\t\t\t\t\t\tstdio: [\"pipe\", \"ignore\", \"ignore\"],\n\t\t\t\t\t\t\t\t\tenv: createChildProcessEnvironment(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlet settled = false;\n\t\t\t\t\t\t\t\tconst finish = (code: number) => {\n\t\t\t\t\t\t\t\t\tif (settled) return;\n\t\t\t\t\t\t\t\t\tsettled = true;\n\t\t\t\t\t\t\t\t\tresolve(code);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tproc.once(\"error\", () => finish(1));\n\t\t\t\t\t\t\t\tproc.once(\"close\", (code) => finish(code ?? 1));\n\t\t\t\t\t\t\t\tproc.stdin.on(\"error\", () => {});\n\t\t\t\t\t\t\t\tproc.stdin.end(text);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (exitCode === 0) copied = true;\n\t\t\t\t\t\t\telse if (hasX11Display) {\n\t\t\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tif (hasX11Display) {\n\t\t\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (hasX11Display) {\n\t\t\t\t\t\tcopyToX11Clipboard(options);\n\t\t\t\t\t\tcopied = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fall through to OSC 52 fallback.\n\t\t}\n\t}\n\n\tif (remote || !copied) {\n\t\tconst osc52Copied = emitOsc52(text);\n\t\tcopied = copied || osc52Copied;\n\t}\n\n\tif (!copied) {\n\t\tthrow new Error(\"Failed to copy to clipboard\");\n\t}\n}\n"]}
@@ -0,0 +1,23 @@
1
+ type FetchInput = Parameters<typeof fetch>[0];
2
+ export interface FetchRetryOptions {
3
+ /** Number of additional attempts after the initial request. Defaults to two. */
4
+ maxRetries?: number;
5
+ /** Retry transient HTTP responses as well as transport failures. Defaults to true. */
6
+ retryOnStatus?: boolean;
7
+ /** Overall timeout shared by all attempts. */
8
+ timeoutMs?: number;
9
+ }
10
+ /**
11
+ * Fetch a management HTTP resource with a bounded immediate retry.
12
+ *
13
+ * This is intentionally a transport-level helper for idempotent management
14
+ * requests (version checks, catalogs, and downloads). It must not be used for
15
+ * agent/model operations: those can fail after the HTTP request starts and are
16
+ * retried by their semantic caller instead.
17
+ *
18
+ * Caller cancellation is terminal. When timeoutMs is supplied, it is the
19
+ * overall time budget shared by all attempts.
20
+ */
21
+ export declare function fetchWithRetry(input: FetchInput, init?: RequestInit | undefined, options?: FetchRetryOptions): Promise<Response>;
22
+ export {};
23
+ //# sourceMappingURL=management-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-http.d.ts","sourceRoot":"","sources":["../../src/utils/management-http.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IACjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CACnC,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE,WAAW,GAAG,SAAqB,EACzC,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAsCnB"}
@@ -0,0 +1,50 @@
1
+ const RETRYABLE_STATUS_CODES = new Set([408, 425, 429, 500, 502, 503, 504]);
2
+ /**
3
+ * Fetch a management HTTP resource with a bounded immediate retry.
4
+ *
5
+ * This is intentionally a transport-level helper for idempotent management
6
+ * requests (version checks, catalogs, and downloads). It must not be used for
7
+ * agent/model operations: those can fail after the HTTP request starts and are
8
+ * retried by their semantic caller instead.
9
+ *
10
+ * Caller cancellation is terminal. When timeoutMs is supplied, it is the
11
+ * overall time budget shared by all attempts.
12
+ */
13
+ export async function fetchWithRetry(input, init = undefined, options = {}) {
14
+ const maxRetries = options.maxRetries === undefined || !Number.isFinite(options.maxRetries)
15
+ ? 2
16
+ : Math.max(0, Math.floor(options.maxRetries));
17
+ const retryOnStatus = options.retryOnStatus ?? true;
18
+ const parentSignal = init?.signal;
19
+ const timeoutSignal = options.timeoutMs !== undefined && options.timeoutMs > 0 ? AbortSignal.timeout(options.timeoutMs) : undefined;
20
+ const signal = timeoutSignal
21
+ ? parentSignal
22
+ ? AbortSignal.any([parentSignal, timeoutSignal])
23
+ : timeoutSignal
24
+ : parentSignal;
25
+ for (let attempt = 0;; attempt += 1) {
26
+ signal?.throwIfAborted();
27
+ try {
28
+ const response = await fetch(input, signal ? { ...init, signal } : init);
29
+ const shouldRetry = retryOnStatus && RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxRetries;
30
+ if (!shouldRetry)
31
+ return response;
32
+ try {
33
+ await response.body?.cancel();
34
+ }
35
+ catch {
36
+ // The response is being discarded before a retry. Nothing useful remains
37
+ // to do if cancelling its body also fails.
38
+ }
39
+ }
40
+ catch (error) {
41
+ if (parentSignal?.aborted ||
42
+ timeoutSignal?.aborted ||
43
+ (error instanceof Error && error.name === "AbortError" && timeoutSignal === undefined) ||
44
+ attempt >= maxRetries) {
45
+ throw error;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=management-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-http.js","sourceRoot":"","sources":["../../src/utils/management-http.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAW5E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,KAAiB,EACjB,IAAI,GAA4B,SAAS,EACzC,OAAO,GAAsB,EAAE;IAE/B,MAAM,UAAU,GACf,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,EAAE,MAAM,CAAC;IAClC,MAAM,aAAa,GAClB,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,MAAM,MAAM,GAAG,aAAa;QAC3B,CAAC,CAAC,YAAY;YACb,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAChD,CAAC,CAAC,aAAa;QAChB,CAAC,CAAC,YAAY,CAAC;IAEhB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,WAAW,GAAG,aAAa,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,UAAU,CAAC;YACzG,IAAI,CAAC,WAAW;gBAAE,OAAO,QAAQ,CAAC;YAClC,IAAI,CAAC;gBACJ,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACR,yEAAyE;gBACzE,2CAA2C;YAC5C,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IACC,YAAY,EAAE,OAAO;gBACrB,aAAa,EAAE,OAAO;gBACtB,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,aAAa,KAAK,SAAS,CAAC;gBACtF,OAAO,IAAI,UAAU,EACpB,CAAC;gBACF,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["type FetchInput = Parameters<typeof fetch>[0];\n\nconst RETRYABLE_STATUS_CODES = new Set([408, 425, 429, 500, 502, 503, 504]);\n\nexport interface FetchRetryOptions {\n\t/** Number of additional attempts after the initial request. Defaults to two. */\n\tmaxRetries?: number;\n\t/** Retry transient HTTP responses as well as transport failures. Defaults to true. */\n\tretryOnStatus?: boolean;\n\t/** Overall timeout shared by all attempts. */\n\ttimeoutMs?: number;\n}\n\n/**\n * Fetch a management HTTP resource with a bounded immediate retry.\n *\n * This is intentionally a transport-level helper for idempotent management\n * requests (version checks, catalogs, and downloads). It must not be used for\n * agent/model operations: those can fail after the HTTP request starts and are\n * retried by their semantic caller instead.\n *\n * Caller cancellation is terminal. When timeoutMs is supplied, it is the\n * overall time budget shared by all attempts.\n */\nexport async function fetchWithRetry(\n\tinput: FetchInput,\n\tinit: RequestInit | undefined = undefined,\n\toptions: FetchRetryOptions = {},\n): Promise<Response> {\n\tconst maxRetries =\n\t\toptions.maxRetries === undefined || !Number.isFinite(options.maxRetries)\n\t\t\t? 2\n\t\t\t: Math.max(0, Math.floor(options.maxRetries));\n\tconst retryOnStatus = options.retryOnStatus ?? true;\n\tconst parentSignal = init?.signal;\n\tconst timeoutSignal =\n\t\toptions.timeoutMs !== undefined && options.timeoutMs > 0 ? AbortSignal.timeout(options.timeoutMs) : undefined;\n\tconst signal = timeoutSignal\n\t\t? parentSignal\n\t\t\t? AbortSignal.any([parentSignal, timeoutSignal])\n\t\t\t: timeoutSignal\n\t\t: parentSignal;\n\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tsignal?.throwIfAborted();\n\t\ttry {\n\t\t\tconst response = await fetch(input, signal ? { ...init, signal } : init);\n\t\t\tconst shouldRetry = retryOnStatus && RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxRetries;\n\t\t\tif (!shouldRetry) return response;\n\t\t\ttry {\n\t\t\t\tawait response.body?.cancel();\n\t\t\t} catch {\n\t\t\t\t// The response is being discarded before a retry. Nothing useful remains\n\t\t\t\t// to do if cancelling its body also fails.\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tparentSignal?.aborted ||\n\t\t\t\ttimeoutSignal?.aborted ||\n\t\t\t\t(error instanceof Error && error.name === \"AbortError\" && timeoutSignal === undefined) ||\n\t\t\t\tattempt >= maxRetries\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/utils/open-browser.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAchD"}
1
+ {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/utils/open-browser.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAchD"}
@@ -1,4 +1,5 @@
1
1
  import { spawn } from "node:child_process";
2
+ import { createChildProcessEnvironment } from "./child-process.js";
2
3
  /**
3
4
  * Open a URL or file in the platform browser/default handler.
4
5
  *
@@ -15,7 +16,7 @@ export function openBrowser(target) {
15
16
  // spawn reports launcher failures (for example, missing xdg-open) via an
16
17
  // error event. Browser launch is best-effort: callers still present the target
17
18
  // to the user, so keep the launcher failure from becoming a process crash.
18
- spawn(cmd, args, { stdio: "ignore", detached: true })
19
+ spawn(cmd, args, { stdio: "ignore", detached: true, env: createChildProcessEnvironment() })
19
20
  .on("error", () => { })
20
21
  .unref();
21
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/utils/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAChB,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC5B,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC7B,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5B,yEAAyE;IACzE,+EAA+E;IAC/E,2EAA2E;IAC3E,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACnD,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC;SACrB,KAAK,EAAE,CAAC;AACX,CAAC","sourcesContent":["import { spawn } from \"node:child_process\";\n\n/**\n * Open a URL or file in the platform browser/default handler.\n *\n * This intentionally never invokes a shell. On Windows, do not use\n * `cmd /c start`: cmd.exe re-parses metacharacters (&, |, ^, ...) before\n * `start` runs, which would make attacker-controlled URLs injectable.\n */\nexport function openBrowser(target: string): void {\n\tconst [cmd, args]: [string, string[]] =\n\t\tprocess.platform === \"darwin\"\n\t\t\t? [\"open\", [target]]\n\t\t\t: process.platform === \"win32\"\n\t\t\t\t? [\"rundll32\", [\"url.dll,FileProtocolHandler\", target]]\n\t\t\t\t: [\"xdg-open\", [target]];\n\n\t// spawn reports launcher failures (for example, missing xdg-open) via an\n\t// error event. Browser launch is best-effort: callers still present the target\n\t// to the user, so keep the launcher failure from becoming a process crash.\n\tspawn(cmd, args, { stdio: \"ignore\", detached: true })\n\t\t.on(\"error\", () => {})\n\t\t.unref();\n}\n"]}
1
+ {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/utils/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAChB,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC5B,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC7B,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5B,yEAAyE;IACzE,+EAA+E;IAC/E,2EAA2E;IAC3E,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,6BAA6B,EAAE,EAAE,CAAC;SACzF,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC;SACrB,KAAK,EAAE,CAAC;AACX,CAAC","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { createChildProcessEnvironment } from \"./child-process.ts\";\n\n/**\n * Open a URL or file in the platform browser/default handler.\n *\n * This intentionally never invokes a shell. On Windows, do not use\n * `cmd /c start`: cmd.exe re-parses metacharacters (&, |, ^, ...) before\n * `start` runs, which would make attacker-controlled URLs injectable.\n */\nexport function openBrowser(target: string): void {\n\tconst [cmd, args]: [string, string[]] =\n\t\tprocess.platform === \"darwin\"\n\t\t\t? [\"open\", [target]]\n\t\t\t: process.platform === \"win32\"\n\t\t\t\t? [\"rundll32\", [\"url.dll,FileProtocolHandler\", target]]\n\t\t\t\t: [\"xdg-open\", [target]];\n\n\t// spawn reports launcher failures (for example, missing xdg-open) via an\n\t// error event. Browser launch is best-effort: callers still present the target\n\t// to the user, so keep the launcher failure from becoming a process crash.\n\tspawn(cmd, args, { stdio: \"ignore\", detached: true, env: createChildProcessEnvironment() })\n\t\t.on(\"error\", () => {})\n\t\t.unref();\n}\n"]}
@@ -24,6 +24,8 @@ export declare function canonicalizePath(path: string): string;
24
24
  * are considered local.
25
25
  */
26
26
  export declare function isLocalPath(value: string): boolean;
27
+ /** Convert Git Bash, MSYS, Cygwin, and WSL drive paths to a form native Windows APIs accept. */
28
+ export declare function normalizeWindowsShellPath(filePath: string): string;
27
29
  export declare function normalizePath(input: string, options?: PathInputOptions): string;
28
30
  export declare function resolvePath(input: string, baseDir?: string, options?: PathInputOptions): string;
29
31
  export declare function getCwdRelativePath(filePath: string, cwd: string): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAChC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAclD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAuBnF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAIlH;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASpF;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGvF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAe7D"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAChC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAclD;AAED,gGAAgG;AAChG,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA0BnF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAIlH;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASpF;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGvF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAe7D"}
@@ -48,6 +48,16 @@ export function isLocalPath(value) {
48
48
  }
49
49
  return true;
50
50
  }
51
+ /** Convert Git Bash, MSYS, Cygwin, and WSL drive paths to a form native Windows APIs accept. */
52
+ export function normalizeWindowsShellPath(filePath) {
53
+ if (!filePath.startsWith("/") || filePath.startsWith("//") || filePath.includes("\\"))
54
+ return filePath;
55
+ const match = filePath.match(/^\/(?:mnt\/|cygdrive\/)?([a-z])(?:\/(.*))?$/i);
56
+ if (!match)
57
+ return filePath;
58
+ const suffix = match[2]?.replaceAll("/", "\\");
59
+ return `${match[1].toUpperCase()}:\\${suffix ?? ""}`;
60
+ }
51
61
  export function normalizePath(input, options = {}) {
52
62
  let normalized = options.trim ? input.trim() : input;
53
63
  if (options.normalizeUnicodeSpaces) {
@@ -56,6 +66,9 @@ export function normalizePath(input, options = {}) {
56
66
  if (options.stripAtPrefix && normalized.startsWith("@")) {
57
67
  normalized = normalized.slice(1);
58
68
  }
69
+ if (process.platform === "win32") {
70
+ normalized = normalizeWindowsShellPath(normalized);
71
+ }
59
72
  if (options.expandTilde ?? true) {
60
73
  const home = options.homeDir ?? getHomeDir();
61
74
  if (normalized === "~")
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { realpathSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve as nodeResolvePath, relative, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { spawnProcessSync } from \"./child-process.ts\";\n\nconst UNICODE_SPACES = /[\\u00A0\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\n\nexport interface PathInputOptions {\n\t/** Trim leading/trailing whitespace before normalization. */\n\ttrim?: boolean;\n\t/** Expand leading `~` to a home directory. Defaults to true. */\n\texpandTilde?: boolean;\n\t/** Home directory used for `~` expansion. Defaults to the live home environment or `os.homedir()`. */\n\thomeDir?: string;\n\t/** Strip a leading `@`, used for CLI @file paths. */\n\tstripAtPrefix?: boolean;\n\t/** Normalize unicode space variants to regular spaces. */\n\tnormalizeUnicodeSpaces?: boolean;\n}\n\nexport function getHomeDir(): string {\n\tif (process.platform === \"win32\") {\n\t\tif (process.env.USERPROFILE) return process.env.USERPROFILE;\n\t\tif (process.env.HOMEDRIVE && process.env.HOMEPATH) return `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`;\n\t\tif (process.env.HOME) return process.env.HOME;\n\t\treturn homedir();\n\t}\n\treturn process.env.HOME || process.env.USERPROFILE || homedir();\n}\n\n/**\n * Resolve a path to its canonical (real) form, following symlinks.\n * Falls back to the raw path if resolution fails (e.g. the target does\n * not exist yet), so that callers never crash on missing filesystem\n * entries.\n */\nexport function canonicalizePath(path: string): string {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\treturn path;\n\t}\n}\n\n/**\n * Returns true if the value is NOT a package source (npm:, git:, etc.)\n * or a remote URL protocol. Bare names, relative paths, and file: URLs\n * are considered local.\n */\nexport function isLocalPath(value: string): boolean {\n\tconst trimmed = value.trim();\n\t// Known non-local prefixes. file: URLs are local paths and are intentionally resolved by resolvePath().\n\tif (\n\t\ttrimmed.startsWith(\"npm:\") ||\n\t\ttrimmed.startsWith(\"git:\") ||\n\t\ttrimmed.startsWith(\"github:\") ||\n\t\ttrimmed.startsWith(\"http:\") ||\n\t\ttrimmed.startsWith(\"https:\") ||\n\t\ttrimmed.startsWith(\"ssh:\")\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function normalizePath(input: string, options: PathInputOptions = {}): string {\n\tlet normalized = options.trim ? input.trim() : input;\n\tif (options.normalizeUnicodeSpaces) {\n\t\tnormalized = normalized.replace(UNICODE_SPACES, \" \");\n\t}\n\tif (options.stripAtPrefix && normalized.startsWith(\"@\")) {\n\t\tnormalized = normalized.slice(1);\n\t}\n\n\tif (options.expandTilde ?? true) {\n\t\tconst home = options.homeDir ?? getHomeDir();\n\t\tif (normalized === \"~\") return home;\n\t\tif (normalized.startsWith(\"~/\") || (process.platform === \"win32\" && normalized.startsWith(\"~\\\\\"))) {\n\t\t\treturn join(home, normalized.slice(2));\n\t\t}\n\t}\n\n\tif (/^file:\\/\\//.test(normalized)) {\n\t\tdecodeURI(normalized);\n\t\treturn fileURLToPath(normalized);\n\t}\n\n\treturn normalized;\n}\n\nexport function resolvePath(input: string, baseDir: string = process.cwd(), options: PathInputOptions = {}): string {\n\tconst normalized = normalizePath(input, options);\n\tconst normalizedBaseDir = normalizePath(baseDir);\n\treturn isAbsolute(normalized) ? nodeResolvePath(normalized) : nodeResolvePath(normalizedBaseDir, normalized);\n}\n\nexport function getCwdRelativePath(filePath: string, cwd: string): string | undefined {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedPath = resolvePath(filePath, resolvedCwd);\n\tconst relativePath = relative(resolvedCwd, resolvedPath);\n\tconst isInsideCwd =\n\t\trelativePath === \"\" ||\n\t\t(relativePath !== \"..\" && !relativePath.startsWith(`..${sep}`) && !isAbsolute(relativePath));\n\n\treturn isInsideCwd ? relativePath || \".\" : undefined;\n}\n\nexport function formatPathRelativeToCwdOrAbsolute(filePath: string, cwd: string): string {\n\tconst absolutePath = resolvePath(filePath, cwd);\n\treturn (getCwdRelativePath(absolutePath, cwd) ?? absolutePath).split(sep).join(\"/\");\n}\n\nexport function markPathIgnoredByCloudSync(path: string): void {\n\tconst attrs =\n\t\tprocess.platform === \"darwin\"\n\t\t\t? [\"com.dropbox.ignored\", \"com.apple.fileprovider.ignore#P\"]\n\t\t\t: process.platform === \"linux\"\n\t\t\t\t? [\"user.com.dropbox.ignored\"]\n\t\t\t\t: [];\n\n\tfor (const attr of attrs) {\n\t\tif (process.platform === \"darwin\") {\n\t\t\tspawnProcessSync(\"xattr\", [\"-w\", attr, \"1\", path], { encoding: \"utf-8\", stdio: \"ignore\" });\n\t\t} else {\n\t\t\tspawnProcessSync(\"setfattr\", [\"-n\", attr, \"-v\", \"1\", path], { encoding: \"utf-8\", stdio: \"ignore\" });\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { realpathSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve as nodeResolvePath, relative, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { spawnProcessSync } from \"./child-process.ts\";\n\nconst UNICODE_SPACES = /[\\u00A0\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\n\nexport interface PathInputOptions {\n\t/** Trim leading/trailing whitespace before normalization. */\n\ttrim?: boolean;\n\t/** Expand leading `~` to a home directory. Defaults to true. */\n\texpandTilde?: boolean;\n\t/** Home directory used for `~` expansion. Defaults to the live home environment or `os.homedir()`. */\n\thomeDir?: string;\n\t/** Strip a leading `@`, used for CLI @file paths. */\n\tstripAtPrefix?: boolean;\n\t/** Normalize unicode space variants to regular spaces. */\n\tnormalizeUnicodeSpaces?: boolean;\n}\n\nexport function getHomeDir(): string {\n\tif (process.platform === \"win32\") {\n\t\tif (process.env.USERPROFILE) return process.env.USERPROFILE;\n\t\tif (process.env.HOMEDRIVE && process.env.HOMEPATH) return `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`;\n\t\tif (process.env.HOME) return process.env.HOME;\n\t\treturn homedir();\n\t}\n\treturn process.env.HOME || process.env.USERPROFILE || homedir();\n}\n\n/**\n * Resolve a path to its canonical (real) form, following symlinks.\n * Falls back to the raw path if resolution fails (e.g. the target does\n * not exist yet), so that callers never crash on missing filesystem\n * entries.\n */\nexport function canonicalizePath(path: string): string {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\treturn path;\n\t}\n}\n\n/**\n * Returns true if the value is NOT a package source (npm:, git:, etc.)\n * or a remote URL protocol. Bare names, relative paths, and file: URLs\n * are considered local.\n */\nexport function isLocalPath(value: string): boolean {\n\tconst trimmed = value.trim();\n\t// Known non-local prefixes. file: URLs are local paths and are intentionally resolved by resolvePath().\n\tif (\n\t\ttrimmed.startsWith(\"npm:\") ||\n\t\ttrimmed.startsWith(\"git:\") ||\n\t\ttrimmed.startsWith(\"github:\") ||\n\t\ttrimmed.startsWith(\"http:\") ||\n\t\ttrimmed.startsWith(\"https:\") ||\n\t\ttrimmed.startsWith(\"ssh:\")\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/** Convert Git Bash, MSYS, Cygwin, and WSL drive paths to a form native Windows APIs accept. */\nexport function normalizeWindowsShellPath(filePath: string): string {\n\tif (!filePath.startsWith(\"/\") || filePath.startsWith(\"//\") || filePath.includes(\"\\\\\")) return filePath;\n\tconst match = filePath.match(/^\\/(?:mnt\\/|cygdrive\\/)?([a-z])(?:\\/(.*))?$/i);\n\tif (!match) return filePath;\n\tconst suffix = match[2]?.replaceAll(\"/\", \"\\\\\");\n\treturn `${match[1].toUpperCase()}:\\\\${suffix ?? \"\"}`;\n}\n\nexport function normalizePath(input: string, options: PathInputOptions = {}): string {\n\tlet normalized = options.trim ? input.trim() : input;\n\tif (options.normalizeUnicodeSpaces) {\n\t\tnormalized = normalized.replace(UNICODE_SPACES, \" \");\n\t}\n\tif (options.stripAtPrefix && normalized.startsWith(\"@\")) {\n\t\tnormalized = normalized.slice(1);\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalized = normalizeWindowsShellPath(normalized);\n\t}\n\n\tif (options.expandTilde ?? true) {\n\t\tconst home = options.homeDir ?? getHomeDir();\n\t\tif (normalized === \"~\") return home;\n\t\tif (normalized.startsWith(\"~/\") || (process.platform === \"win32\" && normalized.startsWith(\"~\\\\\"))) {\n\t\t\treturn join(home, normalized.slice(2));\n\t\t}\n\t}\n\n\tif (/^file:\\/\\//.test(normalized)) {\n\t\tdecodeURI(normalized);\n\t\treturn fileURLToPath(normalized);\n\t}\n\n\treturn normalized;\n}\n\nexport function resolvePath(input: string, baseDir: string = process.cwd(), options: PathInputOptions = {}): string {\n\tconst normalized = normalizePath(input, options);\n\tconst normalizedBaseDir = normalizePath(baseDir);\n\treturn isAbsolute(normalized) ? nodeResolvePath(normalized) : nodeResolvePath(normalizedBaseDir, normalized);\n}\n\nexport function getCwdRelativePath(filePath: string, cwd: string): string | undefined {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedPath = resolvePath(filePath, resolvedCwd);\n\tconst relativePath = relative(resolvedCwd, resolvedPath);\n\tconst isInsideCwd =\n\t\trelativePath === \"\" ||\n\t\t(relativePath !== \"..\" && !relativePath.startsWith(`..${sep}`) && !isAbsolute(relativePath));\n\n\treturn isInsideCwd ? relativePath || \".\" : undefined;\n}\n\nexport function formatPathRelativeToCwdOrAbsolute(filePath: string, cwd: string): string {\n\tconst absolutePath = resolvePath(filePath, cwd);\n\treturn (getCwdRelativePath(absolutePath, cwd) ?? absolutePath).split(sep).join(\"/\");\n}\n\nexport function markPathIgnoredByCloudSync(path: string): void {\n\tconst attrs =\n\t\tprocess.platform === \"darwin\"\n\t\t\t? [\"com.dropbox.ignored\", \"com.apple.fileprovider.ignore#P\"]\n\t\t\t: process.platform === \"linux\"\n\t\t\t\t? [\"user.com.dropbox.ignored\"]\n\t\t\t\t: [];\n\n\tfor (const attr of attrs) {\n\t\tif (process.platform === \"darwin\") {\n\t\t\tspawnProcessSync(\"xattr\", [\"-w\", attr, \"1\", path], { encoding: \"utf-8\", stdio: \"ignore\" });\n\t\t} else {\n\t\t\tspawnProcessSync(\"setfattr\", [\"-n\", attr, \"-v\", \"1\", path], { encoding: \"utf-8\", stdio: \"ignore\" });\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AA8CD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,CAqDpE;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,UAAU,CAY/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BxD;AAqCD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAWpG;AAQD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAwBjD"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAsDD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,CAqDpE;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,UAAU,CAY/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BxD;AAqCD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAcpG;AAQD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAyBjD"}
@@ -3,6 +3,7 @@ import { delimiter } from "node:path";
3
3
  import { Worker } from "node:worker_threads";
4
4
  import { spawn, spawnSync } from "child_process";
5
5
  import { getBinDir } from "../config.js";
6
+ import { createChildProcessEnvironment } from "./child-process.js";
6
7
  function isLegacyWslBashPath(path) {
7
8
  const normalized = path.replace(/\//g, "\\").toLowerCase();
8
9
  return /^[a-z]:\\windows\\(?:system32|sysnative)\\bash\.exe$/.test(normalized);
@@ -17,7 +18,11 @@ function findBashOnPath() {
17
18
  if (process.platform === "win32") {
18
19
  // Windows: Use 'where' and verify file exists (where can return non-existent paths)
19
20
  try {
20
- const result = spawnSync("where", ["bash.exe"], { encoding: "utf-8", timeout: 5000 });
21
+ const result = spawnSync("where", ["bash.exe"], {
22
+ encoding: "utf-8",
23
+ timeout: 5000,
24
+ env: createChildProcessEnvironment(),
25
+ });
21
26
  if (result.status === 0 && result.stdout) {
22
27
  const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
23
28
  if (firstMatch && existsSync(firstMatch)) {
@@ -32,7 +37,11 @@ function findBashOnPath() {
32
37
  }
33
38
  // Unix: Use 'which' and trust its output (handles Termux and special filesystems)
34
39
  try {
35
- const result = spawnSync("which", ["bash"], { encoding: "utf-8", timeout: 5000 });
40
+ const result = spawnSync("which", ["bash"], {
41
+ encoding: "utf-8",
42
+ timeout: 5000,
43
+ env: createChildProcessEnvironment(),
44
+ });
36
45
  if (result.status === 0 && result.stdout) {
37
46
  const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
38
47
  if (firstMatch) {
@@ -158,7 +167,7 @@ parentPort.on("message", ({ action, pid }) => {
158
167
  });
159
168
  function killTree(pid) {
160
169
  if (process.platform === "win32") {
161
- try { spawn("taskkill", ["/F", "/T", "/PID", String(pid)], { stdio: "ignore", detached: true }); } catch {}
170
+ try { spawn("taskkill", ["/F", "/T", "/PID", String(pid)], { stdio: "ignore", detached: true, env: { ...process.env, AI_AGENT: workerData.aiAgent } }); } catch {}
162
171
  return;
163
172
  }
164
173
  try { process.kill(-pid, "SIGKILL"); }
@@ -176,7 +185,10 @@ timer.unref?.();
176
185
  export function startParentProcessGuardian(parentPid, stopFile) {
177
186
  if (detachedChildGuardian)
178
187
  return async () => { };
179
- const guardian = new Worker(PARENT_GUARDIAN_SOURCE, { eval: true, workerData: { parentPid, stopFile } });
188
+ const guardian = new Worker(PARENT_GUARDIAN_SOURCE, {
189
+ eval: true,
190
+ workerData: { parentPid, stopFile, aiAgent: createChildProcessEnvironment().AI_AGENT },
191
+ });
180
192
  detachedChildGuardian = guardian;
181
193
  for (const pid of trackedDetachedChildPids)
182
194
  guardian.postMessage({ action: "track", pid });
@@ -218,6 +230,7 @@ export function killProcessTree(pid) {
218
230
  spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
219
231
  stdio: "ignore",
220
232
  detached: true,
233
+ env: createChildProcessEnvironment(),
221
234
  });
222
235
  }
223
236
  catch {