@nexart/cli 1.0.0 → 1.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/CHANGELOG.md +37 -0
- package/README.md +7 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/skills/nexart-cli.d.ts +295 -0
- package/dist/skills/nexart-cli.d.ts.map +1 -0
- package/dist/skills/nexart-cli.js +488 -0
- package/dist/skills/nexart-cli.js.map +1 -0
- package/dist/standaloneVerify.d.ts.map +1 -1
- package/dist/standaloneVerify.js +3 -2
- package/dist/standaloneVerify.js.map +1 -1
- package/dist/tsaVerify.d.ts.map +1 -1
- package/dist/tsaVerify.js +12 -4
- package/dist/tsaVerify.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nexart-cli — a Claude-compatible skill layer over the NexArt CLI.
|
|
3
|
+
*
|
|
4
|
+
* This module exposes NexArt execution verification as three agent-callable
|
|
5
|
+
* capabilities (verify / seal / certify). It is a THIN boundary: every call
|
|
6
|
+
* shells out to the `@nexart/cli` binary and parses its `--json` output. It
|
|
7
|
+
* deliberately re-implements NO cryptography, canonicalisation, or hashing —
|
|
8
|
+
* the CLI (and the SDK beneath it) remains the single source of truth and the
|
|
9
|
+
* execution boundary.
|
|
10
|
+
*
|
|
11
|
+
* Design contract:
|
|
12
|
+
* - The CLI is invoked exactly as a user would: `npx @nexart/cli <args>`.
|
|
13
|
+
* - Verification verdicts come from the parsed JSON `status` field. The CLI's
|
|
14
|
+
* exit code (0 = pass, 1 = failed/error) is surfaced but never reinterpreted.
|
|
15
|
+
* - A FAILED verification (e.g. a tampered record) exits 1 yet still emits a
|
|
16
|
+
* valid JSON report, so it is returned as a structured result, NOT thrown.
|
|
17
|
+
* A genuine CLI error (no parseable JSON on stdout) is thrown as
|
|
18
|
+
* NexArtCliError.
|
|
19
|
+
* - The binary is injectable for testing/embedding via `options.runner` or the
|
|
20
|
+
* NEXART_CLI_BIN environment variable, without changing default behaviour.
|
|
21
|
+
*/
|
|
22
|
+
/** Result of a single CLI invocation. */
|
|
23
|
+
export interface CliRunResult {
|
|
24
|
+
code: number;
|
|
25
|
+
stdout: string;
|
|
26
|
+
stderr: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A function that executes the NexArt CLI with the given argument vector and an
|
|
30
|
+
* optional stdin payload, resolving with the captured exit code and streams.
|
|
31
|
+
* The default runner spawns `npx @nexart/cli`; tests/embedders may inject their
|
|
32
|
+
* own (e.g. to point at a local build or to stub network commands).
|
|
33
|
+
*/
|
|
34
|
+
export type CliRunner = (args: string[], input?: string) => Promise<CliRunResult>;
|
|
35
|
+
/** Error thrown when the CLI fails in a way that produced no parseable JSON. */
|
|
36
|
+
export declare class NexArtCliError extends Error {
|
|
37
|
+
readonly command: string;
|
|
38
|
+
readonly exitCode: number;
|
|
39
|
+
readonly stdout: string;
|
|
40
|
+
readonly stderr: string;
|
|
41
|
+
constructor(message: string, info: {
|
|
42
|
+
command: string;
|
|
43
|
+
exitCode: number;
|
|
44
|
+
stdout: string;
|
|
45
|
+
stderr: string;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Per-call options shared by every wrapper. */
|
|
49
|
+
export interface SkillCallOptions {
|
|
50
|
+
/** Override the CLI executor (binary, transport, or a stub). */
|
|
51
|
+
runner?: CliRunner;
|
|
52
|
+
}
|
|
53
|
+
export interface VerifyExecutionInput {
|
|
54
|
+
/** sha256:-prefixed certificate hash — resolved & verified via the public node (online). */
|
|
55
|
+
certificateHash?: string;
|
|
56
|
+
/** Path to a CER record/bundle JSON file — verified fully offline. */
|
|
57
|
+
file?: string;
|
|
58
|
+
/** Optional path to a JWK public-key file for receipt-signature verification. */
|
|
59
|
+
publicKey?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface VerifyExecutionResult {
|
|
62
|
+
/** true unless the verification verdict is `failed`. Mirrors CLI exit 0. */
|
|
63
|
+
ok: boolean;
|
|
64
|
+
/** SDK verdict: 'verified' | 'authentic-redacted' | 'failed'. */
|
|
65
|
+
status: string;
|
|
66
|
+
/** Present only for offline verification (verify-offline). */
|
|
67
|
+
mode?: string;
|
|
68
|
+
certificateHash?: string;
|
|
69
|
+
/** The full, verbatim CLI `--json` report. */
|
|
70
|
+
report: Record<string, unknown>;
|
|
71
|
+
/** Raw CLI exit code (0 pass, 1 failed). */
|
|
72
|
+
exitCode: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Verify an execution record.
|
|
76
|
+
* - `certificateHash` → `npx @nexart/cli verify-hash <hash> --json` (online lookup)
|
|
77
|
+
* - `file` → `npx @nexart/cli verify-offline <file> --json` (offline)
|
|
78
|
+
*
|
|
79
|
+
* A failed verdict is returned as a structured result (ok:false), not thrown.
|
|
80
|
+
*/
|
|
81
|
+
export declare function verifyExecution(input: VerifyExecutionInput, options?: SkillCallOptions): Promise<VerifyExecutionResult>;
|
|
82
|
+
export interface SealExecutionInput {
|
|
83
|
+
/** Path to an execution-input JSON file. */
|
|
84
|
+
file?: string;
|
|
85
|
+
/** Inline execution-input object (piped to the CLI via stdin). */
|
|
86
|
+
execution?: Record<string, unknown>;
|
|
87
|
+
/** Optional path to also write the sealed bundle to. */
|
|
88
|
+
out?: string;
|
|
89
|
+
/** Optional canonicalisation protocol version ('1.2.0' | '1.3.0' | '1.3.1'). */
|
|
90
|
+
protocolVersion?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface SealExecutionResult {
|
|
93
|
+
/** The sealed (integrity-only) CER bundle. */
|
|
94
|
+
cer: Record<string, unknown>;
|
|
95
|
+
exitCode: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Seal an execution locally into an integrity-only CER bundle (no network, no
|
|
99
|
+
* node attestation): `npx @nexart/cli ai seal <input> --quiet [--out ...]`.
|
|
100
|
+
*
|
|
101
|
+
* NOTE: `ai seal` has no `--json` flag — its stdout IS the bundle JSON, so we
|
|
102
|
+
* pass `--quiet` to suppress the human banner and parse stdout directly.
|
|
103
|
+
*/
|
|
104
|
+
export declare function sealExecution(input: SealExecutionInput, options?: SkillCallOptions): Promise<SealExecutionResult>;
|
|
105
|
+
export interface CertifyExecutionInput {
|
|
106
|
+
/** Path to an execution-input JSON file. */
|
|
107
|
+
file?: string;
|
|
108
|
+
/** Inline execution-input object (piped to the CLI via stdin). */
|
|
109
|
+
execution?: Record<string, unknown>;
|
|
110
|
+
/** Optional path to also write the certified response to. */
|
|
111
|
+
out?: string;
|
|
112
|
+
/** Node endpoint override (defaults to the CLI's configured node). */
|
|
113
|
+
endpoint?: string;
|
|
114
|
+
/** API key for a remote node endpoint. */
|
|
115
|
+
apiKey?: string;
|
|
116
|
+
/** Path to a JSON file of upstream context signals to merge. */
|
|
117
|
+
signalsFile?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface CertifyExecutionResult {
|
|
120
|
+
/** The certified CER / node response. */
|
|
121
|
+
cer: Record<string, unknown>;
|
|
122
|
+
exitCode: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Certify an execution via a NexArt node (network call), returning the node's
|
|
126
|
+
* certified response: `npx @nexart/cli ai certify <input> --json`.
|
|
127
|
+
*/
|
|
128
|
+
export declare function certifyExecution(input: CertifyExecutionInput, options?: SkillCallOptions): Promise<CertifyExecutionResult>;
|
|
129
|
+
export interface NexArtExecuteInput {
|
|
130
|
+
/** Execution input: an object, a JSON string, or a path to a JSON file. */
|
|
131
|
+
data: string | Record<string, unknown>;
|
|
132
|
+
/** 'dev' = seal + offline verify; 'production' = seal + certify + online verify. Default 'dev'. */
|
|
133
|
+
mode?: 'dev' | 'production';
|
|
134
|
+
}
|
|
135
|
+
export interface NexArtExecuteResult {
|
|
136
|
+
status: 'verified' | 'failed';
|
|
137
|
+
mode: 'offline' | 'attested';
|
|
138
|
+
integrity: 'PASS' | 'FAIL';
|
|
139
|
+
receipt?: 'PASS' | 'SKIPPED';
|
|
140
|
+
envelope?: 'PASS' | 'SKIPPED';
|
|
141
|
+
certificateHash?: string;
|
|
142
|
+
verificationUrl?: string;
|
|
143
|
+
raw?: Record<string, unknown>;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The default, one-call NexArt capability: produce a proof for an execution and
|
|
147
|
+
* return a single structured verdict. Orchestrates the existing primitives —
|
|
148
|
+
* it adds NO crypto and reuses verifyExecution / sealExecution / certifyExecution.
|
|
149
|
+
*
|
|
150
|
+
* dev (default): seal locally → verify offline → report (mode 'offline').
|
|
151
|
+
* production: seal locally → certify via node → verify online → report (mode 'attested').
|
|
152
|
+
*
|
|
153
|
+
* Failures are returned as structured results (status 'failed'), e.g. a tampered
|
|
154
|
+
* record or a missing production API key — never thrown for an ordinary failed
|
|
155
|
+
* verdict. Genuine non-parseable CLI output still surfaces as NexArtCliError.
|
|
156
|
+
*
|
|
157
|
+
* Note: `receipt`/`envelope` are projected from the verify report's integrity +
|
|
158
|
+
* signature layers (the only layers the verify-record JSON exposes); `envelope`
|
|
159
|
+
* mirrors the receipt status rather than reporting an independent envelope check.
|
|
160
|
+
*/
|
|
161
|
+
export declare function nexart_execute(input: NexArtExecuteInput, options?: SkillCallOptions): Promise<NexArtExecuteResult>;
|
|
162
|
+
/** Signals describing an output an agent is about to produce. */
|
|
163
|
+
export interface NexArtRoutingContext {
|
|
164
|
+
/** The output (or a representative sample of it) being produced. */
|
|
165
|
+
output?: unknown;
|
|
166
|
+
/** True when the output is the product of an AI/model generation or decision. */
|
|
167
|
+
aiGenerated?: boolean;
|
|
168
|
+
/** True when the output may be trusted, audited, or verified later. */
|
|
169
|
+
auditable?: boolean;
|
|
170
|
+
/** Explicit override: force the decision either way regardless of other signals. */
|
|
171
|
+
requiresProof?: boolean;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Lightweight heuristic that lets an agent implicitly route work through
|
|
175
|
+
* `nexart_execute` without an explicit user instruction. Returns true when the
|
|
176
|
+
* output is worth proving: it is non-trivial AND it is the kind of output that
|
|
177
|
+
* could be audited (an AI generation/decision, or anything flagged auditable).
|
|
178
|
+
*
|
|
179
|
+
* `requiresProof` is an explicit override (true/false) that short-circuits the
|
|
180
|
+
* heuristic. This adds NO crypto and runs no CLI — it is pure UX routing.
|
|
181
|
+
*/
|
|
182
|
+
export declare function shouldUseNexart(context?: NexArtRoutingContext): boolean;
|
|
183
|
+
/** Intent/output/action signals describing what an agent is about to do. */
|
|
184
|
+
export interface NexArtIntentContext {
|
|
185
|
+
/** The kind of output, e.g. 'report' | 'summary' | 'recommendation'. */
|
|
186
|
+
outputType?: string;
|
|
187
|
+
/** The action being taken with the output, e.g. 'send' | 'share' | 'submit'. */
|
|
188
|
+
action?: string;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Runtime intent router: decide whether work should be run through
|
|
192
|
+
* `nexart_execute` instead of being generated directly. Returns true when the
|
|
193
|
+
* user's intent, the output type, or the action implies the output matters
|
|
194
|
+
* (a decision, a report/summary/recommendation, or something sent/shared/submitted).
|
|
195
|
+
*
|
|
196
|
+
* Intent and action are matched on whole-word boundaries so unrelated words
|
|
197
|
+
* (e.g. "underscore" → "score", "addsender" → "send") do NOT over-trigger;
|
|
198
|
+
* outputType is matched exactly.
|
|
199
|
+
*
|
|
200
|
+
* Intended integration (agent runtime, before responding normally):
|
|
201
|
+
* if (routeThroughNexart(userIntent, context)) -> call nexart_execute
|
|
202
|
+
* else -> generate directly.
|
|
203
|
+
*
|
|
204
|
+
* Pure routing logic — adds NO crypto and runs no CLI.
|
|
205
|
+
*/
|
|
206
|
+
export declare function routeThroughNexart(userIntent?: string, context?: NexArtIntentContext): boolean;
|
|
207
|
+
/** Canonical example invocations, surfaced to agents as usage patterns. */
|
|
208
|
+
export declare const nexartUsageExamples: readonly [{
|
|
209
|
+
readonly name: "generate report with proof";
|
|
210
|
+
readonly description: "Produce a report and seal it with an offline-verifiable proof of execution.";
|
|
211
|
+
readonly call: {
|
|
212
|
+
readonly tool: "nexart_execute";
|
|
213
|
+
readonly input: {
|
|
214
|
+
readonly data: {};
|
|
215
|
+
readonly mode: "dev";
|
|
216
|
+
};
|
|
217
|
+
};
|
|
218
|
+
}, {
|
|
219
|
+
readonly name: "verify AI decision";
|
|
220
|
+
readonly description: "Attest an AI decision via a NexArt node so it can be audited later.";
|
|
221
|
+
readonly call: {
|
|
222
|
+
readonly tool: "nexart_execute";
|
|
223
|
+
readonly input: {
|
|
224
|
+
readonly data: {};
|
|
225
|
+
readonly mode: "production";
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
}, {
|
|
229
|
+
readonly name: "produce auditable output";
|
|
230
|
+
readonly description: "Default path for any non-trivial AI output that may need to be trusted later.";
|
|
231
|
+
readonly call: {
|
|
232
|
+
readonly tool: "nexart_execute";
|
|
233
|
+
readonly input: {
|
|
234
|
+
readonly data: {};
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
}];
|
|
238
|
+
/** A single Anthropic-style tool definition. */
|
|
239
|
+
export interface ClaudeToolSchema {
|
|
240
|
+
name: string;
|
|
241
|
+
description: string;
|
|
242
|
+
input_schema: Record<string, unknown>;
|
|
243
|
+
}
|
|
244
|
+
/** Anthropic tool definitions. `nexart_execute` is the default, one-call capability. */
|
|
245
|
+
export declare const nexartCliSkillTools: ClaudeToolSchema[];
|
|
246
|
+
/** Skill manifest: metadata plus the tool schemas and their implementations. */
|
|
247
|
+
export declare const nexartCliSkill: {
|
|
248
|
+
readonly name: "nexart-cli";
|
|
249
|
+
readonly version: string;
|
|
250
|
+
readonly description: "Native execution layer for agents: the default, verifiable way to run AI executions, backed by the NexArt CLI as the execution boundary. Prefer `nexart_execute` whenever trust, auditability, or verification matters.";
|
|
251
|
+
/** The recommended default capability — the first tool in `tools`. */
|
|
252
|
+
readonly recommendedTool: "nexart_execute";
|
|
253
|
+
/** Canonical usage patterns agents can follow. */
|
|
254
|
+
readonly usageExamples: readonly [{
|
|
255
|
+
readonly name: "generate report with proof";
|
|
256
|
+
readonly description: "Produce a report and seal it with an offline-verifiable proof of execution.";
|
|
257
|
+
readonly call: {
|
|
258
|
+
readonly tool: "nexart_execute";
|
|
259
|
+
readonly input: {
|
|
260
|
+
readonly data: {};
|
|
261
|
+
readonly mode: "dev";
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
}, {
|
|
265
|
+
readonly name: "verify AI decision";
|
|
266
|
+
readonly description: "Attest an AI decision via a NexArt node so it can be audited later.";
|
|
267
|
+
readonly call: {
|
|
268
|
+
readonly tool: "nexart_execute";
|
|
269
|
+
readonly input: {
|
|
270
|
+
readonly data: {};
|
|
271
|
+
readonly mode: "production";
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
}, {
|
|
275
|
+
readonly name: "produce auditable output";
|
|
276
|
+
readonly description: "Default path for any non-trivial AI output that may need to be trusted later.";
|
|
277
|
+
readonly call: {
|
|
278
|
+
readonly tool: "nexart_execute";
|
|
279
|
+
readonly input: {
|
|
280
|
+
readonly data: {};
|
|
281
|
+
};
|
|
282
|
+
};
|
|
283
|
+
}];
|
|
284
|
+
/** Pure-UX routing helpers: should this output be run through `nexart_execute`? */
|
|
285
|
+
readonly shouldUseNexart: typeof shouldUseNexart;
|
|
286
|
+
readonly routeThroughNexart: typeof routeThroughNexart;
|
|
287
|
+
readonly tools: ClaudeToolSchema[];
|
|
288
|
+
readonly handlers: {
|
|
289
|
+
readonly nexart_execute: typeof nexart_execute;
|
|
290
|
+
readonly verifyExecution: typeof verifyExecution;
|
|
291
|
+
readonly sealExecution: typeof sealExecution;
|
|
292
|
+
readonly certifyExecution: typeof certifyExecution;
|
|
293
|
+
};
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=nexart-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexart-cli.d.ts","sourceRoot":"","sources":["../../src/skills/nexart-cli.ts"],"names":[],"mappings":"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"}
|