@ljwei-stak/dsh-model-route-bot 0.66.3 → 0.67.0

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 (272) hide show
  1. package/.dsh-plugin/bot-product.mjs +81 -5
  2. package/.dsh-plugin/client.js +17490 -1791
  3. package/README.i18n.yaml +4 -4
  4. package/README.md +409 -364
  5. package/README.zh.md +409 -364
  6. package/apps/integration-client/README.md +31 -7
  7. package/apps/integration-client/api.mjs +14 -3
  8. package/apps/integration-client/binding-editor.jsx +308 -109
  9. package/apps/integration-client/binding-model.mjs +262 -0
  10. package/apps/integration-client/binding.css +144 -0
  11. package/apps/integration-client/bot-model-status.mjs +18 -0
  12. package/apps/integration-client/bot-profile-identity.jsx +197 -0
  13. package/apps/integration-client/bot-profile.css +57 -0
  14. package/apps/integration-client/bot-profile.mjs +97 -0
  15. package/apps/integration-client/bot-settings-dialog.css +18 -0
  16. package/apps/integration-client/bot-settings-dialog.jsx +111 -0
  17. package/apps/integration-client/bot-thread-header-bridge.css +20 -0
  18. package/apps/integration-client/bot-thread-header.jsx +278 -0
  19. package/apps/integration-client/bot-threads-panel.jsx +378 -0
  20. package/apps/integration-client/bot-threads.css +169 -0
  21. package/apps/integration-client/chat-design.mjs +250 -0
  22. package/apps/integration-client/chat-ui.jsx +175 -0
  23. package/apps/integration-client/chat.css +477 -0
  24. package/apps/integration-client/composer-draft-binding.mjs +50 -0
  25. package/apps/integration-client/composer-draft-bound.jsx +14 -0
  26. package/apps/integration-client/composer-draft-host.jsx +142 -0
  27. package/apps/integration-client/composer-draft-session.jsx +287 -0
  28. package/apps/integration-client/composer-draft-witness.mjs +115 -0
  29. package/apps/integration-client/composer-draft.css +4 -0
  30. package/apps/integration-client/composer-draft.mjs +322 -0
  31. package/apps/integration-client/contact-attention.jsx +54 -0
  32. package/apps/integration-client/data-panel.jsx +439 -0
  33. package/apps/integration-client/data.css +69 -0
  34. package/apps/integration-client/desktop-bridge.mjs +1 -0
  35. package/apps/integration-client/desktop-http-socket.mjs +49 -0
  36. package/apps/integration-client/desktop-keyboard.mjs +32 -0
  37. package/apps/integration-client/desktop-pane.jsx +99 -30
  38. package/apps/integration-client/desktop-stream.mjs +13 -3
  39. package/apps/integration-client/desktop-tools.jsx +19 -0
  40. package/apps/integration-client/desktop-touch.mjs +27 -0
  41. package/apps/integration-client/desktop.css +41 -0
  42. package/apps/integration-client/independent-chat-controller.mjs +224 -0
  43. package/apps/integration-client/independent-chat-entry.jsx +61 -0
  44. package/apps/integration-client/independent-chat-navigation.mjs +21 -0
  45. package/apps/integration-client/independent-chat-page.jsx +148 -0
  46. package/apps/integration-client/independent-chat-rich.jsx +64 -0
  47. package/apps/integration-client/independent-chat-rich.mjs +30 -0
  48. package/apps/integration-client/independent-chat.css +73 -0
  49. package/apps/integration-client/index.jsx +24 -16
  50. package/apps/integration-client/library-panel.jsx +4 -1
  51. package/apps/integration-client/licenses/jsqr-1.4.0-LICENSE.txt +202 -0
  52. package/apps/integration-client/main-route-editor.jsx +94 -0
  53. package/apps/integration-client/main-route-model.mjs +100 -0
  54. package/apps/integration-client/model-picker.css +37 -0
  55. package/apps/integration-client/model-picker.jsx +83 -0
  56. package/apps/integration-client/native-activity.css +141 -0
  57. package/apps/integration-client/native-activity.jsx +276 -0
  58. package/apps/integration-client/native-activity.mjs +384 -0
  59. package/apps/integration-client/notifications-panel.jsx +186 -0
  60. package/apps/integration-client/notifications.css +126 -0
  61. package/apps/integration-client/pairing-qr.jsx +79 -0
  62. package/apps/integration-client/panels.jsx +126 -115
  63. package/apps/integration-client/product-slots.jsx +46 -0
  64. package/apps/integration-client/routine-recorder.mjs +23 -2
  65. package/apps/integration-client/secure-pairing.jsx +84 -0
  66. package/apps/integration-client/tasks-panel.jsx +32 -10
  67. package/apps/integration-client/ui-icons.jsx +17 -0
  68. package/apps/integration-client/usage-explorer.jsx +43 -0
  69. package/apps/integration-client/usage-report.mjs +71 -0
  70. package/apps/integration-client/usage.css +34 -0
  71. package/apps/integration-client/web-panel-model.mjs +140 -0
  72. package/apps/integration-client/web-panel-page.jsx +221 -0
  73. package/apps/integration-client/web-panel-pins-live.jsx +28 -0
  74. package/apps/integration-client/web-panel.css +139 -0
  75. package/apps/integration-client/workspace-model.mjs +67 -0
  76. package/apps/integration-client/workspace-navigation.mjs +56 -0
  77. package/apps/integration-client/workspace-ui.jsx +173 -0
  78. package/apps/integration-client/workspace.css +332 -0
  79. package/modules/bot-runtime/SOURCE.json +176 -50
  80. package/modules/bot-runtime/index.mjs +169 -13
  81. package/modules/bot-runtime/product-overlay/OVERLAY.json +128 -2
  82. package/modules/bot-runtime/product-overlay/base/src/client/header.js +244 -0
  83. package/modules/bot-runtime/product-overlay/base/src/client/learning-card.js +202 -0
  84. package/modules/bot-runtime/product-overlay/base/src/client/model-menu.js +371 -0
  85. package/modules/bot-runtime/product-overlay/base/src/client/secret-card.js +363 -0
  86. package/modules/bot-runtime/product-overlay/base/src/client/sources.js +68 -0
  87. package/modules/bot-runtime/product-overlay/base/src/client/turn-error.js +260 -0
  88. package/modules/bot-runtime/product-overlay/base/src/host/channel.js +647 -0
  89. package/modules/bot-runtime/product-overlay/base/src/host/memory.js +2050 -0
  90. package/modules/bot-runtime/product-overlay/base/src/host/models.js +314 -0
  91. package/modules/bot-runtime/product-overlay/base/src/host/parts.js +1473 -0
  92. package/modules/bot-runtime/product-overlay/base/src/host/privacy.js +368 -0
  93. package/modules/bot-runtime/product-overlay/base/src/host/roster.js +776 -0
  94. package/modules/bot-runtime/product-overlay/base/src/host/store.js +512 -0
  95. package/modules/bot-runtime/product-overlay/base/src/host/usage.js +653 -0
  96. package/modules/bot-runtime/product-overlay/patches/src/client/details-drawer.js.patch +48 -2
  97. package/modules/bot-runtime/product-overlay/patches/src/client/header.js.patch +41 -0
  98. package/modules/bot-runtime/product-overlay/patches/src/client/index.js.patch +33 -1
  99. package/modules/bot-runtime/product-overlay/patches/src/client/learning-card.js.patch +20 -0
  100. package/modules/bot-runtime/product-overlay/patches/src/client/model-menu.js.patch +24 -0
  101. package/modules/bot-runtime/product-overlay/patches/src/client/secret-card.js.patch +25 -0
  102. package/modules/bot-runtime/product-overlay/patches/src/client/sources.js.patch +52 -0
  103. package/modules/bot-runtime/product-overlay/patches/src/client/turn-error.js.patch +23 -0
  104. package/modules/bot-runtime/product-overlay/patches/src/host/channel.js.patch +46 -0
  105. package/modules/bot-runtime/product-overlay/patches/src/host/memory.js.patch +11 -0
  106. package/modules/bot-runtime/product-overlay/patches/src/host/models.js.patch +16 -0
  107. package/modules/bot-runtime/product-overlay/patches/src/host/parts.js.patch +95 -0
  108. package/modules/bot-runtime/product-overlay/patches/src/host/privacy.js.patch +11 -0
  109. package/modules/bot-runtime/product-overlay/patches/src/host/roster.js.patch +145 -0
  110. package/modules/bot-runtime/product-overlay/patches/src/host/store.js.patch +68 -0
  111. package/modules/bot-runtime/product-overlay/patches/src/host/usage.js.patch +11 -0
  112. package/modules/bot-runtime/read-model.mjs +19 -4
  113. package/modules/bot-runtime/vendor/ds-bot/src/client/details-drawer.js +15 -5
  114. package/modules/bot-runtime/vendor/ds-bot/src/client/header.js +9 -2
  115. package/modules/bot-runtime/vendor/ds-bot/src/client/index.js +9 -2
  116. package/modules/bot-runtime/vendor/ds-bot/src/client/learning-card.js +2 -2
  117. package/modules/bot-runtime/vendor/ds-bot/src/client/model-menu.js +5 -3
  118. package/modules/bot-runtime/vendor/ds-bot/src/client/secret-card.js +3 -3
  119. package/modules/bot-runtime/vendor/ds-bot/src/client/sources.js +25 -2
  120. package/modules/bot-runtime/vendor/ds-bot/src/client/turn-error.js +3 -2
  121. package/modules/bot-runtime/vendor/ds-bot/src/host/channel.js +14 -2
  122. package/modules/bot-runtime/vendor/ds-bot/src/host/memory.js +1 -1
  123. package/modules/bot-runtime/vendor/ds-bot/src/host/models.js +7 -0
  124. package/modules/bot-runtime/vendor/ds-bot/src/host/parts.js +26 -9
  125. package/modules/bot-runtime/vendor/ds-bot/src/host/privacy.js +1 -1
  126. package/modules/bot-runtime/vendor/ds-bot/src/host/roster.js +112 -3
  127. package/modules/bot-runtime/vendor/ds-bot/src/host/store.js +34 -1
  128. package/modules/bot-runtime/vendor/ds-bot/src/host/usage.js +1 -1
  129. package/modules/independent-runtime/index.mjs +152 -62
  130. package/modules/independent-runtime/remote-tools.mjs +8 -5
  131. package/modules/openmaus-protocol/NOTICE +10 -0
  132. package/modules/openmaus-protocol/README.md +15 -0
  133. package/modules/openmaus-protocol/SOURCE.json +68 -0
  134. package/modules/openmaus-protocol/dist/protocol.mjs +1203 -0
  135. package/modules/openmaus-protocol/index.mjs +1 -0
  136. package/modules/openmaus-protocol/transport.mjs +77 -0
  137. package/modules/openmaus-protocol/vendor/LICENSE +202 -0
  138. package/modules/openmaus-protocol/vendor/companion/src/e2e/README.md +405 -0
  139. package/modules/openmaus-protocol/vendor/companion/src/e2e/credentials.ts +128 -0
  140. package/modules/openmaus-protocol/vendor/companion/src/e2e/descriptor.ts +84 -0
  141. package/modules/openmaus-protocol/vendor/companion/src/e2e/noise.ts +456 -0
  142. package/modules/openmaus-protocol/vendor/companion/src/e2e/phone.ts +104 -0
  143. package/modules/openmaus-protocol/vendor/companion/src/e2e/session.ts +417 -0
  144. package/modules/openmaus-protocol/vendor/companion/src/e2e/vectors/v1.json +2565 -0
  145. package/modules/openmaus-protocol/vendor/companion/src/e2e/vectors/v1.sha256 +1 -0
  146. package/modules/openmaus-protocol/vendor/companion/src/e2e/yamux.ts +335 -0
  147. package/package.json +20 -6
  148. package/packages/bot-acp/README.md +156 -0
  149. package/packages/bot-acp/licenses/LICENSE-OpenMausBot +202 -0
  150. package/packages/bot-acp/licenses/NOTICE.md +27 -0
  151. package/packages/bot-acp/src/acp-adapter.mjs +795 -0
  152. package/packages/bot-acp/src/acp-host.mjs +148 -0
  153. package/packages/bot-acp/src/native-launch.mjs +121 -0
  154. package/packages/bot-acp/src/permission-policy.mjs +283 -0
  155. package/packages/bot-acp/src/rpc-codec.mjs +265 -0
  156. package/packages/bot-acp/src/session-core.mjs +581 -0
  157. package/packages/bot-acp/src/stdio-rpc.mjs +329 -0
  158. package/packages/bot-engines/README.md +281 -0
  159. package/packages/bot-engines/licenses/LICENSE-OpenMausBot +202 -0
  160. package/packages/bot-engines/licenses/NOTICE.md +32 -0
  161. package/packages/bot-engines/src/claude-engine.mjs +772 -0
  162. package/packages/bot-engines/src/claude-llm-adapter.mjs +797 -0
  163. package/packages/bot-engines/src/claude-llm-turn.mjs +292 -0
  164. package/packages/bot-engines/src/claude-permission-broker.mjs +130 -0
  165. package/packages/bot-engines/src/claude-permission-proxy.mjs +87 -0
  166. package/packages/bot-engines/src/claude-protocol.mjs +177 -0
  167. package/packages/bot-engines/src/driver-catalog.mjs +334 -0
  168. package/packages/bot-engines/src/host-loop-request.mjs +95 -0
  169. package/packages/bot-engines/src/host-registrations.mjs +105 -0
  170. package/packages/capability-broker/src/cli-bootstrap.mjs +86 -16
  171. package/packages/capability-broker/src/cli-bridge-response.mjs +80 -0
  172. package/packages/capability-broker/src/cli-stdio-bridge.mjs +21 -8
  173. package/packages/cli-runtime/src/codex-session-core.mjs +4 -0
  174. package/packages/cli-runtime/src/native-cli-output.mjs +57 -0
  175. package/packages/cli-runtime/src/native-peer.ps1 +51 -3
  176. package/packages/cli-runtime/src/native-process.mjs +77 -14
  177. package/packages/model-router-plugin/README.md +3 -3
  178. package/packages/model-router-plugin/package.json +1 -1
  179. package/packages/orchestration/src/binding-product.mjs +19 -0
  180. package/packages/orchestration/src/bot-data-actions.mjs +45 -0
  181. package/packages/orchestration/src/bot-data-chart.mjs +109 -0
  182. package/packages/orchestration/src/bot-data-context.mjs +44 -0
  183. package/packages/orchestration/src/bot-data-engine.mjs +809 -0
  184. package/packages/orchestration/src/bot-data-io.mjs +186 -0
  185. package/packages/orchestration/src/bot-data-sql.mjs +195 -0
  186. package/packages/orchestration/src/bot-data-surface.mjs +144 -0
  187. package/packages/orchestration/src/bot-data-tools.mjs +68 -0
  188. package/packages/orchestration/src/bot-data-worker.mjs +228 -0
  189. package/packages/orchestration/src/bot-independent-execution.mjs +195 -0
  190. package/packages/orchestration/src/bot-independent-stream.mjs +74 -0
  191. package/packages/orchestration/src/bot-loop.mjs +152 -19
  192. package/packages/orchestration/src/bot-notifications.mjs +159 -0
  193. package/packages/orchestration/src/bot-policy.mjs +43 -4
  194. package/packages/orchestration/src/bot-profile.mjs +171 -0
  195. package/packages/orchestration/src/bot-routine.mjs +4 -4
  196. package/packages/orchestration/src/bot-runtime-assembly.mjs +255 -8
  197. package/packages/orchestration/src/bot-runtime-switch.mjs +13 -2
  198. package/packages/orchestration/src/bot-serving.mjs +164 -0
  199. package/packages/orchestration/src/bot-session-store.mjs +105 -9
  200. package/packages/orchestration/src/bot-settings.mjs +50 -11
  201. package/packages/orchestration/src/bot-thread-admission.mjs +84 -0
  202. package/packages/orchestration/src/bot-thread-host.mjs +187 -0
  203. package/packages/orchestration/src/bot-threads.mjs +790 -0
  204. package/packages/orchestration/src/data-product-access.mjs +37 -0
  205. package/packages/orchestration/src/data-tool-contract.mjs +291 -0
  206. package/packages/orchestration/src/desktop-http-carrier.mjs +120 -0
  207. package/packages/orchestration/src/desktop-proxy.mjs +311 -0
  208. package/packages/orchestration/src/desktop-sessions.mjs +43 -9
  209. package/packages/orchestration/src/ds-lifecycle.mjs +31 -4
  210. package/packages/orchestration/src/grant-refresh-queue.mjs +17 -0
  211. package/packages/orchestration/src/independent-chat-page.mjs +39 -0
  212. package/packages/orchestration/src/independent-chat-service.mjs +308 -0
  213. package/packages/orchestration/src/independent-context-state.mjs +44 -0
  214. package/packages/orchestration/src/independent-message-wire.mjs +84 -0
  215. package/packages/orchestration/src/independent-tool-catalog.mjs +175 -0
  216. package/packages/orchestration/src/independent-tool-families.mjs +73 -0
  217. package/packages/orchestration/src/independent-tool-host.mjs +344 -0
  218. package/packages/orchestration/src/main-bot-grant.mjs +15 -0
  219. package/packages/orchestration/src/main-model-routes.mjs +208 -0
  220. package/packages/orchestration/src/model-accounting.mjs +99 -35
  221. package/packages/orchestration/src/model-auxiliary-dispatch.mjs +187 -0
  222. package/packages/orchestration/src/model-loop-frame.mjs +179 -0
  223. package/packages/orchestration/src/model-prepared-generation.mjs +175 -0
  224. package/packages/orchestration/src/model-request-bounds.mjs +111 -0
  225. package/packages/orchestration/src/native-activity-contract.mjs +491 -0
  226. package/packages/orchestration/src/native-activity-service.mjs +102 -0
  227. package/packages/orchestration/src/native-activity-store.mjs +249 -0
  228. package/packages/orchestration/src/native-conversation-tools.mjs +78 -0
  229. package/packages/orchestration/src/native-data-tools.mjs +100 -0
  230. package/packages/orchestration/src/native-remote-actions.mjs +742 -0
  231. package/packages/orchestration/src/native-team-tools.mjs +73 -0
  232. package/packages/orchestration/src/pairing-invite.mjs +37 -0
  233. package/packages/orchestration/src/product-composition.mjs +1559 -1001
  234. package/packages/orchestration/src/remote-machines.mjs +82 -14
  235. package/packages/orchestration/src/routine-execution.mjs +5 -3
  236. package/packages/orchestration/src/routine-session.mjs +19 -13
  237. package/packages/orchestration/src/secure-pairing-host.mjs +112 -0
  238. package/packages/orchestration/src/task-journal.mjs +29 -0
  239. package/packages/orchestration/src/task-product.mjs +17 -0
  240. package/packages/orchestration/src/team-assignment-store.mjs +120 -0
  241. package/packages/orchestration/src/team-bridge.mjs +282 -0
  242. package/packages/orchestration/src/team-scheduler.mjs +83 -0
  243. package/packages/orchestration/src/team-sdk-tools.mjs +84 -0
  244. package/packages/orchestration/src/team-tool-contract.mjs +284 -0
  245. package/packages/orchestration/src/ui-host-namespace.mjs +23 -0
  246. package/packages/orchestration/src/web-panel-actions.mjs +103 -0
  247. package/packages/orchestration/src/web-panel-framing.mjs +227 -0
  248. package/packages/orchestration/src/web-panel-store.mjs +206 -0
  249. package/remote-computer-agent/README.md +39 -29
  250. package/remote-computer-agent/build.mjs +3 -0
  251. package/remote-computer-agent/dist/OPENMAUSBOT_LICENSE +202 -0
  252. package/remote-computer-agent/dist/OPENMAUSBOT_NOTICE +10 -0
  253. package/remote-computer-agent/dist/OPENMAUSBOT_SOURCE.json +68 -0
  254. package/remote-computer-agent/dist/cli-stdio-bridge.mjs +215 -25
  255. package/remote-computer-agent/dist/cli-stdio-bridge.mjs.map +4 -4
  256. package/remote-computer-agent/dist/cli.mjs +1688 -168
  257. package/remote-computer-agent/dist/cli.mjs.map +4 -4
  258. package/remote-computer-agent/dist/index.mjs +1579 -122
  259. package/remote-computer-agent/dist/index.mjs.map +4 -4
  260. package/remote-computer-agent/dist/native-peer.ps1 +51 -3
  261. package/remote-computer-agent/package-lock.json +308 -2
  262. package/remote-computer-agent/package.json +2 -1
  263. package/remote-computer-agent/pair-device.ps1 +20 -0
  264. package/remote-computer-agent/setup.ps1 +38 -16
  265. package/remote-computer-agent/src/cli.ts +24 -3
  266. package/remote-computer-agent/src/desktop-session.ts +11 -3
  267. package/remote-computer-agent/src/e2e-server.ts +81 -0
  268. package/remote-computer-agent/src/pairing-page.ts +35 -0
  269. package/remote-computer-agent/src/protocol.ts +25 -25
  270. package/remote-computer-agent/src/secure-pairing.ts +105 -0
  271. package/remote-computer-agent/src/store.ts +20 -5
  272. package/remote-computer-agent/src/transport.ts +39 -15
