@dsh-enhanced/assistant-verifier 0.1.48 → 0.1.53
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 +92 -1
- package/lib/config.d.ts +8 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +4 -0
- package/lib/config.js.map +1 -1
- package/lib/creation-review-native.d.ts +30 -0
- package/lib/creation-review-native.d.ts.map +1 -0
- package/lib/creation-review-native.js +130 -0
- package/lib/creation-review-native.js.map +1 -0
- package/lib/creation-review-store.d.ts +29 -0
- package/lib/creation-review-store.d.ts.map +1 -0
- package/lib/creation-review-store.js +206 -0
- package/lib/creation-review-store.js.map +1 -0
- package/lib/creation-review.d.ts +162 -0
- package/lib/creation-review.d.ts.map +1 -0
- package/lib/creation-review.js +526 -0
- package/lib/creation-review.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -1
- package/lib/memory-review-native.d.ts +38 -0
- package/lib/memory-review-native.d.ts.map +1 -0
- package/lib/memory-review-native.js +149 -0
- package/lib/memory-review-native.js.map +1 -0
- package/lib/memory-review.d.ts +48 -0
- package/lib/memory-review.d.ts.map +1 -0
- package/lib/memory-review.js +260 -0
- package/lib/memory-review.js.map +1 -0
- package/lib/native-behavior-artifact.d.ts +9 -0
- package/lib/native-behavior-artifact.d.ts.map +1 -0
- package/lib/native-behavior-artifact.js +144 -0
- package/lib/native-behavior-artifact.js.map +1 -0
- package/lib/native-behavior-worker.d.ts +3 -0
- package/lib/native-behavior-worker.d.ts.map +1 -0
- package/lib/native-behavior-worker.js +110 -0
- package/lib/native-behavior-worker.js.map +1 -0
- package/lib/plugin-behavior-config.d.ts +10 -0
- package/lib/plugin-behavior-config.d.ts.map +1 -0
- package/lib/plugin-behavior-config.js +73 -0
- package/lib/plugin-behavior-config.js.map +1 -0
- package/lib/plugin-behavior-runner.d.ts +51 -0
- package/lib/plugin-behavior-runner.d.ts.map +1 -0
- package/lib/plugin-behavior-runner.js +516 -0
- package/lib/plugin-behavior-runner.js.map +1 -0
- package/lib/revision-regression-review.d.ts +38 -0
- package/lib/revision-regression-review.d.ts.map +1 -0
- package/lib/revision-regression-review.js +315 -0
- package/lib/revision-regression-review.js.map +1 -0
- package/lib/revision-review.d.ts +99 -0
- package/lib/revision-review.d.ts.map +1 -0
- package/lib/revision-review.js +275 -0
- package/lib/revision-review.js.map +1 -0
- package/lib/service.d.ts +30 -0
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +139 -1
- package/lib/service.js.map +1 -1
- package/lib/source-review-native.d.ts +9 -0
- package/lib/source-review-native.d.ts.map +1 -1
- package/lib/source-review-native.js +6 -5
- package/lib/source-review-native.js.map +1 -1
- package/lib/source-review-store.d.ts +4 -0
- package/lib/source-review-store.d.ts.map +1 -1
- package/lib/source-review-store.js +65 -12
- package/lib/source-review-store.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +34 -29
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { gunzipSync } from 'node:zlib';
|
|
2
|
+
const MAX_TAR_BYTES = 16 * 1024 * 1024;
|
|
3
|
+
const MAX_FILES = 256;
|
|
4
|
+
const MAX_PATH = 256;
|
|
5
|
+
function fail() { throw new Error('invalid native behavior artifact'); }
|
|
6
|
+
function field(bytes) {
|
|
7
|
+
const end = bytes.indexOf(0);
|
|
8
|
+
const value = end < 0 ? bytes : bytes.subarray(0, end);
|
|
9
|
+
const text = new TextDecoder('utf-8', { fatal: true }).decode(value);
|
|
10
|
+
if (!text.isWellFormed())
|
|
11
|
+
fail();
|
|
12
|
+
return text;
|
|
13
|
+
}
|
|
14
|
+
function octal(bytes) {
|
|
15
|
+
const text = field(bytes).trim();
|
|
16
|
+
if (!/^[0-7]+$/u.test(text))
|
|
17
|
+
fail();
|
|
18
|
+
const value = Number.parseInt(text, 8);
|
|
19
|
+
if (!Number.isSafeInteger(value))
|
|
20
|
+
fail();
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function pax(bytes) {
|
|
24
|
+
const result = Object.create(null);
|
|
25
|
+
for (let at = 0; at < bytes.length;) {
|
|
26
|
+
const space = bytes.indexOf(32, at);
|
|
27
|
+
if (space < 0)
|
|
28
|
+
fail();
|
|
29
|
+
const length = Number(bytes.subarray(at, space).toString('ascii'));
|
|
30
|
+
if (!Number.isSafeInteger(length) || length <= space - at + 2 || at + length > bytes.length
|
|
31
|
+
|| bytes[at + length - 1] !== 10)
|
|
32
|
+
fail();
|
|
33
|
+
const row = new TextDecoder('utf-8', { fatal: true }).decode(bytes.subarray(space + 1, at + length - 1));
|
|
34
|
+
const equals = row.indexOf('=');
|
|
35
|
+
if (equals < 1 || Object.hasOwn(result, row.slice(0, equals)))
|
|
36
|
+
fail();
|
|
37
|
+
result[row.slice(0, equals)] = row.slice(equals + 1);
|
|
38
|
+
at += length;
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function safePath(name) {
|
|
43
|
+
return name.length <= MAX_PATH && name.startsWith('package/')
|
|
44
|
+
&& name.slice(8).split('/').every(part => /^[A-Za-z0-9._-]+$/u.test(part) && part !== '.' && part !== '..');
|
|
45
|
+
}
|
|
46
|
+
/** Parse only regular UTF-8 npm package members. The runner stages these exact bytes; no archive links enter its workspace. */
|
|
47
|
+
export function nativeBehaviorFiles(artifact) {
|
|
48
|
+
let tar;
|
|
49
|
+
try {
|
|
50
|
+
tar = gunzipSync(artifact, { maxOutputLength: MAX_TAR_BYTES });
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
fail();
|
|
54
|
+
}
|
|
55
|
+
let at = 0;
|
|
56
|
+
let local = {};
|
|
57
|
+
let global = {};
|
|
58
|
+
let members = 0;
|
|
59
|
+
const entries = new Map();
|
|
60
|
+
const seen = new Set();
|
|
61
|
+
while (at + 512 <= tar.length) {
|
|
62
|
+
const header = tar.subarray(at, at + 512);
|
|
63
|
+
if (header.every(byte => byte === 0))
|
|
64
|
+
break;
|
|
65
|
+
if (++members > MAX_FILES)
|
|
66
|
+
fail();
|
|
67
|
+
let checksum = 0;
|
|
68
|
+
for (let i = 0; i < 512; i++)
|
|
69
|
+
checksum += i >= 148 && i < 156 ? 32 : header[i];
|
|
70
|
+
if (checksum !== octal(header.subarray(148, 156)))
|
|
71
|
+
fail();
|
|
72
|
+
const size = octal(header.subarray(124, 136));
|
|
73
|
+
const end = at + 512 + size;
|
|
74
|
+
if (!Number.isSafeInteger(end) || end > tar.length)
|
|
75
|
+
fail();
|
|
76
|
+
const kind = String.fromCharCode(header[156] || 48);
|
|
77
|
+
if (kind === 'g' || kind === 'x') {
|
|
78
|
+
if (size > 1_048_576)
|
|
79
|
+
fail();
|
|
80
|
+
const values = pax(tar.subarray(at + 512, end));
|
|
81
|
+
if (kind === 'g')
|
|
82
|
+
global = { ...global, ...values };
|
|
83
|
+
else
|
|
84
|
+
local = values;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const attrs = { ...global, ...local };
|
|
88
|
+
if (Object.keys(attrs).some(key => !['path', 'mtime', 'atime', 'ctime', 'comment', 'uid', 'gid', 'uname', 'gname', 'mode'].includes(key)))
|
|
89
|
+
fail();
|
|
90
|
+
const prefix = field(header.subarray(345, 500));
|
|
91
|
+
const headerName = field(header.subarray(0, 100));
|
|
92
|
+
const rawName = attrs.path ?? (prefix ? `${prefix}/${headerName}` : headerName);
|
|
93
|
+
const name = rawName.endsWith('/') ? rawName.slice(0, -1) : rawName;
|
|
94
|
+
if ((name !== 'package' && !safePath(name)) || seen.has(name))
|
|
95
|
+
fail();
|
|
96
|
+
seen.add(name);
|
|
97
|
+
if (kind === '0' || kind === '7') {
|
|
98
|
+
if (name === 'package')
|
|
99
|
+
fail();
|
|
100
|
+
entries.set(name, tar.subarray(at + 512, end));
|
|
101
|
+
}
|
|
102
|
+
else if (kind !== '5')
|
|
103
|
+
fail();
|
|
104
|
+
local = {};
|
|
105
|
+
}
|
|
106
|
+
at = Math.ceil(end / 512) * 512;
|
|
107
|
+
}
|
|
108
|
+
if (at + 1024 > tar.length || !tar.subarray(at).every(byte => byte === 0))
|
|
109
|
+
fail();
|
|
110
|
+
const manifestBytes = entries.get('package/package.json');
|
|
111
|
+
if (!manifestBytes)
|
|
112
|
+
fail();
|
|
113
|
+
let manifest;
|
|
114
|
+
try {
|
|
115
|
+
manifest = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(manifestBytes));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
fail();
|
|
119
|
+
}
|
|
120
|
+
if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)
|
|
121
|
+
|| typeof manifest.main !== 'string')
|
|
122
|
+
fail();
|
|
123
|
+
const main = manifest.main;
|
|
124
|
+
if (!/^\.\/lib\/[A-Za-z0-9._/-]+\.js$/u.test(main) || main.split('/').includes('..'))
|
|
125
|
+
fail();
|
|
126
|
+
const entry = `package/${main.slice(2)}`;
|
|
127
|
+
if (!entries.has(entry))
|
|
128
|
+
fail();
|
|
129
|
+
const files = [];
|
|
130
|
+
for (const [path, bytes] of entries) {
|
|
131
|
+
if (bytes.length > 1024 * 1024)
|
|
132
|
+
fail();
|
|
133
|
+
let content;
|
|
134
|
+
try {
|
|
135
|
+
content = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
fail();
|
|
139
|
+
}
|
|
140
|
+
files.push({ path, content });
|
|
141
|
+
}
|
|
142
|
+
return { entry, files };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=native-behavior-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-behavior-artifact.js","sourceRoot":"","sources":["../src/native-behavior-artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-behavior-worker.d.ts","sourceRoot":"","sources":["../src/native-behavior-worker.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,eAAO,MAAM,sBAAsB,QA2GlC,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/** Fixed source passed to the native Seatbelt runner. Candidate files are staged read-only by the trusted runner. */
|
|
2
|
+
export const NATIVE_BEHAVIOR_SOURCE = String.raw `
|
|
3
|
+
import { createHash } from 'node:crypto'
|
|
4
|
+
import { createRequire, registerHooks } from 'node:module'
|
|
5
|
+
import { readdirSync, writeSync } from 'node:fs'
|
|
6
|
+
import { join } from 'node:path'
|
|
7
|
+
import { pathToFileURL } from 'node:url'
|
|
8
|
+
|
|
9
|
+
const stringify = JSON.stringify.bind(JSON)
|
|
10
|
+
const createNull = Object.create.bind(Object)
|
|
11
|
+
const assign = Object.assign.bind(Object)
|
|
12
|
+
const digest = value => createHash('sha256').update(value).digest('hex')
|
|
13
|
+
const safeTool = /^[a-z][a-z0-9_-]{0,95}$/
|
|
14
|
+
let frame
|
|
15
|
+
let nonce
|
|
16
|
+
let artifactSha256
|
|
17
|
+
let operationDigest
|
|
18
|
+
let fiber
|
|
19
|
+
let ctx
|
|
20
|
+
let disposed = true
|
|
21
|
+
try {
|
|
22
|
+
const chunks = []
|
|
23
|
+
let bytes = 0
|
|
24
|
+
for await (const chunk of process.stdin) {
|
|
25
|
+
bytes += chunk.length
|
|
26
|
+
if (bytes > 65536) throw new Error('candidate-input-too-large')
|
|
27
|
+
chunks.push(chunk)
|
|
28
|
+
}
|
|
29
|
+
const request = JSON.parse(Buffer.concat(chunks).toString('utf8'))
|
|
30
|
+
if (!request || request.schemaVersion !== 1 || typeof request.nonce !== 'string'
|
|
31
|
+
|| !/^[a-f0-9]{64}$/.test(request.nonce) || typeof request.artifactSha256 !== 'string'
|
|
32
|
+
|| !/^[a-f0-9]{64}$/.test(request.artifactSha256) || typeof request.entry !== 'string'
|
|
33
|
+
|| !/^package\/lib\/[A-Za-z0-9._/-]+\.js$/.test(request.entry)
|
|
34
|
+
|| request.entry.split('/').includes('..') || typeof request.modulesPath !== 'string'
|
|
35
|
+
|| !request.modulesPath.startsWith('/') || !request.operation || !['discover', 'invoke'].includes(request.operation.kind))
|
|
36
|
+
throw new Error('candidate-input-invalid')
|
|
37
|
+
nonce = request.nonce
|
|
38
|
+
artifactSha256 = request.artifactSha256
|
|
39
|
+
operationDigest = digest(stringify(request.operation))
|
|
40
|
+
const resolver = createRequire(pathToFileURL(join(request.modulesPath, '__native_resolver__.cjs')))
|
|
41
|
+
const approved = new Map()
|
|
42
|
+
for (const entry of readdirSync(request.modulesPath)) {
|
|
43
|
+
if (entry.startsWith('.')) continue
|
|
44
|
+
const names = entry.startsWith('@')
|
|
45
|
+
? readdirSync(join(request.modulesPath, entry)).map(name => entry + '/' + name) : [entry]
|
|
46
|
+
for (const name of names) {
|
|
47
|
+
try { approved.set(name, resolver.resolve(name)) } catch { /* package has no runtime entry */ }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const candidateRoot = pathToFileURL(join(process.cwd(), 'package') + '/').href
|
|
51
|
+
registerHooks({ resolve(specifier, context, nextResolve) {
|
|
52
|
+
if (context.parentURL?.startsWith(candidateRoot)
|
|
53
|
+
&& !specifier.startsWith('node:') && !specifier.startsWith('.')
|
|
54
|
+
&& !specifier.startsWith('/') && !specifier.startsWith('file:')) {
|
|
55
|
+
const target = approved.get(specifier)
|
|
56
|
+
if (!target) throw new Error('candidate-bare-import-not-approved')
|
|
57
|
+
return nextResolve(pathToFileURL(target).href, context)
|
|
58
|
+
}
|
|
59
|
+
return nextResolve(specifier, context)
|
|
60
|
+
} })
|
|
61
|
+
const { Context } = await import(pathToFileURL(approved.get('@deepseek-ai/cordis')).href)
|
|
62
|
+
const { default: SystemPrompt } = await import(pathToFileURL(approved.get('@deepseek-ai/dsh-system-prompt')).href)
|
|
63
|
+
const { default: ToolRuntime } = await import(pathToFileURL(approved.get('@deepseek-ai/dsh-tools')).href)
|
|
64
|
+
ctx = new Context()
|
|
65
|
+
await ctx.plugin(SystemPrompt, { includeHarnessIdentity: false, includeRuntimeContext: false, personaPrefix: '' })
|
|
66
|
+
await ctx.plugin(ToolRuntime, { mode: 'native' })
|
|
67
|
+
const module = await import(pathToFileURL(join(process.cwd(), request.entry)).href)
|
|
68
|
+
fiber = ctx.plugin(module.default ?? module)
|
|
69
|
+
let timer
|
|
70
|
+
try {
|
|
71
|
+
await Promise.race([fiber, new Promise((_, reject) => {
|
|
72
|
+
timer = setTimeout(() => reject(new Error('plugin-activation-timeout')), 5000)
|
|
73
|
+
})])
|
|
74
|
+
} finally { clearTimeout(timer) }
|
|
75
|
+
if (fiber.state !== 2) throw new Error('plugin-fiber-not-active')
|
|
76
|
+
const schemas = (await ctx.systemPrompt.assemble({})).tools
|
|
77
|
+
if (!Array.isArray(schemas) || schemas.length < 1 || schemas.length > 64) throw new Error('invalid-tool-schemas')
|
|
78
|
+
const names = new Set()
|
|
79
|
+
for (const schema of schemas) {
|
|
80
|
+
if (!schema || !safeTool.test(schema.name) || names.has(schema.name)) throw new Error('invalid-tool-schemas')
|
|
81
|
+
names.add(schema.name)
|
|
82
|
+
}
|
|
83
|
+
const schemaDigest = digest(stringify(schemas))
|
|
84
|
+
if (request.operation.kind === 'invoke' && request.operation.schemaDigest !== schemaDigest)
|
|
85
|
+
throw new Error('schema-digest-changed')
|
|
86
|
+
if (request.operation.kind === 'discover') frame = { status: 'result', schemaDigest, schemas }
|
|
87
|
+
else {
|
|
88
|
+
const calls = []
|
|
89
|
+
for (const call of request.operation.calls) {
|
|
90
|
+
if (!names.has(call.toolName)) throw new Error('unknown-invoked-tool')
|
|
91
|
+
const result = await ctx.tools.execute({ callId: call.id, name: call.toolName,
|
|
92
|
+
arguments: call.arguments, signal: new AbortController().signal })
|
|
93
|
+
calls.push({ id: call.id, toolName: call.toolName, result })
|
|
94
|
+
}
|
|
95
|
+
frame = { status: 'result', schemaDigest, calls }
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
frame = { status: 'unknown', reason: error instanceof Error ? error.message.slice(0, 128) : 'candidate-error' }
|
|
99
|
+
} finally {
|
|
100
|
+
try { if (fiber) await fiber.dispose() } catch { disposed = false }
|
|
101
|
+
try { if (ctx) await ctx.fiber.dispose() } catch { disposed = false }
|
|
102
|
+
}
|
|
103
|
+
if (!disposed) frame = { status: 'unknown', reason: 'plugin-disposal-unconfirmed' }
|
|
104
|
+
try {
|
|
105
|
+
const output = stringify(assign(createNull(null), { wireVersion: 1, nonce, artifactSha256, operationDigest }, frame))
|
|
106
|
+
if (Buffer.byteLength(output) > 60000) throw new Error('candidate-output-too-large')
|
|
107
|
+
writeSync(1, output + '\n')
|
|
108
|
+
} catch { process.exitCode = 1 }
|
|
109
|
+
`;
|
|
110
|
+
//# sourceMappingURL=native-behavior-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-behavior-worker.js","sourceRoot":"","sources":["../src/native-behavior-worker.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2G/C,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IsolatedVerifierRunnerConfig, NativeMacRuntime, NativeMacVerifierRunnerConfig } from '@dsh-enhanced/assistant-isolation';
|
|
2
|
+
export declare const NATIVE_BEHAVIOR_BOUNDARY = "macos-seatbelt-single-process-v1";
|
|
3
|
+
export type PluginBehaviorRunnerConfig = Omit<IsolatedVerifierRunnerConfig, 'command'> | Omit<NativeMacVerifierRunnerConfig, 'source'>;
|
|
4
|
+
export type PluginBehaviorDeploymentConfig = Omit<IsolatedVerifierRunnerConfig, 'command' | 'authorityDigest'> | Omit<NativeMacVerifierRunnerConfig, 'source' | 'authorityDigest'>;
|
|
5
|
+
export declare function behaviorNativeRuntimeDigest(runtime: NativeMacRuntime): string;
|
|
6
|
+
/** Synchronous shape validation; the native runner rehashes approved runtime bytes before each dispatch. */
|
|
7
|
+
export declare function validatePluginBehaviorRunnerConfig(value: unknown): PluginBehaviorRunnerConfig;
|
|
8
|
+
/** Deployment values omit the digest, which the authenticated owner binds at construction. */
|
|
9
|
+
export declare function validatePluginBehaviorDeploymentConfig(value: unknown): PluginBehaviorDeploymentConfig;
|
|
10
|
+
//# sourceMappingURL=plugin-behavior-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-behavior-config.d.ts","sourceRoot":"","sources":["../src/plugin-behavior-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,gBAAgB,EAC1D,6BAA6B,EAAE,MAAM,mCAAmC,CAAA;AAE1E,eAAO,MAAM,wBAAwB,qCAAqC,CAAA;AAC1E,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,4BAA4B,EAAE,SAAS,CAAC,GAClF,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAA;AACjD,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,4BAA4B,EAAE,SAAS,GAAG,iBAAiB,CAAC,GAC1G,IAAI,CAAC,6BAA6B,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAA;AAoCrE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAG7E;AAED,4GAA4G;AAC5G,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CAmB7F;AAED,8FAA8F;AAC9F,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CAQrG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, resolve, sep } from 'node:path';
|
|
3
|
+
export const NATIVE_BEHAVIOR_BOUNDARY = 'macos-seatbelt-single-process-v1';
|
|
4
|
+
function exactKeys(value, required, optional = []) {
|
|
5
|
+
return !!value && typeof value === 'object' && !Array.isArray(value)
|
|
6
|
+
&& Object.getPrototypeOf(value) === Object.prototype
|
|
7
|
+
&& required.every(key => Object.hasOwn(value, key))
|
|
8
|
+
&& Object.keys(value).every(key => required.includes(key) || optional.includes(key))
|
|
9
|
+
&& Object.values(Object.getOwnPropertyDescriptors(value)).every(item => item.enumerable && 'value' in item);
|
|
10
|
+
}
|
|
11
|
+
function positive(value, max) { return Number.isSafeInteger(value) && Number(value) >= 1 && Number(value) <= max; }
|
|
12
|
+
function absolute(value) {
|
|
13
|
+
return typeof value === 'string' && isAbsolute(value) && resolve(value) === value && !value.includes('\0');
|
|
14
|
+
}
|
|
15
|
+
function nativeRuntime(value) {
|
|
16
|
+
if (!exactKeys(value, ['schemaVersion', 'platform', 'nodePath', 'nodeSha256', 'roots', 'modulesPath', 'versions'])
|
|
17
|
+
|| value.schemaVersion !== 1 || value.platform !== `darwin-${process.arch}`
|
|
18
|
+
|| !absolute(value.nodePath) || !absolute(value.modulesPath)
|
|
19
|
+
|| typeof value.nodeSha256 !== 'string' || !/^[a-f0-9]{64}$/u.test(value.nodeSha256)
|
|
20
|
+
|| !Array.isArray(value.roots) || value.roots.length < 1 || value.roots.length > 32
|
|
21
|
+
|| !exactKeys(value.versions, ['node', 'typescript', 'cordis', 'tools', 'systemPrompt'])
|
|
22
|
+
|| Object.values(value.versions).some(version => typeof version !== 'string' || version.length < 1 || version.length > 128)) {
|
|
23
|
+
throw new Error('invalid native plugin behavior runtime');
|
|
24
|
+
}
|
|
25
|
+
const roots = value.roots;
|
|
26
|
+
if (roots.some(root => !exactKeys(root, ['path', 'dev', 'ino', 'sha256']) || !absolute(root.path)
|
|
27
|
+
|| root.path === '/' || !Number.isSafeInteger(root.dev) || Number(root.dev) < 0
|
|
28
|
+
|| !Number.isSafeInteger(root.ino) || Number(root.ino) < 0
|
|
29
|
+
|| typeof root.sha256 !== 'string' || !/^[a-f0-9]{64}$/u.test(root.sha256))
|
|
30
|
+
|| new Set(roots.map(root => root.path)).size !== roots.length
|
|
31
|
+
|| !roots.some(root => value.nodePath.startsWith(root.path + sep))
|
|
32
|
+
|| !roots.some(root => value.modulesPath === root.path
|
|
33
|
+
|| value.modulesPath.startsWith(root.path + sep))) {
|
|
34
|
+
throw new Error('invalid native plugin behavior runtime');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function behaviorNativeRuntimeDigest(runtime) {
|
|
38
|
+
nativeRuntime(runtime);
|
|
39
|
+
return createHash('sha256').update(JSON.stringify(runtime)).digest('hex');
|
|
40
|
+
}
|
|
41
|
+
/** Synchronous shape validation; the native runner rehashes approved runtime bytes before each dispatch. */
|
|
42
|
+
export function validatePluginBehaviorRunnerConfig(value) {
|
|
43
|
+
const common = ['stateRoot', 'authorityDigest', 'expiresAt', 'maxRuns', 'maxTotalDurationMs', 'maxDurationMs', 'maxOutputBytes'];
|
|
44
|
+
const native = !!value && typeof value === 'object'
|
|
45
|
+
&& Object.getOwnPropertyDescriptor(value, 'backend')?.value === 'macos-seatbelt';
|
|
46
|
+
if (!exactKeys(value, [...common, ...(native ? ['backend', 'runtime'] : ['image', 'dockerPath'])], native ? [] : ['socketPath'])
|
|
47
|
+
|| !absolute(value.stateRoot) || typeof value.authorityDigest !== 'string' || !/^[a-f0-9]{64}$/u.test(value.authorityDigest)
|
|
48
|
+
|| !positive(value.expiresAt, 8_640_000_000_000_000) || !positive(value.maxRuns, 10_000)
|
|
49
|
+
|| !positive(value.maxTotalDurationMs, 86_400_000) || !positive(value.maxDurationMs, 300_000)
|
|
50
|
+
|| Number(value.maxDurationMs) > Number(value.maxTotalDurationMs)
|
|
51
|
+
|| !positive(value.maxOutputBytes, 262_144) || Number(value.maxOutputBytes) < 65_536) {
|
|
52
|
+
throw new Error('invalid plugin behavior runner config');
|
|
53
|
+
}
|
|
54
|
+
if (native)
|
|
55
|
+
nativeRuntime(value.runtime);
|
|
56
|
+
else if (typeof value.image !== 'string' || !/^sha256:[a-f0-9]{64}$/u.test(value.image)
|
|
57
|
+
|| !absolute(value.dockerPath) || Object.hasOwn(value, 'socketPath')
|
|
58
|
+
&& (!absolute(value.socketPath) || /[\p{Cc},]/u.test(value.socketPath) || value.socketPath.includes('://'))) {
|
|
59
|
+
throw new Error('invalid plugin behavior Docker config');
|
|
60
|
+
}
|
|
61
|
+
return structuredClone(value);
|
|
62
|
+
}
|
|
63
|
+
/** Deployment values omit the digest, which the authenticated owner binds at construction. */
|
|
64
|
+
export function validatePluginBehaviorDeploymentConfig(value) {
|
|
65
|
+
if (!value || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype
|
|
66
|
+
|| Object.hasOwn(value, 'authorityDigest')
|
|
67
|
+
|| !Object.values(Object.getOwnPropertyDescriptors(value)).every(item => item.enumerable && 'value' in item))
|
|
68
|
+
throw new Error('invalid plugin behavior deployment config');
|
|
69
|
+
const checked = validatePluginBehaviorRunnerConfig({ ...value, authorityDigest: '0'.repeat(64) });
|
|
70
|
+
const { authorityDigest: _authorityDigest, ...deployment } = checked;
|
|
71
|
+
return deployment;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=plugin-behavior-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-behavior-config.js","sourceRoot":"","sources":["../src/plugin-behavior-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { NATIVE_BEHAVIOR_BOUNDARY, type PluginBehaviorRunnerConfig } from './plugin-behavior-config.js';
|
|
2
|
+
export { NATIVE_BEHAVIOR_BOUNDARY, validatePluginBehaviorRunnerConfig, validatePluginBehaviorDeploymentConfig } from './plugin-behavior-config.js';
|
|
3
|
+
export type { PluginBehaviorRunnerConfig, PluginBehaviorDeploymentConfig } from './plugin-behavior-config.js';
|
|
4
|
+
declare const BOUNDARY = "process-seccomp-v1";
|
|
5
|
+
export type PluginBehaviorOperation = {
|
|
6
|
+
readonly kind: 'discover';
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'invoke';
|
|
9
|
+
readonly schemaDigest: string;
|
|
10
|
+
readonly calls: readonly {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly toolName: string;
|
|
13
|
+
readonly arguments: unknown;
|
|
14
|
+
}[];
|
|
15
|
+
};
|
|
16
|
+
export interface PluginBehaviorObservation {
|
|
17
|
+
readonly status: 'observed' | 'unknown';
|
|
18
|
+
readonly quiescent: boolean;
|
|
19
|
+
readonly jobId?: string;
|
|
20
|
+
readonly artifactSha256: string;
|
|
21
|
+
readonly boundary?: typeof BOUNDARY | typeof NATIVE_BEHAVIOR_BOUNDARY;
|
|
22
|
+
readonly runtimeDigest?: string;
|
|
23
|
+
readonly reason?: string;
|
|
24
|
+
readonly environment?: Readonly<{
|
|
25
|
+
node: string;
|
|
26
|
+
cordis: string;
|
|
27
|
+
tools: string;
|
|
28
|
+
systemPrompt: string;
|
|
29
|
+
}>;
|
|
30
|
+
readonly schemaDigest?: string;
|
|
31
|
+
readonly schemas?: readonly unknown[];
|
|
32
|
+
readonly calls?: readonly {
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly toolName: string;
|
|
35
|
+
readonly result: unknown;
|
|
36
|
+
}[];
|
|
37
|
+
}
|
|
38
|
+
export interface PluginBehaviorRunnerInput {
|
|
39
|
+
readonly key: string;
|
|
40
|
+
readonly artifact: Buffer;
|
|
41
|
+
readonly operation: PluginBehaviorOperation;
|
|
42
|
+
readonly signal: AbortSignal;
|
|
43
|
+
}
|
|
44
|
+
/** Host-only behavior observation. The candidate and worker receive no oracle or promotion authority. */
|
|
45
|
+
export declare class PluginBehaviorRunner {
|
|
46
|
+
#private;
|
|
47
|
+
constructor(input: PluginBehaviorRunnerConfig);
|
|
48
|
+
run(input: PluginBehaviorRunnerInput): Promise<PluginBehaviorObservation>;
|
|
49
|
+
close(): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=plugin-behavior-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-behavior-runner.d.ts","sourceRoot":"","sources":["../src/plugin-behavior-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+B,wBAAwB,EAC5D,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,wBAAwB,EAAE,kCAAkC,EAAE,sCAAsC,EAAE,MAAM,6BAA6B,CAAA;AAClJ,YAAY,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAA;AAW7G,QAAA,MAAM,QAAQ,uBAAuB,CAAA;AACrC,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS;QACnF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAC5E,EAAE,CAAA;CAAE,CAAA;AAEP,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ,GAAG,OAAO,wBAAwB,CAAA;IACrE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACzG;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAwED,yGAAyG;AACzG,qBAAa,oBAAoB;;gBAOnB,KAAK,EAAE,0BAA0B;IAavC,GAAG,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAsF/E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CACvB"}
|