@openma/common 0.0.0-stage → 0.9.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 (328) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +391 -2
  3. package/dist/acp-artifacts/binary.d.ts +35 -0
  4. package/dist/acp-artifacts/binary.d.ts.map +1 -0
  5. package/dist/acp-artifacts/binary.js +120 -0
  6. package/dist/acp-artifacts/binary.js.map +1 -0
  7. package/dist/acp-artifacts/index.d.ts +7 -0
  8. package/dist/acp-artifacts/index.d.ts.map +1 -0
  9. package/dist/acp-artifacts/index.js +7 -0
  10. package/dist/acp-artifacts/index.js.map +1 -0
  11. package/dist/acp-artifacts/node-abi.d.ts +3 -0
  12. package/dist/acp-artifacts/node-abi.d.ts.map +1 -0
  13. package/dist/acp-artifacts/node-abi.js +17 -0
  14. package/dist/acp-artifacts/node-abi.js.map +1 -0
  15. package/dist/acp-artifacts/npm-cli.d.ts +3 -0
  16. package/dist/acp-artifacts/npm-cli.d.ts.map +1 -0
  17. package/dist/acp-artifacts/npm-cli.js +9 -0
  18. package/dist/acp-artifacts/npm-cli.js.map +1 -0
  19. package/dist/acp-artifacts/npm.d.ts +37 -0
  20. package/dist/acp-artifacts/npm.d.ts.map +1 -0
  21. package/dist/acp-artifacts/npm.js +167 -0
  22. package/dist/acp-artifacts/npm.js.map +1 -0
  23. package/dist/acp-artifacts/registry.d.ts +45 -0
  24. package/dist/acp-artifacts/registry.d.ts.map +1 -0
  25. package/dist/acp-artifacts/registry.js +206 -0
  26. package/dist/acp-artifacts/registry.js.map +1 -0
  27. package/dist/acp-artifacts/shared.d.ts +45 -0
  28. package/dist/acp-artifacts/shared.d.ts.map +1 -0
  29. package/dist/acp-artifacts/shared.js +157 -0
  30. package/dist/acp-artifacts/shared.js.map +1 -0
  31. package/dist/acp-artifacts/uvx.d.ts +32 -0
  32. package/dist/acp-artifacts/uvx.d.ts.map +1 -0
  33. package/dist/acp-artifacts/uvx.js +95 -0
  34. package/dist/acp-artifacts/uvx.js.map +1 -0
  35. package/dist/acp-fork/index.d.ts +51 -0
  36. package/dist/acp-fork/index.d.ts.map +1 -0
  37. package/dist/acp-fork/index.js +116 -0
  38. package/dist/acp-fork/index.js.map +1 -0
  39. package/dist/acp-harnesses/agent-setup.d.ts +118 -0
  40. package/dist/acp-harnesses/agent-setup.d.ts.map +1 -0
  41. package/dist/acp-harnesses/agent-setup.js +717 -0
  42. package/dist/acp-harnesses/agent-setup.js.map +1 -0
  43. package/dist/acp-harnesses/custom-agents.d.ts +81 -0
  44. package/dist/acp-harnesses/custom-agents.d.ts.map +1 -0
  45. package/dist/acp-harnesses/custom-agents.js +361 -0
  46. package/dist/acp-harnesses/custom-agents.js.map +1 -0
  47. package/dist/acp-harnesses/headless-launch.d.ts +34 -0
  48. package/dist/acp-harnesses/headless-launch.d.ts.map +1 -0
  49. package/dist/acp-harnesses/headless-launch.js +67 -0
  50. package/dist/acp-harnesses/headless-launch.js.map +1 -0
  51. package/dist/acp-harnesses/index.d.ts +18 -0
  52. package/dist/acp-harnesses/index.d.ts.map +1 -0
  53. package/dist/acp-harnesses/index.js +58 -0
  54. package/dist/acp-harnesses/index.js.map +1 -0
  55. package/dist/acp-harnesses/install-state.d.ts +86 -0
  56. package/dist/acp-harnesses/install-state.d.ts.map +1 -0
  57. package/dist/acp-harnesses/install-state.js +322 -0
  58. package/dist/acp-harnesses/install-state.js.map +1 -0
  59. package/dist/acp-harnesses/installer.d.ts +145 -0
  60. package/dist/acp-harnesses/installer.d.ts.map +1 -0
  61. package/dist/acp-harnesses/installer.js +716 -0
  62. package/dist/acp-harnesses/installer.js.map +1 -0
  63. package/dist/acp-harnesses/known-agents.d.ts +154 -0
  64. package/dist/acp-harnesses/known-agents.d.ts.map +1 -0
  65. package/dist/acp-harnesses/known-agents.js +240 -0
  66. package/dist/acp-harnesses/known-agents.js.map +1 -0
  67. package/dist/acp-harnesses/launcher.d.ts +27 -0
  68. package/dist/acp-harnesses/launcher.d.ts.map +1 -0
  69. package/dist/acp-harnesses/launcher.js +64 -0
  70. package/dist/acp-harnesses/launcher.js.map +1 -0
  71. package/dist/acp-harnesses/registry-fetch.d.ts +42 -0
  72. package/dist/acp-harnesses/registry-fetch.d.ts.map +1 -0
  73. package/dist/acp-harnesses/registry-fetch.js +132 -0
  74. package/dist/acp-harnesses/registry-fetch.js.map +1 -0
  75. package/dist/acp-harnesses/registry.d.ts +36 -0
  76. package/dist/acp-harnesses/registry.d.ts.map +1 -0
  77. package/dist/acp-harnesses/registry.js +307 -0
  78. package/dist/acp-harnesses/registry.js.map +1 -0
  79. package/dist/acp-runtime/errors.d.ts +7 -0
  80. package/dist/acp-runtime/errors.d.ts.map +1 -0
  81. package/dist/acp-runtime/errors.js +17 -0
  82. package/dist/acp-runtime/errors.js.map +1 -0
  83. package/dist/acp-runtime/fork-support.d.ts +8 -0
  84. package/dist/acp-runtime/fork-support.d.ts.map +1 -0
  85. package/dist/acp-runtime/fork-support.js +20 -0
  86. package/dist/acp-runtime/fork-support.js.map +1 -0
  87. package/dist/acp-runtime/index.d.ts +11 -0
  88. package/dist/acp-runtime/index.d.ts.map +1 -0
  89. package/dist/acp-runtime/index.js +6 -0
  90. package/dist/acp-runtime/index.js.map +1 -0
  91. package/dist/acp-runtime/probe.d.ts +103 -0
  92. package/dist/acp-runtime/probe.d.ts.map +1 -0
  93. package/dist/acp-runtime/probe.js +872 -0
  94. package/dist/acp-runtime/probe.js.map +1 -0
  95. package/dist/acp-runtime/runtime.d.ts +7 -0
  96. package/dist/acp-runtime/runtime.d.ts.map +1 -0
  97. package/dist/acp-runtime/runtime.js +26 -0
  98. package/dist/acp-runtime/runtime.js.map +1 -0
  99. package/dist/acp-runtime/session.d.ts +87 -0
  100. package/dist/acp-runtime/session.d.ts.map +1 -0
  101. package/dist/acp-runtime/session.js +1071 -0
  102. package/dist/acp-runtime/session.js.map +1 -0
  103. package/dist/acp-runtime/spawners/node.d.ts +5 -0
  104. package/dist/acp-runtime/spawners/node.d.ts.map +1 -0
  105. package/dist/acp-runtime/spawners/node.js +244 -0
  106. package/dist/acp-runtime/spawners/node.js.map +1 -0
  107. package/dist/acp-runtime/types.d.ts +180 -0
  108. package/dist/acp-runtime/types.d.ts.map +1 -0
  109. package/dist/acp-runtime/types.js +2 -0
  110. package/dist/acp-runtime/types.js.map +1 -0
  111. package/dist/agent-contract/acp.d.ts +4 -0
  112. package/dist/agent-contract/acp.d.ts.map +1 -0
  113. package/dist/agent-contract/acp.js +273 -0
  114. package/dist/agent-contract/acp.js.map +1 -0
  115. package/dist/agent-contract/index.d.ts +125 -0
  116. package/dist/agent-contract/index.d.ts.map +1 -0
  117. package/dist/agent-contract/index.js +102 -0
  118. package/dist/agent-contract/index.js.map +1 -0
  119. package/dist/agent-contract/managed.d.ts +5 -0
  120. package/dist/agent-contract/managed.d.ts.map +1 -0
  121. package/dist/agent-contract/managed.js +242 -0
  122. package/dist/agent-contract/managed.js.map +1 -0
  123. package/dist/agent-ui/index.d.ts +170 -0
  124. package/dist/agent-ui/index.d.ts.map +1 -0
  125. package/dist/agent-ui/index.js +853 -0
  126. package/dist/agent-ui/index.js.map +1 -0
  127. package/dist/agent-ui/presentation.d.ts +30 -0
  128. package/dist/agent-ui/presentation.d.ts.map +1 -0
  129. package/dist/agent-ui/presentation.js +79 -0
  130. package/dist/agent-ui/presentation.js.map +1 -0
  131. package/dist/agent-ui/react.d.ts +50 -0
  132. package/dist/agent-ui/react.d.ts.map +1 -0
  133. package/dist/agent-ui/react.js +334 -0
  134. package/dist/agent-ui/react.js.map +1 -0
  135. package/dist/brand/index.d.ts +17 -0
  136. package/dist/brand/index.d.ts.map +1 -0
  137. package/dist/brand/index.js +119 -0
  138. package/dist/brand/index.js.map +1 -0
  139. package/dist/brand/openma-logo-mark.svg +7 -0
  140. package/dist/brand/tokens.css +77 -0
  141. package/dist/brand/website.css +67 -0
  142. package/dist/chat-ui/acp.d.ts +26 -0
  143. package/dist/chat-ui/acp.d.ts.map +1 -0
  144. package/dist/chat-ui/acp.js +166 -0
  145. package/dist/chat-ui/acp.js.map +1 -0
  146. package/dist/chat-ui/components.d.ts +230 -0
  147. package/dist/chat-ui/components.d.ts.map +1 -0
  148. package/dist/chat-ui/components.js +561 -0
  149. package/dist/chat-ui/components.js.map +1 -0
  150. package/dist/chat-ui/composer-drafts.d.ts +21 -0
  151. package/dist/chat-ui/composer-drafts.d.ts.map +1 -0
  152. package/dist/chat-ui/composer-drafts.js +58 -0
  153. package/dist/chat-ui/composer-drafts.js.map +1 -0
  154. package/dist/chat-ui/controller.d.ts +61 -0
  155. package/dist/chat-ui/controller.d.ts.map +1 -0
  156. package/dist/chat-ui/controller.js +218 -0
  157. package/dist/chat-ui/controller.js.map +1 -0
  158. package/dist/chat-ui/index.d.ts +8 -0
  159. package/dist/chat-ui/index.d.ts.map +1 -0
  160. package/dist/chat-ui/index.js +8 -0
  161. package/dist/chat-ui/index.js.map +1 -0
  162. package/dist/chat-ui/markdown.d.ts +37 -0
  163. package/dist/chat-ui/markdown.d.ts.map +1 -0
  164. package/dist/chat-ui/markdown.js +33 -0
  165. package/dist/chat-ui/markdown.js.map +1 -0
  166. package/dist/chat-ui/presentation.d.ts +34 -0
  167. package/dist/chat-ui/presentation.d.ts.map +1 -0
  168. package/dist/chat-ui/presentation.js +191 -0
  169. package/dist/chat-ui/presentation.js.map +1 -0
  170. package/dist/chat-ui/styles.css +815 -0
  171. package/dist/chat-ui/utils.d.ts +14 -0
  172. package/dist/chat-ui/utils.d.ts.map +1 -0
  173. package/dist/chat-ui/utils.js +71 -0
  174. package/dist/chat-ui/utils.js.map +1 -0
  175. package/dist/local-runtime/checkpoint.d.ts +28 -0
  176. package/dist/local-runtime/checkpoint.d.ts.map +1 -0
  177. package/dist/local-runtime/checkpoint.js +2 -0
  178. package/dist/local-runtime/checkpoint.js.map +1 -0
  179. package/dist/local-runtime/daemon-connection.d.ts +27 -0
  180. package/dist/local-runtime/daemon-connection.d.ts.map +1 -0
  181. package/dist/local-runtime/daemon-connection.js +161 -0
  182. package/dist/local-runtime/daemon-connection.js.map +1 -0
  183. package/dist/local-runtime/daemon-host.d.ts +39 -0
  184. package/dist/local-runtime/daemon-host.d.ts.map +1 -0
  185. package/dist/local-runtime/daemon-host.js +88 -0
  186. package/dist/local-runtime/daemon-host.js.map +1 -0
  187. package/dist/local-runtime/index.d.ts +6 -0
  188. package/dist/local-runtime/index.d.ts.map +1 -0
  189. package/dist/local-runtime/index.js +5 -0
  190. package/dist/local-runtime/index.js.map +1 -0
  191. package/dist/local-runtime/runtime.d.ts +36 -0
  192. package/dist/local-runtime/runtime.d.ts.map +1 -0
  193. package/dist/local-runtime/runtime.js +82 -0
  194. package/dist/local-runtime/runtime.js.map +1 -0
  195. package/dist/local-runtime/session-host.d.ts +62 -0
  196. package/dist/local-runtime/session-host.d.ts.map +1 -0
  197. package/dist/local-runtime/session-host.js +477 -0
  198. package/dist/local-runtime/session-host.js.map +1 -0
  199. package/dist/managed-runtime/acp-subagents.d.ts +14 -0
  200. package/dist/managed-runtime/acp-subagents.d.ts.map +1 -0
  201. package/dist/managed-runtime/acp-subagents.js +67 -0
  202. package/dist/managed-runtime/acp-subagents.js.map +1 -0
  203. package/dist/managed-runtime/claimed-environment-work.d.ts +61 -0
  204. package/dist/managed-runtime/claimed-environment-work.d.ts.map +1 -0
  205. package/dist/managed-runtime/claimed-environment-work.js +170 -0
  206. package/dist/managed-runtime/claimed-environment-work.js.map +1 -0
  207. package/dist/managed-runtime/contracts.d.ts +31 -0
  208. package/dist/managed-runtime/contracts.d.ts.map +1 -0
  209. package/dist/managed-runtime/contracts.js +2 -0
  210. package/dist/managed-runtime/contracts.js.map +1 -0
  211. package/dist/managed-runtime/http-control.d.ts +67 -0
  212. package/dist/managed-runtime/http-control.d.ts.map +1 -0
  213. package/dist/managed-runtime/http-control.js +465 -0
  214. package/dist/managed-runtime/http-control.js.map +1 -0
  215. package/dist/managed-runtime/index.d.ts +89 -0
  216. package/dist/managed-runtime/index.d.ts.map +1 -0
  217. package/dist/managed-runtime/index.js +215 -0
  218. package/dist/managed-runtime/index.js.map +1 -0
  219. package/dist/managed-runtime/input-identity.d.ts +2 -0
  220. package/dist/managed-runtime/input-identity.d.ts.map +1 -0
  221. package/dist/managed-runtime/input-identity.js +2 -0
  222. package/dist/managed-runtime/input-identity.js.map +1 -0
  223. package/dist/managed-runtime/managed-event-projector.d.ts +24 -0
  224. package/dist/managed-runtime/managed-event-projector.d.ts.map +1 -0
  225. package/dist/managed-runtime/managed-event-projector.js +333 -0
  226. package/dist/managed-runtime/managed-event-projector.js.map +1 -0
  227. package/dist/managed-runtime/semantic-recovery.d.ts +61 -0
  228. package/dist/managed-runtime/semantic-recovery.d.ts.map +1 -0
  229. package/dist/managed-runtime/semantic-recovery.js +167 -0
  230. package/dist/managed-runtime/semantic-recovery.js.map +1 -0
  231. package/dist/project-ui/CreateProjectDialog.d.ts +15 -0
  232. package/dist/project-ui/CreateProjectDialog.d.ts.map +1 -0
  233. package/dist/project-ui/CreateProjectDialog.js +87 -0
  234. package/dist/project-ui/CreateProjectDialog.js.map +1 -0
  235. package/dist/project-ui/ProjectComposer.d.ts +13 -0
  236. package/dist/project-ui/ProjectComposer.d.ts.map +1 -0
  237. package/dist/project-ui/ProjectComposer.js +70 -0
  238. package/dist/project-ui/ProjectComposer.js.map +1 -0
  239. package/dist/project-ui/ProjectConversation.d.ts +10 -0
  240. package/dist/project-ui/ProjectConversation.d.ts.map +1 -0
  241. package/dist/project-ui/ProjectConversation.js +28 -0
  242. package/dist/project-ui/ProjectConversation.js.map +1 -0
  243. package/dist/project-ui/ProjectMessageAttachments.d.ts +4 -0
  244. package/dist/project-ui/ProjectMessageAttachments.d.ts.map +1 -0
  245. package/dist/project-ui/ProjectMessageAttachments.js +28 -0
  246. package/dist/project-ui/ProjectMessageAttachments.js.map +1 -0
  247. package/dist/project-ui/ProjectSettings.d.ts +8 -0
  248. package/dist/project-ui/ProjectSettings.d.ts.map +1 -0
  249. package/dist/project-ui/ProjectSettings.js +65 -0
  250. package/dist/project-ui/ProjectSettings.js.map +1 -0
  251. package/dist/project-ui/Projects.d.ts +18 -0
  252. package/dist/project-ui/Projects.d.ts.map +1 -0
  253. package/dist/project-ui/Projects.js +377 -0
  254. package/dist/project-ui/Projects.js.map +1 -0
  255. package/dist/project-ui/client.d.ts +234 -0
  256. package/dist/project-ui/client.d.ts.map +1 -0
  257. package/dist/project-ui/client.js +42 -0
  258. package/dist/project-ui/client.js.map +1 -0
  259. package/dist/project-ui/controls.d.ts +15 -0
  260. package/dist/project-ui/controls.d.ts.map +1 -0
  261. package/dist/project-ui/controls.js +17 -0
  262. package/dist/project-ui/controls.js.map +1 -0
  263. package/dist/project-ui/index.d.ts +20 -0
  264. package/dist/project-ui/index.d.ts.map +1 -0
  265. package/dist/project-ui/index.js +17 -0
  266. package/dist/project-ui/index.js.map +1 -0
  267. package/dist/project-ui/project-coordinator.d.ts +3 -0
  268. package/dist/project-ui/project-coordinator.d.ts.map +1 -0
  269. package/dist/project-ui/project-coordinator.js +12 -0
  270. package/dist/project-ui/project-coordinator.js.map +1 -0
  271. package/dist/project-ui/project-goals.d.ts +48 -0
  272. package/dist/project-ui/project-goals.d.ts.map +1 -0
  273. package/dist/project-ui/project-goals.js +169 -0
  274. package/dist/project-ui/project-goals.js.map +1 -0
  275. package/dist/project-ui/projects-query.d.ts +19 -0
  276. package/dist/project-ui/projects-query.d.ts.map +1 -0
  277. package/dist/project-ui/projects-query.js +132 -0
  278. package/dist/project-ui/projects-query.js.map +1 -0
  279. package/dist/project-ui/styles.css +847 -0
  280. package/dist/protocol/acp/index.d.ts +52 -0
  281. package/dist/protocol/acp/index.d.ts.map +1 -0
  282. package/dist/protocol/acp/index.js +1056 -0
  283. package/dist/protocol/acp/index.js.map +1 -0
  284. package/dist/protocol/cursor-cloud/index.d.ts +74 -0
  285. package/dist/protocol/cursor-cloud/index.d.ts.map +1 -0
  286. package/dist/protocol/cursor-cloud/index.js +249 -0
  287. package/dist/protocol/cursor-cloud/index.js.map +1 -0
  288. package/dist/protocol/managed/index.d.ts +32 -0
  289. package/dist/protocol/managed/index.d.ts.map +1 -0
  290. package/dist/protocol/managed/index.js +646 -0
  291. package/dist/protocol/managed/index.js.map +1 -0
  292. package/dist/protocol/managed/input-identity.d.ts +3 -0
  293. package/dist/protocol/managed/input-identity.d.ts.map +1 -0
  294. package/dist/protocol/managed/input-identity.js +6 -0
  295. package/dist/protocol/managed/input-identity.js.map +1 -0
  296. package/dist/protocol/openai-agents/index.d.ts +102 -0
  297. package/dist/protocol/openai-agents/index.d.ts.map +1 -0
  298. package/dist/protocol/openai-agents/index.js +142 -0
  299. package/dist/protocol/openai-agents/index.js.map +1 -0
  300. package/dist/session-events/acp-system-notices.d.ts +10 -0
  301. package/dist/session-events/acp-system-notices.d.ts.map +1 -0
  302. package/dist/session-events/acp-system-notices.js +46 -0
  303. package/dist/session-events/acp-system-notices.js.map +1 -0
  304. package/dist/session-events/acp.d.ts +214 -0
  305. package/dist/session-events/acp.d.ts.map +1 -0
  306. package/dist/session-events/acp.js +956 -0
  307. package/dist/session-events/acp.js.map +1 -0
  308. package/dist/session-events/managed.d.ts +141 -0
  309. package/dist/session-events/managed.d.ts.map +1 -0
  310. package/dist/session-events/managed.js +324 -0
  311. package/dist/session-events/managed.js.map +1 -0
  312. package/dist/session-events/openma.d.ts +304 -0
  313. package/dist/session-events/openma.d.ts.map +1 -0
  314. package/dist/session-events/openma.js +438 -0
  315. package/dist/session-events/openma.js.map +1 -0
  316. package/dist/session-kernel/index.d.ts +118 -0
  317. package/dist/session-kernel/index.d.ts.map +1 -0
  318. package/dist/session-kernel/index.js +215 -0
  319. package/dist/session-kernel/index.js.map +1 -0
  320. package/dist/session-orchestrator/index.d.ts +71 -0
  321. package/dist/session-orchestrator/index.d.ts.map +1 -0
  322. package/dist/session-orchestrator/index.js +177 -0
  323. package/dist/session-orchestrator/index.js.map +1 -0
  324. package/dist/session-ui/index.d.ts +96 -0
  325. package/dist/session-ui/index.d.ts.map +1 -0
  326. package/dist/session-ui/index.js +277 -0
  327. package/dist/session-ui/index.js.map +1 -0
  328. package/package.json +222 -4