@@ -1,6 +1,6 @@
1
1
  // ../packages/capability-broker/src/cli-stdio-bridge.mjs
2
2
  import { createPublicKey, verify } from "node:crypto";
3
- import { readFile } from "node:fs/promises";
3
+ import { readFile as readFile2 } from "node:fs/promises";
4
4
  import { setTimeout as delay } from "node:timers/promises";
5
5
  import { Server } from "@modelcontextprotocol/server";
6
6
  import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/stdio";
@@ -9,10 +9,128 @@ import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/s
9
9
  import { spawn } from "node:child_process";
10
10
  import { EventEmitter } from "node:events";
11
11
  import { StringDecoder } from "node:string_decoder";
12
- import { isAbsolute, join } from "node:path";
12
+ import { access, lstat, readFile, readdir, realpath, rmdir, unlink } from "node:fs/promises";
13
+ import { lstatSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
14
+ import { randomBytes } from "node:crypto";
15
+ import { tmpdir } from "node:os";
16
+ import { basename, dirname, isAbsolute, join } from "node:path";
13
17
  import { fileURLToPath } from "node:url";
18
+
19
+ // ../packages/cli-runtime/src/native-cli-output.mjs
20
+ import { createHash } from "node:crypto";
21
+ var FRAME = 262144;
22
+ var RAW_FRAME = 18 * 1024 * 1024;
23
+ var IMAGE = 6 * 1024 * 1024;
24
+ var fail = () => {
25
+ throw new Error("CLI_FRAME_LIMIT");
26
+ };
27
+ function receipt(frame, rawBytes) {
28
+ const results = frame?.type === "user" && frame.message?.content;
29
+ const toolResult = Array.isArray(results) && results.length > 0 && results.every((block) => block?.type === "tool_result" && typeof block.tool_use_id === "string");
30
+ if (!toolResult) {
31
+ if (rawBytes > FRAME) fail();
32
+ return frame;
33
+ }
34
+ let imageBytes = 0, images = 0, nodes = 0;
35
+ const visit = (value, depth = 0) => {
36
+ if (++nodes > 3e4 || depth > 24) fail();
37
+ if (!value || typeof value !== "object") return value;
38
+ if (value.type === "image") {
39
+ const source = value.source;
40
+ const data = source?.type === "base64" ? source.data : value.data;
41
+ const mediaType = source?.type === "base64" ? source.media_type : value.mimeType;
42
+ if (typeof data !== "string" || data.length > IMAGE / 3 * 4 || !["image/png", "image/jpeg", "image/webp"].includes(mediaType)) fail();
43
+ const bytes = Buffer.from(data, "base64");
44
+ if (!bytes.length || bytes.length > IMAGE || bytes.toString("base64") !== data || ++images > 32 || (imageBytes += bytes.length) > IMAGE * 2) fail();
45
+ return { type: "image", mediaType, bytes: bytes.length, sha256: createHash("sha256").update(bytes).digest("hex") };
46
+ }
47
+ if (Array.isArray(value)) return value.map((item) => visit(item, depth + 1));
48
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, visit(item, depth + 1)]));
49
+ };
50
+ const result = visit(frame);
51
+ if (rawBytes > FRAME && !images || Buffer.byteLength(JSON.stringify(result)) > FRAME) fail();
52
+ return result;
53
+ }
54
+ var NativeCliOutput = class {
55
+ #buffer = "";
56
+ #bytes = 0;
57
+ push(text) {
58
+ this.#buffer += text;
59
+ const frames = [];
60
+ let end;
61
+ while ((end = this.#buffer.indexOf("\n")) >= 0) {
62
+ const line = this.#buffer.slice(0, end);
63
+ this.#buffer = this.#buffer.slice(end + 1);
64
+ const rawBytes = Buffer.byteLength(line);
65
+ if (rawBytes > RAW_FRAME) fail();
66
+ if (!line.trim()) continue;
67
+ const frame = receipt(JSON.parse(line), rawBytes);
68
+ this.#bytes += Buffer.byteLength(JSON.stringify(frame));
69
+ if (this.#bytes > 8 * 1024 * 1024) fail();
70
+ frames.push(frame);
71
+ }
72
+ if (Buffer.byteLength(this.#buffer) > RAW_FRAME) fail();
73
+ return frames;
74
+ }
75
+ };
76
+
77
+ // ../packages/cli-runtime/src/native-process.mjs
14
78
  var HERE = fileURLToPath(new URL(".", import.meta.url));
15
79
  var MAX_FRAME = 262144;
80
+ var COMPILER_ROOT = "DSH_NATIVE_COMPILER_ROOT";
81
+ var COMPILER_SCRATCH = "DSH_NATIVE_COMPILER_SCRATCH";
82
+ var inheritedCompilerRoot = process.platform === "win32" ? process.env[COMPILER_ROOT] : void 0;
83
+ var hostTemp = process.platform === "win32" ? tmpdir() : null;
84
+ var compilerRoot = null;
85
+ var compilerFailure = () => Object.assign(new Error("NATIVE_COMPILER_SCRATCH_UNAVAILABLE"), { code: "NATIVE_COMPILER_SCRATCH_UNAVAILABLE" });
86
+ var sameDirectory = (info, expected) => info.isDirectory() && !info.isSymbolicLink() && info.dev === expected.dev && info.ino === expected.ino;
87
+ var rootStamp = (path) => `dsh-native-compiler-v1:${basename(path)}
88
+ `;
89
+ function compilerDirectory() {
90
+ try {
91
+ if (!compilerRoot) {
92
+ if (inheritedCompilerRoot !== void 0) {
93
+ if (!isAbsolute(inheritedCompilerRoot) || inheritedCompilerRoot.length > 140 || !/^dshc-[a-f0-9]{16}$/.test(basename(inheritedCompilerRoot))) throw compilerFailure();
94
+ const info2 = lstatSync(inheritedCompilerRoot, { bigint: true });
95
+ if (!info2.isDirectory() || info2.isSymbolicLink() || realpathSync(inheritedCompilerRoot) !== inheritedCompilerRoot || readFileSync(join(inheritedCompilerRoot, ".dsh-root"), "utf8") !== rootStamp(inheritedCompilerRoot)) throw compilerFailure();
96
+ compilerRoot = { path: inheritedCompilerRoot, info: info2 };
97
+ } else {
98
+ const parent = realpathSync(hostTemp);
99
+ const path2 = join(parent, `dshc-${randomBytes(8).toString("hex")}`);
100
+ if (path2.length > 140) throw compilerFailure();
101
+ mkdirSync(path2);
102
+ writeFileSync(join(path2, ".dsh-root"), rootStamp(path2), { flag: "wx" });
103
+ compilerRoot = { path: path2, info: lstatSync(path2, { bigint: true }) };
104
+ }
105
+ }
106
+ if (!sameDirectory(lstatSync(compilerRoot.path, { bigint: true }), compilerRoot.info) || realpathSync(compilerRoot.path) !== compilerRoot.path) throw compilerFailure();
107
+ const path = mkdtempSync(join(compilerRoot.path, "c-"));
108
+ const info = lstatSync(path, { bigint: true }), owner = randomBytes(16).toString("hex");
109
+ writeFileSync(join(path, ".dsh-owner"), owner, { flag: "wx" });
110
+ const root = compilerRoot;
111
+ const cleanup = async () => {
112
+ try {
113
+ if (dirname(path) !== root.path || !/^c-[A-Za-z0-9]{6}$/.test(basename(path))) return false;
114
+ if (!sameDirectory(await lstat(root.path, { bigint: true }), root.info) || await realpath(root.path) !== root.path) return false;
115
+ if (!sameDirectory(await lstat(path, { bigint: true }), info) || await realpath(path) !== path || await readFile(join(path, ".dsh-owner"), "utf8") !== owner) return false;
116
+ const names = await readdir(path);
117
+ if (names.length > 128) return false;
118
+ for (const name of names) {
119
+ const entry = await lstat(join(path, name));
120
+ if (!entry.isFile() || entry.isSymbolicLink()) return false;
121
+ }
122
+ for (const name of names) await unlink(join(path, name));
123
+ await rmdir(path);
124
+ return true;
125
+ } catch {
126
+ return false;
127
+ }
128
+ };
129
+ return { root: root.path, path, cleanup };
130
+ } catch {
131
+ throw compilerFailure();
132
+ }
133
+ }
16
134
  function privateEnvironment(home, source = process.env) {
17
135
  const env = {
18
136
  HOME: home,
@@ -32,30 +150,32 @@ function privateEnvironment(home, source = process.env) {
32
150
  };
33
151
  for (const key of ["SystemRoot", "windir", "ComSpec", "LANG", "LC_ALL"]) if (source[key]) env[key] = source[key];
34
152
  env.PATH = process.platform === "win32" ? join(source.SystemRoot ?? "C:\\Windows", "System32") : "/usr/bin:/bin";
153
+ if (process.platform === "win32" && (compilerRoot?.path ?? inheritedCompilerRoot)) env[COMPILER_ROOT] = compilerRoot?.path ?? inheritedCompilerRoot;
35
154
  return env;
36
155
  }
37
156
  function nativeProcess(helper, mode, spec, { home, env = privateEnvironment(home) } = {}) {
38
157
  const events = new EventEmitter();
39
158
  const args = helper.platform === "win32" ? [...helper.prefix, "-Mode", mode] : [...helper.prefix, mode];
40
- const child = spawn(helper.executable, args, { cwd: home, env, windowsHide: true, shell: false, stdio: ["pipe", "pipe", "pipe"] });
41
- let tail = "", buffer = "", bytes = 0, closed = false;
159
+ const compiler = helper.platform === "win32" ? compilerDirectory() : null;
160
+ const helperEnv = compiler ? Object.fromEntries(Object.entries(env).filter(([key]) => ![COMPILER_ROOT, COMPILER_SCRATCH].includes(key.toUpperCase()))) : env;
161
+ if (compiler) {
162
+ helperEnv[COMPILER_ROOT] = compiler.root;
163
+ helperEnv[COMPILER_SCRATCH] = compiler.path;
164
+ }
165
+ const child = spawn(helper.executable, args, { cwd: home, env: helperEnv, windowsHide: true, shell: false, stdio: ["pipe", "pipe", "pipe"] });
166
+ let tail = "", buffer = "", bytes = 0, closed = false, treeStopped = false;
42
167
  const decoder = new StringDecoder("utf8"), cliDecoder = new StringDecoder("utf8");
43
- let cliBuffer = "";
168
+ const cliOutput = new NativeCliOutput();
44
169
  const frame = (value) => {
170
+ if (mode === "supervise" && value.control === "stopped" && value.treeStopped === true) treeStopped = true;
45
171
  if (mode === "supervise" && value.type === "cli-output") {
46
172
  if (typeof value.data !== "string" || value.data.length > MAX_FRAME * 2) throw new Error("INVALID_CLI_FRAME");
47
- cliBuffer += cliDecoder.write(Buffer.from(value.data, "base64"));
48
- if (Buffer.byteLength(cliBuffer) > MAX_FRAME) throw new Error("CLI_FRAME_LIMIT");
49
- let end;
50
- while ((end = cliBuffer.indexOf("\n")) >= 0) {
51
- const line = cliBuffer.slice(0, end);
52
- cliBuffer = cliBuffer.slice(end + 1);
53
- if (line.trim()) events.emit("message", JSON.parse(line));
54
- }
173
+ for (const message of cliOutput.push(cliDecoder.write(Buffer.from(value.data, "base64")))) events.emit("message", message);
55
174
  } else events.emit(value.control ? "control" : "message", value);
56
175
  };
57
- const exit = new Promise((resolve) => child.once("close", (code, signal) => {
176
+ const exit = new Promise((resolve) => child.once("close", async (code, signal) => {
58
177
  closed = true;
178
+ if (compiler && code === 0 && signal === null && (mode !== "supervise" || treeStopped)) await compiler.cleanup();
59
179
  events.emit("closed", { code, signal });
60
180
  resolve({ code, signal });
61
181
  }));
@@ -68,7 +188,8 @@ function nativeProcess(helper, mode, spec, { home, env = privateEnvironment(home
68
188
  child.stdout.on("data", (chunk) => {
69
189
  bytes += chunk.length;
70
190
  buffer += decoder.write(chunk);
71
- if (bytes > 8 * 1024 * 1024 || Buffer.byteLength(buffer) > MAX_FRAME) {
191
+ const boundedStream = mode === "client" || mode === "server" || mode === "supervise";
192
+ if (!boundedStream && bytes > 8 * 1024 * 1024 || Buffer.byteLength(buffer) > MAX_FRAME) {
72
193
  events.emit("failure", new Error("OUTPUT_LIMIT"));
73
194
  child.stdin.end();
74
195
  return;
@@ -135,14 +256,71 @@ function nativeProcess(helper, mode, spec, { home, env = privateEnvironment(home
135
256
  }
136
257
 
137
258
  // ../packages/capability-broker/src/cli-stdio-bridge.mjs
138
- import { dirname, isAbsolute as isAbsolute2 } from "node:path";
259
+ import { dirname as dirname2, isAbsolute as isAbsolute2 } from "node:path";
260
+
261
+ // ../packages/capability-broker/src/cli-bridge-response.mjs
262
+ import { createHash as createHash2 } from "node:crypto";
263
+ var CHUNK_BYTES = 128 * 1024;
264
+ var MAX_RESPONSE = 9 * 1024 * 1024;
265
+ var MAX_BUFFERED = 16 * 1024 * 1024;
266
+ var fail2 = () => {
267
+ throw new Error("INVALID_BRIDGE_RESPONSE");
268
+ };
269
+ var sha = (bytes) => createHash2("sha256").update(bytes).digest("hex");
270
+ var BridgeResponseReader = class {
271
+ #parts = /* @__PURE__ */ new Map();
272
+ #buffered = 0;
273
+ drop(id) {
274
+ const state = this.#parts.get(id);
275
+ if (state) this.#buffered -= state.size;
276
+ this.#parts.delete(id);
277
+ }
278
+ clear() {
279
+ this.#parts.clear();
280
+ this.#buffered = 0;
281
+ }
282
+ accept(frame) {
283
+ if (!Number.isSafeInteger(frame?.id) || frame.id < 1) fail2();
284
+ if (frame.type === "response") {
285
+ this.drop(frame.id);
286
+ return frame;
287
+ }
288
+ if (frame.type === "response-start") {
289
+ if (this.#parts.has(frame.id) || this.#parts.size >= 16 || !Number.isSafeInteger(frame.bytes) || frame.bytes <= CHUNK_BYTES || frame.bytes > MAX_RESPONSE) fail2();
290
+ this.#parts.set(frame.id, { expected: frame.bytes, size: 0, chunks: [] });
291
+ return null;
292
+ }
293
+ const state = this.#parts.get(frame.id);
294
+ if (!state) fail2();
295
+ if (frame.type === "response-chunk") {
296
+ if (frame.index !== state.chunks.length || typeof frame.data !== "string" || frame.data.length > Math.ceil(CHUNK_BYTES / 3) * 4) fail2();
297
+ const bytes2 = Buffer.from(frame.data, "base64");
298
+ if (!bytes2.length || bytes2.length > CHUNK_BYTES || bytes2.toString("base64") !== frame.data || state.size + bytes2.length > state.expected || this.#buffered + bytes2.length > MAX_BUFFERED) fail2();
299
+ state.chunks.push(bytes2);
300
+ state.size += bytes2.length;
301
+ this.#buffered += bytes2.length;
302
+ return null;
303
+ }
304
+ if (frame.type !== "response-end" || state.size !== state.expected) fail2();
305
+ const bytes = Buffer.concat(state.chunks);
306
+ this.drop(frame.id);
307
+ if (frame.sha256 !== sha(bytes)) fail2();
308
+ const value = JSON.parse(bytes.toString("utf8"));
309
+ if (value.type !== "response" || value.id !== frame.id) fail2();
310
+ return value;
311
+ }
312
+ };
313
+
314
+ // ../packages/capability-broker/src/cli-stdio-bridge.mjs
139
315
  var relay;
140
316
  var handle;
141
317
  var pending = /* @__PURE__ */ new Map();
318
+ var responses = new BridgeResponseReader();
142
319
  var sequence = 0;
143
320
  var finish = () => {
144
321
  for (const value of pending.values()) value.reject(new Error("BROKER_CLOSED"));
145
322
  pending.clear();
323
+ responses.clear();
146
324
  relay?.end();
147
325
  };
148
326
  try {
@@ -152,7 +330,7 @@ try {
152
330
  const deadline = Date.now() + 15e3;
153
331
  while (!descriptor && Date.now() < deadline) {
154
332
  try {
155
- const wire = await readFile(path);
333
+ const wire = await readFile2(path);
156
334
  if (wire.length > 32768) throw new Error("DESCRIPTOR_LIMIT");
157
335
  descriptor = JSON.parse(wire);
158
336
  } catch (error) {
@@ -171,7 +349,7 @@ try {
171
349
  spec.helper,
172
350
  "client",
173
351
  { endpoint: spec.endpoint, serverPid: spec.serverPid, serverStart: spec.serverStart, ttlMs: remaining },
174
- { home: dirname(path), env: privateEnvironment(dirname(path)) }
352
+ { home: dirname2(path), env: privateEnvironment(dirname2(path)) }
175
353
  );
176
354
  const ask = (op, payload, signal) => new Promise((resolve, reject) => {
177
355
  if (relay.closed || pending.size >= 16) {
@@ -182,6 +360,7 @@ try {
182
360
  const abort = () => {
183
361
  const value = pending.get(id);
184
362
  pending.delete(id);
363
+ responses.drop(id);
185
364
  void relay.send({ type: "cancel", id }).catch(() => {
186
365
  });
187
366
  value?.reject(new Error("REQUEST_CANCELLED"));
@@ -201,15 +380,25 @@ try {
201
380
  void relay.send({ type: "request", id, op, ...payload }).catch(() => {
202
381
  const value = pending.get(id);
203
382
  pending.delete(id);
383
+ responses.drop(id);
204
384
  value?.reject(new Error("BROKER_CLOSED"));
205
385
  });
206
386
  });
207
387
  relay.events.on("message", (message) => {
208
- if (message?.type !== "response" || !Number.isSafeInteger(message.id)) return;
209
- const value = pending.get(message.id);
210
- pending.delete(message.id);
211
- if (message.ok) value?.resolve(message.value);
212
- else value?.reject(new Error(message.code ?? "BROKER_REFUSED"));
388
+ if (!Number.isSafeInteger(message?.id) || !pending.has(message.id)) return;
389
+ try {
390
+ const response = responses.accept(message);
391
+ if (!response) return;
392
+ const value = pending.get(response.id);
393
+ pending.delete(response.id);
394
+ if (response.ok) value?.resolve(response);
395
+ else value?.reject(new Error(response.code ?? "BROKER_REFUSED"));
396
+ } catch {
397
+ const value = pending.get(message.id);
398
+ pending.delete(message.id);
399
+ responses.drop(message.id);
400
+ value?.reject(new Error("INVALID_BRIDGE_RESPONSE"));
401
+ }
213
402
  });
214
403
  relay.events.on("failure", () => {
215
404
  finish();
@@ -221,10 +410,11 @@ try {
221
410
  });
222
411
  handle = serveStdio(() => {
223
412
  const server = new Server({ name: "dsh-task-capability-bridge", version: "0.0.0" }, { capabilities: { tools: {} } });
224
- server.setRequestHandler("tools/list", async (_request, ctx) => ({ tools: await ask("list", {}, ctx.mcpReq.signal) }));
413
+ server.setRequestHandler("tools/list", async (_request, ctx) => ({ tools: (await ask("list", {}, ctx.mcpReq.signal)).value }));
225
414
  server.setRequestHandler("tools/call", async (request, ctx) => {
226
415
  try {
227
- return { content: [{ type: "text", text: JSON.stringify(await ask("call", { name: request.params.name, args: request.params.arguments ?? {} }, ctx.mcpReq.signal)) }] };
416
+ const response = await ask("call", { name: request.params.name, args: request.params.arguments ?? {} }, ctx.mcpReq.signal);
417
+ return response.mcpResult ?? { content: [{ type: "text", text: JSON.stringify(response.value) }] };
228
418
  } catch (error) {
229
419
  return { isError: true, content: [{ type: "text", text: error.message }] };
230
420
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../packages/capability-broker/src/cli-stdio-bridge.mjs", "../../packages/cli-runtime/src/native-process.mjs"],
4
- "sourcesContent": ["import { createPublicKey, verify } from 'node:crypto'\nimport { readFile } from 'node:fs/promises'\nimport { setTimeout as delay } from 'node:timers/promises'\nimport { Server } from '@modelcontextprotocol/server'\nimport { serveStdio, StdioServerTransport } from '@modelcontextprotocol/server/stdio'\nimport { nativeProcess, privateEnvironment } from '../../cli-runtime/src/native-process.mjs'\nimport { dirname, isAbsolute } from 'node:path'\n\nlet relay, handle\nconst pending = new Map()\nlet sequence = 0\nconst finish = () => {\n for (const value of pending.values()) value.reject(new Error('BROKER_CLOSED'))\n pending.clear()\n relay?.end()\n}\ntry {\n const [path, publicSpki] = process.argv.slice(2)\n if (process.argv.length !== 4 || !isAbsolute(path) || !/^[A-Za-z0-9_-]{40,256}$/.test(publicSpki)) throw new Error('PRIVATE_BOOTSTRAP_REQUIRED')\n let descriptor\n const deadline = Date.now() + 15_000\n while (!descriptor && Date.now() < deadline) {\n try { const wire = await readFile(path); if (wire.length > 32_768) throw new Error('DESCRIPTOR_LIMIT'); descriptor = JSON.parse(wire) }\n catch (error) { if (error.code !== 'ENOENT') throw error; await delay(50) }\n }\n if (!descriptor || typeof descriptor.payload !== 'string' || typeof descriptor.signature !== 'string') throw new Error('INVALID_BOOTSTRAP')\n const key = createPublicKey({ key: Buffer.from(publicSpki, 'base64url'), format: 'der', type: 'spki' })\n if (!verify(null, Buffer.from(descriptor.payload), key, Buffer.from(descriptor.signature, 'base64url'))) throw new Error('BOOTSTRAP_SIGNATURE')\n const spec = JSON.parse(descriptor.payload)\n const handoffRemaining = Math.floor(spec.expiresAt - Date.now())\n const remaining = Math.floor(spec.sessionExpiresAt - Date.now())\n if (spec.version !== 1 || handoffRemaining < 1 || handoffRemaining > 15_000 || remaining < 1 || remaining > 7_200_000) throw new Error('BOOTSTRAP_EXPIRED')\n relay = nativeProcess(spec.helper, 'client', { endpoint: spec.endpoint, serverPid: spec.serverPid, serverStart: spec.serverStart, ttlMs: remaining },\n { home: dirname(path), env: privateEnvironment(dirname(path)) })\n const ask = (op, payload, signal) => new Promise((resolve, reject) => {\n if (relay.closed || pending.size >= 16) { reject(new Error('BROKER_UNAVAILABLE')); return }\n const id = ++sequence\n const abort = () => { const value = pending.get(id); pending.delete(id); void relay.send({ type: 'cancel', id }).catch(() => {}); value?.reject(new Error('REQUEST_CANCELLED')) }\n if (signal?.aborted) { reject(new Error('REQUEST_CANCELLED')); return }\n const timer = setTimeout(abort, Math.min(remaining, 30_000))\n signal?.addEventListener('abort', abort, { once: true })\n const settle = fn => value => { clearTimeout(timer); signal?.removeEventListener('abort', abort); fn(value) }\n pending.set(id, { resolve: settle(resolve), reject: settle(reject) })\n void relay.send({ type: 'request', id, op, ...payload }).catch(() => { const value = pending.get(id); pending.delete(id); value?.reject(new Error('BROKER_CLOSED')) })\n })\n relay.events.on('message', message => {\n if (message?.type !== 'response' || !Number.isSafeInteger(message.id)) return\n const value = pending.get(message.id); pending.delete(message.id)\n if (message.ok) value?.resolve(message.value)\n else value?.reject(new Error(message.code ?? 'BROKER_REFUSED'))\n })\n relay.events.on('failure', () => { finish(); void handle?.close() })\n relay.events.once('closed', () => { finish(); void handle?.close() })\n handle = serveStdio(() => {\n const server = new Server({ name: 'dsh-task-capability-bridge', version: '0.0.0' }, { capabilities: { tools: {} } })\n server.setRequestHandler('tools/list', async (_request, ctx) => ({ tools: await ask('list', {}, ctx.mcpReq.signal) }))\n server.setRequestHandler('tools/call', async (request, ctx) => {\n try { return { content: [{ type: 'text', text: JSON.stringify(await ask('call', { name: request.params.name, args: request.params.arguments ?? {} }, ctx.mcpReq.signal)) }] } }\n catch (error) { return { isError: true, content: [{ type: 'text', text: error.message }] } }\n })\n server.onclose = finish\n return server\n }, { transport: new StdioServerTransport(process.stdin, process.stdout, { maxBufferSize: 262_144 }) })\n const timer = setTimeout(() => { finish(); void handle.close() }, remaining); timer.unref()\n process.stdin.once('end', () => { clearTimeout(timer); finish(); void handle.close() })\n} catch (error) {\n process.stderr.write(`Private broker bootstrap refused: ${error.message}\\n`)\n finish(); process.exitCode = 2\n}\n", "import { spawn } from 'node:child_process'\nimport { EventEmitter } from 'node:events'\nimport { StringDecoder } from 'node:string_decoder'\nimport { access, realpath } from 'node:fs/promises'\nimport { isAbsolute, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst HERE = fileURLToPath(new URL('.', import.meta.url))\nconst MAX_FRAME = 262_144\n\n/** Deliberately small environment: profiles, credentials and proxy secrets are never inherited. */\nexport function privateEnvironment(home, source = process.env) {\n const env = { HOME: home, USERPROFILE: home, APPDATA: join(home, 'appdata'), LOCALAPPDATA: join(home, 'local'),\n CODEX_HOME: home, XDG_CACHE_HOME: join(home, 'cache'), XDG_CONFIG_HOME: join(home, 'config'),\n XDG_DATA_HOME: join(home, 'data'), TEMP: join(home, 'tmp'), TMP: join(home, 'tmp'), TMPDIR: join(home, 'tmp'),\n NO_COLOR: '1', PYTHONIOENCODING: 'utf-8', PYTHONUTF8: '1' }\n for (const key of ['SystemRoot', 'windir', 'ComSpec', 'LANG', 'LC_ALL']) if (source[key]) env[key] = source[key]\n // Fixed executable paths remove PATH lookup from both supervisor and bridge.\n env.PATH = process.platform === 'win32' ? join(source.SystemRoot ?? 'C:\\\\Windows', 'System32') : '/usr/bin:/bin'\n return env\n}\n\nexport async function resolveNativeHelper({ python = '/usr/bin/python3' } = {}) {\n if (process.platform === 'win32') {\n const executable = join(process.env.SystemRoot ?? 'C:\\\\Windows', 'System32/WindowsPowerShell/v1.0/powershell.exe')\n await access(executable)\n return Object.freeze({ executable: await realpath(executable), prefix: ['-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', join(HERE, 'native-peer.ps1')], platform: 'win32' })\n }\n if (process.platform !== 'linux' || !isAbsolute(python)) throw new Error('NATIVE_PEER_UNAVAILABLE')\n await access(python)\n return Object.freeze({ executable: await realpath(python), prefix: ['-u', join(HERE, 'native-peer.py')], platform: 'linux' })\n}\n\n/** Spawn a packaged native helper. It accepts one bounded JSON configuration on stdin. */\nexport function nativeProcess(helper, mode, spec, { home, env = privateEnvironment(home) } = {}) {\n const events = new EventEmitter()\n const args = helper.platform === 'win32' ? [...helper.prefix, '-Mode', mode] : [...helper.prefix, mode]\n const child = spawn(helper.executable, args, { cwd: home, env, windowsHide: true, shell: false, stdio: ['pipe', 'pipe', 'pipe'] })\n let tail = '', buffer = '', bytes = 0, closed = false\n const decoder = new StringDecoder('utf8'), cliDecoder = new StringDecoder('utf8')\n let cliBuffer = ''\n const frame = value => {\n if (mode === 'supervise' && value.type === 'cli-output') {\n if (typeof value.data !== 'string' || value.data.length > MAX_FRAME * 2) throw new Error('INVALID_CLI_FRAME')\n cliBuffer += cliDecoder.write(Buffer.from(value.data, 'base64'))\n if (Buffer.byteLength(cliBuffer) > MAX_FRAME) throw new Error('CLI_FRAME_LIMIT')\n let end\n while ((end = cliBuffer.indexOf('\\n')) >= 0) {\n const line = cliBuffer.slice(0, end); cliBuffer = cliBuffer.slice(end + 1)\n if (line.trim()) events.emit('message', JSON.parse(line))\n }\n } else events.emit(value.control ? 'control' : 'message', value)\n }\n const exit = new Promise(resolve => child.once('close', (code, signal) => { closed = true; events.emit('closed', { code, signal }); resolve({ code, signal }) }))\n child.on('error', error => events.emit('failure', error))\n child.stdin.on('error', () => {})\n child.stderr.on('data', data => { tail = (tail + data.toString('utf8')).slice(-4096) })\n child.stdout.on('data', chunk => {\n bytes += chunk.length\n buffer += decoder.write(chunk)\n if (bytes > 8 * 1024 * 1024 || Buffer.byteLength(buffer) > MAX_FRAME) { events.emit('failure', new Error('OUTPUT_LIMIT')); child.stdin.end(); return }\n let end\n while ((end = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, end); buffer = buffer.slice(end + 1)\n if (!line.trim()) continue\n try { frame(JSON.parse(line)) }\n catch { events.emit('failure', new Error('INVALID_NATIVE_FRAME')); child.stdin.end() }\n }\n })\n const send = value => new Promise((resolve, reject) => {\n const wire = JSON.stringify(value) + '\\n'\n if (closed || Buffer.byteLength(wire) > MAX_FRAME) { reject(new Error(closed ? 'NATIVE_CLOSED' : 'INPUT_LIMIT')); return }\n child.stdin.write(wire, error => error ? reject(error) : resolve())\n })\n if (spec) void send(spec).catch(error => events.emit('failure', error))\n function waitControl(name, timeoutMs = 15_000) {\n return new Promise((resolve, reject) => {\n const clean = () => { clearTimeout(timer); events.off('control', control); events.off('closed', ended); events.off('failure', failed) }\n const control = value => { if (value.control === name) { clean(); resolve(value) } }\n const ended = () => { clean(); reject(new Error(`NATIVE_${name.toUpperCase()}_FAILED: ${tail.slice(-256)}`)) }\n const failed = error => { clean(); reject(error) }\n const timer = setTimeout(() => { clean(); reject(new Error(`NATIVE_${name.toUpperCase()}_TIMEOUT`)) }, timeoutMs)\n events.on('control', control); events.once('closed', ended); events.once('failure', failed)\n if (closed) ended()\n })\n }\n return Object.freeze({ child, events, exit, send, waitControl, end: () => child.stdin.end(), get stderr() { return tail }, get closed() { return closed } })\n}\n\nexport async function capabilityProbe({ home, python } = {}) {\n let proc\n try {\n const helper = await resolveNativeHelper({ python })\n proc = nativeProcess(helper, 'probe', null, { home })\n const value = await new Promise((resolve, reject) => {\n proc.events.once('message', resolve)\n proc.events.once('failure', reject)\n proc.events.once('closed', () => reject(new Error('NATIVE_PROBE_FAILED')))\n })\n await proc.exit\n return { ...value, helper, limitations: helper.platform === 'linux' ? ['Process groups are not an OS sandbox; adversarial unobserved daemon escape requires a cgroup/container boundary'] : [] }\n } catch (error) { return { available: false, code: 'NATIVE_PEER_UNAVAILABLE', reason: error.message } }\n finally { if (proc && !proc.closed) proc.end() }\n}\n\nexport async function protectProfile(helper, home) {\n if (helper.platform !== 'win32') return\n const proc = nativeProcess(helper, 'protect', { path: home }, { home })\n const protectedValue = await new Promise((resolve, reject) => {\n proc.events.once('message', resolve)\n proc.events.once('failure', reject)\n proc.events.once('closed', () => reject(new Error('PROFILE_ACL_FAILED')))\n })\n proc.end()\n const exit = await proc.exit\n if (!protectedValue.protected || exit.code !== 0) throw new Error('PROFILE_ACL_FAILED')\n}\n"],
5
- "mappings": ";AAAA,SAAS,iBAAiB,cAAc;AACxC,SAAS,gBAAgB;AACzB,SAAS,cAAc,aAAa;AACpC,SAAS,cAAc;AACvB,SAAS,YAAY,4BAA4B;;;ACJjD,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAE9B,SAAS,YAAY,YAAY;AACjC,SAAS,qBAAqB;AAE9B,IAAM,OAAO,cAAc,IAAI,IAAI,KAAK,YAAY,GAAG,CAAC;AACxD,IAAM,YAAY;AAGX,SAAS,mBAAmB,MAAM,SAAS,QAAQ,KAAK;AAC7D,QAAM,MAAM;AAAA,IAAE,MAAM;AAAA,IAAM,aAAa;AAAA,IAAM,SAAS,KAAK,MAAM,SAAS;AAAA,IAAG,cAAc,KAAK,MAAM,OAAO;AAAA,IAC3G,YAAY;AAAA,IAAM,gBAAgB,KAAK,MAAM,OAAO;AAAA,IAAG,iBAAiB,KAAK,MAAM,QAAQ;AAAA,IAC3F,eAAe,KAAK,MAAM,MAAM;AAAA,IAAG,MAAM,KAAK,MAAM,KAAK;AAAA,IAAG,KAAK,KAAK,MAAM,KAAK;AAAA,IAAG,QAAQ,KAAK,MAAM,KAAK;AAAA,IAC5G,UAAU;AAAA,IAAK,kBAAkB;AAAA,IAAS,YAAY;AAAA,EAAI;AAC5D,aAAW,OAAO,CAAC,cAAc,UAAU,WAAW,QAAQ,QAAQ,EAAG,KAAI,OAAO,GAAG,EAAG,KAAI,GAAG,IAAI,OAAO,GAAG;AAE/G,MAAI,OAAO,QAAQ,aAAa,UAAU,KAAK,OAAO,cAAc,eAAe,UAAU,IAAI;AACjG,SAAO;AACT;AAcO,SAAS,cAAc,QAAQ,MAAM,MAAM,EAAE,MAAM,MAAM,mBAAmB,IAAI,EAAE,IAAI,CAAC,GAAG;AAC/F,QAAM,SAAS,IAAI,aAAa;AAChC,QAAM,OAAO,OAAO,aAAa,UAAU,CAAC,GAAG,OAAO,QAAQ,SAAS,IAAI,IAAI,CAAC,GAAG,OAAO,QAAQ,IAAI;AACtG,QAAM,QAAQ,MAAM,OAAO,YAAY,MAAM,EAAE,KAAK,MAAM,KAAK,aAAa,MAAM,OAAO,OAAO,OAAO,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC;AACjI,MAAI,OAAO,IAAI,SAAS,IAAI,QAAQ,GAAG,SAAS;AAChD,QAAM,UAAU,IAAI,cAAc,MAAM,GAAG,aAAa,IAAI,cAAc,MAAM;AAChF,MAAI,YAAY;AAChB,QAAM,QAAQ,WAAS;AACrB,QAAI,SAAS,eAAe,MAAM,SAAS,cAAc;AACvD,UAAI,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,SAAS,YAAY,EAAG,OAAM,IAAI,MAAM,mBAAmB;AAC5G,mBAAa,WAAW,MAAM,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAC/D,UAAI,OAAO,WAAW,SAAS,IAAI,UAAW,OAAM,IAAI,MAAM,iBAAiB;AAC/E,UAAI;AACJ,cAAQ,MAAM,UAAU,QAAQ,IAAI,MAAM,GAAG;AAC3C,cAAM,OAAO,UAAU,MAAM,GAAG,GAAG;AAAG,oBAAY,UAAU,MAAM,MAAM,CAAC;AACzE,YAAI,KAAK,KAAK,EAAG,QAAO,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF,MAAO,QAAO,KAAK,MAAM,UAAU,YAAY,WAAW,KAAK;AAAA,EACjE;AACA,QAAM,OAAO,IAAI,QAAQ,aAAW,MAAM,KAAK,SAAS,CAAC,MAAM,WAAW;AAAE,aAAS;AAAM,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAAG,YAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,EAAE,CAAC,CAAC;AAChK,QAAM,GAAG,SAAS,WAAS,OAAO,KAAK,WAAW,KAAK,CAAC;AACxD,QAAM,MAAM,GAAG,SAAS,MAAM;AAAA,EAAC,CAAC;AAChC,QAAM,OAAO,GAAG,QAAQ,UAAQ;AAAE,YAAQ,OAAO,KAAK,SAAS,MAAM,GAAG,MAAM,KAAK;AAAA,EAAE,CAAC;AACtF,QAAM,OAAO,GAAG,QAAQ,WAAS;AAC/B,aAAS,MAAM;AACf,cAAU,QAAQ,MAAM,KAAK;AAC7B,QAAI,QAAQ,IAAI,OAAO,QAAQ,OAAO,WAAW,MAAM,IAAI,WAAW;AAAE,aAAO,KAAK,WAAW,IAAI,MAAM,cAAc,CAAC;AAAG,YAAM,MAAM,IAAI;AAAG;AAAA,IAAO;AACrJ,QAAI;AACJ,YAAQ,MAAM,OAAO,QAAQ,IAAI,MAAM,GAAG;AACxC,YAAM,OAAO,OAAO,MAAM,GAAG,GAAG;AAAG,eAAS,OAAO,MAAM,MAAM,CAAC;AAChE,UAAI,CAAC,KAAK,KAAK,EAAG;AAClB,UAAI;AAAE,cAAM,KAAK,MAAM,IAAI,CAAC;AAAA,MAAE,QACxB;AAAE,eAAO,KAAK,WAAW,IAAI,MAAM,sBAAsB,CAAC;AAAG,cAAM,MAAM,IAAI;AAAA,MAAE;AAAA,IACvF;AAAA,EACF,CAAC;AACD,QAAM,OAAO,WAAS,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrD,UAAM,OAAO,KAAK,UAAU,KAAK,IAAI;AACrC,QAAI,UAAU,OAAO,WAAW,IAAI,IAAI,WAAW;AAAE,aAAO,IAAI,MAAM,SAAS,kBAAkB,aAAa,CAAC;AAAG;AAAA,IAAO;AACzH,UAAM,MAAM,MAAM,MAAM,WAAS,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAC;AAAA,EACpE,CAAC;AACD,MAAI,KAAM,MAAK,KAAK,IAAI,EAAE,MAAM,WAAS,OAAO,KAAK,WAAW,KAAK,CAAC;AACtE,WAAS,YAAY,MAAM,YAAY,MAAQ;AAC7C,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,QAAQ,MAAM;AAAE,qBAAa,KAAK;AAAG,eAAO,IAAI,WAAW,OAAO;AAAG,eAAO,IAAI,UAAU,KAAK;AAAG,eAAO,IAAI,WAAW,MAAM;AAAA,MAAE;AACtI,YAAM,UAAU,WAAS;AAAE,YAAI,MAAM,YAAY,MAAM;AAAE,gBAAM;AAAG,kBAAQ,KAAK;AAAA,QAAE;AAAA,MAAE;AACnF,YAAM,QAAQ,MAAM;AAAE,cAAM;AAAG,eAAO,IAAI,MAAM,UAAU,KAAK,YAAY,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC;AAAA,MAAE;AAC7G,YAAM,SAAS,WAAS;AAAE,cAAM;AAAG,eAAO,KAAK;AAAA,MAAE;AACjD,YAAM,QAAQ,WAAW,MAAM;AAAE,cAAM;AAAG,eAAO,IAAI,MAAM,UAAU,KAAK,YAAY,CAAC,UAAU,CAAC;AAAA,MAAE,GAAG,SAAS;AAChH,aAAO,GAAG,WAAW,OAAO;AAAG,aAAO,KAAK,UAAU,KAAK;AAAG,aAAO,KAAK,WAAW,MAAM;AAC1F,UAAI,OAAQ,OAAM;AAAA,IACpB,CAAC;AAAA,EACH;AACA,SAAO,OAAO,OAAO,EAAE,OAAO,QAAQ,MAAM,MAAM,aAAa,KAAK,MAAM,MAAM,MAAM,IAAI,GAAG,IAAI,SAAS;AAAE,WAAO;AAAA,EAAK,GAAG,IAAI,SAAS;AAAE,WAAO;AAAA,EAAO,EAAE,CAAC;AAC7J;;;ADjFA,SAAS,SAAS,cAAAA,mBAAkB;AAEpC,IAAI;AAAJ,IAAW;AACX,IAAM,UAAU,oBAAI,IAAI;AACxB,IAAI,WAAW;AACf,IAAM,SAAS,MAAM;AACnB,aAAW,SAAS,QAAQ,OAAO,EAAG,OAAM,OAAO,IAAI,MAAM,eAAe,CAAC;AAC7E,UAAQ,MAAM;AACd,SAAO,IAAI;AACb;AACA,IAAI;AACF,QAAM,CAAC,MAAM,UAAU,IAAI,QAAQ,KAAK,MAAM,CAAC;AAC/C,MAAI,QAAQ,KAAK,WAAW,KAAK,CAACA,YAAW,IAAI,KAAK,CAAC,0BAA0B,KAAK,UAAU,EAAG,OAAM,IAAI,MAAM,4BAA4B;AAC/I,MAAI;AACJ,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,SAAO,CAAC,cAAc,KAAK,IAAI,IAAI,UAAU;AAC3C,QAAI;AAAE,YAAM,OAAO,MAAM,SAAS,IAAI;AAAG,UAAI,KAAK,SAAS,MAAQ,OAAM,IAAI,MAAM,kBAAkB;AAAG,mBAAa,KAAK,MAAM,IAAI;AAAA,IAAE,SAC/H,OAAO;AAAE,UAAI,MAAM,SAAS,SAAU,OAAM;AAAO,YAAM,MAAM,EAAE;AAAA,IAAE;AAAA,EAC5E;AACA,MAAI,CAAC,cAAc,OAAO,WAAW,YAAY,YAAY,OAAO,WAAW,cAAc,SAAU,OAAM,IAAI,MAAM,mBAAmB;AAC1I,QAAM,MAAM,gBAAgB,EAAE,KAAK,OAAO,KAAK,YAAY,WAAW,GAAG,QAAQ,OAAO,MAAM,OAAO,CAAC;AACtG,MAAI,CAAC,OAAO,MAAM,OAAO,KAAK,WAAW,OAAO,GAAG,KAAK,OAAO,KAAK,WAAW,WAAW,WAAW,CAAC,EAAG,OAAM,IAAI,MAAM,qBAAqB;AAC9I,QAAM,OAAO,KAAK,MAAM,WAAW,OAAO;AAC1C,QAAM,mBAAmB,KAAK,MAAM,KAAK,YAAY,KAAK,IAAI,CAAC;AAC/D,QAAM,YAAY,KAAK,MAAM,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAC/D,MAAI,KAAK,YAAY,KAAK,mBAAmB,KAAK,mBAAmB,QAAU,YAAY,KAAK,YAAY,KAAW,OAAM,IAAI,MAAM,mBAAmB;AAC1J,UAAQ;AAAA,IAAc,KAAK;AAAA,IAAQ;AAAA,IAAU,EAAE,UAAU,KAAK,UAAU,WAAW,KAAK,WAAW,aAAa,KAAK,aAAa,OAAO,UAAU;AAAA,IACjJ,EAAE,MAAM,QAAQ,IAAI,GAAG,KAAK,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EAAC;AACjE,QAAM,MAAM,CAAC,IAAI,SAAS,WAAW,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpE,QAAI,MAAM,UAAU,QAAQ,QAAQ,IAAI;AAAE,aAAO,IAAI,MAAM,oBAAoB,CAAC;AAAG;AAAA,IAAO;AAC1F,UAAM,KAAK,EAAE;AACb,UAAM,QAAQ,MAAM;AAAE,YAAM,QAAQ,QAAQ,IAAI,EAAE;AAAG,cAAQ,OAAO,EAAE;AAAG,WAAK,MAAM,KAAK,EAAE,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAG,aAAO,OAAO,IAAI,MAAM,mBAAmB,CAAC;AAAA,IAAE;AAChL,QAAI,QAAQ,SAAS;AAAE,aAAO,IAAI,MAAM,mBAAmB,CAAC;AAAG;AAAA,IAAO;AACtE,UAAMC,SAAQ,WAAW,OAAO,KAAK,IAAI,WAAW,GAAM,CAAC;AAC3D,YAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACvD,UAAM,SAAS,QAAM,WAAS;AAAE,mBAAaA,MAAK;AAAG,cAAQ,oBAAoB,SAAS,KAAK;AAAG,SAAG,KAAK;AAAA,IAAE;AAC5G,YAAQ,IAAI,IAAI,EAAE,SAAS,OAAO,OAAO,GAAG,QAAQ,OAAO,MAAM,EAAE,CAAC;AACpE,SAAK,MAAM,KAAK,EAAE,MAAM,WAAW,IAAI,IAAI,GAAG,QAAQ,CAAC,EAAE,MAAM,MAAM;AAAE,YAAM,QAAQ,QAAQ,IAAI,EAAE;AAAG,cAAQ,OAAO,EAAE;AAAG,aAAO,OAAO,IAAI,MAAM,eAAe,CAAC;AAAA,IAAE,CAAC;AAAA,EACvK,CAAC;AACD,QAAM,OAAO,GAAG,WAAW,aAAW;AACpC,QAAI,SAAS,SAAS,cAAc,CAAC,OAAO,cAAc,QAAQ,EAAE,EAAG;AACvE,UAAM,QAAQ,QAAQ,IAAI,QAAQ,EAAE;AAAG,YAAQ,OAAO,QAAQ,EAAE;AAChE,QAAI,QAAQ,GAAI,QAAO,QAAQ,QAAQ,KAAK;AAAA,QACvC,QAAO,OAAO,IAAI,MAAM,QAAQ,QAAQ,gBAAgB,CAAC;AAAA,EAChE,CAAC;AACD,QAAM,OAAO,GAAG,WAAW,MAAM;AAAE,WAAO;AAAG,SAAK,QAAQ,MAAM;AAAA,EAAE,CAAC;AACnE,QAAM,OAAO,KAAK,UAAU,MAAM;AAAE,WAAO;AAAG,SAAK,QAAQ,MAAM;AAAA,EAAE,CAAC;AACpE,WAAS,WAAW,MAAM;AACxB,UAAM,SAAS,IAAI,OAAO,EAAE,MAAM,8BAA8B,SAAS,QAAQ,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;AACnH,WAAO,kBAAkB,cAAc,OAAO,UAAU,SAAS,EAAE,OAAO,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,OAAO,MAAM,EAAE,EAAE;AACrH,WAAO,kBAAkB,cAAc,OAAO,SAAS,QAAQ;AAC7D,UAAI;AAAE,eAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,QAAQ,EAAE,MAAM,QAAQ,OAAO,MAAM,MAAM,QAAQ,OAAO,aAAa,CAAC,EAAE,GAAG,IAAI,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE;AAAA,MAAE,SACvK,OAAO;AAAE,eAAO,EAAE,SAAS,MAAM,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,CAAC,EAAE;AAAA,MAAE;AAAA,IAC7F,CAAC;AACD,WAAO,UAAU;AACjB,WAAO;AAAA,EACT,GAAG,EAAE,WAAW,IAAI,qBAAqB,QAAQ,OAAO,QAAQ,QAAQ,EAAE,eAAe,OAAQ,CAAC,EAAE,CAAC;AACrG,QAAM,QAAQ,WAAW,MAAM;AAAE,WAAO;AAAG,SAAK,OAAO,MAAM;AAAA,EAAE,GAAG,SAAS;AAAG,QAAM,MAAM;AAC1F,UAAQ,MAAM,KAAK,OAAO,MAAM;AAAE,iBAAa,KAAK;AAAG,WAAO;AAAG,SAAK,OAAO,MAAM;AAAA,EAAE,CAAC;AACxF,SAAS,OAAO;AACd,UAAQ,OAAO,MAAM,qCAAqC,MAAM,OAAO;AAAA,CAAI;AAC3E,SAAO;AAAG,UAAQ,WAAW;AAC/B;",
6
- "names": ["isAbsolute", "timer"]
3
+ "sources": ["../../packages/capability-broker/src/cli-stdio-bridge.mjs", "../../packages/cli-runtime/src/native-process.mjs", "../../packages/cli-runtime/src/native-cli-output.mjs", "../../packages/capability-broker/src/cli-bridge-response.mjs"],
4
+ "sourcesContent": ["import { createPublicKey, verify } from 'node:crypto'\nimport { readFile } from 'node:fs/promises'\nimport { setTimeout as delay } from 'node:timers/promises'\nimport { Server } from '@modelcontextprotocol/server'\nimport { serveStdio, StdioServerTransport } from '@modelcontextprotocol/server/stdio'\nimport { nativeProcess, privateEnvironment } from '../../cli-runtime/src/native-process.mjs'\nimport { dirname, isAbsolute } from 'node:path'\nimport { BridgeResponseReader } from './cli-bridge-response.mjs'\n\nlet relay, handle\nconst pending = new Map()\nconst responses = new BridgeResponseReader()\nlet sequence = 0\nconst finish = () => {\n for (const value of pending.values()) value.reject(new Error('BROKER_CLOSED'))\n pending.clear()\n responses.clear()\n relay?.end()\n}\ntry {\n const [path, publicSpki] = process.argv.slice(2)\n if (process.argv.length !== 4 || !isAbsolute(path) || !/^[A-Za-z0-9_-]{40,256}$/.test(publicSpki)) throw new Error('PRIVATE_BOOTSTRAP_REQUIRED')\n let descriptor\n const deadline = Date.now() + 15_000\n while (!descriptor && Date.now() < deadline) {\n try { const wire = await readFile(path); if (wire.length > 32_768) throw new Error('DESCRIPTOR_LIMIT'); descriptor = JSON.parse(wire) }\n catch (error) { if (error.code !== 'ENOENT') throw error; await delay(50) }\n }\n if (!descriptor || typeof descriptor.payload !== 'string' || typeof descriptor.signature !== 'string') throw new Error('INVALID_BOOTSTRAP')\n const key = createPublicKey({ key: Buffer.from(publicSpki, 'base64url'), format: 'der', type: 'spki' })\n if (!verify(null, Buffer.from(descriptor.payload), key, Buffer.from(descriptor.signature, 'base64url'))) throw new Error('BOOTSTRAP_SIGNATURE')\n const spec = JSON.parse(descriptor.payload)\n const handoffRemaining = Math.floor(spec.expiresAt - Date.now())\n const remaining = Math.floor(spec.sessionExpiresAt - Date.now())\n if (spec.version !== 1 || handoffRemaining < 1 || handoffRemaining > 15_000 || remaining < 1 || remaining > 7_200_000) throw new Error('BOOTSTRAP_EXPIRED')\n relay = nativeProcess(spec.helper, 'client', { endpoint: spec.endpoint, serverPid: spec.serverPid, serverStart: spec.serverStart, ttlMs: remaining },\n { home: dirname(path), env: privateEnvironment(dirname(path)) })\n const ask = (op, payload, signal) => new Promise((resolve, reject) => {\n if (relay.closed || pending.size >= 16) { reject(new Error('BROKER_UNAVAILABLE')); return }\n const id = ++sequence\n const abort = () => { const value = pending.get(id); pending.delete(id); responses.drop(id); void relay.send({ type: 'cancel', id }).catch(() => {}); value?.reject(new Error('REQUEST_CANCELLED')) }\n if (signal?.aborted) { reject(new Error('REQUEST_CANCELLED')); return }\n const timer = setTimeout(abort, Math.min(remaining, 30_000))\n signal?.addEventListener('abort', abort, { once: true })\n const settle = fn => value => { clearTimeout(timer); signal?.removeEventListener('abort', abort); fn(value) }\n pending.set(id, { resolve: settle(resolve), reject: settle(reject) })\n void relay.send({ type: 'request', id, op, ...payload }).catch(() => { const value = pending.get(id); pending.delete(id); responses.drop(id); value?.reject(new Error('BROKER_CLOSED')) })\n })\n relay.events.on('message', message => {\n if (!Number.isSafeInteger(message?.id) || !pending.has(message.id)) return\n try {\n const response = responses.accept(message)\n if (!response) return\n const value = pending.get(response.id); pending.delete(response.id)\n if (response.ok) value?.resolve(response)\n else value?.reject(new Error(response.code ?? 'BROKER_REFUSED'))\n } catch {\n const value = pending.get(message.id); pending.delete(message.id); responses.drop(message.id)\n value?.reject(new Error('INVALID_BRIDGE_RESPONSE'))\n }\n })\n relay.events.on('failure', () => { finish(); void handle?.close() })\n relay.events.once('closed', () => { finish(); void handle?.close() })\n handle = serveStdio(() => {\n const server = new Server({ name: 'dsh-task-capability-bridge', version: '0.0.0' }, { capabilities: { tools: {} } })\n server.setRequestHandler('tools/list', async (_request, ctx) => ({ tools: (await ask('list', {}, ctx.mcpReq.signal)).value }))\n server.setRequestHandler('tools/call', async (request, ctx) => {\n try {\n const response = await ask('call', { name: request.params.name, args: request.params.arguments ?? {} }, ctx.mcpReq.signal)\n return response.mcpResult ?? { content: [{ type: 'text', text: JSON.stringify(response.value) }] }\n }\n catch (error) { return { isError: true, content: [{ type: 'text', text: error.message }] } }\n })\n server.onclose = finish\n return server\n }, { transport: new StdioServerTransport(process.stdin, process.stdout, { maxBufferSize: 262_144 }) })\n const timer = setTimeout(() => { finish(); void handle.close() }, remaining); timer.unref()\n process.stdin.once('end', () => { clearTimeout(timer); finish(); void handle.close() })\n} catch (error) {\n process.stderr.write(`Private broker bootstrap refused: ${error.message}\\n`)\n finish(); process.exitCode = 2\n}\n", "import { spawn } from 'node:child_process'\nimport { EventEmitter } from 'node:events'\nimport { StringDecoder } from 'node:string_decoder'\nimport { access, lstat, readFile, readdir, realpath, rmdir, unlink } from 'node:fs/promises'\nimport { lstatSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, writeFileSync } from 'node:fs'\nimport { randomBytes } from 'node:crypto'\nimport { tmpdir } from 'node:os'\nimport { basename, dirname, isAbsolute, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { NativeCliOutput } from './native-cli-output.mjs'\n\nconst HERE = fileURLToPath(new URL('.', import.meta.url))\nconst MAX_FRAME = 262_144\nconst COMPILER_ROOT = 'DSH_NATIVE_COMPILER_ROOT'\nconst COMPILER_SCRATCH = 'DSH_NATIVE_COMPILER_SCRATCH'\n// Capture only the trusted Host launch environment, never a model's spec or an\n// env argument. A packaged bridge inherits this one non-secret root hint so its\n// compiler does not start a new root beneath an ever-deeper private TEMP.\nconst inheritedCompilerRoot = process.platform === 'win32' ? process.env[COMPILER_ROOT] : undefined\nconst hostTemp = process.platform === 'win32' ? tmpdir() : null\nlet compilerRoot = null\nconst compilerFailure = () => Object.assign(new Error('NATIVE_COMPILER_SCRATCH_UNAVAILABLE'), { code: 'NATIVE_COMPILER_SCRATCH_UNAVAILABLE' })\nconst sameDirectory = (info, expected) => info.isDirectory() && !info.isSymbolicLink() && info.dev === expected.dev && info.ino === expected.ino\nconst rootStamp = path => `dsh-native-compiler-v1:${basename(path)}\\n`\n\nfunction compilerDirectory() {\n try {\n if (!compilerRoot) {\n if (inheritedCompilerRoot !== undefined) {\n if (!isAbsolute(inheritedCompilerRoot) || inheritedCompilerRoot.length > 140 || !/^dshc-[a-f0-9]{16}$/.test(basename(inheritedCompilerRoot))) throw compilerFailure()\n const info = lstatSync(inheritedCompilerRoot, { bigint: true })\n if (!info.isDirectory() || info.isSymbolicLink() || realpathSync(inheritedCompilerRoot) !== inheritedCompilerRoot || readFileSync(join(inheritedCompilerRoot, '.dsh-root'), 'utf8') !== rootStamp(inheritedCompilerRoot)) throw compilerFailure()\n compilerRoot = { path: inheritedCompilerRoot, info }\n } else {\n const parent = realpathSync(hostTemp)\n const path = join(parent, `dshc-${randomBytes(8).toString('hex')}`)\n if (path.length > 140) throw compilerFailure()\n mkdirSync(path)\n writeFileSync(join(path, '.dsh-root'), rootStamp(path), { flag: 'wx' })\n compilerRoot = { path, info: lstatSync(path, { bigint: true }) }\n }\n }\n if (!sameDirectory(lstatSync(compilerRoot.path, { bigint: true }), compilerRoot.info) || realpathSync(compilerRoot.path) !== compilerRoot.path) throw compilerFailure()\n const path = mkdtempSync(join(compilerRoot.path, 'c-'))\n const info = lstatSync(path, { bigint: true }), owner = randomBytes(16).toString('hex')\n writeFileSync(join(path, '.dsh-owner'), owner, { flag: 'wx' })\n const root = compilerRoot\n // Never recursively remove a path obtained from the environment. Only this\n // allocated child, after confirmed helper exit, with unchanged filesystem\n // identity and no links/subdirectories, is eligible for flat cleanup.\n const cleanup = async () => {\n try {\n if (dirname(path) !== root.path || !/^c-[A-Za-z0-9]{6}$/.test(basename(path))) return false\n if (!sameDirectory(await lstat(root.path, { bigint: true }), root.info) || await realpath(root.path) !== root.path) return false\n if (!sameDirectory(await lstat(path, { bigint: true }), info) || await realpath(path) !== path || await readFile(join(path, '.dsh-owner'), 'utf8') !== owner) return false\n const names = await readdir(path)\n if (names.length > 128) return false\n for (const name of names) { const entry = await lstat(join(path, name)); if (!entry.isFile() || entry.isSymbolicLink()) return false }\n for (const name of names) await unlink(join(path, name))\n await rmdir(path)\n return true\n } catch { return false } // Busy, replaced or unknown resources remain.\n }\n return { root: root.path, path, cleanup }\n } catch { throw compilerFailure() }\n}\n\n/** Deliberately small environment: profiles, credentials and proxy secrets are never inherited. */\nexport function privateEnvironment(home, source = process.env) {\n const env = { HOME: home, USERPROFILE: home, APPDATA: join(home, 'appdata'), LOCALAPPDATA: join(home, 'local'),\n CODEX_HOME: home, XDG_CACHE_HOME: join(home, 'cache'), XDG_CONFIG_HOME: join(home, 'config'),\n XDG_DATA_HOME: join(home, 'data'), TEMP: join(home, 'tmp'), TMP: join(home, 'tmp'), TMPDIR: join(home, 'tmp'),\n NO_COLOR: '1', PYTHONIOENCODING: 'utf-8', PYTHONUTF8: '1' }\n for (const key of ['SystemRoot', 'windir', 'ComSpec', 'LANG', 'LC_ALL']) if (source[key]) env[key] = source[key]\n // Fixed executable paths remove PATH lookup from both supervisor and bridge.\n env.PATH = process.platform === 'win32' ? join(source.SystemRoot ?? 'C:\\\\Windows', 'System32') : '/usr/bin:/bin'\n if (process.platform === 'win32' && (compilerRoot?.path ?? inheritedCompilerRoot)) env[COMPILER_ROOT] = compilerRoot?.path ?? inheritedCompilerRoot\n return env\n}\n\nexport async function resolveNativeHelper({ python = '/usr/bin/python3' } = {}) {\n if (process.platform === 'win32') {\n const executable = join(process.env.SystemRoot ?? 'C:\\\\Windows', 'System32/WindowsPowerShell/v1.0/powershell.exe')\n await access(executable)\n return Object.freeze({ executable: await realpath(executable), prefix: ['-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', join(HERE, 'native-peer.ps1')], platform: 'win32' })\n }\n if (process.platform !== 'linux' || !isAbsolute(python)) throw new Error('NATIVE_PEER_UNAVAILABLE')\n await access(python)\n return Object.freeze({ executable: await realpath(python), prefix: ['-u', join(HERE, 'native-peer.py')], platform: 'linux' })\n}\n\n/** Spawn a packaged native helper. It accepts one bounded JSON configuration on stdin. */\nexport function nativeProcess(helper, mode, spec, { home, env = privateEnvironment(home) } = {}) {\n const events = new EventEmitter()\n const args = helper.platform === 'win32' ? [...helper.prefix, '-Mode', mode] : [...helper.prefix, mode]\n const compiler = helper.platform === 'win32' ? compilerDirectory() : null\n const helperEnv = compiler ? Object.fromEntries(Object.entries(env).filter(([key]) => ![COMPILER_ROOT, COMPILER_SCRATCH].includes(key.toUpperCase()))) : env\n if (compiler) { helperEnv[COMPILER_ROOT] = compiler.root; helperEnv[COMPILER_SCRATCH] = compiler.path }\n const child = spawn(helper.executable, args, { cwd: home, env: helperEnv, windowsHide: true, shell: false, stdio: ['pipe', 'pipe', 'pipe'] })\n let tail = '', buffer = '', bytes = 0, closed = false, treeStopped = false\n const decoder = new StringDecoder('utf8'), cliDecoder = new StringDecoder('utf8')\n const cliOutput = new NativeCliOutput()\n const frame = value => {\n if (mode === 'supervise' && value.control === 'stopped' && value.treeStopped === true) treeStopped = true\n if (mode === 'supervise' && value.type === 'cli-output') {\n if (typeof value.data !== 'string' || value.data.length > MAX_FRAME * 2) throw new Error('INVALID_CLI_FRAME')\n for (const message of cliOutput.push(cliDecoder.write(Buffer.from(value.data, 'base64')))) events.emit('message', message)\n } else events.emit(value.control ? 'control' : 'message', value)\n }\n const exit = new Promise(resolve => child.once('close', async (code, signal) => {\n closed = true\n if (compiler && code === 0 && signal === null && (mode !== 'supervise' || treeStopped)) await compiler.cleanup()\n events.emit('closed', { code, signal }); resolve({ code, signal })\n }))\n child.on('error', error => events.emit('failure', error))\n child.stdin.on('error', () => {})\n child.stderr.on('data', data => { tail = (tail + data.toString('utf8')).slice(-4096) })\n child.stdout.on('data', chunk => {\n bytes += chunk.length\n buffer += decoder.write(chunk)\n // MCP responses and CLI image echoes have their own bounded readers. Their\n // retained connections can carry several screenshots without a raw lifetime cap.\n const boundedStream = mode === 'client' || mode === 'server' || mode === 'supervise'\n if (!boundedStream && bytes > 8 * 1024 * 1024 || Buffer.byteLength(buffer) > MAX_FRAME) { events.emit('failure', new Error('OUTPUT_LIMIT')); child.stdin.end(); return }\n let end\n while ((end = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, end); buffer = buffer.slice(end + 1)\n if (!line.trim()) continue\n try { frame(JSON.parse(line)) }\n catch { events.emit('failure', new Error('INVALID_NATIVE_FRAME')); child.stdin.end() }\n }\n })\n const send = value => new Promise((resolve, reject) => {\n const wire = JSON.stringify(value) + '\\n'\n if (closed || Buffer.byteLength(wire) > MAX_FRAME) { reject(new Error(closed ? 'NATIVE_CLOSED' : 'INPUT_LIMIT')); return }\n child.stdin.write(wire, error => error ? reject(error) : resolve())\n })\n if (spec) void send(spec).catch(error => events.emit('failure', error))\n function waitControl(name, timeoutMs = 15_000) {\n return new Promise((resolve, reject) => {\n const clean = () => { clearTimeout(timer); events.off('control', control); events.off('closed', ended); events.off('failure', failed) }\n const control = value => { if (value.control === name) { clean(); resolve(value) } }\n const ended = () => { clean(); reject(new Error(`NATIVE_${name.toUpperCase()}_FAILED: ${tail.slice(-256)}`)) }\n const failed = error => { clean(); reject(error) }\n const timer = setTimeout(() => { clean(); reject(new Error(`NATIVE_${name.toUpperCase()}_TIMEOUT`)) }, timeoutMs)\n events.on('control', control); events.once('closed', ended); events.once('failure', failed)\n if (closed) ended()\n })\n }\n return Object.freeze({ child, events, exit, send, waitControl, end: () => child.stdin.end(), get stderr() { return tail }, get closed() { return closed } })\n}\n\nexport async function capabilityProbe({ home, python } = {}) {\n let proc\n try {\n const helper = await resolveNativeHelper({ python })\n proc = nativeProcess(helper, 'probe', null, { home })\n const value = await new Promise((resolve, reject) => {\n proc.events.once('message', resolve)\n proc.events.once('failure', reject)\n proc.events.once('closed', () => reject(new Error('NATIVE_PROBE_FAILED')))\n })\n await proc.exit\n return { ...value, helper, limitations: helper.platform === 'linux' ? ['Process groups are not an OS sandbox; adversarial unobserved daemon escape requires a cgroup/container boundary'] : [] }\n } catch (error) { return { available: false, code: 'NATIVE_PEER_UNAVAILABLE', reason: error.message } }\n finally { if (proc && !proc.closed) proc.end() }\n}\n\nexport async function protectProfile(helper, home) {\n if (helper.platform !== 'win32') return\n const proc = nativeProcess(helper, 'protect', { path: home }, { home })\n const protectedValue = await new Promise((resolve, reject) => {\n proc.events.once('message', resolve)\n proc.events.once('failure', reject)\n proc.events.once('closed', () => reject(new Error('PROFILE_ACL_FAILED')))\n })\n proc.end()\n const exit = await proc.exit\n if (!protectedValue.protected || exit.code !== 0) throw new Error('PROFILE_ACL_FAILED')\n}\n", "import { createHash } from 'node:crypto'\n\nconst FRAME = 262_144\nconst RAW_FRAME = 18 * 1024 * 1024\nconst IMAGE = 6 * 1024 * 1024\nconst fail = () => { throw new Error('CLI_FRAME_LIMIT') }\n\n// Claude's verbose user/tool_result events can echo the image already delivered over MCP.\n// Keep bounded receipts for those echoes; the model has received the original pixels itself.\nfunction receipt(frame, rawBytes) {\n const results = frame?.type === 'user' && frame.message?.content\n const toolResult = Array.isArray(results) && results.length > 0 && results.every(block => block?.type === 'tool_result' && typeof block.tool_use_id === 'string')\n if (!toolResult) { if (rawBytes > FRAME) fail(); return frame }\n let imageBytes = 0, images = 0, nodes = 0\n const visit = (value, depth = 0) => {\n if (++nodes > 30000 || depth > 24) fail()\n if (!value || typeof value !== 'object') return value\n if (value.type === 'image') {\n const source = value.source\n const data = source?.type === 'base64' ? source.data : value.data\n const mediaType = source?.type === 'base64' ? source.media_type : value.mimeType\n if (typeof data !== 'string' || data.length > IMAGE / 3 * 4 || !['image/png', 'image/jpeg', 'image/webp'].includes(mediaType)) fail()\n const bytes = Buffer.from(data, 'base64')\n if (!bytes.length || bytes.length > IMAGE || bytes.toString('base64') !== data || ++images > 32 || (imageBytes += bytes.length) > IMAGE * 2) fail()\n return { type: 'image', mediaType, bytes: bytes.length, sha256: createHash('sha256').update(bytes).digest('hex') }\n }\n if (Array.isArray(value)) return value.map(item => visit(item, depth + 1))\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, visit(item, depth + 1)]))\n }\n const result = visit(frame)\n if (rawBytes > FRAME && !images || Buffer.byteLength(JSON.stringify(result)) > FRAME) fail()\n return result\n}\n\n/** Bound raw JSON lines separately from the non-image session output budget. */\nexport class NativeCliOutput {\n #buffer = ''\n #bytes = 0\n push(text) {\n this.#buffer += text\n const frames = []\n let end\n while ((end = this.#buffer.indexOf('\\n')) >= 0) {\n const line = this.#buffer.slice(0, end)\n this.#buffer = this.#buffer.slice(end + 1)\n const rawBytes = Buffer.byteLength(line)\n if (rawBytes > RAW_FRAME) fail()\n if (!line.trim()) continue\n const frame = receipt(JSON.parse(line), rawBytes)\n this.#bytes += Buffer.byteLength(JSON.stringify(frame))\n if (this.#bytes > 8 * 1024 * 1024) fail()\n frames.push(frame)\n }\n if (Buffer.byteLength(this.#buffer) > RAW_FRAME) fail()\n return frames\n }\n}\n", "import { createHash } from 'node:crypto'\n\nconst CHUNK_BYTES = 128 * 1024\nconst MAX_RESPONSE = 9 * 1024 * 1024\nconst MAX_BUFFERED = 16 * 1024 * 1024\nconst fail = () => { throw new Error('INVALID_BRIDGE_RESPONSE') }\nconst sha = bytes => createHash('sha256').update(bytes).digest('hex')\n\n/** Large MCP pictures cross the existing bounded native pipe in small frames. */\nexport function* bridgeResponseFrames(id, value) {\n let bytes = Buffer.from(JSON.stringify({ type: 'response', id, ...value }))\n if (bytes.length > MAX_RESPONSE) bytes = Buffer.from(JSON.stringify({ type: 'response', id, ok: false, code: 'OUTPUT_LIMIT' }))\n if (bytes.length <= CHUNK_BYTES) { yield JSON.parse(bytes.toString('utf8')); return }\n yield { type: 'response-start', id, bytes: bytes.length }\n for (let offset = 0, index = 0; offset < bytes.length; offset += CHUNK_BYTES, index++) {\n yield { type: 'response-chunk', id, index, data: bytes.subarray(offset, offset + CHUNK_BYTES).toString('base64') }\n }\n yield { type: 'response-end', id, sha256: sha(bytes) }\n}\n\n/** Reassembly is bounded across all pending calls and releases on cancellation. */\nexport class BridgeResponseReader {\n #parts = new Map()\n #buffered = 0\n\n drop(id) {\n const state = this.#parts.get(id)\n if (state) this.#buffered -= state.size\n this.#parts.delete(id)\n }\n\n clear() { this.#parts.clear(); this.#buffered = 0 }\n\n accept(frame) {\n if (!Number.isSafeInteger(frame?.id) || frame.id < 1) fail()\n if (frame.type === 'response') { this.drop(frame.id); return frame }\n if (frame.type === 'response-start') {\n if (this.#parts.has(frame.id) || this.#parts.size >= 16 || !Number.isSafeInteger(frame.bytes)\n || frame.bytes <= CHUNK_BYTES || frame.bytes > MAX_RESPONSE) fail()\n this.#parts.set(frame.id, { expected: frame.bytes, size: 0, chunks: [] })\n return null\n }\n const state = this.#parts.get(frame.id)\n if (!state) fail()\n if (frame.type === 'response-chunk') {\n if (frame.index !== state.chunks.length || typeof frame.data !== 'string' || frame.data.length > Math.ceil(CHUNK_BYTES / 3) * 4) fail()\n const bytes = Buffer.from(frame.data, 'base64')\n if (!bytes.length || bytes.length > CHUNK_BYTES || bytes.toString('base64') !== frame.data\n || state.size + bytes.length > state.expected || this.#buffered + bytes.length > MAX_BUFFERED) fail()\n state.chunks.push(bytes); state.size += bytes.length; this.#buffered += bytes.length\n return null\n }\n if (frame.type !== 'response-end' || state.size !== state.expected) fail()\n const bytes = Buffer.concat(state.chunks)\n this.drop(frame.id)\n if (frame.sha256 !== sha(bytes)) fail()\n const value = JSON.parse(bytes.toString('utf8'))\n if (value.type !== 'response' || value.id !== frame.id) fail()\n return value\n }\n}\n\n/** Only a trusted handler can render MCP text or pictures. */\nexport function normalizeBridgeMcpResult(value) {\n if (!value || !Array.isArray(value.content) || value.content.length > 32\n || Object.keys(value).some(key => !['content', 'isError'].includes(key))\n || value.isError !== undefined && typeof value.isError !== 'boolean') fail()\n for (const block of value.content) {\n if (block?.type === 'text') {\n if (Object.keys(block).some(key => !['type', 'text'].includes(key)) || typeof block.text !== 'string') fail()\n } else if (block?.type === 'image') {\n if (Object.keys(block).some(key => !['type', 'data', 'mimeType'].includes(key))\n || !['image/png', 'image/jpeg', 'image/webp'].includes(block.mimeType) || typeof block.data !== 'string'\n || block.data.length > 8 * 1024 * 1024) fail()\n const bytes = Buffer.from(block.data, 'base64')\n if (!bytes.length || bytes.toString('base64') !== block.data || bytes.length > 6 * 1024 * 1024) fail()\n } else fail()\n }\n return value\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["readFile", "info", "path", "dirname", "isAbsolute", "createHash", "fail", "fail", "bytes", "isAbsolute", "readFile", "dirname", "timer"]
7
7
  }