@osva-ai/cli 1.0.0 → 1.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -0
- package/dist/bin/osva.js +83 -5
- package/dist/bin/osva.js.map +1 -1
- package/dist/commands/index.js +13 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/doctor/format.d.ts +4 -0
- package/dist/doctor/format.d.ts.map +1 -0
- package/dist/doctor/format.js +18 -0
- package/dist/doctor/format.js.map +1 -0
- package/dist/doctor/http-probe.d.ts +17 -0
- package/dist/doctor/http-probe.d.ts.map +1 -0
- package/dist/doctor/http-probe.js +104 -0
- package/dist/doctor/http-probe.js.map +1 -0
- package/dist/doctor/index.d.ts +7 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +15 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/read-env.d.ts +3 -0
- package/dist/doctor/read-env.d.ts.map +1 -0
- package/dist/doctor/read-env.js +27 -0
- package/dist/doctor/read-env.js.map +1 -0
- package/dist/doctor/redact.d.ts +2 -0
- package/dist/doctor/redact.d.ts.map +1 -0
- package/dist/doctor/redact.js +10 -0
- package/dist/doctor/redact.js.map +1 -0
- package/dist/doctor/run-doctor.d.ts +6 -0
- package/dist/doctor/run-doctor.d.ts.map +1 -0
- package/dist/doctor/run-doctor.js +250 -0
- package/dist/doctor/run-doctor.js.map +1 -0
- package/dist/doctor/types.d.ts +22 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +2 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/exit.d.ts +7 -0
- package/dist/exit.d.ts.map +1 -0
- package/dist/exit.js +9 -0
- package/dist/exit.js.map +1 -0
- package/dist/init/index.d.ts +7 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +40 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/resolve-target.d.ts +2 -0
- package/dist/init/resolve-target.d.ts.map +1 -0
- package/dist/init/resolve-target.js +15 -0
- package/dist/init/resolve-target.js.map +1 -0
- package/dist/init/run-init.d.ts +6 -0
- package/dist/init/run-init.d.ts.map +1 -0
- package/dist/init/run-init.js +34 -0
- package/dist/init/run-init.js.map +1 -0
- package/dist/init/scaffold.d.ts +6 -0
- package/dist/init/scaffold.d.ts.map +1 -0
- package/dist/init/scaffold.js +66 -0
- package/dist/init/scaffold.js.map +1 -0
- package/dist/init/template-root.d.ts +3 -0
- package/dist/init/template-root.d.ts.map +1 -0
- package/dist/init/template-root.js +8 -0
- package/dist/init/template-root.js.map +1 -0
- package/dist/init/template-vars.d.ts +4 -0
- package/dist/init/template-vars.d.ts.map +1 -0
- package/dist/init/template-vars.js +18 -0
- package/dist/init/template-vars.js.map +1 -0
- package/dist/init/types.d.ts +18 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +2 -0
- package/dist/init/types.js.map +1 -0
- package/dist/init/validate-project-name.d.ts +3 -0
- package/dist/init/validate-project-name.d.ts.map +1 -0
- package/dist/init/validate-project-name.js +26 -0
- package/dist/init/validate-project-name.js.map +1 -0
- package/dist/project/compose-volume.d.ts +11 -0
- package/dist/project/compose-volume.d.ts.map +1 -0
- package/dist/project/compose-volume.js +66 -0
- package/dist/project/compose-volume.js.map +1 -0
- package/dist/project/deploy-env.d.ts +12 -0
- package/dist/project/deploy-env.d.ts.map +1 -0
- package/dist/project/deploy-env.js +50 -0
- package/dist/project/deploy-env.js.map +1 -0
- package/dist/project/ensure-agent-version.d.ts +17 -0
- package/dist/project/ensure-agent-version.d.ts.map +1 -0
- package/dist/project/ensure-agent-version.js +105 -0
- package/dist/project/ensure-agent-version.js.map +1 -0
- package/dist/project/errors.d.ts +10 -0
- package/dist/project/errors.d.ts.map +1 -0
- package/dist/project/errors.js +19 -0
- package/dist/project/errors.js.map +1 -0
- package/dist/project/format.d.ts +42 -0
- package/dist/project/format.d.ts.map +1 -0
- package/dist/project/format.js +66 -0
- package/dist/project/format.js.map +1 -0
- package/dist/project/index.d.ts +5 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +101 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/install-trusted-runtime.d.ts +14 -0
- package/dist/project/install-trusted-runtime.d.ts.map +1 -0
- package/dist/project/install-trusted-runtime.js +82 -0
- package/dist/project/install-trusted-runtime.js.map +1 -0
- package/dist/project/load-manifest.d.ts +3 -0
- package/dist/project/load-manifest.d.ts.map +1 -0
- package/dist/project/load-manifest.js +13 -0
- package/dist/project/load-manifest.js.map +1 -0
- package/dist/project/manifest.d.ts +4 -0
- package/dist/project/manifest.d.ts.map +1 -0
- package/dist/project/manifest.js +12 -0
- package/dist/project/manifest.js.map +1 -0
- package/dist/project/parse-run-input.d.ts +6 -0
- package/dist/project/parse-run-input.d.ts.map +1 -0
- package/dist/project/parse-run-input.js +43 -0
- package/dist/project/parse-run-input.js.map +1 -0
- package/dist/project/poll.d.ts +15 -0
- package/dist/project/poll.d.ts.map +1 -0
- package/dist/project/poll.js +32 -0
- package/dist/project/poll.js.map +1 -0
- package/dist/project/run-deploy.d.ts +16 -0
- package/dist/project/run-deploy.d.ts.map +1 -0
- package/dist/project/run-deploy.js +142 -0
- package/dist/project/run-deploy.js.map +1 -0
- package/dist/project/run-run.d.ts +17 -0
- package/dist/project/run-run.d.ts.map +1 -0
- package/dist/project/run-run.js +203 -0
- package/dist/project/run-run.js.map +1 -0
- package/dist/project/run-status.d.ts +15 -0
- package/dist/project/run-status.d.ts.map +1 -0
- package/dist/project/run-status.js +122 -0
- package/dist/project/run-status.js.map +1 -0
- package/dist/project/sdk-error.d.ts +10 -0
- package/dist/project/sdk-error.d.ts.map +1 -0
- package/dist/project/sdk-error.js +49 -0
- package/dist/project/sdk-error.js.map +1 -0
- package/dist/project/state.d.ts +28 -0
- package/dist/project/state.d.ts.map +1 -0
- package/dist/project/state.js +54 -0
- package/dist/project/state.js.map +1 -0
- package/dist/project/workspace-context.d.ts +6 -0
- package/dist/project/workspace-context.d.ts.map +1 -0
- package/dist/project/workspace-context.js +25 -0
- package/dist/project/workspace-context.js.map +1 -0
- package/dist/stdout.d.ts +3 -0
- package/dist/stdout.d.ts.map +1 -0
- package/dist/stdout.js +27 -0
- package/dist/stdout.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/validate/canonical-json.d.ts +2 -0
- package/dist/validate/canonical-json.d.ts.map +1 -0
- package/dist/validate/canonical-json.js +17 -0
- package/dist/validate/canonical-json.js.map +1 -0
- package/dist/validate/exit-code.d.ts +3 -0
- package/dist/validate/exit-code.d.ts.map +1 -0
- package/dist/validate/exit-code.js +4 -0
- package/dist/validate/exit-code.js.map +1 -0
- package/dist/validate/format.d.ts +4 -0
- package/dist/validate/format.d.ts.map +1 -0
- package/dist/validate/format.js +23 -0
- package/dist/validate/format.js.map +1 -0
- package/dist/validate/index.d.ts +6 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +29 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/integrity.d.ts +4 -0
- package/dist/validate/integrity.d.ts.map +1 -0
- package/dist/validate/integrity.js +24 -0
- package/dist/validate/integrity.js.map +1 -0
- package/dist/validate/json-schema-draft.d.ts +8 -0
- package/dist/validate/json-schema-draft.d.ts.map +1 -0
- package/dist/validate/json-schema-draft.js +32 -0
- package/dist/validate/json-schema-draft.js.map +1 -0
- package/dist/validate/project-config.d.ts +24 -0
- package/dist/validate/project-config.d.ts.map +1 -0
- package/dist/validate/project-config.js +27 -0
- package/dist/validate/project-config.js.map +1 -0
- package/dist/validate/resolve-project-dir.d.ts +12 -0
- package/dist/validate/resolve-project-dir.d.ts.map +1 -0
- package/dist/validate/resolve-project-dir.js +27 -0
- package/dist/validate/resolve-project-dir.js.map +1 -0
- package/dist/validate/run-validate.d.ts +3 -0
- package/dist/validate/run-validate.d.ts.map +1 -0
- package/dist/validate/run-validate.js +278 -0
- package/dist/validate/run-validate.js.map +1 -0
- package/dist/validate/safe-path.d.ts +4 -0
- package/dist/validate/safe-path.d.ts.map +1 -0
- package/dist/validate/safe-path.js +42 -0
- package/dist/validate/safe-path.js.map +1 -0
- package/dist/validate/types.d.ts +14 -0
- package/dist/validate/types.d.ts.map +1 -0
- package/dist/validate/types.js +2 -0
- package/dist/validate/types.js.map +1 -0
- package/package.json +6 -3
- package/templates/agent-typescript/.gitignore +4 -0
- package/templates/agent-typescript/README.md.template +56 -0
- package/templates/agent-typescript/agent/agent.ts.template +25 -0
- package/templates/agent-typescript/contracts/input.v1.schema.json +12 -0
- package/templates/agent-typescript/contracts/output.v1.schema.json +12 -0
- package/templates/agent-typescript/osva-agent.project.json.template +21 -0
- package/templates/agent-typescript/package.json.template +16 -0
- package/templates/agent-typescript/scripts/build-manifest.mjs +53 -0
- package/templates/agent-typescript/tsconfig.json +19 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { writeStdout } from "../stdout.js";
|
|
2
|
+
import { printError } from "../output.js";
|
|
3
|
+
import { formatDeployHuman, formatDeployJson, formatRunHuman, formatRunJson, formatStatusHuman, formatStatusJson, } from "./format.js";
|
|
4
|
+
import { runDeployPipeline } from "./run-deploy.js";
|
|
5
|
+
import { runRunPipeline } from "./run-run.js";
|
|
6
|
+
import { runStatusPipeline } from "./run-status.js";
|
|
7
|
+
import { mapProjectSdkError } from "./sdk-error.js";
|
|
8
|
+
export async function runDeployCommand(config, flags) {
|
|
9
|
+
let result;
|
|
10
|
+
try {
|
|
11
|
+
result = await runDeployPipeline({ config, flags });
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
const mapped = mapProjectSdkError({ error, json: config.json });
|
|
15
|
+
if (mapped !== null) {
|
|
16
|
+
if (mapped.stdout !== undefined) {
|
|
17
|
+
await writeStdout(mapped.stdout);
|
|
18
|
+
}
|
|
19
|
+
if (mapped.message !== undefined) {
|
|
20
|
+
printError(mapped.message);
|
|
21
|
+
}
|
|
22
|
+
return mapped.exitCode;
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
if (!result.ok) {
|
|
27
|
+
if (result.validateStdout !== undefined) {
|
|
28
|
+
await writeStdout(result.validateStdout);
|
|
29
|
+
return result.exitCode;
|
|
30
|
+
}
|
|
31
|
+
if (result.message !== undefined) {
|
|
32
|
+
printError(result.message);
|
|
33
|
+
}
|
|
34
|
+
return result.exitCode;
|
|
35
|
+
}
|
|
36
|
+
await writeStdout(config.json
|
|
37
|
+
? formatDeployJson(result.payload)
|
|
38
|
+
: formatDeployHuman(result.payload));
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
export async function runRunCommand(config, flags) {
|
|
42
|
+
let result;
|
|
43
|
+
try {
|
|
44
|
+
result = await runRunPipeline({ config, flags });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const mapped = mapProjectSdkError({ error, json: config.json });
|
|
48
|
+
if (mapped !== null) {
|
|
49
|
+
if (mapped.stdout !== undefined) {
|
|
50
|
+
await writeStdout(mapped.stdout);
|
|
51
|
+
}
|
|
52
|
+
if (mapped.message !== undefined) {
|
|
53
|
+
printError(mapped.message);
|
|
54
|
+
}
|
|
55
|
+
return mapped.exitCode;
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
if (!result.ok) {
|
|
60
|
+
if (result.validateStdout !== undefined) {
|
|
61
|
+
await writeStdout(result.validateStdout);
|
|
62
|
+
return result.exitCode;
|
|
63
|
+
}
|
|
64
|
+
if (result.message !== undefined) {
|
|
65
|
+
printError(result.message);
|
|
66
|
+
}
|
|
67
|
+
return result.exitCode;
|
|
68
|
+
}
|
|
69
|
+
await writeStdout(config.json
|
|
70
|
+
? formatRunJson(result.payload)
|
|
71
|
+
: formatRunHuman(result.payload));
|
|
72
|
+
return result.waited && result.payload.status !== "SUCCEEDED" ? 1 : 0;
|
|
73
|
+
}
|
|
74
|
+
export async function runStatusCommand(config, flags) {
|
|
75
|
+
let result;
|
|
76
|
+
try {
|
|
77
|
+
result = await runStatusPipeline({ config, flags });
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
const mapped = mapProjectSdkError({ error, json: config.json });
|
|
81
|
+
if (mapped !== null) {
|
|
82
|
+
if (mapped.stdout !== undefined) {
|
|
83
|
+
await writeStdout(mapped.stdout);
|
|
84
|
+
}
|
|
85
|
+
if (mapped.message !== undefined) {
|
|
86
|
+
printError(mapped.message);
|
|
87
|
+
}
|
|
88
|
+
return mapped.exitCode;
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
if (!result.ok) {
|
|
93
|
+
printError(result.message);
|
|
94
|
+
return result.exitCode;
|
|
95
|
+
}
|
|
96
|
+
await writeStdout(config.json
|
|
97
|
+
? formatStatusJson(result.payload)
|
|
98
|
+
: formatStatusHuman(result.payload));
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/project/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentManifestV1 } from "@osva-ai/contracts";
|
|
2
|
+
import type { ProjectDeployEnv } from "./deploy-env.js";
|
|
3
|
+
export interface InstalledTrustedRuntime {
|
|
4
|
+
readonly entrypoint: string;
|
|
5
|
+
readonly integrity: string;
|
|
6
|
+
readonly deployTarget: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function installTrustedRuntimeArtifact(input: {
|
|
9
|
+
readonly projectDir: string;
|
|
10
|
+
readonly manifest: AgentManifestV1;
|
|
11
|
+
readonly deployEnv: ProjectDeployEnv;
|
|
12
|
+
}): Promise<InstalledTrustedRuntime>;
|
|
13
|
+
export declare function sha256IntegrityOfVolumeEntrypoint(volumeName: string, entrypoint: string): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=install-trusted-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-trusted-runtime.d.ts","sourceRoot":"","sources":["../../src/project/install-trusted-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAyBnC;AA6ED,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { copyFile, mkdir } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { sha256IntegrityOf, sha256IntegrityOfFile, } from "../validate/integrity.js";
|
|
5
|
+
import { resolvePathInsideRoot } from "../validate/safe-path.js";
|
|
6
|
+
import { readComposeProjectNameFromFile, resolveComposeProjectName, resolveComposeTrustedRuntimeVolume, } from "./compose-volume.js";
|
|
7
|
+
import { ProjectDeployError } from "./errors.js";
|
|
8
|
+
export async function installTrustedRuntimeArtifact(input) {
|
|
9
|
+
const runtime = input.manifest.runtime;
|
|
10
|
+
if (runtime.type !== "TRUSTED_TYPESCRIPT") {
|
|
11
|
+
throw new ProjectDeployError("Only TRUSTED_TYPESCRIPT agents can be deployed from the CLI.");
|
|
12
|
+
}
|
|
13
|
+
const entrypoint = runtime.entrypoint;
|
|
14
|
+
const artifactPath = resolvePathInsideRoot(input.projectDir, "dist", "agent", entrypoint);
|
|
15
|
+
if (input.deployEnv.deployMode === "host") {
|
|
16
|
+
return installToHostTrustedRoot(input.deployEnv.trustedRuntimeRoot, artifactPath, entrypoint);
|
|
17
|
+
}
|
|
18
|
+
return installToComposeVolume(input.deployEnv, artifactPath, entrypoint);
|
|
19
|
+
}
|
|
20
|
+
async function installToHostTrustedRoot(trustedRuntimeRoot, artifactPath, entrypoint) {
|
|
21
|
+
await mkdir(trustedRuntimeRoot, { recursive: true });
|
|
22
|
+
const targetPath = path.join(trustedRuntimeRoot, entrypoint);
|
|
23
|
+
await copyFile(artifactPath, targetPath);
|
|
24
|
+
const integrity = await sha256IntegrityOfFile(targetPath);
|
|
25
|
+
return {
|
|
26
|
+
entrypoint,
|
|
27
|
+
integrity,
|
|
28
|
+
deployTarget: targetPath,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async function installToComposeVolume(deployEnv, artifactPath, entrypoint) {
|
|
32
|
+
const composeDir = deployEnv.composeDir;
|
|
33
|
+
const composeFileProject = await readComposeProjectNameFromFile(composeDir).catch(() => undefined);
|
|
34
|
+
const projectName = resolveComposeProjectName({
|
|
35
|
+
osvaComposeProject: deployEnv.composeProject,
|
|
36
|
+
composeProjectNameEnv: deployEnv.composeProjectNameEnv,
|
|
37
|
+
composeFileNameField: composeFileProject,
|
|
38
|
+
});
|
|
39
|
+
const volumeName = resolveComposeTrustedRuntimeVolume(projectName);
|
|
40
|
+
const sourceDir = path.dirname(artifactPath);
|
|
41
|
+
const result = spawnSync("docker", [
|
|
42
|
+
"run",
|
|
43
|
+
"--rm",
|
|
44
|
+
"-v",
|
|
45
|
+
`${volumeName}:/dest`,
|
|
46
|
+
"-v",
|
|
47
|
+
`${sourceDir}:/src:ro`,
|
|
48
|
+
"alpine:3.21",
|
|
49
|
+
"cp",
|
|
50
|
+
`/src/${entrypoint}`,
|
|
51
|
+
`/dest/${entrypoint}`,
|
|
52
|
+
], { stdio: "inherit" });
|
|
53
|
+
if (result.status !== 0) {
|
|
54
|
+
throw new ProjectDeployError(`Failed to copy agent executable into Compose volume '${volumeName}'.`);
|
|
55
|
+
}
|
|
56
|
+
const integrity = await sha256IntegrityOfVolumeEntrypoint(volumeName, entrypoint);
|
|
57
|
+
const sourceIntegrity = await sha256IntegrityOfFile(artifactPath);
|
|
58
|
+
if (integrity !== sourceIntegrity) {
|
|
59
|
+
throw new ProjectDeployError(`Installed entrypoint digest (${integrity}) does not match compiled executable (${sourceIntegrity}). The worker would reject execution.`);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
entrypoint,
|
|
63
|
+
integrity,
|
|
64
|
+
deployTarget: `docker-volume:${volumeName}/${entrypoint}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export async function sha256IntegrityOfVolumeEntrypoint(volumeName, entrypoint) {
|
|
68
|
+
const result = spawnSync("docker", [
|
|
69
|
+
"run",
|
|
70
|
+
"--rm",
|
|
71
|
+
"-v",
|
|
72
|
+
`${volumeName}:/dest:ro`,
|
|
73
|
+
"alpine:3.21",
|
|
74
|
+
"cat",
|
|
75
|
+
`/dest/${entrypoint}`,
|
|
76
|
+
], { encoding: "buffer", maxBuffer: 10 * 1024 * 1024, stdio: "pipe" });
|
|
77
|
+
if (result.status !== 0) {
|
|
78
|
+
throw new ProjectDeployError(`Trusted runtime entrypoint '${entrypoint}' is missing or unreadable in volume '${volumeName}' after install.`);
|
|
79
|
+
}
|
|
80
|
+
return sha256IntegrityOf(result.stdout);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=install-trusted-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-trusted-runtime.js","sourceRoot":"","sources":["../../src/project/install-trusted-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-manifest.d.ts","sourceRoot":"","sources":["../../src/project/load-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAQ1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { agentManifestSchema } from "@osva-ai/contracts/schemas";
|
|
4
|
+
export async function loadProjectManifest(projectDir) {
|
|
5
|
+
const manifestPath = path.join(projectDir, "osva.manifest.json");
|
|
6
|
+
const raw = await readFile(manifestPath, "utf8");
|
|
7
|
+
const parsed = agentManifestSchema.safeParse(JSON.parse(raw));
|
|
8
|
+
if (!parsed.success) {
|
|
9
|
+
throw new Error("osva.manifest.json is invalid.");
|
|
10
|
+
}
|
|
11
|
+
return parsed.data;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=load-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-manifest.js","sourceRoot":"","sources":["../../src/project/load-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,IAAuB,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentManifestV1 } from "@osva-ai/contracts";
|
|
2
|
+
export declare function manifestFingerprint(manifest: AgentManifestV1): string;
|
|
3
|
+
export declare function manifestsMatch(left: AgentManifestV1, right: AgentManifestV1): boolean;
|
|
4
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/project/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAMrE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,GACrB,OAAO,CAET"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { canonicalJson } from "../validate/canonical-json.js";
|
|
2
|
+
export function manifestFingerprint(manifest) {
|
|
3
|
+
const runtime = manifest.runtime;
|
|
4
|
+
if (runtime.type !== "TRUSTED_TYPESCRIPT") {
|
|
5
|
+
throw new Error("Agent manifest must use TRUSTED_TYPESCRIPT.");
|
|
6
|
+
}
|
|
7
|
+
return canonicalJson(manifest);
|
|
8
|
+
}
|
|
9
|
+
export function manifestsMatch(left, right) {
|
|
10
|
+
return manifestFingerprint(left) === manifestFingerprint(right);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/project/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAAC,QAAyB;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAqB,EACrB,KAAsB;IAEtB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-run-input.d.ts","sourceRoot":"","sources":["../../src/project/parse-run-input.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKpD,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAC5D,GAAG,OAAO,CAAC,SAAS,CAAC,CAuCrB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { resolvePathInsideRoot } from "../validate/safe-path.js";
|
|
4
|
+
import { ProjectConfigurationError } from "./errors.js";
|
|
5
|
+
export async function parseRunInput(input) {
|
|
6
|
+
const hasInput = typeof input.flags.input === "string";
|
|
7
|
+
const hasInputFile = typeof input.flags["input-file"] === "string";
|
|
8
|
+
if (hasInput && hasInputFile) {
|
|
9
|
+
throw new ProjectConfigurationError("Use either --input or --input-file, not both.");
|
|
10
|
+
}
|
|
11
|
+
if (hasInput) {
|
|
12
|
+
return parseInlineJson(input.flags.input);
|
|
13
|
+
}
|
|
14
|
+
if (hasInputFile) {
|
|
15
|
+
const relative = input.flags["input-file"];
|
|
16
|
+
if (path.isAbsolute(relative)) {
|
|
17
|
+
throw new ProjectConfigurationError("Input file path must be relative to the project directory.");
|
|
18
|
+
}
|
|
19
|
+
let filePath;
|
|
20
|
+
try {
|
|
21
|
+
filePath = resolvePathInsideRoot(input.projectDir, ...relative.split("/"));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new ProjectConfigurationError("Input file path must stay inside the project directory.");
|
|
25
|
+
}
|
|
26
|
+
const raw = await readFile(filePath, "utf8");
|
|
27
|
+
return parseInlineJson(raw);
|
|
28
|
+
}
|
|
29
|
+
throw new ProjectConfigurationError("Run input is required. Pass --input JSON or --input-file path.");
|
|
30
|
+
}
|
|
31
|
+
function parseInlineJson(raw) {
|
|
32
|
+
const trimmed = raw.trim();
|
|
33
|
+
if (trimmed.length === 0) {
|
|
34
|
+
throw new ProjectConfigurationError("Run input JSON is empty.");
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(trimmed);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new ProjectConfigurationError("Run input is not valid JSON.");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=parse-run-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-run-input.js","sourceRoot":"","sources":["../../src/project/parse-run-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAGnC;IACC,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;IACvD,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC;IAEnE,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CACjC,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAW,CAAC;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,yBAAyB,CACjC,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,qBAAqB,CAC9B,KAAK,CAAC,UAAU,EAChB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CACvB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,yBAAyB,CACjC,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,yBAAyB,CACjC,gEAAgE,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,yBAAyB,CAAC,0BAA0B,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,yBAAyB,CAAC,8BAA8B,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class ProjectPollError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export interface PollOptions<T> {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly intervalMs: number;
|
|
7
|
+
readonly timeoutMs: number;
|
|
8
|
+
readonly fetch: () => Promise<T>;
|
|
9
|
+
readonly getStatus: (value: T) => string;
|
|
10
|
+
readonly isReady: (value: T) => boolean;
|
|
11
|
+
readonly isFailed: (value: T) => boolean;
|
|
12
|
+
readonly onStatus?: (status: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function pollUntilReady<T>(options: PollOptions<T>): Promise<T>;
|
|
15
|
+
//# sourceMappingURL=poll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../src/project/poll.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4B3E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class ProjectPollError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "ProjectPollError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export async function pollUntilReady(options) {
|
|
8
|
+
const started = Date.now();
|
|
9
|
+
let lastStatus;
|
|
10
|
+
while (Date.now() - started < options.timeoutMs) {
|
|
11
|
+
const value = await options.fetch();
|
|
12
|
+
const status = options.getStatus(value);
|
|
13
|
+
if (status !== lastStatus) {
|
|
14
|
+
options.onStatus?.(status);
|
|
15
|
+
lastStatus = status;
|
|
16
|
+
}
|
|
17
|
+
if (options.isFailed(value)) {
|
|
18
|
+
throw new ProjectPollError(`${options.label} failed with status '${status}'.`);
|
|
19
|
+
}
|
|
20
|
+
if (options.isReady(value)) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
await sleep(options.intervalMs);
|
|
24
|
+
}
|
|
25
|
+
throw new ProjectPollError(`${options.label} timed out after ${options.timeoutMs}ms (last status: ${lastStatus ?? "unknown"}). Is the worker running and configured with the same trusted runtime?`);
|
|
26
|
+
}
|
|
27
|
+
function sleep(ms) {
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
setTimeout(resolve, ms);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=poll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/project/poll.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAaD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,OAAuB;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,UAA8B,CAAC;IAEnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3B,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,GAAG,OAAO,CAAC,KAAK,wBAAwB,MAAM,IAAI,CACnD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,gBAAgB,CACxB,GAAG,OAAO,CAAC,KAAK,oBAAoB,OAAO,CAAC,SAAS,oBAAoB,UAAU,IAAI,SAAS,wEAAwE,CACzK,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CliConfig } from "../config.js";
|
|
2
|
+
import type { DeployResultPayload } from "./format.js";
|
|
3
|
+
export declare function runDeployPipeline(input: {
|
|
4
|
+
readonly config: CliConfig;
|
|
5
|
+
readonly flags: Readonly<Record<string, string | boolean>>;
|
|
6
|
+
readonly cwd?: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
ok: true;
|
|
9
|
+
payload: DeployResultPayload;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
exitCode: number;
|
|
13
|
+
message?: string;
|
|
14
|
+
validateStdout?: string;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=run-deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-deploy.d.ts","sourceRoot":"","sources":["../../src/project/run-deploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CACP;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAC7E,CA4IA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { OsvaClient } from "@osva-ai/sdk";
|
|
2
|
+
import { validateExitCode } from "../validate/exit-code.js";
|
|
3
|
+
import { formatValidateHuman, formatValidateJson } from "../validate/format.js";
|
|
4
|
+
import { resolveValidateProjectDir } from "../validate/resolve-project-dir.js";
|
|
5
|
+
import { runValidatePipeline } from "../validate/run-validate.js";
|
|
6
|
+
import { loadProjectDeployEnv } from "./deploy-env.js";
|
|
7
|
+
import { ensureAgentVersion } from "./ensure-agent-version.js";
|
|
8
|
+
import { ProjectConfigurationError, ProjectDeployError } from "./errors.js";
|
|
9
|
+
import { installTrustedRuntimeArtifact } from "./install-trusted-runtime.js";
|
|
10
|
+
import { loadProjectManifest } from "./load-manifest.js";
|
|
11
|
+
import { resolveAuthenticatedWorkspace } from "./workspace-context.js";
|
|
12
|
+
export async function runDeployPipeline(input) {
|
|
13
|
+
const cwd = input.cwd ?? process.cwd();
|
|
14
|
+
const resolved = await resolveValidateProjectDir({ cwd, flags: input.flags });
|
|
15
|
+
if (!resolved.ok) {
|
|
16
|
+
return {
|
|
17
|
+
ok: false,
|
|
18
|
+
exitCode: 1,
|
|
19
|
+
message: resolved.error,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const validateReport = await runValidatePipeline(resolved.projectDir);
|
|
23
|
+
const validateExit = validateExitCode(validateReport);
|
|
24
|
+
if (validateExit !== 0) {
|
|
25
|
+
const json = input.config.json;
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
exitCode: validateExit,
|
|
29
|
+
validateStdout: json
|
|
30
|
+
? formatValidateJson(validateReport)
|
|
31
|
+
: formatValidateHuman(validateReport),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
let deployEnv;
|
|
35
|
+
try {
|
|
36
|
+
deployEnv = loadProjectDeployEnv();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return {
|
|
40
|
+
ok: false,
|
|
41
|
+
exitCode: 1,
|
|
42
|
+
message: error instanceof ProjectConfigurationError
|
|
43
|
+
? error.message
|
|
44
|
+
: "Invalid deploy configuration.",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const manifest = await loadProjectManifest(resolved.projectDir);
|
|
48
|
+
const runtime = manifest.runtime;
|
|
49
|
+
if (runtime.type !== "TRUSTED_TYPESCRIPT") {
|
|
50
|
+
return {
|
|
51
|
+
ok: false,
|
|
52
|
+
exitCode: 1,
|
|
53
|
+
message: "Only TRUSTED_TYPESCRIPT agents can be deployed.",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (runtime.integrity.trim().length === 0) {
|
|
57
|
+
return {
|
|
58
|
+
ok: false,
|
|
59
|
+
exitCode: 1,
|
|
60
|
+
message: "Manifest runtime.integrity is missing.",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const client = new OsvaClient({
|
|
64
|
+
baseUrl: input.config.baseUrl,
|
|
65
|
+
apiKey: input.config.apiKey,
|
|
66
|
+
timeoutMs: deployEnv.runPollTimeoutMs,
|
|
67
|
+
});
|
|
68
|
+
let workspaceId;
|
|
69
|
+
try {
|
|
70
|
+
workspaceId = await resolveAuthenticatedWorkspace({
|
|
71
|
+
client,
|
|
72
|
+
configuredWorkspaceId: process.env.OSVA_WORKSPACE_ID,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
exitCode: 1,
|
|
79
|
+
message: error instanceof ProjectConfigurationError
|
|
80
|
+
? error.message
|
|
81
|
+
: "Could not resolve workspace.",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
let installed;
|
|
85
|
+
try {
|
|
86
|
+
installed = await installTrustedRuntimeArtifact({
|
|
87
|
+
projectDir: resolved.projectDir,
|
|
88
|
+
manifest,
|
|
89
|
+
deployEnv,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
exitCode: 1,
|
|
96
|
+
message: error instanceof ProjectDeployError
|
|
97
|
+
? error.message
|
|
98
|
+
: "Trusted runtime install failed.",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (installed.integrity !== runtime.integrity) {
|
|
102
|
+
return {
|
|
103
|
+
ok: false,
|
|
104
|
+
exitCode: 1,
|
|
105
|
+
message: "Installed executable digest does not match manifest runtime.integrity.",
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
let registration;
|
|
109
|
+
try {
|
|
110
|
+
registration = await ensureAgentVersion({
|
|
111
|
+
client,
|
|
112
|
+
projectDir: resolved.projectDir,
|
|
113
|
+
baseUrl: input.config.baseUrl,
|
|
114
|
+
workspaceId,
|
|
115
|
+
manifest,
|
|
116
|
+
integrity: installed.integrity,
|
|
117
|
+
deployTarget: installed.deployTarget,
|
|
118
|
+
entrypoint: installed.entrypoint,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
exitCode: 1,
|
|
125
|
+
message: error instanceof Error
|
|
126
|
+
? error.message
|
|
127
|
+
: "Failed to register AgentVersion.",
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
ok: true,
|
|
132
|
+
payload: {
|
|
133
|
+
agentId: registration.agentId,
|
|
134
|
+
agentVersionId: registration.agentVersionId,
|
|
135
|
+
deployTarget: installed.deployTarget,
|
|
136
|
+
integrity: installed.integrity,
|
|
137
|
+
reusedAgentVersion: registration.reused,
|
|
138
|
+
workspaceId,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=run-deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-deploy.js","sourceRoot":"","sources":["../../src/project/run-deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CliConfig } from "../config.js";
|
|
2
|
+
import type { RunResultPayload } from "./format.js";
|
|
3
|
+
export declare function runRunPipeline(input: {
|
|
4
|
+
readonly config: CliConfig;
|
|
5
|
+
readonly flags: Readonly<Record<string, string | boolean>>;
|
|
6
|
+
readonly cwd?: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
ok: true;
|
|
9
|
+
payload: RunResultPayload;
|
|
10
|
+
waited: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
exitCode: number;
|
|
14
|
+
message?: string;
|
|
15
|
+
validateStdout?: string;
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=run-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-run.d.ts","sourceRoot":"","sources":["../../src/project/run-run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmBpD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CACP;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAC7E,CA2MA"}
|