@@ -0,0 +1,206 @@
1
+ import { resolveNpmAcpRelease, prepareNpmAcpRelease, validateNpmAcpRelease } from "./npm.js";
2
+ import { resolveUvxAcpRelease, prepareUvxAcpRelease, validateUvxAcpRelease } from "./uvx.js";
3
+ import { resolveBinaryAcpRelease, prepareBinaryAcpRelease, validateBinaryAcpRelease } from "./binary.js";
4
+ import { digest, identity, record, url, launchOptions, platformKey, timeout, download } from "./shared.js";
5
+ import { createHash } from "node:crypto";
6
+ const official = "https://raw.githubusercontent.com/agentclientprotocol/registry";
7
+ /** String entries are the backwards-compatible npm package catalog. */
8
+ export function parseAcpReleaseSource(value) {
9
+ if (typeof value === "string")
10
+ value = { type: "npm", package: value };
11
+ if (!record(value))
12
+ throw new Error("Invalid ACP release source");
13
+ if (value.type === "npm" || value.type === "npx") {
14
+ if (typeof value.package !== "string" || !/^(?:@[a-z0-9._-]+\/)?[a-z0-9][a-z0-9._-]*$/.test(value.package))
15
+ throw new Error("Invalid npm package source");
16
+ return { type: "npm", package: value.package };
17
+ }
18
+ if (value.type === "uvx") {
19
+ if (typeof value.package !== "string" || !/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/.test(value.package))
20
+ throw new Error("Invalid uvx package source");
21
+ if (value.command !== undefined && (typeof value.command !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(value.command)))
22
+ throw new Error("Invalid uvx command");
23
+ if (value.python !== undefined && (typeof value.python !== "string" || !/^3(?:\.\d+){0,2}$/.test(value.python)))
24
+ throw new Error("Invalid Python interpreter version");
25
+ return { type: "uvx", package: value.package,
26
+ ...(value.command === undefined ? {} : { command: value.command }),
27
+ ...(value.python === undefined ? {} : { python: value.python }),
28
+ ...(value.indexUrl === undefined ? {} : { indexUrl: url(value.indexUrl, true) }), ...launchOptions(value) };
29
+ }
30
+ if (value.type === "registry") {
31
+ const preference = value.preference;
32
+ if (preference !== undefined && (!Array.isArray(preference) || preference.length === 0 || preference.some(p => !["binary", "npx", "uvx"].includes(p)) || new Set(preference).size !== preference.length))
33
+ throw new Error("Invalid ACP distribution preference");
34
+ return { type: "registry", ...(value.manifestUrl === undefined ? {} : { manifestUrl: url(value.manifestUrl) }),
35
+ ...(preference === undefined ? {} : { preference: [...preference] }) };
36
+ }
37
+ throw new Error("Unsupported ACP release source");
38
+ }
39
+ export function validateAcpRelease(value) {
40
+ if (!record(value))
41
+ throw new Error("Invalid ACP release");
42
+ if (value.schema === "openma.acp.npm.v1")
43
+ return validateNpmAcpRelease(value);
44
+ if (value.schema === "openma.acp.uvx.v1")
45
+ return validateUvxAcpRelease(value);
46
+ if (value.schema === "openma.acp.binary.v1")
47
+ return validateBinaryAcpRelease(value);
48
+ if (value.schema !== "openma.acp.registry.v1")
49
+ throw new Error("Unknown ACP release schema");
50
+ identity(value.id, value.version);
51
+ const artifact = validateAcpRelease(value.artifact);
52
+ if (artifact.schema === "openma.acp.registry.v1" || artifact.id !== value.id || artifact.version !== value.version)
53
+ throw new Error("Registry artifact identity mismatch");
54
+ const result = { schema: "openma.acp.registry.v1", id: value.id, version: value.version,
55
+ source: url(value.source), artifact, ...launchOptions(value) };
56
+ if (value.digest !== digest(result))
57
+ throw new Error("Invalid registry release digest");
58
+ return { ...result, digest: value.digest };
59
+ }
60
+ export function acpReleaseMatchesSource(release, input) {
61
+ const source = parseAcpReleaseSource(input);
62
+ if (source.type === "npm")
63
+ return release.schema === "openma.acp.npm.v1" && release.package === source.package;
64
+ if (source.type === "registry")
65
+ return release.schema === "openma.acp.registry.v1" && release.source === (source.manifestUrl ?? official);
66
+ if (release.schema !== "openma.acp.uvx.v1")
67
+ return false;
68
+ const name = source.package.toLowerCase().replace(/[-_.]+/g, "-");
69
+ return release.package === name && release.command === (source.command ?? name)
70
+ && release.python === (source.python ?? "3") && release.indexUrl === (source.indexUrl ?? "https://pypi.org/simple")
71
+ && JSON.stringify(launchOptions(release)) === JSON.stringify(launchOptions(source));
72
+ }
73
+ async function json(address, options) {
74
+ const response = await (options.fetch ?? fetch)(address, { signal: timeout(options.signal, 30_000), headers: { Accept: "application/json" } });
75
+ if (!response.ok)
76
+ throw new Error(`ACP registry HTTP ${response.status}`);
77
+ return response.json();
78
+ }
79
+ function exactManifest(value, selection) {
80
+ if (!record(value) || value.id !== selection.id)
81
+ throw new Error("ACP manifest identity mismatch");
82
+ if (value.version === selection.version)
83
+ return value;
84
+ if (record(value.preview) && value.preview.version === selection.version)
85
+ return { ...value, version: value.preview.version, distribution: value.preview.distribution };
86
+ return null;
87
+ }
88
+ async function registryManifest(selection, source, options) {
89
+ if (source.manifestUrl) {
90
+ const value = exactManifest(await json(source.manifestUrl.replaceAll("{version}", encodeURIComponent(selection.version)).replaceAll("{id}", encodeURIComponent(selection.id)), options), selection);
91
+ if (!value)
92
+ throw new Error("ACP manifest release identity mismatch");
93
+ return value;
94
+ }
95
+ const path = `${selection.id}/agent.json`;
96
+ const latest = exactManifest(await json(`${official}/main/${path}`, options), selection);
97
+ if (latest)
98
+ return latest;
99
+ for (let page = 1;; page++) {
100
+ options.signal?.throwIfAborted();
101
+ const commits = await json(`https://api.github.com/repos/agentclientprotocol/registry/commits?path=${encodeURIComponent(path)}&per_page=100&page=${page}`, options);
102
+ if (!Array.isArray(commits))
103
+ throw new Error("Invalid ACP registry history");
104
+ if (commits.length === 0)
105
+ break;
106
+ for (const commit of commits) {
107
+ if (!record(commit) || typeof commit.sha !== "string" || !/^[a-f0-9]{40}$/.test(commit.sha))
108
+ throw new Error("Invalid ACP registry commit");
109
+ const found = exactManifest(await json(`${official}/${commit.sha}/${path}`, options), selection);
110
+ if (found)
111
+ return found;
112
+ }
113
+ if (commits.length < 100)
114
+ break;
115
+ }
116
+ throw new Error(`ACP registry release not found: ${selection.id}@${selection.version}`);
117
+ }
118
+ export async function resolveAcpReleaseFromManifest(selection, manifest, input = { type: "registry" }, options = {}) {
119
+ identity(selection.id, selection.version);
120
+ const source = parseAcpReleaseSource(input);
121
+ if (source.type !== "registry")
122
+ throw new Error("Manifest resolution requires a registry source");
123
+ if (!record(manifest.distribution))
124
+ throw new Error("ACP manifest has no distributions");
125
+ return resolveRegistryDistribution(selection, source, manifest.distribution, options);
126
+ }
127
+ export async function resolveAcpRelease(selection, input = { type: "registry" }, options = {}) {
128
+ identity(selection.id, selection.version);
129
+ const source = parseAcpReleaseSource(input);
130
+ if (source.type === "npm")
131
+ return resolveNpmAcpRelease({ ...selection, package: source.package }, options);
132
+ if (source.type === "uvx")
133
+ return resolveUvxAcpRelease({ ...source, ...selection }, options);
134
+ const manifest = await registryManifest(selection, source, options);
135
+ return resolveAcpReleaseFromManifest(selection, manifest, source, options);
136
+ }
137
+ async function resolveRegistryDistribution(selection, source, distribution, options) {
138
+ if (!record(distribution))
139
+ throw new Error("ACP manifest has no distributions");
140
+ for (const kind of source.preference ?? ["binary", "npx", "uvx"]) {
141
+ let artifact;
142
+ let launch;
143
+ if (kind === "binary") {
144
+ if (!record(distribution.binary))
145
+ continue;
146
+ const target = distribution.binary[platformKey()];
147
+ if (!record(target))
148
+ continue;
149
+ const archive = url(target.archive);
150
+ const sha256 = target.sha256 === undefined
151
+ ? createHash("sha256").update(await download(archive, options)).digest("hex")
152
+ : target.sha256;
153
+ artifact = resolveBinaryAcpRelease({
154
+ ...selection,
155
+ platform: platformKey(),
156
+ archive,
157
+ sha256: sha256,
158
+ command: target.cmd,
159
+ });
160
+ launch = launchOptions(target);
161
+ }
162
+ else {
163
+ const entry = distribution[kind];
164
+ if (!record(entry) || typeof entry.package !== "string")
165
+ continue;
166
+ launch = launchOptions(entry);
167
+ if (kind === "npx") {
168
+ const at = entry.package.lastIndexOf("@");
169
+ const name = at > 0 ? entry.package.slice(0, at) : entry.package;
170
+ if (at > 0 && entry.package.slice(at + 1) !== selection.version) {
171
+ throw new Error("Registry npm package version does not match release");
172
+ }
173
+ artifact = await resolveNpmAcpRelease({ ...selection, package: name }, options);
174
+ }
175
+ else {
176
+ const parts = entry.package.split(/==|@/);
177
+ if (parts.length > 2 || parts.length === 2 && parts[1] !== selection.version) {
178
+ throw new Error("Registry uvx package version does not match release");
179
+ }
180
+ artifact = await resolveUvxAcpRelease({ ...selection, package: parts[0] }, options);
181
+ }
182
+ }
183
+ const result = {
184
+ schema: "openma.acp.registry.v1",
185
+ ...selection,
186
+ source: source.manifestUrl ?? official,
187
+ artifact,
188
+ ...launch,
189
+ };
190
+ return { ...result, digest: digest(result) };
191
+ }
192
+ throw new Error(`No supported ACP distribution for ${platformKey()}`);
193
+ }
194
+ export async function prepareAcpRelease(input, options) {
195
+ const release = validateAcpRelease(input);
196
+ switch (release.schema) {
197
+ case "openma.acp.npm.v1": return prepareNpmAcpRelease(release, options);
198
+ case "openma.acp.uvx.v1": return prepareUvxAcpRelease(release, options);
199
+ case "openma.acp.binary.v1": return prepareBinaryAcpRelease(release, options);
200
+ case "openma.acp.registry.v1": {
201
+ const prepared = await prepareAcpRelease(release.artifact, options);
202
+ return { command: prepared.command, args: [...prepared.args ?? [], ...release.args], env: { ...prepared.env, ...release.env }, release };
203
+ }
204
+ }
205
+ }
206
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/acp-artifacts/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface ArtifactInstallerOptions {
2
+ /** Node-compatible executable used to run the bundled npm CLI during npm installs. */
3
+ nodePath?: string;
4
+ /** Override path to `npm-cli.js`; defaults to the copy from the `npm` package. */
5
+ npmCliPath?: string;
6
+ /** Host-provided environment merged onto the minimal installer environment. */
7
+ env?: Record<string, string>;
8
+ }
9
+ export interface ArtifactOptions extends ArtifactInstallerOptions {
10
+ fetch?: typeof fetch;
11
+ signal?: AbortSignal;
12
+ }
13
+ export interface Launch {
14
+ command: string;
15
+ args?: string[];
16
+ env?: Record<string, string>;
17
+ }
18
+ export declare function digest(value: unknown): string;
19
+ export declare function record(value: unknown): value is Record<string, unknown>;
20
+ export declare function pinnedVersion(value: unknown): value is string;
21
+ export declare function identity(id: unknown, version: unknown): void;
22
+ export declare function safeRelative(value: unknown): string;
23
+ export declare function url(value: unknown, loopback?: boolean): string;
24
+ export declare function launchOptions(value: {
25
+ args?: unknown;
26
+ env?: unknown;
27
+ }): {
28
+ args: string[];
29
+ env: Record<string, string>;
30
+ };
31
+ export declare function installerEnvironment(overlay?: Record<string, string>): NodeJS.ProcessEnv;
32
+ export declare function childEnvironment(): NodeJS.ProcessEnv;
33
+ export declare function timeout(signal?: AbortSignal, ms?: number): AbortSignal;
34
+ export declare function download(address: string, options: ArtifactOptions): Promise<Buffer>;
35
+ export declare function platformKey(): string;
36
+ /** Move a finished install into place. Windows MoveFileEx returns EPERM when the
37
+ * destination directory already exists, and briefly while a scanner holds a new file. */
38
+ export declare function publishDirectory(staging: string, destination: string): Promise<void>;
39
+ export declare function discardStaging(staging: string, destination: string): Promise<void>;
40
+ export declare function installAtomically<R extends {
41
+ digest: string;
42
+ }>(root: string, release: R, build: (directory: string) => Promise<void>, inspect: (directory: string) => Promise<Launch>, signal?: AbortSignal): Promise<Launch & {
43
+ release: R;
44
+ }>;
45
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/shared.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACvC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AACD,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAC/D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,WAAW,MAAM;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AAC1F,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAA6E;AAC3H,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAiF;AACzJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AACD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAE5D;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOnD;AACD,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,UAAQ,GAAG,MAAM,CAK5D;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAIvH;AACD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAIxF;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,UAAU,CASpD;AACD,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,SAAU,GAAG,WAAW,CAAkG;AAC1K,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AACD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAID;yFACyF;AACzF,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1F;AACD,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAaxF;AACD,wBAAsB,iBAAiB,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAClE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAC3I,OAAO,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,CAwBlC"}
@@ -0,0 +1,157 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, mkdtemp, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { join, posix, resolve } from "node:path";
4
+ export function digest(value) { return createHash("sha256").update(JSON.stringify(value)).digest("hex"); }
5
+ export function record(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
6
+ export function pinnedVersion(value) {
7
+ return typeof value === "string" && /^\d+(?:\.\d+)*(?:(?:a|b|rc|\.post|\.dev)\d+)*(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(value);
8
+ }
9
+ export function identity(id, version) {
10
+ if (typeof id !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(id) || !pinnedVersion(version))
11
+ throw new Error("ACP release requires an id and exact version");
12
+ }
13
+ export function safeRelative(value) {
14
+ if (typeof value !== "string" || value.includes("\0") || /^[A-Za-z]:/.test(value))
15
+ throw new Error("Unsafe artifact path");
16
+ const path = value.replaceAll("\\", "/");
17
+ if (path.startsWith("/") || path.split("/").includes(".."))
18
+ throw new Error("Unsafe artifact path");
19
+ const normalized = posix.normalize(path).replace(/\/$/, "");
20
+ if (normalized === "." || normalized === "")
21
+ throw new Error("Unsafe artifact path");
22
+ return normalized;
23
+ }
24
+ export function url(value, loopback = false) {
25
+ if (typeof value !== "string")
26
+ throw new Error("Invalid artifact URL");
27
+ const parsed = new URL(value);
28
+ if (parsed.username || parsed.password || !(parsed.protocol === "https:" || loopback && parsed.protocol === "http:" && ["127.0.0.1", "localhost", "[::1]"].includes(parsed.hostname)))
29
+ throw new Error("Artifact URL requires HTTPS");
30
+ return value;
31
+ }
32
+ export function launchOptions(value) {
33
+ if (value.args !== undefined && (!Array.isArray(value.args) || value.args.some(a => typeof a !== "string" || a.includes("\0"))))
34
+ throw new Error("Invalid artifact launch args");
35
+ if (value.env !== undefined && (!record(value.env) || Object.entries(value.env).some(([k, v]) => !/^[A-Za-z_][A-Za-z0-9_]*$/.test(k) || typeof v !== "string" || v.includes("\0"))))
36
+ throw new Error("Invalid artifact launch env");
37
+ return { args: [...(value.args ?? [])], env: Object.fromEntries(Object.entries((value.env ?? {})).sort(([a], [b]) => a.localeCompare(b))) };
38
+ }
39
+ export function installerEnvironment(overlay) {
40
+ const base = childEnvironment();
41
+ if (!overlay)
42
+ return base;
43
+ return { ...base, ...overlay };
44
+ }
45
+ export function childEnvironment() {
46
+ // Windows installers need cmd/PATHEXT and the profile npm uses for its cache.
47
+ // Work tokens, model credentials, and other host variables stay excluded.
48
+ const keys = [
49
+ "PATH", "PATHEXT", "HOME", "USERPROFILE", "HOMEDRIVE", "HOMEPATH",
50
+ "TMPDIR", "TEMP", "TMP", "SystemRoot", "SystemDrive", "ComSpec",
51
+ "APPDATA", "LOCALAPPDATA", "SSL_CERT_FILE", "SSL_CERT_DIR", "NODE_EXTRA_CA_CERTS",
52
+ ];
53
+ return Object.fromEntries(keys.flatMap(key => process.env[key] === undefined ? [] : [[key, process.env[key]]]));
54
+ }
55
+ export function timeout(signal, ms = 120_000) { return signal ? AbortSignal.any([signal, AbortSignal.timeout(ms)]) : AbortSignal.timeout(ms); }
56
+ export async function download(address, options) {
57
+ const response = await (options.fetch ?? fetch)(address, { signal: timeout(options.signal) });
58
+ if (!response.ok)
59
+ throw new Error(`Artifact download HTTP ${response.status}`);
60
+ return Buffer.from(await response.arrayBuffer());
61
+ }
62
+ export function platformKey() {
63
+ return `${process.platform === "win32" ? "windows" : process.platform}-${process.arch === "arm64" ? "aarch64" : process.arch === "x64" ? "x86_64" : process.arch}`;
64
+ }
65
+ async function pathExists(path) {
66
+ try {
67
+ await realpath(path);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /** Move a finished install into place. Windows MoveFileEx returns EPERM when the
75
+ * destination directory already exists, and briefly while a scanner holds a new file. */
76
+ export async function publishDirectory(staging, destination) {
77
+ const retries = process.platform === "win32" ? 8 : 1;
78
+ let last;
79
+ for (let attempt = 0; attempt < retries; attempt++) {
80
+ try {
81
+ await rename(staging, destination);
82
+ return;
83
+ }
84
+ catch (error) {
85
+ last = error;
86
+ const code = error.code ?? "";
87
+ if (code === "EEXIST" || code === "ENOTEMPTY")
88
+ return;
89
+ if ((code === "EPERM" || code === "EBUSY") && await pathExists(destination))
90
+ return;
91
+ if (process.platform === "win32" && (code === "EPERM" || code === "EBUSY") && attempt < retries - 1) {
92
+ await new Promise(resolveDelay => setTimeout(resolveDelay, 50 * (attempt + 1)));
93
+ continue;
94
+ }
95
+ throw error;
96
+ }
97
+ }
98
+ throw last;
99
+ }
100
+ export async function discardStaging(staging, destination) {
101
+ if (await pathExists(staging) && await pathExists(destination)) {
102
+ const [stagingReal, destinationReal] = await Promise.all([realpath(staging), realpath(destination)]);
103
+ const same = process.platform === "win32"
104
+ ? stagingReal.toLowerCase() === destinationReal.toLowerCase()
105
+ : stagingReal === destinationReal;
106
+ if (same)
107
+ return;
108
+ }
109
+ else if (!await pathExists(staging))
110
+ return;
111
+ try {
112
+ await rm(staging, { recursive: true, force: true });
113
+ }
114
+ catch (error) {
115
+ const code = error.code;
116
+ if (code !== "ENOENT" && code !== "EPERM" && code !== "EBUSY")
117
+ throw error;
118
+ }
119
+ }
120
+ export async function installAtomically(root, release, build, inspect, signal) {
121
+ signal?.throwIfAborted();
122
+ const destination = join(resolve(root), release.digest);
123
+ async function cached() {
124
+ let saved;
125
+ try {
126
+ saved = await readFile(join(destination, "release.json"), "utf8");
127
+ }
128
+ catch (error) {
129
+ if (error.code === "ENOENT")
130
+ return null;
131
+ throw error;
132
+ }
133
+ if (JSON.stringify(JSON.parse(saved)) !== JSON.stringify(release))
134
+ throw new Error("Cached artifact release mismatch");
135
+ return { ...await inspect(destination), release };
136
+ }
137
+ const ready = await cached();
138
+ if (ready)
139
+ return ready;
140
+ await mkdir(resolve(root), { recursive: true });
141
+ const staging = await mkdtemp(join(resolve(root), ".install-"));
142
+ try {
143
+ await build(staging);
144
+ await inspect(staging);
145
+ await writeFile(join(staging, "release.json"), JSON.stringify(release));
146
+ signal?.throwIfAborted();
147
+ await publishDirectory(staging, destination);
148
+ const result = await cached();
149
+ if (!result)
150
+ throw new Error("Artifact installation was not published");
151
+ return result;
152
+ }
153
+ finally {
154
+ await discardStaging(staging, destination);
155
+ }
156
+ }
157
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/acp-artifacts/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAejD,MAAM,UAAU,MAAM,CAAC,KAAc,IAAY,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3H,MAAM,UAAU,MAAM,CAAC,KAAc,IAAsC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzJ,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,yFAAyF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5I,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,EAAW,EAAE,OAAgB;IACpD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACrK,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5D,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrF,OAAO,UAAU,CAAC;AACpB,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,QAAQ,GAAG,KAAK;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtO,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAwC;IACpE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjL,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACpO,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAgB,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpL,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,OAAgC;IACnE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU;QACjE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS;QAC/D,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB;KAClF,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,MAAoB,EAAE,EAAE,GAAG,OAAO,IAAiB,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1K,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAwB;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACrK,CAAC;AACD,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACpE,CAAC;AACD;yFACyF;AACzF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,WAAmB;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,IAAa,CAAC;IAClB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACnD,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,IAAI,EAAE,CAAC;YACzD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW;gBAAE,OAAO;YACtD,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC;gBAAE,OAAO;YACpF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;gBACpG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChF,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC;AACb,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,WAAmB;IACvE,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;YACvC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE;YAC7D,CAAC,CAAC,WAAW,KAAK,eAAe,CAAC;QACpC,IAAI,IAAI;YAAE,OAAO;IACnB,CAAC;SAAM,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO;IAC9C,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAC5D,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC;IAC7E,CAAC;AACH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EAAE,OAAU,EAAE,KAA2C,EAAE,OAA+C,EAAE,MAAoB;IAE5I,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK,UAAU,MAAM;QACnB,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAC1E,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QACnG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACvH,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,MAAM,EAAE,CAAC;IAC7B,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QAAC,MAAM,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type ArtifactOptions } from "./shared.js";
2
+ export interface UvxAcpRelease {
3
+ schema: "openma.acp.uvx.v1";
4
+ id: string;
5
+ version: string;
6
+ package: string;
7
+ command: string;
8
+ python: string;
9
+ indexUrl: string;
10
+ hashes: string[];
11
+ args: string[];
12
+ env: Record<string, string>;
13
+ digest: string;
14
+ }
15
+ export interface UvxAcpReleaseInput {
16
+ id: string;
17
+ version: string;
18
+ package: string;
19
+ command?: string;
20
+ python?: string;
21
+ indexUrl?: string;
22
+ args?: string[];
23
+ env?: Record<string, string>;
24
+ }
25
+ export declare function resolveUvxAcpRelease(input: UvxAcpReleaseInput, options?: ArtifactOptions): Promise<UvxAcpRelease>;
26
+ export declare function validateUvxAcpRelease(value: unknown): UvxAcpRelease;
27
+ export declare function prepareUvxAcpRelease(input: UvxAcpRelease, options: ArtifactOptions & {
28
+ root: string;
29
+ }): Promise<import("./shared.js").Launch & {
30
+ release: UvxAcpRelease;
31
+ }>;
32
+ //# sourceMappingURL=uvx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uvx.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/uvx.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsF,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvI,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAC9E,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CACjG;AACD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClE;AAmCD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAU3H;AACD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAMnE;AACD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;GAuB3G"}
@@ -0,0 +1,95 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { access, writeFile } from "node:fs/promises";
4
+ import { constants } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { childEnvironment, digest, identity, installAtomically, launchOptions, timeout, url } from "./shared.js";
7
+ const exec = promisify(execFile);
8
+ const normalize = (name) => name.toLowerCase().replace(/[-_.]+/g, "-");
9
+ // uv's venv layout is bin/python on POSIX and Scripts\python.exe on Windows.
10
+ function venvPython(venv) {
11
+ return process.platform === "win32" ? join(venv, "Scripts", "python.exe") : join(venv, "bin", "python");
12
+ }
13
+ function venvScriptCandidates(venv, command) {
14
+ if (process.platform !== "win32")
15
+ return [join(venv, "bin", command)];
16
+ const scripts = join(venv, "Scripts");
17
+ return [`${command}.exe`, `${command}.cmd`, command, `${command}.bat`].map(name => join(scripts, name));
18
+ }
19
+ async function venvCommand(venv, command) {
20
+ const candidates = venvScriptCandidates(venv, command);
21
+ for (const candidate of candidates) {
22
+ try {
23
+ await access(candidate, constants.F_OK);
24
+ return candidate;
25
+ }
26
+ catch (error) {
27
+ if (error.code !== "ENOENT")
28
+ throw error;
29
+ }
30
+ }
31
+ return candidates[0];
32
+ }
33
+ function releaseRecord(input, hashes) {
34
+ identity(input.id, input.version);
35
+ if (typeof input.package !== "string" || !/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/.test(input.package))
36
+ throw new Error("Invalid Python package name");
37
+ const command = input.command ?? normalize(input.package);
38
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(command))
39
+ throw new Error("Invalid uvx executable");
40
+ const python = input.python ?? "3";
41
+ if (!/^3(?:\.\d+){0,2}$/.test(python))
42
+ throw new Error("Invalid Python interpreter version");
43
+ if (!Array.isArray(hashes) || hashes.length === 0 || hashes.some(h => typeof h !== "string" || !/^[a-f0-9]{64}$/.test(h)))
44
+ throw new Error("Python releases require artifact SHA-256 hashes");
45
+ return { schema: "openma.acp.uvx.v1", id: input.id, version: input.version, package: normalize(input.package), command, python,
46
+ indexUrl: url(input.indexUrl ?? "https://pypi.org/simple", true), hashes: [...new Set(hashes)].sort(), ...launchOptions(input) };
47
+ }
48
+ export async function resolveUvxAcpRelease(input, options = {}) {
49
+ // Validate before placing untrusted package/version text into a URL.
50
+ releaseRecord(input, ["0".repeat(64)]);
51
+ const response = await (options.fetch ?? fetch)(`https://pypi.org/pypi/${encodeURIComponent(input.package)}/${encodeURIComponent(input.version)}/json`, { signal: timeout(options.signal, 30_000) });
52
+ if (!response.ok)
53
+ throw new Error(`PyPI release HTTP ${response.status}`);
54
+ const data = await response.json();
55
+ if (typeof data.info?.name !== "string" || normalize(data.info.name) !== normalize(input.package) || data.info.version !== input.version)
56
+ throw new Error("Python release identity mismatch");
57
+ const hashes = (data.urls ?? []).filter(file => !file.yanked).map(file => file.digests?.sha256 ?? "");
58
+ const result = releaseRecord(input, hashes);
59
+ return { ...result, digest: digest(result) };
60
+ }
61
+ export function validateUvxAcpRelease(value) {
62
+ if (!value || typeof value !== "object")
63
+ throw new Error("Invalid uvx release");
64
+ const input = value;
65
+ const result = releaseRecord(input, input.hashes);
66
+ if (input.schema !== result.schema || input.digest !== digest(result))
67
+ throw new Error("Invalid uvx release digest");
68
+ return { ...result, digest: input.digest };
69
+ }
70
+ export async function prepareUvxAcpRelease(input, options) {
71
+ const release = validateUvxAcpRelease(input);
72
+ options.signal?.throwIfAborted();
73
+ const runOptions = { env: childEnvironment(), signal: options.signal, timeout: 600_000, maxBuffer: 1024 * 1024 };
74
+ const interpreter = (await exec("uv", ["python", "find", "--no-config", release.python], runOptions)).stdout.trim();
75
+ const runtime = (await exec(interpreter, ["-I", "-c", "import sys,sysconfig;print(sys.implementation.cache_tag+'-'+sysconfig.get_platform())"], runOptions)).stdout.trim();
76
+ // Include the interpreter location: a moved/removed interpreter cannot reuse its old venv.
77
+ const platform = `${process.platform}-${process.arch}-python-${digest([runtime, interpreter])}`;
78
+ return installAtomically(join(options.root, platform), release, async (directory) => {
79
+ const venv = join(directory, "venv");
80
+ await exec("uv", ["venv", "--no-config", "--no-project", "--relocatable", "--python", interpreter, venv], runOptions);
81
+ const requirements = join(directory, "requirements.txt");
82
+ await writeFile(requirements, `${release.package}==${release.version} ${release.hashes.map(hash => `--hash=sha256:${hash}`).join(" ")}\n`);
83
+ await exec("uv", ["pip", "install", "--no-config", "--native-tls", "--python", venvPython(venv), "--index-url", release.indexUrl, "-r", requirements], runOptions);
84
+ }, async (directory) => {
85
+ const venv = join(directory, "venv");
86
+ const command = await venvCommand(venv, release.command);
87
+ const inspect = "import importlib.metadata as m,json,sys,os;d=m.distribution(sys.argv[1]);\ndef owned(f):\n try: return os.path.samefile(d.locate_file(f), sys.argv[2])\n except OSError: return False\nprint(json.dumps({'name':d.metadata['Name'],'version':d.version,'owns_command':any(owned(f) for f in (d.files or []))}))";
88
+ const metadata = JSON.parse((await exec(venvPython(venv), ["-I", "-c", inspect, release.package, command], runOptions)).stdout);
89
+ if (normalize(metadata.name) !== release.package || metadata.version !== release.version || !metadata.owns_command)
90
+ throw new Error("Installed uvx package identity or entry point mismatch");
91
+ await access(command, constants.X_OK);
92
+ return { command, args: release.args, env: release.env };
93
+ }, options.signal);
94
+ }
95
+ //# sourceMappingURL=uvx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uvx.js","sourceRoot":"","sources":["../../src/acp-artifacts/uvx.ts"],"names":[],"mappings":"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"}