@emilia-protocol/gate 0.18.1 → 0.18.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.
@@ -0,0 +1,294 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Bounded subprocess transport for EMILIA protocol Referee runners.
5
+ *
6
+ * The caller pins an absolute executable, its SHA-256 byte digest, and the
7
+ * complete argument vector. The child receives only a closed JSON request on
8
+ * stdin and must return one closed JSON output on stdout. This is a bounded,
9
+ * no-shell subprocess self-test harness; it is not an OS sandbox and does not
10
+ * claim to confine a hostile executable's filesystem or network access.
11
+ */
12
+ import { spawn } from 'node:child_process';
13
+ import crypto from 'node:crypto';
14
+ import { createReadStream } from 'node:fs';
15
+ import path from 'node:path';
16
+ import { TextDecoder } from 'node:util';
17
+ import { REFEREE_EVALUATION_VERSION, RefereeValidationError, createIndeterminateRefereeResult, evaluateReferee, parseRefereeRunnerOutput, parseRefereeRunnerPin, parseRefereeRunnerRequest, } from './referee.js';
18
+ import { strictJsonGate } from './strict-json.js';
19
+ export const REFEREE_RUNNER_MAX_INPUT_BYTES = 8 * 1024 * 1024;
20
+ export const REFEREE_RUNNER_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
21
+ export const REFEREE_RUNNER_MAX_TIMEOUT_MS = 300_000;
22
+ const FORCE_KILL_AFTER_MS = 100;
23
+ const INVOCATION_KEYS = Object.freeze([
24
+ 'runner_pin', 'request', 'timeout_ms',
25
+ ]);
26
+ const OPTION_KEYS = new Set(['signal']);
27
+ function fail(code) {
28
+ throw new RefereeValidationError(code);
29
+ }
30
+ function plain(value) {
31
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
32
+ return false;
33
+ }
34
+ const prototype = Object.getPrototypeOf(value);
35
+ return prototype === Object.prototype || prototype === null;
36
+ }
37
+ function exactInvocation(value) {
38
+ if (!plain(value))
39
+ fail('invalid_schema');
40
+ const ownKeys = Reflect.ownKeys(value);
41
+ if (ownKeys.some((key) => typeof key !== 'string'))
42
+ fail('unknown_key');
43
+ const expected = new Set(INVOCATION_KEYS);
44
+ for (const key of ownKeys) {
45
+ if (!expected.has(key))
46
+ fail('unknown_key');
47
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
48
+ if (!descriptor?.enumerable || !('value' in descriptor))
49
+ fail('invalid_schema');
50
+ }
51
+ for (const key of INVOCATION_KEYS) {
52
+ if (!Object.prototype.hasOwnProperty.call(value, key))
53
+ fail('missing_key');
54
+ }
55
+ return value;
56
+ }
57
+ function parseOptions(value) {
58
+ if (value === undefined)
59
+ return Object.freeze({});
60
+ if (!plain(value))
61
+ fail('invalid_options');
62
+ const keys = Reflect.ownKeys(value);
63
+ if (keys.some((key) => typeof key !== 'string' || !OPTION_KEYS.has(key))) {
64
+ fail('unknown_key');
65
+ }
66
+ let signal;
67
+ for (const key of keys) {
68
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
69
+ if (!descriptor?.enumerable || !('value' in descriptor)) {
70
+ fail('invalid_options');
71
+ }
72
+ if (key === 'signal')
73
+ signal = descriptor.value;
74
+ }
75
+ if (signal !== undefined && !(signal instanceof AbortSignal)) {
76
+ fail('invalid_signal');
77
+ }
78
+ return Object.freeze(signal === undefined ? {} : { signal });
79
+ }
80
+ export function parseRefereeRunnerInvocation(value) {
81
+ const object = exactInvocation(value);
82
+ if (!Number.isSafeInteger(object.timeout_ms)
83
+ || object.timeout_ms < 1
84
+ || object.timeout_ms > REFEREE_RUNNER_MAX_TIMEOUT_MS) {
85
+ fail('invalid_timeout');
86
+ }
87
+ return Object.freeze({
88
+ runner_pin: parseRefereeRunnerPin(object.runner_pin),
89
+ request: parseRefereeRunnerRequest(object.request),
90
+ timeout_ms: object.timeout_ms,
91
+ });
92
+ }
93
+ function frozenFailure(code) {
94
+ return Object.freeze({ ok: false, code });
95
+ }
96
+ function frozenSuccess(output) {
97
+ return Object.freeze({ ok: true, output });
98
+ }
99
+ function decodeRunnerOutput(bytes) {
100
+ let raw;
101
+ try {
102
+ raw = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
103
+ }
104
+ catch {
105
+ return frozenFailure('MALFORMED_OUTPUT');
106
+ }
107
+ const gate = strictJsonGate(raw);
108
+ if (!gate.ok)
109
+ return frozenFailure('MALFORMED_OUTPUT');
110
+ let parsed;
111
+ try {
112
+ parsed = JSON.parse(raw);
113
+ }
114
+ catch {
115
+ return frozenFailure('MALFORMED_OUTPUT');
116
+ }
117
+ try {
118
+ return frozenSuccess(parseRefereeRunnerOutput(parsed));
119
+ }
120
+ catch (error) {
121
+ if (error instanceof RefereeValidationError) {
122
+ return frozenFailure('INVALID_OUTPUT_SCHEMA');
123
+ }
124
+ return frozenFailure('INVALID_OUTPUT_SCHEMA');
125
+ }
126
+ }
127
+ function serializeRequest(request) {
128
+ // parseRefereeRunnerRequest has already established an exact JSON tree, so
129
+ // JSON.stringify cannot silently drop or coerce any member here.
130
+ return JSON.stringify(request);
131
+ }
132
+ async function digestExecutable(executable, signal) {
133
+ return new Promise((resolve) => {
134
+ const hash = crypto.createHash('sha256');
135
+ const stream = createReadStream(executable, { signal });
136
+ let complete = false;
137
+ const finish = (value) => {
138
+ if (complete)
139
+ return;
140
+ complete = true;
141
+ resolve(value);
142
+ };
143
+ stream.on('data', (chunk) => hash.update(chunk));
144
+ stream.once('error', () => finish(null));
145
+ stream.once('end', () => finish(`sha256:${hash.digest('hex')}`));
146
+ });
147
+ }
148
+ async function executeParsed(invocation, options) {
149
+ const serialized = serializeRequest(invocation.request);
150
+ if (Buffer.byteLength(serialized, 'utf8') > REFEREE_RUNNER_MAX_INPUT_BYTES) {
151
+ return frozenFailure('INPUT_TOO_LARGE');
152
+ }
153
+ if (options.signal?.aborted)
154
+ return frozenFailure('ABORTED');
155
+ // This is intentionally the last asynchronous operation before spawn. It
156
+ // establishes byte equality with the relying party's pin; it does not turn
157
+ // this portable harness into a complete OS-level execution sandbox.
158
+ const observedExecutableDigest = await digestExecutable(invocation.runner_pin.executable, options.signal);
159
+ if (options.signal?.aborted)
160
+ return frozenFailure('ABORTED');
161
+ if (observedExecutableDigest === null)
162
+ return frozenFailure('SPAWN_FAILED');
163
+ if (observedExecutableDigest !== invocation.runner_pin.executable_sha256) {
164
+ return frozenFailure('EXECUTABLE_DIGEST_MISMATCH');
165
+ }
166
+ return new Promise((resolve) => {
167
+ const detached = process.platform !== 'win32';
168
+ let child;
169
+ try {
170
+ child = spawn(invocation.runner_pin.executable, [...invocation.runner_pin.args], {
171
+ cwd: path.parse(invocation.runner_pin.executable).root,
172
+ detached,
173
+ env: {},
174
+ shell: false,
175
+ stdio: ['pipe', 'pipe', 'pipe'],
176
+ windowsHide: true,
177
+ });
178
+ }
179
+ catch {
180
+ resolve(frozenFailure('SPAWN_FAILED'));
181
+ return;
182
+ }
183
+ let settled = false;
184
+ let selectedFailure = null;
185
+ let totalOutputBytes = 0;
186
+ let stdoutBytes = 0;
187
+ const stdoutChunks = [];
188
+ let forceKillTimer = null;
189
+ const sendSignal = (signal) => {
190
+ if (child.pid !== undefined && detached) {
191
+ try {
192
+ process.kill(-child.pid, signal);
193
+ return;
194
+ }
195
+ catch {
196
+ // The process may have exited between the event and this signal.
197
+ }
198
+ }
199
+ try {
200
+ child.kill(signal);
201
+ }
202
+ catch {
203
+ // close/error remains the authoritative completion event.
204
+ }
205
+ };
206
+ const timeout = setTimeout(() => {
207
+ terminate('TIMEOUT');
208
+ }, invocation.timeout_ms);
209
+ timeout.unref?.();
210
+ const abort = () => terminate('ABORTED');
211
+ options.signal?.addEventListener('abort', abort, { once: true });
212
+ const cleanup = () => {
213
+ clearTimeout(timeout);
214
+ if (forceKillTimer !== null)
215
+ clearTimeout(forceKillTimer);
216
+ options.signal?.removeEventListener('abort', abort);
217
+ };
218
+ const finish = (result) => {
219
+ if (settled)
220
+ return;
221
+ settled = true;
222
+ cleanup();
223
+ resolve(result);
224
+ };
225
+ function terminate(code) {
226
+ if (settled || selectedFailure !== null)
227
+ return;
228
+ selectedFailure = code;
229
+ sendSignal('SIGTERM');
230
+ forceKillTimer = setTimeout(() => sendSignal('SIGKILL'), FORCE_KILL_AFTER_MS);
231
+ forceKillTimer.unref?.();
232
+ }
233
+ const accountOutput = (chunk, capture) => {
234
+ if (settled || selectedFailure !== null)
235
+ return;
236
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
237
+ totalOutputBytes += bytes.byteLength;
238
+ if (totalOutputBytes > REFEREE_RUNNER_MAX_OUTPUT_BYTES) {
239
+ terminate('OUTPUT_TOO_LARGE');
240
+ return;
241
+ }
242
+ if (capture) {
243
+ stdoutBytes += bytes.byteLength;
244
+ stdoutChunks.push(bytes);
245
+ }
246
+ };
247
+ child.stdout.on('data', (chunk) => accountOutput(chunk, true));
248
+ child.stderr.on('data', (chunk) => accountOutput(chunk, false));
249
+ child.stdin.on('error', () => {
250
+ // EPIPE is resolved by the child's close/error result, never by ambient
251
+ // error text or timing.
252
+ });
253
+ child.once('error', () => finish(frozenFailure(selectedFailure ?? 'SPAWN_FAILED')));
254
+ child.once('close', (code) => {
255
+ if (selectedFailure !== null) {
256
+ finish(frozenFailure(selectedFailure));
257
+ return;
258
+ }
259
+ if (code !== 0) {
260
+ finish(frozenFailure('NONZERO_EXIT'));
261
+ return;
262
+ }
263
+ finish(decodeRunnerOutput(Buffer.concat(stdoutChunks, stdoutBytes)));
264
+ });
265
+ child.stdin.end(serialized, 'utf8');
266
+ });
267
+ }
268
+ /** Execute a caller-pinned protocol runner without shell or ambient config. */
269
+ export async function runPinnedProtocolRunner(value, rawOptions) {
270
+ const invocation = parseRefereeRunnerInvocation(value);
271
+ const options = parseOptions(rawOptions);
272
+ return executeParsed(invocation, options);
273
+ }
274
+ /** Execute and evaluate one self-test, mapping every runner failure to no-claim. */
275
+ export async function runReferee(value, rawOptions) {
276
+ // Snapshot every caller-controlled field before the first asynchronous edge.
277
+ const invocation = parseRefereeRunnerInvocation(value);
278
+ const options = parseOptions(rawOptions);
279
+ const execution = await executeParsed(invocation, options);
280
+ if (!execution.ok) {
281
+ return createIndeterminateRefereeResult({
282
+ runner_pin: invocation.runner_pin,
283
+ request: invocation.request,
284
+ reason_code: `runner_${execution.code.toLowerCase()}`,
285
+ });
286
+ }
287
+ return evaluateReferee({
288
+ version: REFEREE_EVALUATION_VERSION,
289
+ runner_pin: invocation.runner_pin,
290
+ request: invocation.request,
291
+ output: execution.output,
292
+ });
293
+ }
294
+ //# sourceMappingURL=referee-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referee-runner.js","sourceRoot":"","sources":["../src/referee-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Deterministic, offline EMILIA Referee core.
3
+ *
4
+ * The referee does not discover trust roots, executables, protocols, policy,
5
+ * or network state. It evaluates one caller-pinned runner output as a
6
+ * non-authorizing self-test claim and keeps native verification, relying-party
7
+ * acceptance, binding, evidence composition, provider outcome, and observed
8
+ * effect as independent facts.
9
+ */
10
+ export declare const REFEREE_EVALUATION_VERSION = "EP-REFEREE-EVALUATION-v1";
11
+ export declare const REFEREE_RUNNER_REQUEST_VERSION = "EP-REFEREE-RUNNER-REQUEST-v1";
12
+ export declare const REFEREE_RUNNER_OUTPUT_VERSION = "EP-REFEREE-RUNNER-OUTPUT-v1";
13
+ export declare const REFEREE_RESULT_VERSION = "EP-REFEREE-RESULT-v1";
14
+ export declare const EP_REFEREE_EVALUATION_VERSION = "EP-REFEREE-EVALUATION-v1";
15
+ export declare const EP_REFEREE_RUNNER_REQUEST_VERSION = "EP-REFEREE-RUNNER-REQUEST-v1";
16
+ export declare const EP_REFEREE_RUNNER_OUTPUT_VERSION = "EP-REFEREE-RUNNER-OUTPUT-v1";
17
+ export declare const EP_REFEREE_RESULT_VERSION = "EP-REFEREE-RESULT-v1";
18
+ export type RefereeJson = null | boolean | number | string | RefereeJson[] | {
19
+ [key: string]: RefereeJson;
20
+ };
21
+ export type RefereeStatus = 'CONFORMANT' | 'NON_CONFORMANT' | 'INDETERMINATE';
22
+ export type RefereeExecutionScope = 'local_atomic' | 'federated';
23
+ export type RefereeNativeVerification = 'VERIFIED' | 'REJECTED' | 'INDETERMINATE';
24
+ export type RefereeRpAcceptance = 'ACCEPTED' | 'REJECTED' | 'INDETERMINATE';
25
+ export type RefereeCaidActionMatch = 'MATCH' | 'MISMATCH' | 'INDETERMINATE';
26
+ export type RefereeAecSatisfaction = 'SATISFIED' | 'NOT_SATISFIED' | 'INDETERMINATE' | 'NOT_ASSESSED';
27
+ export type RefereeProviderOutcome = 'COMMITTED' | 'PROVEN_NOT_COMMITTED' | 'INDETERMINATE' | 'NOT_ASSESSED';
28
+ export type RefereeEffectRelation = 'OBSERVED_AS_REQUESTED' | 'DIVERGED' | 'INDETERMINATE' | 'NOT_ASSESSED';
29
+ export interface RefereeRunnerPinV1 {
30
+ readonly executable: string;
31
+ readonly executable_sha256: `sha256:${string}`;
32
+ readonly args: readonly string[];
33
+ }
34
+ /** The only JSON document written to a protocol runner's stdin. */
35
+ export interface RefereeRunnerRequestV1 {
36
+ readonly version: typeof REFEREE_RUNNER_REQUEST_VERSION;
37
+ readonly case_id: string;
38
+ readonly protocol_id: string;
39
+ readonly expected_caid: string;
40
+ readonly expected_action_digest: string;
41
+ readonly aec_required: boolean;
42
+ readonly execution_scope: RefereeExecutionScope;
43
+ readonly input: RefereeJson;
44
+ }
45
+ /** The only accepted JSON document on a protocol runner's stdout. */
46
+ export interface RefereeRunnerOutputV1 {
47
+ readonly version: typeof REFEREE_RUNNER_OUTPUT_VERSION;
48
+ readonly case_id: string;
49
+ readonly protocol_id: string;
50
+ readonly native_verification: RefereeNativeVerification;
51
+ readonly rp_acceptance: RefereeRpAcceptance;
52
+ readonly caid: string | null;
53
+ readonly action_digest: string | null;
54
+ readonly aec_satisfaction: RefereeAecSatisfaction;
55
+ readonly provider_outcome: RefereeProviderOutcome;
56
+ readonly effect_relation: RefereeEffectRelation;
57
+ readonly execution_scope: RefereeExecutionScope;
58
+ }
59
+ export interface RefereeEvaluationInputV1 {
60
+ readonly version: typeof REFEREE_EVALUATION_VERSION;
61
+ readonly runner_pin: RefereeRunnerPinV1;
62
+ readonly request: RefereeRunnerRequestV1;
63
+ readonly output: RefereeRunnerOutputV1;
64
+ }
65
+ export interface RefereeResultDimensionsV1 {
66
+ readonly native_verification: Readonly<{
67
+ value: RefereeNativeVerification;
68
+ }>;
69
+ readonly rp_acceptance: Readonly<{
70
+ value: RefereeRpAcceptance;
71
+ }>;
72
+ readonly caid_action_match: Readonly<{
73
+ value: RefereeCaidActionMatch;
74
+ expected_caid: string;
75
+ observed_caid: string | null;
76
+ expected_action_digest: string;
77
+ observed_action_digest: string | null;
78
+ }>;
79
+ readonly aec_satisfaction: Readonly<{
80
+ required: boolean;
81
+ value: RefereeAecSatisfaction;
82
+ }>;
83
+ readonly provider_outcome: Readonly<{
84
+ value: RefereeProviderOutcome;
85
+ }>;
86
+ readonly effect_relation: Readonly<{
87
+ value: RefereeEffectRelation;
88
+ }>;
89
+ }
90
+ /**
91
+ * A Referee result is evidence about one self-test only. Its fixed false
92
+ * execution_authorizing value is a semantic boundary, not configuration.
93
+ */
94
+ export interface RefereeResultV1 {
95
+ readonly version: typeof REFEREE_RESULT_VERSION;
96
+ readonly status: RefereeStatus;
97
+ readonly claim_scope: 'SELF_TEST';
98
+ readonly execution_authorizing: false;
99
+ readonly case_id: string;
100
+ readonly protocol_id: string;
101
+ readonly runner_pin: Readonly<RefereeRunnerPinV1>;
102
+ readonly execution_scope: RefereeExecutionScope;
103
+ readonly remote_atomicity_claimed: false;
104
+ readonly dimensions: Readonly<RefereeResultDimensionsV1>;
105
+ readonly reason_codes: readonly string[];
106
+ }
107
+ export interface RefereeIndeterminateInputV1 {
108
+ readonly runner_pin: RefereeRunnerPinV1;
109
+ readonly request: RefereeRunnerRequestV1;
110
+ readonly reason_code: string;
111
+ }
112
+ export declare class RefereeValidationError extends TypeError {
113
+ readonly code: string;
114
+ constructor(code: string);
115
+ }
116
+ export declare function parseRefereeRunnerPin(value: unknown): Readonly<RefereeRunnerPinV1>;
117
+ export declare function parseRefereeRunnerRequest(value: unknown): Readonly<RefereeRunnerRequestV1>;
118
+ export declare function parseRefereeRunnerOutput(value: unknown): Readonly<RefereeRunnerOutputV1>;
119
+ export declare function parseRefereeEvaluationInput(value: unknown): Readonly<RefereeEvaluationInputV1>;
120
+ /** Evaluate one already-produced, caller-pinned protocol-runner output. */
121
+ export declare function evaluateReferee(value: unknown): Readonly<RefereeResultV1>;
122
+ /** Convert a bounded runner failure into an explicit no-claim result. */
123
+ export declare function createIndeterminateRefereeResult(value: RefereeIndeterminateInputV1): Readonly<RefereeResultV1>;
124
+ //# sourceMappingURL=referee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referee.d.ts","sourceRoot":"","sources":["../src/referee.ts"],"names":[],"mappings":"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"}