@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.
- package/LICENSE +202 -0
- package/README.md +391 -2
- package/dist/acp-artifacts/binary.d.ts +35 -0
- package/dist/acp-artifacts/binary.d.ts.map +1 -0
- package/dist/acp-artifacts/binary.js +120 -0
- package/dist/acp-artifacts/binary.js.map +1 -0
- package/dist/acp-artifacts/index.d.ts +7 -0
- package/dist/acp-artifacts/index.d.ts.map +1 -0
- package/dist/acp-artifacts/index.js +7 -0
- package/dist/acp-artifacts/index.js.map +1 -0
- package/dist/acp-artifacts/node-abi.d.ts +3 -0
- package/dist/acp-artifacts/node-abi.d.ts.map +1 -0
- package/dist/acp-artifacts/node-abi.js +17 -0
- package/dist/acp-artifacts/node-abi.js.map +1 -0
- package/dist/acp-artifacts/npm-cli.d.ts +3 -0
- package/dist/acp-artifacts/npm-cli.d.ts.map +1 -0
- package/dist/acp-artifacts/npm-cli.js +9 -0
- package/dist/acp-artifacts/npm-cli.js.map +1 -0
- package/dist/acp-artifacts/npm.d.ts +37 -0
- package/dist/acp-artifacts/npm.d.ts.map +1 -0
- package/dist/acp-artifacts/npm.js +167 -0
- package/dist/acp-artifacts/npm.js.map +1 -0
- package/dist/acp-artifacts/registry.d.ts +45 -0
- package/dist/acp-artifacts/registry.d.ts.map +1 -0
- package/dist/acp-artifacts/registry.js +206 -0
- package/dist/acp-artifacts/registry.js.map +1 -0
- package/dist/acp-artifacts/shared.d.ts +45 -0
- package/dist/acp-artifacts/shared.d.ts.map +1 -0
- package/dist/acp-artifacts/shared.js +157 -0
- package/dist/acp-artifacts/shared.js.map +1 -0
- package/dist/acp-artifacts/uvx.d.ts +32 -0
- package/dist/acp-artifacts/uvx.d.ts.map +1 -0
- package/dist/acp-artifacts/uvx.js +95 -0
- package/dist/acp-artifacts/uvx.js.map +1 -0
- package/dist/acp-fork/index.d.ts +51 -0
- package/dist/acp-fork/index.d.ts.map +1 -0
- package/dist/acp-fork/index.js +116 -0
- package/dist/acp-fork/index.js.map +1 -0
- package/dist/acp-harnesses/agent-setup.d.ts +118 -0
- package/dist/acp-harnesses/agent-setup.d.ts.map +1 -0
- package/dist/acp-harnesses/agent-setup.js +717 -0
- package/dist/acp-harnesses/agent-setup.js.map +1 -0
- package/dist/acp-harnesses/custom-agents.d.ts +81 -0
- package/dist/acp-harnesses/custom-agents.d.ts.map +1 -0
- package/dist/acp-harnesses/custom-agents.js +361 -0
- package/dist/acp-harnesses/custom-agents.js.map +1 -0
- package/dist/acp-harnesses/headless-launch.d.ts +34 -0
- package/dist/acp-harnesses/headless-launch.d.ts.map +1 -0
- package/dist/acp-harnesses/headless-launch.js +67 -0
- package/dist/acp-harnesses/headless-launch.js.map +1 -0
- package/dist/acp-harnesses/index.d.ts +18 -0
- package/dist/acp-harnesses/index.d.ts.map +1 -0
- package/dist/acp-harnesses/index.js +58 -0
- package/dist/acp-harnesses/index.js.map +1 -0
- package/dist/acp-harnesses/install-state.d.ts +86 -0
- package/dist/acp-harnesses/install-state.d.ts.map +1 -0
- package/dist/acp-harnesses/install-state.js +322 -0
- package/dist/acp-harnesses/install-state.js.map +1 -0
- package/dist/acp-harnesses/installer.d.ts +145 -0
- package/dist/acp-harnesses/installer.d.ts.map +1 -0
- package/dist/acp-harnesses/installer.js +716 -0
- package/dist/acp-harnesses/installer.js.map +1 -0
- package/dist/acp-harnesses/known-agents.d.ts +154 -0
- package/dist/acp-harnesses/known-agents.d.ts.map +1 -0
- package/dist/acp-harnesses/known-agents.js +240 -0
- package/dist/acp-harnesses/known-agents.js.map +1 -0
- package/dist/acp-harnesses/launcher.d.ts +27 -0
- package/dist/acp-harnesses/launcher.d.ts.map +1 -0
- package/dist/acp-harnesses/launcher.js +64 -0
- package/dist/acp-harnesses/launcher.js.map +1 -0
- package/dist/acp-harnesses/registry-fetch.d.ts +42 -0
- package/dist/acp-harnesses/registry-fetch.d.ts.map +1 -0
- package/dist/acp-harnesses/registry-fetch.js +132 -0
- package/dist/acp-harnesses/registry-fetch.js.map +1 -0
- package/dist/acp-harnesses/registry.d.ts +36 -0
- package/dist/acp-harnesses/registry.d.ts.map +1 -0
- package/dist/acp-harnesses/registry.js +307 -0
- package/dist/acp-harnesses/registry.js.map +1 -0
- package/dist/acp-runtime/errors.d.ts +7 -0
- package/dist/acp-runtime/errors.d.ts.map +1 -0
- package/dist/acp-runtime/errors.js +17 -0
- package/dist/acp-runtime/errors.js.map +1 -0
- package/dist/acp-runtime/fork-support.d.ts +8 -0
- package/dist/acp-runtime/fork-support.d.ts.map +1 -0
- package/dist/acp-runtime/fork-support.js +20 -0
- package/dist/acp-runtime/fork-support.js.map +1 -0
- package/dist/acp-runtime/index.d.ts +11 -0
- package/dist/acp-runtime/index.d.ts.map +1 -0
- package/dist/acp-runtime/index.js +6 -0
- package/dist/acp-runtime/index.js.map +1 -0
- package/dist/acp-runtime/probe.d.ts +103 -0
- package/dist/acp-runtime/probe.d.ts.map +1 -0
- package/dist/acp-runtime/probe.js +872 -0
- package/dist/acp-runtime/probe.js.map +1 -0
- package/dist/acp-runtime/runtime.d.ts +7 -0
- package/dist/acp-runtime/runtime.d.ts.map +1 -0
- package/dist/acp-runtime/runtime.js +26 -0
- package/dist/acp-runtime/runtime.js.map +1 -0
- package/dist/acp-runtime/session.d.ts +87 -0
- package/dist/acp-runtime/session.d.ts.map +1 -0
- package/dist/acp-runtime/session.js +1071 -0
- package/dist/acp-runtime/session.js.map +1 -0
- package/dist/acp-runtime/spawners/node.d.ts +5 -0
- package/dist/acp-runtime/spawners/node.d.ts.map +1 -0
- package/dist/acp-runtime/spawners/node.js +244 -0
- package/dist/acp-runtime/spawners/node.js.map +1 -0
- package/dist/acp-runtime/types.d.ts +180 -0
- package/dist/acp-runtime/types.d.ts.map +1 -0
- package/dist/acp-runtime/types.js +2 -0
- package/dist/acp-runtime/types.js.map +1 -0
- package/dist/agent-contract/acp.d.ts +4 -0
- package/dist/agent-contract/acp.d.ts.map +1 -0
- package/dist/agent-contract/acp.js +273 -0
- package/dist/agent-contract/acp.js.map +1 -0
- package/dist/agent-contract/index.d.ts +125 -0
- package/dist/agent-contract/index.d.ts.map +1 -0
- package/dist/agent-contract/index.js +102 -0
- package/dist/agent-contract/index.js.map +1 -0
- package/dist/agent-contract/managed.d.ts +5 -0
- package/dist/agent-contract/managed.d.ts.map +1 -0
- package/dist/agent-contract/managed.js +242 -0
- package/dist/agent-contract/managed.js.map +1 -0
- package/dist/agent-ui/index.d.ts +170 -0
- package/dist/agent-ui/index.d.ts.map +1 -0
- package/dist/agent-ui/index.js +853 -0
- package/dist/agent-ui/index.js.map +1 -0
- package/dist/agent-ui/presentation.d.ts +30 -0
- package/dist/agent-ui/presentation.d.ts.map +1 -0
- package/dist/agent-ui/presentation.js +79 -0
- package/dist/agent-ui/presentation.js.map +1 -0
- package/dist/agent-ui/react.d.ts +50 -0
- package/dist/agent-ui/react.d.ts.map +1 -0
- package/dist/agent-ui/react.js +334 -0
- package/dist/agent-ui/react.js.map +1 -0
- package/dist/brand/index.d.ts +17 -0
- package/dist/brand/index.d.ts.map +1 -0
- package/dist/brand/index.js +119 -0
- package/dist/brand/index.js.map +1 -0
- package/dist/brand/openma-logo-mark.svg +7 -0
- package/dist/brand/tokens.css +77 -0
- package/dist/brand/website.css +67 -0
- package/dist/chat-ui/acp.d.ts +26 -0
- package/dist/chat-ui/acp.d.ts.map +1 -0
- package/dist/chat-ui/acp.js +166 -0
- package/dist/chat-ui/acp.js.map +1 -0
- package/dist/chat-ui/components.d.ts +230 -0
- package/dist/chat-ui/components.d.ts.map +1 -0
- package/dist/chat-ui/components.js +561 -0
- package/dist/chat-ui/components.js.map +1 -0
- package/dist/chat-ui/composer-drafts.d.ts +21 -0
- package/dist/chat-ui/composer-drafts.d.ts.map +1 -0
- package/dist/chat-ui/composer-drafts.js +58 -0
- package/dist/chat-ui/composer-drafts.js.map +1 -0
- package/dist/chat-ui/controller.d.ts +61 -0
- package/dist/chat-ui/controller.d.ts.map +1 -0
- package/dist/chat-ui/controller.js +218 -0
- package/dist/chat-ui/controller.js.map +1 -0
- package/dist/chat-ui/index.d.ts +8 -0
- package/dist/chat-ui/index.d.ts.map +1 -0
- package/dist/chat-ui/index.js +8 -0
- package/dist/chat-ui/index.js.map +1 -0
- package/dist/chat-ui/markdown.d.ts +37 -0
- package/dist/chat-ui/markdown.d.ts.map +1 -0
- package/dist/chat-ui/markdown.js +33 -0
- package/dist/chat-ui/markdown.js.map +1 -0
- package/dist/chat-ui/presentation.d.ts +34 -0
- package/dist/chat-ui/presentation.d.ts.map +1 -0
- package/dist/chat-ui/presentation.js +191 -0
- package/dist/chat-ui/presentation.js.map +1 -0
- package/dist/chat-ui/styles.css +815 -0
- package/dist/chat-ui/utils.d.ts +14 -0
- package/dist/chat-ui/utils.d.ts.map +1 -0
- package/dist/chat-ui/utils.js +71 -0
- package/dist/chat-ui/utils.js.map +1 -0
- package/dist/local-runtime/checkpoint.d.ts +28 -0
- package/dist/local-runtime/checkpoint.d.ts.map +1 -0
- package/dist/local-runtime/checkpoint.js +2 -0
- package/dist/local-runtime/checkpoint.js.map +1 -0
- package/dist/local-runtime/daemon-connection.d.ts +27 -0
- package/dist/local-runtime/daemon-connection.d.ts.map +1 -0
- package/dist/local-runtime/daemon-connection.js +161 -0
- package/dist/local-runtime/daemon-connection.js.map +1 -0
- package/dist/local-runtime/daemon-host.d.ts +39 -0
- package/dist/local-runtime/daemon-host.d.ts.map +1 -0
- package/dist/local-runtime/daemon-host.js +88 -0
- package/dist/local-runtime/daemon-host.js.map +1 -0
- package/dist/local-runtime/index.d.ts +6 -0
- package/dist/local-runtime/index.d.ts.map +1 -0
- package/dist/local-runtime/index.js +5 -0
- package/dist/local-runtime/index.js.map +1 -0
- package/dist/local-runtime/runtime.d.ts +36 -0
- package/dist/local-runtime/runtime.d.ts.map +1 -0
- package/dist/local-runtime/runtime.js +82 -0
- package/dist/local-runtime/runtime.js.map +1 -0
- package/dist/local-runtime/session-host.d.ts +62 -0
- package/dist/local-runtime/session-host.d.ts.map +1 -0
- package/dist/local-runtime/session-host.js +477 -0
- package/dist/local-runtime/session-host.js.map +1 -0
- package/dist/managed-runtime/acp-subagents.d.ts +14 -0
- package/dist/managed-runtime/acp-subagents.d.ts.map +1 -0
- package/dist/managed-runtime/acp-subagents.js +67 -0
- package/dist/managed-runtime/acp-subagents.js.map +1 -0
- package/dist/managed-runtime/claimed-environment-work.d.ts +61 -0
- package/dist/managed-runtime/claimed-environment-work.d.ts.map +1 -0
- package/dist/managed-runtime/claimed-environment-work.js +170 -0
- package/dist/managed-runtime/claimed-environment-work.js.map +1 -0
- package/dist/managed-runtime/contracts.d.ts +31 -0
- package/dist/managed-runtime/contracts.d.ts.map +1 -0
- package/dist/managed-runtime/contracts.js +2 -0
- package/dist/managed-runtime/contracts.js.map +1 -0
- package/dist/managed-runtime/http-control.d.ts +67 -0
- package/dist/managed-runtime/http-control.d.ts.map +1 -0
- package/dist/managed-runtime/http-control.js +465 -0
- package/dist/managed-runtime/http-control.js.map +1 -0
- package/dist/managed-runtime/index.d.ts +89 -0
- package/dist/managed-runtime/index.d.ts.map +1 -0
- package/dist/managed-runtime/index.js +215 -0
- package/dist/managed-runtime/index.js.map +1 -0
- package/dist/managed-runtime/input-identity.d.ts +2 -0
- package/dist/managed-runtime/input-identity.d.ts.map +1 -0
- package/dist/managed-runtime/input-identity.js +2 -0
- package/dist/managed-runtime/input-identity.js.map +1 -0
- package/dist/managed-runtime/managed-event-projector.d.ts +24 -0
- package/dist/managed-runtime/managed-event-projector.d.ts.map +1 -0
- package/dist/managed-runtime/managed-event-projector.js +333 -0
- package/dist/managed-runtime/managed-event-projector.js.map +1 -0
- package/dist/managed-runtime/semantic-recovery.d.ts +61 -0
- package/dist/managed-runtime/semantic-recovery.d.ts.map +1 -0
- package/dist/managed-runtime/semantic-recovery.js +167 -0
- package/dist/managed-runtime/semantic-recovery.js.map +1 -0
- package/dist/project-ui/CreateProjectDialog.d.ts +15 -0
- package/dist/project-ui/CreateProjectDialog.d.ts.map +1 -0
- package/dist/project-ui/CreateProjectDialog.js +87 -0
- package/dist/project-ui/CreateProjectDialog.js.map +1 -0
- package/dist/project-ui/ProjectComposer.d.ts +13 -0
- package/dist/project-ui/ProjectComposer.d.ts.map +1 -0
- package/dist/project-ui/ProjectComposer.js +70 -0
- package/dist/project-ui/ProjectComposer.js.map +1 -0
- package/dist/project-ui/ProjectConversation.d.ts +10 -0
- package/dist/project-ui/ProjectConversation.d.ts.map +1 -0
- package/dist/project-ui/ProjectConversation.js +28 -0
- package/dist/project-ui/ProjectConversation.js.map +1 -0
- package/dist/project-ui/ProjectMessageAttachments.d.ts +4 -0
- package/dist/project-ui/ProjectMessageAttachments.d.ts.map +1 -0
- package/dist/project-ui/ProjectMessageAttachments.js +28 -0
- package/dist/project-ui/ProjectMessageAttachments.js.map +1 -0
- package/dist/project-ui/ProjectSettings.d.ts +8 -0
- package/dist/project-ui/ProjectSettings.d.ts.map +1 -0
- package/dist/project-ui/ProjectSettings.js +65 -0
- package/dist/project-ui/ProjectSettings.js.map +1 -0
- package/dist/project-ui/Projects.d.ts +18 -0
- package/dist/project-ui/Projects.d.ts.map +1 -0
- package/dist/project-ui/Projects.js +377 -0
- package/dist/project-ui/Projects.js.map +1 -0
- package/dist/project-ui/client.d.ts +234 -0
- package/dist/project-ui/client.d.ts.map +1 -0
- package/dist/project-ui/client.js +42 -0
- package/dist/project-ui/client.js.map +1 -0
- package/dist/project-ui/controls.d.ts +15 -0
- package/dist/project-ui/controls.d.ts.map +1 -0
- package/dist/project-ui/controls.js +17 -0
- package/dist/project-ui/controls.js.map +1 -0
- package/dist/project-ui/index.d.ts +20 -0
- package/dist/project-ui/index.d.ts.map +1 -0
- package/dist/project-ui/index.js +17 -0
- package/dist/project-ui/index.js.map +1 -0
- package/dist/project-ui/project-coordinator.d.ts +3 -0
- package/dist/project-ui/project-coordinator.d.ts.map +1 -0
- package/dist/project-ui/project-coordinator.js +12 -0
- package/dist/project-ui/project-coordinator.js.map +1 -0
- package/dist/project-ui/project-goals.d.ts +48 -0
- package/dist/project-ui/project-goals.d.ts.map +1 -0
- package/dist/project-ui/project-goals.js +169 -0
- package/dist/project-ui/project-goals.js.map +1 -0
- package/dist/project-ui/projects-query.d.ts +19 -0
- package/dist/project-ui/projects-query.d.ts.map +1 -0
- package/dist/project-ui/projects-query.js +132 -0
- package/dist/project-ui/projects-query.js.map +1 -0
- package/dist/project-ui/styles.css +847 -0
- package/dist/protocol/acp/index.d.ts +52 -0
- package/dist/protocol/acp/index.d.ts.map +1 -0
- package/dist/protocol/acp/index.js +1056 -0
- package/dist/protocol/acp/index.js.map +1 -0
- package/dist/protocol/cursor-cloud/index.d.ts +74 -0
- package/dist/protocol/cursor-cloud/index.d.ts.map +1 -0
- package/dist/protocol/cursor-cloud/index.js +249 -0
- package/dist/protocol/cursor-cloud/index.js.map +1 -0
- package/dist/protocol/managed/index.d.ts +32 -0
- package/dist/protocol/managed/index.d.ts.map +1 -0
- package/dist/protocol/managed/index.js +646 -0
- package/dist/protocol/managed/index.js.map +1 -0
- package/dist/protocol/managed/input-identity.d.ts +3 -0
- package/dist/protocol/managed/input-identity.d.ts.map +1 -0
- package/dist/protocol/managed/input-identity.js +6 -0
- package/dist/protocol/managed/input-identity.js.map +1 -0
- package/dist/protocol/openai-agents/index.d.ts +102 -0
- package/dist/protocol/openai-agents/index.d.ts.map +1 -0
- package/dist/protocol/openai-agents/index.js +142 -0
- package/dist/protocol/openai-agents/index.js.map +1 -0
- package/dist/session-events/acp-system-notices.d.ts +10 -0
- package/dist/session-events/acp-system-notices.d.ts.map +1 -0
- package/dist/session-events/acp-system-notices.js +46 -0
- package/dist/session-events/acp-system-notices.js.map +1 -0
- package/dist/session-events/acp.d.ts +214 -0
- package/dist/session-events/acp.d.ts.map +1 -0
- package/dist/session-events/acp.js +956 -0
- package/dist/session-events/acp.js.map +1 -0
- package/dist/session-events/managed.d.ts +141 -0
- package/dist/session-events/managed.d.ts.map +1 -0
- package/dist/session-events/managed.js +324 -0
- package/dist/session-events/managed.js.map +1 -0
- package/dist/session-events/openma.d.ts +304 -0
- package/dist/session-events/openma.d.ts.map +1 -0
- package/dist/session-events/openma.js +438 -0
- package/dist/session-events/openma.js.map +1 -0
- package/dist/session-kernel/index.d.ts +118 -0
- package/dist/session-kernel/index.d.ts.map +1 -0
- package/dist/session-kernel/index.js +215 -0
- package/dist/session-kernel/index.js.map +1 -0
- package/dist/session-orchestrator/index.d.ts +71 -0
- package/dist/session-orchestrator/index.d.ts.map +1 -0
- package/dist/session-orchestrator/index.js +177 -0
- package/dist/session-orchestrator/index.js.map +1 -0
- package/dist/session-ui/index.d.ts +96 -0
- package/dist/session-ui/index.d.ts.map +1 -0
- package/dist/session-ui/index.js +277 -0
- package/dist/session-ui/index.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|