@agent-surface/cli 0.17.0 → 0.19.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/dist/bin.js +19 -2
- package/dist/bin.js.map +1 -1
- package/package.json +3 -3
package/dist/bin.js
CHANGED
|
@@ -37,13 +37,15 @@ function mergeManifests(manifests) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
const payload = {
|
|
40
|
-
formatVersion:
|
|
40
|
+
formatVersion: 5,
|
|
41
41
|
compilerVersion: manifests[0]?.compilerVersion ?? "unknown",
|
|
42
42
|
targets: [...new Set(manifests.flatMap((manifest) => manifest.targets))].sort(),
|
|
43
43
|
capabilities: [...entries.values()].sort(
|
|
44
44
|
(a, b) => `${a.declarationId}\0${a.capabilityId}`.localeCompare(`${b.declarationId}\0${b.capabilityId}`)
|
|
45
45
|
),
|
|
46
|
-
|
|
46
|
+
// One attribution per package: the same dependency contributes identically
|
|
47
|
+
// to every target, and a divergence would already have failed the compile.
|
|
48
|
+
externalContracts: manifests.flatMap((manifest) => manifest.externalContracts).filter((entry, index, all) => all.findIndex((candidate) => candidate.package === entry.package) === index).sort((a, b) => a.package.localeCompare(b.package)),
|
|
47
49
|
completeness: { status: "proven" }
|
|
48
50
|
};
|
|
49
51
|
return { ...payload, hash: computeManifestHash(payload) };
|
|
@@ -55,6 +57,7 @@ async function compile(options) {
|
|
|
55
57
|
(target) => compileCapabilityContract({
|
|
56
58
|
root: options.root,
|
|
57
59
|
...options.configFile ? { configFile: options.configFile } : {},
|
|
60
|
+
...options.externalContracts ? { externalContracts: options.externalContracts } : {},
|
|
58
61
|
target
|
|
59
62
|
})
|
|
60
63
|
)
|
|
@@ -146,6 +149,7 @@ Options
|
|
|
146
149
|
--snapshot <path> committed contract (default: .agent-surface/contract.json)
|
|
147
150
|
--target <name> production build target; repeatable
|
|
148
151
|
--base <git-ref> render committed PR drift against Git base
|
|
152
|
+
--allow <pkg>=<d> approve a dependency to contribute capabilities; repeatable
|
|
149
153
|
--policy <mode> all | widening | narrowing | neutral | none (default: all)
|
|
150
154
|
--format <format> human | json | github | markdown (default: human)
|
|
151
155
|
--json alias for --format json
|
|
@@ -174,6 +178,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
174
178
|
snapshot: { type: "string" },
|
|
175
179
|
target: { type: "string", multiple: true },
|
|
176
180
|
base: { type: "string" },
|
|
181
|
+
allow: { type: "string", multiple: true },
|
|
177
182
|
policy: { type: "string", default: "all" },
|
|
178
183
|
format: { type: "string", default: "human" },
|
|
179
184
|
json: { type: "boolean", default: false },
|
|
@@ -211,6 +216,17 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
211
216
|
write(`--policy must be all, widening, narrowing, neutral, or none`, true);
|
|
212
217
|
return 2;
|
|
213
218
|
}
|
|
219
|
+
const allow = [];
|
|
220
|
+
for (const entry of values.allow ?? []) {
|
|
221
|
+
const separator = entry.lastIndexOf("=");
|
|
222
|
+
const name = separator === -1 ? "" : entry.slice(0, separator);
|
|
223
|
+
const digest = separator === -1 ? "" : entry.slice(separator + 1);
|
|
224
|
+
if (!name || !/^[0-9a-f]{64}$/.test(digest)) {
|
|
225
|
+
write(`--allow must be <package>=<sha256>, got "${entry}"`, true);
|
|
226
|
+
return 2;
|
|
227
|
+
}
|
|
228
|
+
allow.push({ package: name, digest });
|
|
229
|
+
}
|
|
214
230
|
const options = {
|
|
215
231
|
root: values.root,
|
|
216
232
|
...values.config ? { configFile: values.config } : {},
|
|
@@ -219,6 +235,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
219
235
|
...values.base ? { base: values.base } : {},
|
|
220
236
|
format,
|
|
221
237
|
policy: values.policy,
|
|
238
|
+
...allow.length > 0 ? { externalContracts: { allow } } : {},
|
|
222
239
|
...values.plain ? { plain: true } : {}
|
|
223
240
|
};
|
|
224
241
|
try {
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin.ts","../src/commands.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { parseArgs } from \"node:util\";\nimport { runCheck, runInspect, runSnapshot, type CommandOptions } from \"./commands.js\";\nimport type { OutputFormat } from \"./report.js\";\n\nconst USAGE = `agent-surface — compiled production capability contract\n\nUsage\n agent-surface inspect\n agent-surface snapshot\n agent-surface check --base origin/main --format github\n\nOptions\n --root <path> application root (default: cwd)\n --config <path> Vite config, relative to root\n --snapshot <path> committed contract (default: .agent-surface/contract.json)\n --target <name> production build target; repeatable\n --base <git-ref> render committed PR drift against Git base\n --policy <mode> all | widening | narrowing | neutral | none (default: all)\n --format <format> human | json | github | markdown (default: human)\n --json alias for --format json\n --plain disable Ink terminal rendering\n -h, --help\n -v, --version\n\nExit: 0 clean/viewed, 1 deterministic drift/policy finding, 2 completeness failure.\n`;\n\nconst COMMANDS = new Set([\"inspect\", \"snapshot\", \"check\"]);\nconst FORMATS = new Set<OutputFormat>([\"human\", \"json\", \"github\", \"markdown\"]);\nconst POLICIES = new Set([\"all\", \"widening\", \"narrowing\", \"neutral\", \"none\"]);\n\nfunction write(text: string, error = false): void {\n (error ? process.stderr : process.stdout).write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<number> {\n let parsed;\n try {\n parsed = parseArgs({\n args: argv,\n allowPositionals: true,\n options: {\n root: { type: \"string\", default: process.cwd() },\n config: { type: \"string\" },\n snapshot: { type: \"string\" },\n target: { type: \"string\", multiple: true },\n base: { type: \"string\" },\n policy: { type: \"string\", default: \"all\" },\n format: { type: \"string\", default: \"human\" },\n json: { type: \"boolean\", default: false },\n plain: { type: \"boolean\", default: false },\n help: { type: \"boolean\", short: \"h\", default: false },\n version: { type: \"boolean\", short: \"v\", default: false },\n },\n });\n } catch (error) {\n write(error instanceof Error ? error.message : String(error), true);\n write(USAGE, true);\n return 2;\n }\n const { values, positionals } = parsed;\n if (values.help) {\n write(USAGE);\n return 0;\n }\n if (values.version) {\n write(await readVersion());\n return 0;\n }\n const [command, ...extra] = positionals;\n if (!command || !COMMANDS.has(command) || extra.length > 0) {\n write(command === \"init\" ? \"init removed: configure the Vite compiler plugin\" : `invalid command ${command ?? \"\"}`, true);\n write(USAGE, true);\n return 2;\n }\n const format = (values.json ? \"json\" : values.format) as OutputFormat;\n if (!FORMATS.has(format)) {\n write(`--format must be human, json, github, or markdown`, true);\n return 2;\n }\n if (!POLICIES.has(values.policy)) {\n write(`--policy must be all, widening, narrowing, neutral, or none`, true);\n return 2;\n }\n const options: CommandOptions = {\n root: values.root,\n ...(values.config ? { configFile: values.config } : {}),\n ...(values.snapshot ? { snapshot: values.snapshot } : {}),\n targets: values.target ?? [],\n ...(values.base ? { base: values.base } : {}),\n format,\n policy: values.policy as CommandOptions[\"policy\"],\n ...(values.plain ? { plain: true } : {}),\n };\n try {\n if (command === \"inspect\") return await runInspect(options);\n if (command === \"snapshot\") return await runSnapshot(options);\n return await runCheck(options);\n } catch (error) {\n write(error instanceof Error ? error.message : String(error), true);\n if (error instanceof Error && error.stack && process.env[\"AGENT_SURFACE_DEBUG\"]) {\n write(error.stack, true);\n }\n return 2;\n }\n}\n\nasync function readVersion(): Promise<string> {\n const { readFileSync } = await import(\"node:fs\");\n const path = fileURLToPath(new URL(\"../package.json\", import.meta.url));\n return (JSON.parse(readFileSync(path, \"utf8\")) as { version: string }).version;\n}\n\nfunction invokedAsBinary(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return fileURLToPath(import.meta.url) === realpathSync(entry);\n } catch {\n return false;\n }\n}\n\nif (invokedAsBinary()) {\n void main().then((code) => {\n process.exitCode = code;\n });\n}\n","import { resolve } from \"node:path\";\nimport type { CapabilityContractEntry, CapabilityContractManifest } from \"@agent-surface/core\";\nimport {\n compileCapabilityContract,\n computeManifestHash,\n} from \"@agent-surface/compiler\";\nimport { diffContracts, type ChangeClassification } from \"./diff.js\";\nimport { DEFAULT_SNAPSHOT, readBaseManifest, readManifest, writeManifest } from \"./files.js\";\nimport type { ContractReport, OutputFormat } from \"./report.js\";\nimport { renderReport } from \"./report.js\";\n\nexport interface CommandOptions {\n root: string;\n configFile?: string;\n snapshot?: string;\n targets: string[];\n base?: string;\n format: OutputFormat;\n policy: \"all\" | ChangeClassification | \"none\";\n plain?: boolean;\n}\n\nfunction mergeManifests(manifests: CapabilityContractManifest[]): CapabilityContractManifest {\n const entries = new Map<string, CapabilityContractEntry>();\n for (const manifest of manifests) {\n for (const entry of manifest.capabilities) {\n const key = `${entry.declarationId}\\0${entry.capabilityId}`;\n const existing = entries.get(key);\n if (!existing) entries.set(key, { ...entry, targets: [...entry.targets] });\n else {\n if (existing.contractHash !== entry.contractHash) {\n throw new Error(`contract ${entry.declarationId} / ${entry.capabilityId} differs across targets`);\n }\n existing.targets = [...new Set([...existing.targets, ...entry.targets])].sort();\n }\n }\n }\n const payload = {\n formatVersion: 4 as const,\n compilerVersion: manifests[0]?.compilerVersion ?? \"unknown\",\n targets: [...new Set(manifests.flatMap((manifest) => manifest.targets))].sort(),\n capabilities: [...entries.values()].sort((a, b) =>\n `${a.declarationId}\\0${a.capabilityId}`.localeCompare(`${b.declarationId}\\0${b.capabilityId}`),\n ),\n externalContracts: manifests\n .flatMap((manifest) => manifest.externalContracts)\n .filter((entry, index, all) => all.findIndex((candidate) => candidate.digest === entry.digest) === index)\n .sort((a, b) => a.source.localeCompare(b.source)),\n completeness: { status: \"proven\" as const },\n };\n return { ...payload, hash: computeManifestHash(payload) };\n}\n\nasync function compile(options: CommandOptions): Promise<CapabilityContractManifest> {\n const targets = options.targets.length > 0 ? options.targets : [\"web-production\"];\n const manifests = await Promise.all(\n targets.map((target) =>\n compileCapabilityContract({\n root: options.root,\n ...(options.configFile ? { configFile: options.configFile } : {}),\n target,\n }),\n ),\n );\n return mergeManifests(manifests);\n}\n\nfunction shouldFail(\n policy: CommandOptions[\"policy\"],\n changes: ReturnType<typeof diffContracts>,\n): boolean {\n if (policy === \"none\") return false;\n if (policy === \"all\") return changes.length > 0;\n return changes.some((change) => change.classification === policy);\n}\n\nasync function present(report: ContractReport, options: CommandOptions): Promise<void> {\n const interactive =\n options.format === \"human\" &&\n !options.plain &&\n process.stdout.isTTY === true &&\n !process.env[\"CI\"] &&\n !process.env[\"NO_COLOR\"];\n if (interactive) {\n const { renderInk } = await import(\"./ink.js\");\n await renderInk(report);\n return;\n }\n process.stdout.write(renderReport(report, options.format));\n}\n\nexport async function runInspect(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n const snapshot = readManifest(snapshotPath);\n const integrityChanges = diffContracts(snapshot, manifest);\n const report: ContractReport = {\n command: \"inspect\",\n status: \"view\",\n manifest,\n snapshotPath,\n integrity: {\n status: !snapshot ? \"missing\" : snapshot.hash === manifest.hash ? \"current\" : \"stale\",\n changes: integrityChanges,\n },\n ...(options.base\n ? {\n pullRequest: {\n base: options.base,\n changes: diffContracts(readBaseManifest(options.base, snapshotPath, options.root), manifest),\n },\n }\n : {}),\n };\n await present(report, options);\n return 0;\n}\n\nexport async function runSnapshot(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n writeManifest(snapshotPath, manifest);\n await present({ command: \"snapshot\", status: \"written\", manifest, snapshotPath }, options);\n return 0;\n}\n\nexport async function runCheck(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n const snapshot = readManifest(snapshotPath);\n const integrityChanges = diffContracts(snapshot, manifest);\n const integrityCurrent = snapshot?.hash === manifest.hash;\n const pr = options.base\n ? {\n base: options.base,\n changes: diffContracts(readBaseManifest(options.base, snapshotPath, options.root), snapshot ?? manifest),\n }\n : undefined;\n const failed = !integrityCurrent || (pr ? shouldFail(options.policy, pr.changes) : false);\n const report: ContractReport = {\n command: \"check\",\n status: failed ? \"fail\" : \"pass\",\n manifest,\n snapshotPath,\n integrity: {\n status: !snapshot ? \"missing\" : integrityCurrent ? \"current\" : \"stale\",\n changes: integrityChanges,\n },\n ...(pr ? { pullRequest: pr } : {}),\n };\n await present(report, options);\n return failed ? 1 : 0;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/bin.ts","../src/commands.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { parseArgs } from \"node:util\";\nimport { runCheck, runInspect, runSnapshot, type CommandOptions } from \"./commands.js\";\nimport type { OutputFormat } from \"./report.js\";\n\nconst USAGE = `agent-surface — compiled production capability contract\n\nUsage\n agent-surface inspect\n agent-surface snapshot\n agent-surface check --base origin/main --format github\n\nOptions\n --root <path> application root (default: cwd)\n --config <path> Vite config, relative to root\n --snapshot <path> committed contract (default: .agent-surface/contract.json)\n --target <name> production build target; repeatable\n --base <git-ref> render committed PR drift against Git base\n --allow <pkg>=<d> approve a dependency to contribute capabilities; repeatable\n --policy <mode> all | widening | narrowing | neutral | none (default: all)\n --format <format> human | json | github | markdown (default: human)\n --json alias for --format json\n --plain disable Ink terminal rendering\n -h, --help\n -v, --version\n\nExit: 0 clean/viewed, 1 deterministic drift/policy finding, 2 completeness failure.\n`;\n\nconst COMMANDS = new Set([\"inspect\", \"snapshot\", \"check\"]);\nconst FORMATS = new Set<OutputFormat>([\"human\", \"json\", \"github\", \"markdown\"]);\nconst POLICIES = new Set([\"all\", \"widening\", \"narrowing\", \"neutral\", \"none\"]);\n\nfunction write(text: string, error = false): void {\n (error ? process.stderr : process.stdout).write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<number> {\n let parsed;\n try {\n parsed = parseArgs({\n args: argv,\n allowPositionals: true,\n options: {\n root: { type: \"string\", default: process.cwd() },\n config: { type: \"string\" },\n snapshot: { type: \"string\" },\n target: { type: \"string\", multiple: true },\n base: { type: \"string\" },\n allow: { type: \"string\", multiple: true },\n policy: { type: \"string\", default: \"all\" },\n format: { type: \"string\", default: \"human\" },\n json: { type: \"boolean\", default: false },\n plain: { type: \"boolean\", default: false },\n help: { type: \"boolean\", short: \"h\", default: false },\n version: { type: \"boolean\", short: \"v\", default: false },\n },\n });\n } catch (error) {\n write(error instanceof Error ? error.message : String(error), true);\n write(USAGE, true);\n return 2;\n }\n const { values, positionals } = parsed;\n if (values.help) {\n write(USAGE);\n return 0;\n }\n if (values.version) {\n write(await readVersion());\n return 0;\n }\n const [command, ...extra] = positionals;\n if (!command || !COMMANDS.has(command) || extra.length > 0) {\n write(command === \"init\" ? \"init removed: configure the Vite compiler plugin\" : `invalid command ${command ?? \"\"}`, true);\n write(USAGE, true);\n return 2;\n }\n const format = (values.json ? \"json\" : values.format) as OutputFormat;\n if (!FORMATS.has(format)) {\n write(`--format must be human, json, github, or markdown`, true);\n return 2;\n }\n if (!POLICIES.has(values.policy)) {\n write(`--policy must be all, widening, narrowing, neutral, or none`, true);\n return 2;\n }\n const allow = [];\n for (const entry of values.allow ?? []) {\n const separator = entry.lastIndexOf(\"=\");\n const name = separator === -1 ? \"\" : entry.slice(0, separator);\n const digest = separator === -1 ? \"\" : entry.slice(separator + 1);\n if (!name || !/^[0-9a-f]{64}$/.test(digest)) {\n write(`--allow must be <package>=<sha256>, got \"${entry}\"`, true);\n return 2;\n }\n allow.push({ package: name, digest });\n }\n const options: CommandOptions = {\n root: values.root,\n ...(values.config ? { configFile: values.config } : {}),\n ...(values.snapshot ? { snapshot: values.snapshot } : {}),\n targets: values.target ?? [],\n ...(values.base ? { base: values.base } : {}),\n format,\n policy: values.policy as CommandOptions[\"policy\"],\n ...(allow.length > 0 ? { externalContracts: { allow } } : {}),\n ...(values.plain ? { plain: true } : {}),\n };\n try {\n if (command === \"inspect\") return await runInspect(options);\n if (command === \"snapshot\") return await runSnapshot(options);\n return await runCheck(options);\n } catch (error) {\n write(error instanceof Error ? error.message : String(error), true);\n if (error instanceof Error && error.stack && process.env[\"AGENT_SURFACE_DEBUG\"]) {\n write(error.stack, true);\n }\n return 2;\n }\n}\n\nasync function readVersion(): Promise<string> {\n const { readFileSync } = await import(\"node:fs\");\n const path = fileURLToPath(new URL(\"../package.json\", import.meta.url));\n return (JSON.parse(readFileSync(path, \"utf8\")) as { version: string }).version;\n}\n\nfunction invokedAsBinary(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return fileURLToPath(import.meta.url) === realpathSync(entry);\n } catch {\n return false;\n }\n}\n\nif (invokedAsBinary()) {\n void main().then((code) => {\n process.exitCode = code;\n });\n}\n","import { resolve } from \"node:path\";\nimport type { CapabilityContractEntry, CapabilityContractManifest } from \"@agent-surface/core\";\nimport {\n compileCapabilityContract,\n computeManifestHash,\n type ExternalContractPolicy,\n} from \"@agent-surface/compiler\";\nimport { diffContracts, type ChangeClassification } from \"./diff.js\";\nimport { DEFAULT_SNAPSHOT, readBaseManifest, readManifest, writeManifest } from \"./files.js\";\nimport type { ContractReport, OutputFormat } from \"./report.js\";\nimport { renderReport } from \"./report.js\";\n\nexport interface CommandOptions {\n root: string;\n configFile?: string;\n snapshot?: string;\n targets: string[];\n base?: string;\n format: OutputFormat;\n policy: \"all\" | ChangeClassification | \"none\";\n /** Dependencies approved to contribute, as `--allow <package>=<sha256>`. */\n externalContracts?: ExternalContractPolicy;\n plain?: boolean;\n}\n\nfunction mergeManifests(manifests: CapabilityContractManifest[]): CapabilityContractManifest {\n const entries = new Map<string, CapabilityContractEntry>();\n for (const manifest of manifests) {\n for (const entry of manifest.capabilities) {\n const key = `${entry.declarationId}\\0${entry.capabilityId}`;\n const existing = entries.get(key);\n if (!existing) entries.set(key, { ...entry, targets: [...entry.targets] });\n else {\n if (existing.contractHash !== entry.contractHash) {\n throw new Error(`contract ${entry.declarationId} / ${entry.capabilityId} differs across targets`);\n }\n existing.targets = [...new Set([...existing.targets, ...entry.targets])].sort();\n }\n }\n }\n const payload = {\n formatVersion: 5 as const,\n compilerVersion: manifests[0]?.compilerVersion ?? \"unknown\",\n targets: [...new Set(manifests.flatMap((manifest) => manifest.targets))].sort(),\n capabilities: [...entries.values()].sort((a, b) =>\n `${a.declarationId}\\0${a.capabilityId}`.localeCompare(`${b.declarationId}\\0${b.capabilityId}`),\n ),\n // One attribution per package: the same dependency contributes identically\n // to every target, and a divergence would already have failed the compile.\n externalContracts: manifests\n .flatMap((manifest) => manifest.externalContracts)\n .filter((entry, index, all) => all.findIndex((candidate) => candidate.package === entry.package) === index)\n .sort((a, b) => a.package.localeCompare(b.package)),\n completeness: { status: \"proven\" as const },\n };\n return { ...payload, hash: computeManifestHash(payload) };\n}\n\nasync function compile(options: CommandOptions): Promise<CapabilityContractManifest> {\n const targets = options.targets.length > 0 ? options.targets : [\"web-production\"];\n const manifests = await Promise.all(\n targets.map((target) =>\n compileCapabilityContract({\n root: options.root,\n ...(options.configFile ? { configFile: options.configFile } : {}),\n ...(options.externalContracts ? { externalContracts: options.externalContracts } : {}),\n target,\n }),\n ),\n );\n return mergeManifests(manifests);\n}\n\nfunction shouldFail(\n policy: CommandOptions[\"policy\"],\n changes: ReturnType<typeof diffContracts>,\n): boolean {\n if (policy === \"none\") return false;\n if (policy === \"all\") return changes.length > 0;\n return changes.some((change) => change.classification === policy);\n}\n\nasync function present(report: ContractReport, options: CommandOptions): Promise<void> {\n const interactive =\n options.format === \"human\" &&\n !options.plain &&\n process.stdout.isTTY === true &&\n !process.env[\"CI\"] &&\n !process.env[\"NO_COLOR\"];\n if (interactive) {\n const { renderInk } = await import(\"./ink.js\");\n await renderInk(report);\n return;\n }\n process.stdout.write(renderReport(report, options.format));\n}\n\nexport async function runInspect(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n const snapshot = readManifest(snapshotPath);\n const integrityChanges = diffContracts(snapshot, manifest);\n const report: ContractReport = {\n command: \"inspect\",\n status: \"view\",\n manifest,\n snapshotPath,\n integrity: {\n status: !snapshot ? \"missing\" : snapshot.hash === manifest.hash ? \"current\" : \"stale\",\n changes: integrityChanges,\n },\n ...(options.base\n ? {\n pullRequest: {\n base: options.base,\n changes: diffContracts(readBaseManifest(options.base, snapshotPath, options.root), manifest),\n },\n }\n : {}),\n };\n await present(report, options);\n return 0;\n}\n\nexport async function runSnapshot(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n writeManifest(snapshotPath, manifest);\n await present({ command: \"snapshot\", status: \"written\", manifest, snapshotPath }, options);\n return 0;\n}\n\nexport async function runCheck(options: CommandOptions): Promise<number> {\n const manifest = await compile(options);\n const snapshotPath = resolve(options.root, options.snapshot ?? DEFAULT_SNAPSHOT);\n const snapshot = readManifest(snapshotPath);\n const integrityChanges = diffContracts(snapshot, manifest);\n const integrityCurrent = snapshot?.hash === manifest.hash;\n const pr = options.base\n ? {\n base: options.base,\n changes: diffContracts(readBaseManifest(options.base, snapshotPath, options.root), snapshot ?? manifest),\n }\n : undefined;\n const failed = !integrityCurrent || (pr ? shouldFail(options.policy, pr.changes) : false);\n const report: ContractReport = {\n command: \"check\",\n status: failed ? \"fail\" : \"pass\",\n manifest,\n snapshotPath,\n integrity: {\n status: !snapshot ? \"missing\" : integrityCurrent ? \"current\" : \"stale\",\n changes: integrityChanges,\n },\n ...(pr ? { pullRequest: pr } : {}),\n };\n await present(report, options);\n return failed ? 1 : 0;\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-surface/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Inspect and check the agent surface your app exposes — in the terminal and in CI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"ink": "^6.3.1",
|
|
24
24
|
"react": "^19.1.1",
|
|
25
25
|
"vite": "^7.1.3",
|
|
26
|
-
"@agent-surface/compiler": "^0.
|
|
27
|
-
"@agent-surface/core": "^0.
|
|
26
|
+
"@agent-surface/compiler": "^0.19.0",
|
|
27
|
+
"@agent-surface/core": "^0.19.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^20.19.0",
|