@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,120 @@
1
+ import { createHash } from "node:crypto";
2
+ import { execFile } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+ import { access, chmod, mkdir, realpath, rm, stat, writeFile } from "node:fs/promises";
5
+ import { constants } from "node:fs";
6
+ import { dirname, isAbsolute, join, relative } from "node:path";
7
+ import { unzipSync } from "fflate";
8
+ import * as tar from "tar";
9
+ import { digest, identity, safeRelative, url, launchOptions, platformKey, download, installAtomically, childEnvironment } from "./shared.js";
10
+ export function binaryFormat(address) {
11
+ const path = new URL(address).pathname.toLowerCase();
12
+ if (/\.(dmg|pkg|deb|rpm|msi|appimage)$/.test(path))
13
+ throw new Error("Installer packages are not ACP binary distributions");
14
+ if (/\.(tar\.gz|tgz)$/.test(path))
15
+ return "tar.gz";
16
+ if (/\.(tar\.bz2|tbz2)$/.test(path))
17
+ return "tar.bz2";
18
+ if (/\.(tar\.xz|txz)$/.test(path))
19
+ return "tar.xz";
20
+ if (path.endsWith(".tar"))
21
+ return "tar";
22
+ if (path.endsWith(".zip"))
23
+ return "zip";
24
+ return "raw";
25
+ }
26
+ export function resolveBinaryAcpRelease(input) {
27
+ identity(input.id, input.version);
28
+ if (typeof input.platform !== "string" || !/^[a-z0-9_-]+$/.test(input.platform))
29
+ throw new Error("Invalid binary platform");
30
+ url(input.archive);
31
+ if (typeof input.sha256 !== "string" || !/^[a-fA-F0-9]{64}$/.test(input.sha256))
32
+ throw new Error("Binary releases require a SHA-256 checksum");
33
+ const format = input.format ?? binaryFormat(input.archive);
34
+ if (!["raw", "zip", "tar", "tar.gz", "tar.bz2", "tar.xz"].includes(format))
35
+ throw new Error("Unsupported binary archive format");
36
+ const record = { schema: "openma.acp.binary.v1", id: input.id, version: input.version,
37
+ platform: input.platform, archive: input.archive, sha256: input.sha256.toLowerCase(), format: format,
38
+ command: safeRelative(input.command), ...launchOptions(input) };
39
+ return { ...record, digest: digest(record) };
40
+ }
41
+ export function validateBinaryAcpRelease(value) {
42
+ if (!value || typeof value !== "object")
43
+ throw new Error("Invalid binary release");
44
+ const input = value;
45
+ const result = resolveBinaryAcpRelease(input);
46
+ if (input.schema !== result.schema || input.digest !== result.digest)
47
+ throw new Error("Invalid binary release digest");
48
+ return result;
49
+ }
50
+ export async function prepareBinaryAcpRelease(input, options) {
51
+ const release = validateBinaryAcpRelease(input);
52
+ if (release.platform !== platformKey())
53
+ throw new Error(`Binary platform ${release.platform} does not match ${platformKey()}`);
54
+ return installAtomically(join(options.root, platformKey()), release, async (directory) => {
55
+ const bytes = await download(release.archive, options);
56
+ if (createHash("sha256").update(bytes).digest("hex") !== release.sha256)
57
+ throw new Error("Binary artifact integrity mismatch");
58
+ const payload = join(directory, "payload");
59
+ await mkdir(payload);
60
+ if (release.format === "raw") {
61
+ await mkdir(dirname(join(payload, release.command)), { recursive: true });
62
+ await writeFile(join(payload, release.command), bytes);
63
+ }
64
+ else if (release.format === "zip") {
65
+ const entries = Object.entries(unzipSync(bytes));
66
+ for (const [name] of entries)
67
+ safeRelative(name);
68
+ for (const [name, data] of entries) {
69
+ const target = join(payload, safeRelative(name));
70
+ if (name.endsWith("/"))
71
+ await mkdir(target, { recursive: true });
72
+ else {
73
+ await mkdir(dirname(target), { recursive: true });
74
+ await writeFile(target, data);
75
+ }
76
+ }
77
+ }
78
+ else {
79
+ const archive = join(directory, "archive.tar");
80
+ if (release.format === "tar.bz2" || release.format === "tar.xz") {
81
+ const compressed = join(directory, "compressed");
82
+ await writeFile(compressed, bytes);
83
+ const decoded = await promisify(execFile)(release.format === "tar.bz2" ? "bzip2" : "xz", ["-dc", compressed], {
84
+ encoding: "buffer", maxBuffer: 1024 * 1024 * 1024, timeout: 120_000, signal: options.signal, env: childEnvironment(),
85
+ });
86
+ await writeFile(archive, decoded.stdout);
87
+ }
88
+ else
89
+ await writeFile(archive, bytes);
90
+ let invalid;
91
+ await tar.t({ file: archive, strict: true, onReadEntry(entry) {
92
+ try {
93
+ if (entry.type === "Directory" && [".", "./"].includes(entry.path))
94
+ return;
95
+ safeRelative(entry.path);
96
+ if (!["File", "OldFile", "Directory"].includes(entry.type))
97
+ throw new Error("Binary archives cannot contain links or special files");
98
+ }
99
+ catch (error) {
100
+ invalid = error;
101
+ }
102
+ } });
103
+ if (invalid)
104
+ throw invalid;
105
+ await tar.x({ file: archive, cwd: payload, strict: true, preserveOwner: false, chmod: true });
106
+ await rm(archive);
107
+ await rm(join(directory, "compressed"), { force: true });
108
+ }
109
+ await chmod(join(payload, release.command), 0o755);
110
+ }, async (directory) => {
111
+ const payload = await realpath(join(directory, "payload"));
112
+ const command = await realpath(join(payload, release.command));
113
+ const rel = relative(payload, command);
114
+ if (rel.startsWith("..") || isAbsolute(rel) || !(await stat(command)).isFile())
115
+ throw new Error("Binary executable path escapes the artifact");
116
+ await access(command, constants.X_OK);
117
+ return { command, args: release.args, env: release.env };
118
+ }, options.signal);
119
+ }
120
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/acp-artifacts/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./npm.js";
2
+ export * from "./uvx.js";
3
+ export * from "./binary.js";
4
+ export * from "./registry.js";
5
+ export { resolveAcpReleaseFromManifest } from "./registry.js";
6
+ export { pinnedVersion as isPinnedAcpVersion, type ArtifactOptions, type ArtifactInstallerOptions, } from "./shared.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,aAAa,IAAI,kBAAkB,EACnC,KAAK,eAAe,EACpB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./npm.js";
2
+ export * from "./uvx.js";
3
+ export * from "./binary.js";
4
+ export * from "./registry.js";
5
+ export { resolveAcpReleaseFromManifest } from "./registry.js";
6
+ export { pinnedVersion as isPinnedAcpVersion, } from "./shared.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/acp-artifacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,aAAa,IAAI,kBAAkB,GAGpC,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Cache directory segment that isolates npm installs by Node module ABI. */
2
+ export declare function nodeModulesCacheKey(nodePath?: string): Promise<string>;
3
+ //# sourceMappingURL=node-abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-abi.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/node-abi.ts"],"names":[],"mappings":"AAKA,6EAA6E;AAC7E,wBAAsB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS5E"}
@@ -0,0 +1,17 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const exec = promisify(execFile);
4
+ /** Cache directory segment that isolates npm installs by Node module ABI. */
5
+ export async function nodeModulesCacheKey(nodePath) {
6
+ if (!nodePath)
7
+ return `node${process.versions.modules}`;
8
+ const { stdout } = await exec(nodePath, ["-p", "process.versions.modules"], {
9
+ timeout: 30_000,
10
+ maxBuffer: 1024,
11
+ });
12
+ const modules = stdout.trim();
13
+ if (!/^\d+$/.test(modules))
14
+ throw new Error("Invalid Node module ABI from nodePath");
15
+ return `node${modules}`;
16
+ }
17
+ //# sourceMappingURL=node-abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-abi.js","sourceRoot":"","sources":["../../src/acp-artifacts/node-abi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEjC,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAiB;IACzD,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,0BAA0B,CAAC,EAAE;QAC1E,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACrF,OAAO,OAAO,OAAO,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Path to the npm CLI entry script shipped with the `npm` dependency. */
2
+ export declare function defaultNpmCliPath(): string;
3
+ //# sourceMappingURL=npm-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-cli.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/npm-cli.ts"],"names":[],"mappings":"AAKA,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
@@ -0,0 +1,9 @@
1
+ import { createRequire } from "node:module";
2
+ import { dirname, join } from "node:path";
3
+ const require = createRequire(import.meta.url);
4
+ /** Path to the npm CLI entry script shipped with the `npm` dependency. */
5
+ export function defaultNpmCliPath() {
6
+ const packageJson = require.resolve("npm/package.json");
7
+ return join(dirname(packageJson), "bin/npm-cli.js");
8
+ }
9
+ //# sourceMappingURL=npm-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-cli.js","sourceRoot":"","sources":["../../src/acp-artifacts/npm-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,37 @@
1
+ export interface NpmAcpRelease {
2
+ schema: "openma.acp.npm.v1";
3
+ id: string;
4
+ version: string;
5
+ package: string;
6
+ tarball: string;
7
+ integrity: string;
8
+ bin: string;
9
+ digest: string;
10
+ }
11
+ export interface NpmAcpReleaseSelection {
12
+ id: string;
13
+ version: string;
14
+ package: string;
15
+ }
16
+ export interface NpmAcpReleaseOptions {
17
+ fetch?: typeof fetch;
18
+ signal?: AbortSignal;
19
+ nodePath?: string;
20
+ npmCliPath?: string;
21
+ env?: Record<string, string>;
22
+ }
23
+ export interface PreparedAcpRelease {
24
+ command: string;
25
+ release: NpmAcpRelease;
26
+ }
27
+ export declare function quoteWindowsArg(value: string): string;
28
+ /** Validate persisted release records before trusting their paths or digest. */
29
+ export declare function validateNpmAcpRelease(value: unknown): NpmAcpRelease;
30
+ /** Read the release's own identity and integrity from npm; never resolve latest. */
31
+ export declare function resolveNpmAcpRelease(selection: NpmAcpReleaseSelection, options?: NpmAcpReleaseOptions): Promise<NpmAcpRelease>;
32
+ /** Prepare inside the host/sandbox. Atomic publication prevents partial installs
33
+ * from becoming launchable. Version directories are never upgraded in place. */
34
+ export declare function prepareNpmAcpRelease(input: NpmAcpRelease, options: NpmAcpReleaseOptions & {
35
+ root: string;
36
+ }): Promise<PreparedAcpRelease>;
37
+ //# sourceMappingURL=npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/npm.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,sBAAsB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACxF,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AACD,MAAM,WAAW,kBAAkB;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE;AAE/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD;AAoCD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAYnE;AAED,oFAAoF;AACpF,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,sBAAsB,EAAE,OAAO,GAAE,oBAAyB,GACpE,OAAO,CAAC,aAAa,CAAC,CAexB;AAKD;gFACgF;AAChF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,kBAAkB,CAAC,CAoC7B"}
@@ -0,0 +1,167 @@
1
+ /** Immutable npm releases for ACP hosts. No product settings or global installs. */
2
+ import { execFile } from "node:child_process";
3
+ import { createHash } from "node:crypto";
4
+ import { access, mkdir, mkdtemp, readFile, realpath, writeFile } from "node:fs/promises";
5
+ import { constants } from "node:fs";
6
+ import { isAbsolute, join, relative, resolve } from "node:path";
7
+ import { promisify } from "node:util";
8
+ import { defaultNpmCliPath } from "./npm-cli.js";
9
+ import { nodeModulesCacheKey } from "./node-abi.js";
10
+ import { discardStaging, installerEnvironment, publishDirectory } from "./shared.js";
11
+ const exec = promisify(execFile);
12
+ export function quoteWindowsArg(value) {
13
+ if (value.length === 0)
14
+ return '""';
15
+ if (!/[\s"&|<>^]/.test(value))
16
+ return value;
17
+ return `"${value.replaceAll('"', '""')}"`;
18
+ }
19
+ /** npm is a `.cmd` shim on Windows, which CreateProcess refuses to start. */
20
+ function runNpm(args, options) {
21
+ if (options.nodePath) {
22
+ const cli = options.npmCliPath ?? defaultNpmCliPath();
23
+ return exec(options.nodePath, [cli, ...args], options);
24
+ }
25
+ if (process.platform !== "win32")
26
+ return exec("npm", args, options);
27
+ const line = ["npm", ...args].map(quoteWindowsArg).join(" ");
28
+ return exec(process.env.ComSpec ?? "cmd.exe", ["/d", "/s", "/c", line], options);
29
+ }
30
+ const exactVersion = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
31
+ const packageName = /^(?:@[a-z0-9._-]+\/)?[a-z0-9][a-z0-9._-]*$/;
32
+ const safeName = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
33
+ function validateSelection(value) {
34
+ if (!safeName.test(value.id) || !packageName.test(value.package))
35
+ throw new Error("Invalid ACP release identity");
36
+ if (!exactVersion.test(value.version))
37
+ throw new Error("ACP release requires an exact version (no tags or ranges)");
38
+ }
39
+ function fingerprint(value) {
40
+ return createHash("sha256").update(JSON.stringify([
41
+ value.schema, value.id, value.version, value.package, value.tarball, value.integrity, value.bin,
42
+ ])).digest("hex");
43
+ }
44
+ function httpsUrl(value) {
45
+ try {
46
+ const u = new URL(value);
47
+ return u.protocol === "https:" && !u.username && !u.password;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ /** Validate persisted release records before trusting their paths or digest. */
54
+ export function validateNpmAcpRelease(value) {
55
+ if (!value || typeof value !== "object")
56
+ throw new Error("Invalid ACP release record");
57
+ const r = value;
58
+ for (const key of ["id", "version", "package", "tarball", "integrity", "bin", "digest"]) {
59
+ if (typeof r[key] !== "string")
60
+ throw new Error("Invalid ACP release record");
61
+ }
62
+ validateSelection(r);
63
+ if (r.schema !== "openma.acp.npm.v1" || !httpsUrl(r.tarball)
64
+ || !/^sha512-[A-Za-z0-9+/]{86}==$/.test(r.integrity) || !safeName.test(r.bin)
65
+ || r.digest !== fingerprint(r))
66
+ throw new Error("Invalid ACP release digest or metadata");
67
+ return { schema: r.schema, id: r.id, version: r.version, package: r.package,
68
+ tarball: r.tarball, integrity: r.integrity, bin: r.bin, digest: r.digest };
69
+ }
70
+ /** Read the release's own identity and integrity from npm; never resolve latest. */
71
+ export async function resolveNpmAcpRelease(selection, options = {}) {
72
+ validateSelection(selection);
73
+ const response = await (options.fetch ?? fetch)(`https://registry.npmjs.org/${encodeURIComponent(selection.package)}/${encodeURIComponent(selection.version)}`, { signal: signalWithTimeout(options.signal, 30_000) });
74
+ if (!response.ok)
75
+ throw new Error(`ACP release ${selection.id}@${selection.version}: registry HTTP ${response.status}`);
76
+ const data = await response.json();
77
+ if (data.name !== selection.package || data.version !== selection.version)
78
+ throw new Error("ACP registry release identity mismatch");
79
+ const unscoped = selection.package.split("/").at(-1);
80
+ const bins = typeof data.bin === "string" ? [unscoped] : Object.keys(data.bin ?? {});
81
+ const bin = bins.includes(selection.id) ? selection.id : bins.includes(unscoped) ? unscoped : bins.length === 1 ? bins[0] : "";
82
+ const record = { schema: "openma.acp.npm.v1", ...selection,
83
+ tarball: data.dist?.tarball ?? "", integrity: data.dist?.integrity ?? "", bin };
84
+ return validateNpmAcpRelease({ ...record, digest: fingerprint(record) });
85
+ }
86
+ function signalWithTimeout(signal, ms) {
87
+ return signal ? AbortSignal.any([signal, AbortSignal.timeout(ms)]) : AbortSignal.timeout(ms);
88
+ }
89
+ /** Prepare inside the host/sandbox. Atomic publication prevents partial installs
90
+ * from becoming launchable. Version directories are never upgraded in place. */
91
+ export async function prepareNpmAcpRelease(input, options) {
92
+ const release = validateNpmAcpRelease(input);
93
+ options.signal?.throwIfAborted();
94
+ const abi = await nodeModulesCacheKey(options.nodePath);
95
+ const root = join(resolve(options.root), `${process.platform}-${process.arch}-${abi}`);
96
+ const destination = join(root, release.digest);
97
+ const cached = await readPrepared(destination, release);
98
+ if (cached)
99
+ return cached;
100
+ await mkdir(root, { recursive: true });
101
+ const staging = await mkdtemp(join(root, ".install-"));
102
+ try {
103
+ const response = await (options.fetch ?? fetch)(release.tarball, { signal: signalWithTimeout(options.signal, 120_000) });
104
+ if (!response.ok)
105
+ throw new Error(`ACP artifact download HTTP ${response.status}`);
106
+ const bytes = Buffer.from(await response.arrayBuffer());
107
+ const integrity = `sha512-${createHash("sha512").update(bytes).digest("base64")}`;
108
+ if (integrity !== release.integrity)
109
+ throw new Error("ACP artifact integrity mismatch");
110
+ const archive = join(staging, "release.tgz");
111
+ await writeFile(archive, bytes);
112
+ // Deliberately exclude Work tokens and model credentials from package scripts.
113
+ const env = installerEnvironment(options.env);
114
+ await runNpm(["install", "--prefix", staging, "--omit=dev", "--no-audit", "--no-fund", "--", archive], {
115
+ env,
116
+ timeout: 600_000,
117
+ maxBuffer: 1024 * 1024,
118
+ signal: options.signal,
119
+ nodePath: options.nodePath,
120
+ npmCliPath: options.npmCliPath,
121
+ });
122
+ await verifyInstalled(staging, release);
123
+ await writeFile(join(staging, "release.json"), JSON.stringify(release));
124
+ options.signal?.throwIfAborted();
125
+ await publishDirectory(staging, destination);
126
+ const prepared = await readPrepared(destination, release);
127
+ if (!prepared)
128
+ throw new Error("ACP release was not published");
129
+ return prepared;
130
+ }
131
+ finally {
132
+ await discardStaging(staging, destination);
133
+ }
134
+ }
135
+ async function verifyInstalled(directory, release) {
136
+ const packageDir = join(directory, "node_modules", release.package);
137
+ const metadata = JSON.parse(await readFile(join(packageDir, "package.json"), "utf8"));
138
+ if (metadata.name !== release.package || metadata.version !== release.version)
139
+ throw new Error("ACP installed package identity mismatch");
140
+ const binPath = typeof metadata.bin === "string" ? metadata.bin : metadata.bin?.[release.bin];
141
+ if (typeof binPath !== "string" || isAbsolute(binPath))
142
+ throw new Error("ACP release executable is invalid");
143
+ const target = await realpath(join(packageDir, binPath));
144
+ const path = relative(await realpath(packageDir), target);
145
+ if (path.startsWith("..") || isAbsolute(path))
146
+ throw new Error("ACP release executable escapes its package");
147
+ const command = join(directory, "node_modules", ".bin", process.platform === "win32" ? `${release.bin}.cmd` : release.bin);
148
+ await access(command, constants.X_OK);
149
+ if (process.platform !== "win32" && await realpath(command) !== target)
150
+ throw new Error("ACP release executable link mismatch");
151
+ return command;
152
+ }
153
+ async function readPrepared(directory, release) {
154
+ let saved;
155
+ try {
156
+ saved = await readFile(join(directory, "release.json"), "utf8");
157
+ }
158
+ catch (error) {
159
+ if (error.code === "ENOENT")
160
+ return null;
161
+ throw error;
162
+ }
163
+ if (validateNpmAcpRelease(JSON.parse(saved)).digest !== release.digest)
164
+ throw new Error("ACP cached release identity mismatch");
165
+ return { command: await verifyInstalled(directory, release), release };
166
+ }
167
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/acp-artifacts/npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type NpmAcpRelease } from "./npm.js";
2
+ import { type UvxAcpRelease, type UvxAcpReleaseInput } from "./uvx.js";
3
+ import { type BinaryAcpRelease } from "./binary.js";
4
+ import { type ArtifactOptions, type Launch } from "./shared.js";
5
+ type DistributionRelease = NpmAcpRelease | UvxAcpRelease | BinaryAcpRelease;
6
+ export interface RegistryAcpRelease {
7
+ schema: "openma.acp.registry.v1";
8
+ id: string;
9
+ version: string;
10
+ source: string;
11
+ artifact: DistributionRelease;
12
+ args: string[];
13
+ env: Record<string, string>;
14
+ digest: string;
15
+ }
16
+ export type AcpRelease = DistributionRelease | RegistryAcpRelease;
17
+ export type AcpReleaseSource = {
18
+ type: "npm";
19
+ package: string;
20
+ } | ({
21
+ type: "uvx";
22
+ } & Omit<UvxAcpReleaseInput, "id" | "version">) | {
23
+ type: "registry";
24
+ manifestUrl?: string;
25
+ preference?: ("binary" | "npx" | "uvx")[];
26
+ };
27
+ /** String entries are the backwards-compatible npm package catalog. */
28
+ export declare function parseAcpReleaseSource(value: unknown): AcpReleaseSource;
29
+ export declare function validateAcpRelease(value: unknown): AcpRelease;
30
+ export declare function acpReleaseMatchesSource(release: AcpRelease, input: AcpReleaseSource): boolean;
31
+ export declare function resolveAcpReleaseFromManifest(selection: {
32
+ id: string;
33
+ version: string;
34
+ }, manifest: Record<string, unknown>, input?: AcpReleaseSource, options?: ArtifactOptions): Promise<AcpRelease>;
35
+ export declare function resolveAcpRelease(selection: {
36
+ id: string;
37
+ version: string;
38
+ }, input?: AcpReleaseSource, options?: ArtifactOptions): Promise<AcpRelease>;
39
+ export declare function prepareAcpRelease(input: AcpRelease, options: ArtifactOptions & {
40
+ root: string;
41
+ }): Promise<Launch & {
42
+ release: AcpRelease;
43
+ }>;
44
+ export {};
45
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/acp-artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACjH,OAAO,EAAqE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1I,OAAO,EAA8E,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAChI,OAAO,EAAgF,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAG9I,KAAK,mBAAmB,GAAG,aAAa,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAC5E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAC3E,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAC7D;AACD,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAClE,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChC,CAAC;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAC9D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,CAAA;CAAE,CAAC;AAG1F,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAuBtE;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAa7D;AACD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAS7F;AAmCD,wBAAsB,6BAA6B,CACjD,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,GAAE,gBAAuC,EAC9C,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,GAAE,gBAAuC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtL;AA0DD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC,CAWjJ"}