agentskeptic 0.1.9 → 0.2.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/README.md +3 -0
- package/dist/bootstrap/bootstrapCliArgs.d.ts +8 -0
- package/dist/bootstrap/bootstrapCliArgs.d.ts.map +1 -0
- package/dist/bootstrap/bootstrapCliArgs.js +47 -0
- package/dist/bootstrap/bootstrapCliArgs.js.map +1 -0
- package/dist/bootstrap/executeBootstrapPack.d.ts +32 -0
- package/dist/bootstrap/executeBootstrapPack.d.ts.map +1 -0
- package/dist/bootstrap/executeBootstrapPack.js +208 -0
- package/dist/bootstrap/executeBootstrapPack.js.map +1 -0
- package/dist/bootstrap/runBootstrapSubcommand.d.ts +3 -7
- package/dist/bootstrap/runBootstrapSubcommand.d.ts.map +1 -1
- package/dist/bootstrap/runBootstrapSubcommand.js +22 -202
- package/dist/bootstrap/runBootstrapSubcommand.js.map +1 -1
- package/dist/cli/lockOrchestration.d.ts.map +1 -1
- package/dist/cli/lockOrchestration.js +36 -0
- package/dist/cli/lockOrchestration.js.map +1 -1
- package/dist/cli.js +50 -111
- package/dist/cli.js.map +1 -1
- package/dist/cliOperationalCodes.d.ts +1 -0
- package/dist/cliOperationalCodes.d.ts.map +1 -1
- package/dist/cliOperationalCodes.js +1 -0
- package/dist/cliOperationalCodes.js.map +1 -1
- package/dist/commercial/postVerifyOutcomeBeacon.d.ts +1 -1
- package/dist/commercial/postVerifyOutcomeBeacon.d.ts.map +1 -1
- package/dist/crossing/crossingDecisionReadyFooter.d.ts +3 -0
- package/dist/crossing/crossingDecisionReadyFooter.d.ts.map +1 -0
- package/dist/crossing/crossingDecisionReadyFooter.js +3 -0
- package/dist/crossing/crossingDecisionReadyFooter.js.map +1 -0
- package/dist/crossing/runCrossingSubcommand.d.ts +2 -0
- package/dist/crossing/runCrossingSubcommand.d.ts.map +1 -0
- package/dist/crossing/runCrossingSubcommand.js +177 -0
- package/dist/crossing/runCrossingSubcommand.js.map +1 -0
- package/dist/funnel/workflowLineageClassify.d.ts +18 -0
- package/dist/funnel/workflowLineageClassify.d.ts.map +1 -0
- package/dist/funnel/workflowLineageClassify.js +29 -0
- package/dist/funnel/workflowLineageClassify.js.map +1 -0
- package/dist/operationalDisposition.d.ts +8 -0
- package/dist/operationalDisposition.d.ts.map +1 -1
- package/dist/operationalDisposition.js +8 -0
- package/dist/operationalDisposition.js.map +1 -1
- package/dist/publicDistribution.generated.d.ts +1 -1
- package/dist/publicDistribution.generated.d.ts.map +1 -1
- package/dist/publicDistribution.generated.js +2 -1
- package/dist/publicDistribution.generated.js.map +1 -1
- package/dist/telemetry/maybeEmitOssClaimTicketUrl.d.ts +1 -1
- package/dist/telemetry/maybeEmitOssClaimTicketUrl.d.ts.map +1 -1
- package/dist/telemetry/postOssClaimTicket.d.ts +1 -1
- package/dist/telemetry/postOssClaimTicket.d.ts.map +1 -1
- package/dist/telemetry/postProductActivationEvent.d.ts +5 -2
- package/dist/telemetry/postProductActivationEvent.d.ts.map +1 -1
- package/dist/telemetry/postProductActivationEvent.js +4 -2
- package/dist/telemetry/postProductActivationEvent.js.map +1 -1
- package/dist/telemetry/postProductActivationEvent.test.js +7 -1
- package/dist/telemetry/postProductActivationEvent.test.js.map +1 -1
- package/dist/verify/batchVerifyTelemetrySubcommand.d.ts +8 -0
- package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -0
- package/dist/verify/batchVerifyTelemetrySubcommand.js +141 -0
- package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -0
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -92,6 +92,8 @@ This is the fastest way to see **`ROW_ABSENT`** versus **verified** on the same
|
|
|
92
92
|
|
|
93
93
|
**Fast first run on your own DB (bundled quickstart example):** after `npm install` and `npm run build`, run **`npm run partner-quickstart`** from the repo root (SQLite temp DB). Commands reference: **[`docs/partner-quickstart-commands.md`](docs/partner-quickstart-commands.md)**; narrative: **[`docs/first-run-integration.md`](docs/first-run-integration.md)** and **`/integrate`** on the site.
|
|
94
94
|
|
|
95
|
+
**Integrator-owned output:** The demo above is pedagogy. Default path: **`agentskeptic crossing`** — see **`docs/crossing-normative.md`**. For verification on **your** NDJSON, registry, and authoritative SQLite or Postgres, follow **[Grounded integrator-owned output](docs/first-run-integration.md#grounded-integrator-owned-output-primary-path)** in **`docs/first-run-integration.md`** after **`npm run build`**. Standalone **`agentskeptic verify-integrator-owned`** remains for explicit pack-led parity and CI (same flags as contract batch verify; rejects shipped example fixture triples with exit **2** and stderr **`INTEGRATOR_OWNED_GATE`**—see **`docs/agentskeptic.md`** Integrator-owned gate).
|
|
96
|
+
|
|
95
97
|
```bash
|
|
96
98
|
npm install
|
|
97
99
|
npm start
|
|
@@ -250,6 +252,7 @@ Everything beyond core contract verification lives in **[`docs/agentskeptic.md`]
|
|
|
250
252
|
|
|
251
253
|
| Doc | Purpose |
|
|
252
254
|
|-----|---------|
|
|
255
|
+
| [`docs/epistemic-contract.md`](docs/epistemic-contract.md) | **Normative epistemic contract** (grounded output vs funnel; ranking limits; telemetry proxies)—single authored source; other docs link or generate from here |
|
|
253
256
|
| [README — Buy vs build](#buy-vs-build-why-not-only-sql-checks) | Canonical **buy vs build** narrative (failure mode, scripts limits, Quick → Contract) |
|
|
254
257
|
| [`docs/agentskeptic.md`](docs/agentskeptic.md) | Authoritative CLI and behavior reference (SSOT) |
|
|
255
258
|
| [`docs/quick-verify-normative.md`](docs/quick-verify-normative.md) | Quick Verify normative contract |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ParsedBootstrapCli = {
|
|
2
|
+
inputPath: string;
|
|
3
|
+
outPath: string;
|
|
4
|
+
dbPath: string | undefined;
|
|
5
|
+
postgresUrl: string | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare function parseBootstrapCliArgs(args: string[]): ParsedBootstrapCli;
|
|
8
|
+
//# sourceMappingURL=bootstrapCliArgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapCliArgs.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrapCliArgs.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAiBxE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CLI_OPERATIONAL_CODES } from "../cliOperationalCodes.js";
|
|
2
|
+
import { TruthLayerError } from "../truthLayerError.js";
|
|
3
|
+
import { argValue } from "../cliArgv.js";
|
|
4
|
+
const ALLOWED_BOOTSTRAP_FLAGS = new Set([
|
|
5
|
+
"--input",
|
|
6
|
+
"--out",
|
|
7
|
+
"--db",
|
|
8
|
+
"--postgres-url",
|
|
9
|
+
"--help",
|
|
10
|
+
"-h",
|
|
11
|
+
]);
|
|
12
|
+
function assertBootstrapArgsWellFormed(args) {
|
|
13
|
+
for (let i = 0; i < args.length; i++) {
|
|
14
|
+
const a = args[i];
|
|
15
|
+
if (a === "-h" || a === "--help")
|
|
16
|
+
continue;
|
|
17
|
+
if (!a.startsWith("--")) {
|
|
18
|
+
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Unexpected argument: ${a}`);
|
|
19
|
+
}
|
|
20
|
+
if (!ALLOWED_BOOTSTRAP_FLAGS.has(a)) {
|
|
21
|
+
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Unknown option: ${a}`);
|
|
22
|
+
}
|
|
23
|
+
if (a === "--input" || a === "--out" || a === "--db" || a === "--postgres-url") {
|
|
24
|
+
const v = args[i + 1];
|
|
25
|
+
if (v === undefined || v.startsWith("--")) {
|
|
26
|
+
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Missing value after ${a}.`);
|
|
27
|
+
}
|
|
28
|
+
i++;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function parseBootstrapCliArgs(args) {
|
|
33
|
+
assertBootstrapArgsWellFormed(args);
|
|
34
|
+
const inputPath = argValue(args, "--input");
|
|
35
|
+
const outPath = argValue(args, "--out");
|
|
36
|
+
const dbPath = argValue(args, "--db");
|
|
37
|
+
const postgresUrl = argValue(args, "--postgres-url");
|
|
38
|
+
if (!inputPath || !outPath) {
|
|
39
|
+
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, "Missing --input or --out.");
|
|
40
|
+
}
|
|
41
|
+
const dbCount = (dbPath ? 1 : 0) + (postgresUrl ? 1 : 0);
|
|
42
|
+
if (dbCount !== 1) {
|
|
43
|
+
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, "Provide exactly one of --db or --postgres-url.");
|
|
44
|
+
}
|
|
45
|
+
return { inputPath, outPath, dbPath, postgresUrl };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=bootstrapCliArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapCliArgs.js","sourceRoot":"","sources":["../../src/bootstrap/bootstrapCliArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,SAAS;IACT,OAAO;IACP,MAAM;IACN,gBAAgB;IAChB,QAAQ;IACR,IAAI;CACL,CAAC,CAAC;AAEH,SAAS,6BAA6B,CAAC,IAAc;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC3C,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,eAAe,CAAC,qBAAqB,CAAC,eAAe,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,eAAe,CAAC,qBAAqB,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAC/E,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,eAAe,CAAC,qBAAqB,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAC;YAChG,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;AACH,CAAC;AASD,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,eAAe,CAAC,qBAAqB,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,eAAe,EACrC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { WorkflowResult } from "../types.js";
|
|
2
|
+
import type { ParsedBootstrapCli } from "./bootstrapCliArgs.js";
|
|
3
|
+
export declare function cleanupOutDirFromPath(outResolved: string): void;
|
|
4
|
+
export type ExecuteBootstrapPackSuccess = {
|
|
5
|
+
kind: "pack_ready";
|
|
6
|
+
workflowId: string;
|
|
7
|
+
eventsPath: string;
|
|
8
|
+
registryPath: string;
|
|
9
|
+
outResolved: string;
|
|
10
|
+
exportedToolCount: number;
|
|
11
|
+
};
|
|
12
|
+
export type ExecuteBootstrapPackFailure = {
|
|
13
|
+
kind: "bootstrap_cli_error";
|
|
14
|
+
exitCode: 2 | 3;
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
} | {
|
|
18
|
+
kind: "verify_terminal";
|
|
19
|
+
exitCode: 1 | 2;
|
|
20
|
+
result: WorkflowResult;
|
|
21
|
+
truthBuffered: string;
|
|
22
|
+
outResolved: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Core bootstrap pack build + in-process contract verify.
|
|
26
|
+
* On success (`pack_ready`), leaves `outResolved` on disk.
|
|
27
|
+
* On `verify_terminal`, leaves `outResolved` on disk until the caller exits (caller must cleanup via exit hook).
|
|
28
|
+
* On `operational`, cleans up `outResolved` when it was created.
|
|
29
|
+
*/
|
|
30
|
+
export declare function executeBootstrapPack(parsed: ParsedBootstrapCli): Promise<ExecuteBootstrapPackSuccess | ExecuteBootstrapPackFailure>;
|
|
31
|
+
export declare function writeBootstrapOperationalFailure(code: string, message: string): void;
|
|
32
|
+
//# sourceMappingURL=executeBootstrapPack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeBootstrapPack.d.ts","sourceRoot":"","sources":["../../src/bootstrap/executeBootstrapPack.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM/D;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEN;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,2BAA2B,GAAG,2BAA2B,CAAC,CAyLpE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpF"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { runLicensePreflightIfNeeded } from "../commercial/licensePreflight.js";
|
|
4
|
+
import { CLI_OPERATIONAL_CODES } from "../cliOperationalCodes.js";
|
|
5
|
+
import { cliErrorEnvelope, formatOperationalMessage, } from "../failureCatalog.js";
|
|
6
|
+
import { verifyWorkflow } from "../pipeline.js";
|
|
7
|
+
import { loadSchemaValidator } from "../schemaLoad.js";
|
|
8
|
+
import { TruthLayerError } from "../truthLayerError.js";
|
|
9
|
+
import { atomicWriteUtf8File } from "../quickVerify/atomicWrite.js";
|
|
10
|
+
import { buildQuickContractEventsNdjson } from "../quickVerify/buildQuickContractEventsNdjson.js";
|
|
11
|
+
import { stableStringify } from "../quickVerify/canonicalJson.js";
|
|
12
|
+
import { runQuickVerifyToValidatedReport } from "../quickVerify/runQuickVerify.js";
|
|
13
|
+
import { buildBootstrapReadmeMarkdown } from "./bootstrapReadmeTemplate.js";
|
|
14
|
+
import { parseBootstrapPackInputJson } from "./parseBootstrapPackInput.js";
|
|
15
|
+
import { synthesizeQuickInputUtf8FromOpenAiV1 } from "./synthesizeQuickInputFromOpenAiV1.js";
|
|
16
|
+
export function cleanupOutDirFromPath(outResolved) {
|
|
17
|
+
try {
|
|
18
|
+
rmSync(outResolved, { recursive: true, force: true });
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
/* best-effort */
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Core bootstrap pack build + in-process contract verify.
|
|
26
|
+
* On success (`pack_ready`), leaves `outResolved` on disk.
|
|
27
|
+
* On `verify_terminal`, leaves `outResolved` on disk until the caller exits (caller must cleanup via exit hook).
|
|
28
|
+
* On `operational`, cleans up `outResolved` when it was created.
|
|
29
|
+
*/
|
|
30
|
+
export async function executeBootstrapPack(parsed) {
|
|
31
|
+
const outResolved = path.resolve(parsed.outPath);
|
|
32
|
+
if (existsSync(outResolved)) {
|
|
33
|
+
return {
|
|
34
|
+
kind: "bootstrap_cli_error",
|
|
35
|
+
exitCode: 3,
|
|
36
|
+
code: CLI_OPERATIONAL_CODES.BOOTSTRAP_OUT_EXISTS,
|
|
37
|
+
message: `--out already exists: ${outResolved}`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
let rawInput;
|
|
41
|
+
try {
|
|
42
|
+
rawInput = readFileSync(path.resolve(parsed.inputPath), "utf8");
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
46
|
+
return {
|
|
47
|
+
kind: "bootstrap_cli_error",
|
|
48
|
+
exitCode: 3,
|
|
49
|
+
code: CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE,
|
|
50
|
+
message: `Cannot read --input: ${msg}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
let packInput;
|
|
54
|
+
try {
|
|
55
|
+
packInput = parseBootstrapPackInputJson(rawInput);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
if (e instanceof TruthLayerError) {
|
|
59
|
+
return { kind: "bootstrap_cli_error", exitCode: 3, code: e.code, message: e.message };
|
|
60
|
+
}
|
|
61
|
+
throw e;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
await runLicensePreflightIfNeeded("verify");
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
if (e instanceof TruthLayerError) {
|
|
68
|
+
return { kind: "bootstrap_cli_error", exitCode: 3, code: e.code, message: e.message };
|
|
69
|
+
}
|
|
70
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
71
|
+
return {
|
|
72
|
+
kind: "bootstrap_cli_error",
|
|
73
|
+
exitCode: 3,
|
|
74
|
+
code: CLI_OPERATIONAL_CODES.INTERNAL_ERROR,
|
|
75
|
+
message: formatOperationalMessage(msg),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
mkdirSync(outResolved, { recursive: false });
|
|
79
|
+
const database = parsed.postgresUrl
|
|
80
|
+
? { kind: "postgres", connectionString: parsed.postgresUrl }
|
|
81
|
+
: { kind: "sqlite", path: path.resolve(parsed.dbPath) };
|
|
82
|
+
const inputUtf8 = synthesizeQuickInputUtf8FromOpenAiV1(packInput);
|
|
83
|
+
let report;
|
|
84
|
+
let registryUtf8;
|
|
85
|
+
let contractExports;
|
|
86
|
+
try {
|
|
87
|
+
const out = await runQuickVerifyToValidatedReport({
|
|
88
|
+
inputUtf8,
|
|
89
|
+
postgresUrl: parsed.postgresUrl ?? undefined,
|
|
90
|
+
sqlitePath: parsed.dbPath !== undefined ? path.resolve(parsed.dbPath) : undefined,
|
|
91
|
+
});
|
|
92
|
+
report = out.report;
|
|
93
|
+
registryUtf8 = out.registryUtf8;
|
|
94
|
+
contractExports = out.contractExports;
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
cleanupOutDirFromPath(outResolved);
|
|
98
|
+
if (e instanceof TruthLayerError) {
|
|
99
|
+
return { kind: "bootstrap_cli_error", exitCode: 3, code: e.code, message: e.message };
|
|
100
|
+
}
|
|
101
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
102
|
+
return {
|
|
103
|
+
kind: "bootstrap_cli_error",
|
|
104
|
+
exitCode: 3,
|
|
105
|
+
code: CLI_OPERATIONAL_CODES.INTERNAL_ERROR,
|
|
106
|
+
message: formatOperationalMessage(msg),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (report.verdict !== "pass") {
|
|
110
|
+
cleanupOutDirFromPath(outResolved);
|
|
111
|
+
return {
|
|
112
|
+
kind: "bootstrap_cli_error",
|
|
113
|
+
exitCode: 2,
|
|
114
|
+
code: CLI_OPERATIONAL_CODES.BOOTSTRAP_QUICK_NOT_PASS,
|
|
115
|
+
message: `Quick Verify verdict was "${report.verdict}" (expected pass).`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (contractExports.length === 0) {
|
|
119
|
+
cleanupOutDirFromPath(outResolved);
|
|
120
|
+
return {
|
|
121
|
+
kind: "bootstrap_cli_error",
|
|
122
|
+
exitCode: 2,
|
|
123
|
+
code: CLI_OPERATIONAL_CODES.BOOTSTRAP_NO_EXPORTABLE_TOOLS,
|
|
124
|
+
message: "Quick Verify produced zero exportable tools for contract replay.",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const eventsPath = path.join(outResolved, "events.ndjson");
|
|
128
|
+
const toolsPath = path.join(outResolved, "tools.json");
|
|
129
|
+
const quickReportPath = path.join(outResolved, "quick-report.json");
|
|
130
|
+
const readmePath = path.join(outResolved, "README.bootstrap.md");
|
|
131
|
+
try {
|
|
132
|
+
atomicWriteUtf8File(toolsPath, registryUtf8);
|
|
133
|
+
atomicWriteUtf8File(eventsPath, buildQuickContractEventsNdjson({
|
|
134
|
+
workflowId: packInput.workflowId,
|
|
135
|
+
exports: contractExports,
|
|
136
|
+
}));
|
|
137
|
+
atomicWriteUtf8File(quickReportPath, `${stableStringify(report)}\n`);
|
|
138
|
+
atomicWriteUtf8File(readmePath, buildBootstrapReadmeMarkdown(packInput.workflowId));
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
cleanupOutDirFromPath(outResolved);
|
|
142
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
143
|
+
return {
|
|
144
|
+
kind: "bootstrap_cli_error",
|
|
145
|
+
exitCode: 3,
|
|
146
|
+
code: CLI_OPERATIONAL_CODES.INTERNAL_ERROR,
|
|
147
|
+
message: formatOperationalMessage(`pack write: ${msg}`),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
let truthBuffered = "";
|
|
151
|
+
let result;
|
|
152
|
+
try {
|
|
153
|
+
result = await verifyWorkflow({
|
|
154
|
+
workflowId: packInput.workflowId,
|
|
155
|
+
eventsPath,
|
|
156
|
+
registryPath: toolsPath,
|
|
157
|
+
database,
|
|
158
|
+
truthReport: (r) => {
|
|
159
|
+
truthBuffered = r;
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
cleanupOutDirFromPath(outResolved);
|
|
165
|
+
if (e instanceof TruthLayerError) {
|
|
166
|
+
return { kind: "bootstrap_cli_error", exitCode: 3, code: e.code, message: e.message };
|
|
167
|
+
}
|
|
168
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
169
|
+
return {
|
|
170
|
+
kind: "bootstrap_cli_error",
|
|
171
|
+
exitCode: 3,
|
|
172
|
+
code: CLI_OPERATIONAL_CODES.INTERNAL_ERROR,
|
|
173
|
+
message: formatOperationalMessage(msg),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const validateResult = loadSchemaValidator("workflow-result");
|
|
177
|
+
if (!validateResult(result)) {
|
|
178
|
+
cleanupOutDirFromPath(outResolved);
|
|
179
|
+
return {
|
|
180
|
+
kind: "bootstrap_cli_error",
|
|
181
|
+
exitCode: 3,
|
|
182
|
+
code: CLI_OPERATIONAL_CODES.WORKFLOW_RESULT_SCHEMA_INVALID,
|
|
183
|
+
message: JSON.stringify(validateResult.errors ?? []),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (result.status === "complete") {
|
|
187
|
+
return {
|
|
188
|
+
kind: "pack_ready",
|
|
189
|
+
workflowId: packInput.workflowId,
|
|
190
|
+
eventsPath,
|
|
191
|
+
registryPath: toolsPath,
|
|
192
|
+
outResolved,
|
|
193
|
+
exportedToolCount: contractExports.length,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const exitCode = result.status === "inconsistent" ? 1 : 2;
|
|
197
|
+
return {
|
|
198
|
+
kind: "verify_terminal",
|
|
199
|
+
exitCode,
|
|
200
|
+
result,
|
|
201
|
+
truthBuffered,
|
|
202
|
+
outResolved,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
export function writeBootstrapOperationalFailure(code, message) {
|
|
206
|
+
console.error(cliErrorEnvelope(code, formatOperationalMessage(message)));
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=executeBootstrapPack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeBootstrapPack.js","sourceRoot":"","sources":["../../src/bootstrap/executeBootstrapPack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
dbPath: string | undefined;
|
|
5
|
-
postgresUrl: string | undefined;
|
|
6
|
-
};
|
|
7
|
-
export declare function parseBootstrapCliArgs(args: string[]): ParsedBootstrapCli;
|
|
1
|
+
import { type ParsedBootstrapCli } from "./bootstrapCliArgs.js";
|
|
2
|
+
export type { ParsedBootstrapCli };
|
|
3
|
+
export { parseBootstrapCliArgs } from "./bootstrapCliArgs.js";
|
|
8
4
|
export declare function runBootstrapSubcommand(args: string[]): Promise<void>;
|
|
9
5
|
//# sourceMappingURL=runBootstrapSubcommand.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runBootstrapSubcommand.d.ts","sourceRoot":"","sources":["../../src/bootstrap/runBootstrapSubcommand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runBootstrapSubcommand.d.ts","sourceRoot":"","sources":["../../src/bootstrap/runBootstrapSubcommand.ts"],"names":[],"mappings":"AAUA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAoBvF,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D1E"}
|
|
@@ -1,29 +1,10 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { runLicensePreflightIfNeeded } from "../commercial/licensePreflight.js";
|
|
4
1
|
import { CLI_OPERATIONAL_CODES } from "../cliOperationalCodes.js";
|
|
5
|
-
import {
|
|
6
|
-
import { verifyWorkflow } from "../pipeline.js";
|
|
7
|
-
import { loadSchemaValidator } from "../schemaLoad.js";
|
|
8
|
-
import { TruthLayerError } from "../truthLayerError.js";
|
|
2
|
+
import { formatOperationalMessage } from "../failureCatalog.js";
|
|
9
3
|
import { formatDistributionFooter } from "../distributionFooter.js";
|
|
10
|
-
import { atomicWriteUtf8File } from "../quickVerify/atomicWrite.js";
|
|
11
|
-
import { buildQuickContractEventsNdjson } from "../quickVerify/buildQuickContractEventsNdjson.js";
|
|
12
|
-
import { stableStringify } from "../quickVerify/canonicalJson.js";
|
|
13
|
-
import { runQuickVerifyToValidatedReport } from "../quickVerify/runQuickVerify.js";
|
|
14
4
|
import { emitVerifyWorkflowCliJsonAndExitByStatus } from "../standardVerifyWorkflowCli.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { argValue } from "../cliArgv.js";
|
|
19
|
-
const ALLOWED_BOOTSTRAP_FLAGS = new Set([
|
|
20
|
-
"--input",
|
|
21
|
-
"--out",
|
|
22
|
-
"--db",
|
|
23
|
-
"--postgres-url",
|
|
24
|
-
"--help",
|
|
25
|
-
"-h",
|
|
26
|
-
]);
|
|
5
|
+
import { TruthLayerError } from "../truthLayerError.js";
|
|
6
|
+
import { cleanupOutDirFromPath, executeBootstrapPack, writeBootstrapOperationalFailure, } from "./executeBootstrapPack.js";
|
|
7
|
+
import { parseBootstrapCliArgs } from "./bootstrapCliArgs.js";
|
|
27
8
|
function usageBootstrap() {
|
|
28
9
|
return `Usage:
|
|
29
10
|
agentskeptic bootstrap --input <path> (--db <sqlitePath> | --postgres-url <url>) --out <path>
|
|
@@ -41,52 +22,7 @@ Exit codes:
|
|
|
41
22
|
|
|
42
23
|
Normative: docs/bootstrap-pack-normative.md`;
|
|
43
24
|
}
|
|
44
|
-
|
|
45
|
-
for (let i = 0; i < args.length; i++) {
|
|
46
|
-
const a = args[i];
|
|
47
|
-
if (a === "-h" || a === "--help")
|
|
48
|
-
continue;
|
|
49
|
-
if (!a.startsWith("--")) {
|
|
50
|
-
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Unexpected argument: ${a}`);
|
|
51
|
-
}
|
|
52
|
-
if (!ALLOWED_BOOTSTRAP_FLAGS.has(a)) {
|
|
53
|
-
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Unknown option: ${a}`);
|
|
54
|
-
}
|
|
55
|
-
if (a === "--input" || a === "--out" || a === "--db" || a === "--postgres-url") {
|
|
56
|
-
const v = args[i + 1];
|
|
57
|
-
if (v === undefined || v.startsWith("--")) {
|
|
58
|
-
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Missing value after ${a}.`);
|
|
59
|
-
}
|
|
60
|
-
i++;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export function parseBootstrapCliArgs(args) {
|
|
65
|
-
assertBootstrapArgsWellFormed(args);
|
|
66
|
-
const inputPath = argValue(args, "--input");
|
|
67
|
-
const outPath = argValue(args, "--out");
|
|
68
|
-
const dbPath = argValue(args, "--db");
|
|
69
|
-
const postgresUrl = argValue(args, "--postgres-url");
|
|
70
|
-
if (!inputPath || !outPath) {
|
|
71
|
-
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, "Missing --input or --out.");
|
|
72
|
-
}
|
|
73
|
-
const dbCount = (dbPath ? 1 : 0) + (postgresUrl ? 1 : 0);
|
|
74
|
-
if (dbCount !== 1) {
|
|
75
|
-
throw new TruthLayerError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, "Provide exactly one of --db or --postgres-url.");
|
|
76
|
-
}
|
|
77
|
-
return { inputPath, outPath, dbPath, postgresUrl };
|
|
78
|
-
}
|
|
79
|
-
function writeBootstrapCliError(code, message) {
|
|
80
|
-
console.error(cliErrorEnvelope(code, formatOperationalMessage(message)));
|
|
81
|
-
}
|
|
82
|
-
function cleanupOutDir(outResolved) {
|
|
83
|
-
try {
|
|
84
|
-
rmSync(outResolved, { recursive: true, force: true });
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
/* best-effort */
|
|
88
|
-
}
|
|
89
|
-
}
|
|
25
|
+
export { parseBootstrapCliArgs } from "./bootstrapCliArgs.js";
|
|
90
26
|
export async function runBootstrapSubcommand(args) {
|
|
91
27
|
if (args.includes("--help") || args.includes("-h")) {
|
|
92
28
|
console.log(usageBootstrap());
|
|
@@ -98,162 +34,46 @@ export async function runBootstrapSubcommand(args) {
|
|
|
98
34
|
}
|
|
99
35
|
catch (e) {
|
|
100
36
|
if (e instanceof TruthLayerError) {
|
|
101
|
-
|
|
37
|
+
writeBootstrapOperationalFailure(e.code, e.message);
|
|
102
38
|
process.exit(3);
|
|
103
39
|
}
|
|
104
40
|
throw e;
|
|
105
41
|
}
|
|
106
|
-
const
|
|
107
|
-
if (
|
|
108
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.BOOTSTRAP_OUT_EXISTS, `--out already exists: ${outResolved}`);
|
|
109
|
-
process.exit(3);
|
|
110
|
-
}
|
|
111
|
-
let rawInput;
|
|
112
|
-
try {
|
|
113
|
-
rawInput = readFileSync(path.resolve(parsed.inputPath), "utf8");
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
116
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
117
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.BOOTSTRAP_USAGE, `Cannot read --input: ${msg}`);
|
|
118
|
-
process.exit(3);
|
|
119
|
-
}
|
|
120
|
-
let packInput;
|
|
121
|
-
try {
|
|
122
|
-
packInput = parseBootstrapPackInputJson(rawInput);
|
|
123
|
-
}
|
|
124
|
-
catch (e) {
|
|
125
|
-
if (e instanceof TruthLayerError) {
|
|
126
|
-
writeBootstrapCliError(e.code, e.message);
|
|
127
|
-
process.exit(3);
|
|
128
|
-
}
|
|
129
|
-
throw e;
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
await runLicensePreflightIfNeeded("verify");
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
if (e instanceof TruthLayerError) {
|
|
136
|
-
writeBootstrapCliError(e.code, e.message);
|
|
137
|
-
process.exit(3);
|
|
138
|
-
}
|
|
139
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
140
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(msg));
|
|
141
|
-
process.exit(3);
|
|
142
|
-
}
|
|
143
|
-
mkdirSync(outResolved, { recursive: false });
|
|
144
|
-
const database = parsed.postgresUrl
|
|
145
|
-
? { kind: "postgres", connectionString: parsed.postgresUrl }
|
|
146
|
-
: { kind: "sqlite", path: path.resolve(parsed.dbPath) };
|
|
147
|
-
const inputUtf8 = synthesizeQuickInputUtf8FromOpenAiV1(packInput);
|
|
148
|
-
let report;
|
|
149
|
-
let registryUtf8;
|
|
150
|
-
let contractExports;
|
|
151
|
-
try {
|
|
152
|
-
const out = await runQuickVerifyToValidatedReport({
|
|
153
|
-
inputUtf8,
|
|
154
|
-
postgresUrl: parsed.postgresUrl ?? undefined,
|
|
155
|
-
sqlitePath: parsed.dbPath !== undefined ? path.resolve(parsed.dbPath) : undefined,
|
|
156
|
-
});
|
|
157
|
-
report = out.report;
|
|
158
|
-
registryUtf8 = out.registryUtf8;
|
|
159
|
-
contractExports = out.contractExports;
|
|
160
|
-
}
|
|
161
|
-
catch (e) {
|
|
162
|
-
cleanupOutDir(outResolved);
|
|
163
|
-
if (e instanceof TruthLayerError) {
|
|
164
|
-
writeBootstrapCliError(e.code, e.message);
|
|
165
|
-
process.exit(3);
|
|
166
|
-
}
|
|
167
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
168
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(msg));
|
|
169
|
-
process.exit(3);
|
|
170
|
-
}
|
|
171
|
-
if (report.verdict !== "pass") {
|
|
172
|
-
cleanupOutDir(outResolved);
|
|
173
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.BOOTSTRAP_QUICK_NOT_PASS, `Quick Verify verdict was "${report.verdict}" (expected pass).`);
|
|
174
|
-
process.exit(2);
|
|
175
|
-
}
|
|
176
|
-
if (contractExports.length === 0) {
|
|
177
|
-
cleanupOutDir(outResolved);
|
|
178
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.BOOTSTRAP_NO_EXPORTABLE_TOOLS, "Quick Verify produced zero exportable tools for contract replay.");
|
|
179
|
-
process.exit(2);
|
|
180
|
-
}
|
|
181
|
-
const eventsPath = path.join(outResolved, "events.ndjson");
|
|
182
|
-
const toolsPath = path.join(outResolved, "tools.json");
|
|
183
|
-
const quickReportPath = path.join(outResolved, "quick-report.json");
|
|
184
|
-
const readmePath = path.join(outResolved, "README.bootstrap.md");
|
|
185
|
-
try {
|
|
186
|
-
atomicWriteUtf8File(toolsPath, registryUtf8);
|
|
187
|
-
atomicWriteUtf8File(eventsPath, buildQuickContractEventsNdjson({
|
|
188
|
-
workflowId: packInput.workflowId,
|
|
189
|
-
exports: contractExports,
|
|
190
|
-
}));
|
|
191
|
-
atomicWriteUtf8File(quickReportPath, `${stableStringify(report)}\n`);
|
|
192
|
-
atomicWriteUtf8File(readmePath, buildBootstrapReadmeMarkdown(packInput.workflowId));
|
|
193
|
-
}
|
|
194
|
-
catch (e) {
|
|
195
|
-
cleanupOutDir(outResolved);
|
|
196
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
197
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(`pack write: ${msg}`));
|
|
198
|
-
process.exit(3);
|
|
199
|
-
}
|
|
200
|
-
let truthBuffered = "";
|
|
201
|
-
let result;
|
|
202
|
-
try {
|
|
203
|
-
result = await verifyWorkflow({
|
|
204
|
-
workflowId: packInput.workflowId,
|
|
205
|
-
eventsPath,
|
|
206
|
-
registryPath: toolsPath,
|
|
207
|
-
database,
|
|
208
|
-
truthReport: (r) => {
|
|
209
|
-
truthBuffered = r;
|
|
210
|
-
},
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
catch (e) {
|
|
214
|
-
cleanupOutDir(outResolved);
|
|
215
|
-
if (e instanceof TruthLayerError) {
|
|
216
|
-
writeBootstrapCliError(e.code, e.message);
|
|
217
|
-
process.exit(3);
|
|
218
|
-
}
|
|
219
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
220
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(msg));
|
|
221
|
-
process.exit(3);
|
|
222
|
-
}
|
|
223
|
-
const validateResult = loadSchemaValidator("workflow-result");
|
|
224
|
-
if (!validateResult(result)) {
|
|
225
|
-
cleanupOutDir(outResolved);
|
|
226
|
-
writeBootstrapCliError(CLI_OPERATIONAL_CODES.WORKFLOW_RESULT_SCHEMA_INVALID, JSON.stringify(validateResult.errors ?? []));
|
|
227
|
-
process.exit(3);
|
|
228
|
-
}
|
|
229
|
-
if (result.status === "complete") {
|
|
42
|
+
const outcome = await executeBootstrapPack(parsed);
|
|
43
|
+
if (outcome.kind === "pack_ready") {
|
|
230
44
|
const envelope = {
|
|
231
45
|
schemaVersion: 1,
|
|
232
46
|
kind: "agentskeptic_bootstrap_result",
|
|
233
|
-
workflowId:
|
|
234
|
-
outDir: outResolved,
|
|
47
|
+
workflowId: outcome.workflowId,
|
|
48
|
+
outDir: outcome.outResolved,
|
|
235
49
|
quickVerdict: "pass",
|
|
236
50
|
verifyStatus: "complete",
|
|
237
|
-
exportedToolCount:
|
|
51
|
+
exportedToolCount: outcome.exportedToolCount,
|
|
238
52
|
};
|
|
239
53
|
try {
|
|
240
54
|
process.stdout.write(`${JSON.stringify(envelope)}\n`);
|
|
241
55
|
}
|
|
242
56
|
catch (e) {
|
|
243
|
-
|
|
57
|
+
cleanupOutDirFromPath(outcome.outResolved);
|
|
244
58
|
const msg = e instanceof Error ? e.message : String(e);
|
|
245
|
-
|
|
59
|
+
writeBootstrapOperationalFailure(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(`stdout: ${msg}`));
|
|
246
60
|
process.exit(3);
|
|
247
61
|
}
|
|
248
62
|
process.exit(0);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (outcome.kind === "bootstrap_cli_error") {
|
|
66
|
+
writeBootstrapOperationalFailure(outcome.code, outcome.message);
|
|
67
|
+
process.exit(outcome.exitCode);
|
|
68
|
+
return;
|
|
249
69
|
}
|
|
250
|
-
process.stderr.write(`${truthBuffered}\n`);
|
|
70
|
+
process.stderr.write(`${outcome.truthBuffered}\n`);
|
|
251
71
|
process.stderr.write(formatDistributionFooter());
|
|
252
72
|
const exitWithCleanup = (code) => {
|
|
253
|
-
|
|
73
|
+
cleanupOutDirFromPath(outcome.outResolved);
|
|
254
74
|
process.exit(code);
|
|
255
75
|
};
|
|
256
|
-
emitVerifyWorkflowCliJsonAndExitByStatus(result, {
|
|
76
|
+
emitVerifyWorkflowCliJsonAndExitByStatus(outcome.result, {
|
|
257
77
|
consoleLog: (line) => {
|
|
258
78
|
console.log(line);
|
|
259
79
|
},
|