@corenel/harness 0.12.0 → 0.13.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/core/fileChanges.d.ts +18 -0
- package/dist/core/fileChanges.d.ts.map +1 -0
- package/dist/core/fileChanges.js +85 -0
- package/dist/core/fileChanges.js.map +1 -0
- package/dist/core/loop.d.ts +10 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +26 -1
- package/dist/core/loop.js.map +1 -1
- package/dist/core/spawn.d.ts +4 -0
- package/dist/core/spawn.d.ts.map +1 -1
- package/dist/core/spawn.js +11 -4
- package/dist/core/spawn.js.map +1 -1
- package/dist/dag/executeNode.d.ts +5 -0
- package/dist/dag/executeNode.d.ts.map +1 -1
- package/dist/dag/executeNode.js +5 -1
- package/dist/dag/executeNode.js.map +1 -1
- package/dist/guardrail/serialize.d.ts.map +1 -1
- package/dist/guardrail/serialize.js +4 -0
- package/dist/guardrail/serialize.js.map +1 -1
- package/dist/guardrail/validate.d.ts.map +1 -1
- package/dist/guardrail/validate.js +3 -1
- package/dist/guardrail/validate.js.map +1 -1
- package/dist/orchestrator/record.d.ts +94 -5
- package/dist/orchestrator/record.d.ts.map +1 -1
- package/dist/orchestrator/record.js +186 -5
- package/dist/orchestrator/record.js.map +1 -1
- package/dist/orchestrator/sidecarTools.d.ts +5 -0
- package/dist/orchestrator/sidecarTools.d.ts.map +1 -1
- package/dist/orchestrator/sidecarTools.js +53 -15
- package/dist/orchestrator/sidecarTools.js.map +1 -1
- package/dist/prompts/library/defaults.generated.js +2 -2
- package/dist/prompts/library/defaults.generated.js.map +1 -1
- package/dist/sidecar/deviceKeys.d.ts +75 -0
- package/dist/sidecar/deviceKeys.d.ts.map +1 -0
- package/dist/sidecar/deviceKeys.js +142 -0
- package/dist/sidecar/deviceKeys.js.map +1 -0
- package/dist/sidecar/host.d.ts +144 -24
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +306 -16
- package/dist/sidecar/host.js.map +1 -1
- package/dist/sidecar/identity.d.ts +41 -17
- package/dist/sidecar/identity.d.ts.map +1 -1
- package/dist/sidecar/identity.js +10 -21
- package/dist/sidecar/identity.js.map +1 -1
- package/dist/sidecar/server.d.ts +197 -28
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +690 -109
- package/dist/sidecar/server.js.map +1 -1
- package/dist/sidecar/testing.d.ts +97 -0
- package/dist/sidecar/testing.d.ts.map +1 -0
- package/dist/sidecar/testing.js +259 -0
- package/dist/sidecar/testing.js.map +1 -0
- package/dist/sidecar/wsChannel.d.ts +8 -1
- package/dist/sidecar/wsChannel.d.ts.map +1 -1
- package/dist/sidecar/wsChannel.js +17 -1
- package/dist/sidecar/wsChannel.js.map +1 -1
- package/dist/tools/callAgent.d.ts.map +1 -1
- package/dist/tools/callAgent.js +33 -13
- package/dist/tools/callAgent.js.map +1 -1
- package/dist/tools/orchestration.js +1 -1
- package/dist/tools/orchestration.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { SidecarChannel, SidecarMsg } from '@corenel/protocol';
|
|
2
|
+
import type { SidecarDevices, SidecarDeviceRecord } from './server';
|
|
3
|
+
import type { ExplainingIdentityVerifier, SidecarAdmission } from './identity';
|
|
4
|
+
import { type KeySigner } from './deviceKeys';
|
|
5
|
+
type Hello = Extract<SidecarMsg, {
|
|
6
|
+
t: 'hello';
|
|
7
|
+
}>;
|
|
8
|
+
/** An in-memory `SidecarDevices` (the node daemon's devices.json, minus the
|
|
9
|
+
* file): codes are hash-keyed and single-use, revocations fan out. */
|
|
10
|
+
export declare function memoryDevices(): {
|
|
11
|
+
port: SidecarDevices;
|
|
12
|
+
devices: Map<string, SidecarDeviceRecord>;
|
|
13
|
+
codes: Map<string, number>;
|
|
14
|
+
add(id: string, key: KeySigner, extra?: Partial<SidecarDeviceRecord>): void;
|
|
15
|
+
};
|
|
16
|
+
export interface TestPairing {
|
|
17
|
+
/** Spread into `SidecarServerOptions`. */
|
|
18
|
+
server: {
|
|
19
|
+
devices: SidecarDevices;
|
|
20
|
+
sidecarKey: KeySigner;
|
|
21
|
+
};
|
|
22
|
+
/** Spread into `SidecarHostOptions`. */
|
|
23
|
+
host: {
|
|
24
|
+
device: {
|
|
25
|
+
id: string;
|
|
26
|
+
sidecarJkt: string;
|
|
27
|
+
};
|
|
28
|
+
deviceKey: KeySigner;
|
|
29
|
+
};
|
|
30
|
+
/** The recorded device's id and key. */
|
|
31
|
+
deviceId: string;
|
|
32
|
+
clientKey: KeySigner;
|
|
33
|
+
/** The store behind `server.devices`. */
|
|
34
|
+
store: ReturnType<typeof memoryDevices>;
|
|
35
|
+
/** Wrap the SERVER's end of a channel so a hand-driven client that sends a
|
|
36
|
+
* bare `hello` (no `device`/`enroll`) is paired as this test device: the
|
|
37
|
+
* wrapper adds the device and a nonce to that hello, answers the daemon's
|
|
38
|
+
* `server-proof` itself with this device's client proof, and never shows
|
|
39
|
+
* the proof exchange to the client. A hello that already carries a
|
|
40
|
+
* credential (a real `SidecarHost`, or a test naming another device)
|
|
41
|
+
* passes through untouched and gets the real exchange. */
|
|
42
|
+
wrap(ch: SidecarChannel): SidecarChannel;
|
|
43
|
+
/** Wrap a `SidecarHost`'s end of a channel whose peer is a SCRIPTED fake
|
|
44
|
+
* server (one that answers `hello` with a `welcome` and knows nothing of
|
|
45
|
+
* keys). The wrapper plays the daemon's side of the proof exchange as this
|
|
46
|
+
* pairing's sidecar key: it holds the fake's welcome back, hands the host a
|
|
47
|
+
* genuine `server-proof`, swallows the host's `client-proof`, then delivers
|
|
48
|
+
* the welcome. Against a real `SidecarServer` it is transparent: a real
|
|
49
|
+
* `server-proof` passes straight through and so does the host's answer. */
|
|
50
|
+
wrapHost(ch: SidecarChannel): SidecarChannel;
|
|
51
|
+
}
|
|
52
|
+
/** A daemon key, a device key, and a store in which that device is paired. */
|
|
53
|
+
export declare function makeTestPairing(opts?: {
|
|
54
|
+
deviceId?: string;
|
|
55
|
+
}): Promise<TestPairing>;
|
|
56
|
+
/** The assertion a test client answers every identity challenge with, and
|
|
57
|
+
* the user `testIdentity`'s verifier maps it to. */
|
|
58
|
+
export declare const TEST_ASSERTION = "test-assertion";
|
|
59
|
+
export declare const TEST_USER = "user_test";
|
|
60
|
+
/** For a daemon that REQUIRES identity (the node daemon's `startSidecar`,
|
|
61
|
+
* spec 2026-09-29-device-enrollment-design Phase 2): a verifier that accepts
|
|
62
|
+
* exactly TEST_ASSERTION as TEST_USER, and a policy that admits exactly that
|
|
63
|
+
* user. `pairedClient` answers challenges with TEST_ASSERTION. Test support
|
|
64
|
+
* only; it verifies nothing real. */
|
|
65
|
+
export declare function testIdentity(): {
|
|
66
|
+
identity: ExplainingIdentityVerifier;
|
|
67
|
+
admission: SidecarAdmission;
|
|
68
|
+
};
|
|
69
|
+
/** The `hello` a paired client sends, before the proof exchange. */
|
|
70
|
+
export declare function pairedHelloMsg(p: TestPairing, extra?: Partial<Hello>): Hello;
|
|
71
|
+
/**
|
|
72
|
+
* Drive a paired hello by hand: send it, wait for the daemon's `server-proof`
|
|
73
|
+
* among `received` (the messages the test collects from its end of the
|
|
74
|
+
* channel), and answer with this device's client proof. Resolves once the
|
|
75
|
+
* proof is sent (the welcome follows on its own), or once a `denied` arrives
|
|
76
|
+
* instead. The server proof is not checked here -- tests of that check live
|
|
77
|
+
* with the host.
|
|
78
|
+
*/
|
|
79
|
+
export declare function pairedHello(p: TestPairing, send: (m: SidecarMsg) => void, received: readonly SidecarMsg[], extra?: Partial<Hello>): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* A paired client for a test that talks over a raw socket: send `hello`
|
|
82
|
+
* first, then pass every parsed incoming message to `answer`; it resolves with
|
|
83
|
+
* the `client-proof` to send back when the message is the daemon's
|
|
84
|
+
* `server-proof`, the `identity-assert` (TEST_ASSERTION) for an
|
|
85
|
+
* `identity-challenge`, and null for anything else.
|
|
86
|
+
*/
|
|
87
|
+
export declare function pairedClient(p: TestPairing, extra?: Partial<Hello>): {
|
|
88
|
+
hello: Hello;
|
|
89
|
+
answer: (m: SidecarMsg) => Promise<SidecarMsg | null>;
|
|
90
|
+
};
|
|
91
|
+
/** `pairedHello`, then wait until the welcome (or a denial) has arrived. */
|
|
92
|
+
export declare function pairedWelcome(p: TestPairing, send: (m: SidecarMsg) => void, received: readonly SidecarMsg[], extra?: Partial<Hello>): Promise<void>;
|
|
93
|
+
/** Wait until `received` holds a `welcome` or a `denied`: the end of a
|
|
94
|
+
* pairing driven through `wrap`, which completes asynchronously. */
|
|
95
|
+
export declare function untilWelcome(received: readonly SidecarMsg[]): Promise<void>;
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../sidecar/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { SIDECAR_PROTOCOL } from '@corenel/protocol';
|
|
2
|
+
import { generatePrivateJwk, signerFromPrivateJwk, randomToken, clientProofPayload, serverProofPayload, bytesToB64url, } from './deviceKeys.js';
|
|
3
|
+
/** An in-memory `SidecarDevices` (the node daemon's devices.json, minus the
|
|
4
|
+
* file): codes are hash-keyed and single-use, revocations fan out. */
|
|
5
|
+
export function memoryDevices() {
|
|
6
|
+
const devices = new Map();
|
|
7
|
+
const codes = new Map(); // hash -> expiresAt
|
|
8
|
+
const subs = new Set();
|
|
9
|
+
const port = {
|
|
10
|
+
async get(id) { return devices.get(id) ?? null; },
|
|
11
|
+
async enroll(codeHash, device, now) {
|
|
12
|
+
const exp = codes.get(codeHash);
|
|
13
|
+
if (exp === undefined || exp <= now)
|
|
14
|
+
return false;
|
|
15
|
+
codes.delete(codeHash);
|
|
16
|
+
devices.set(device.id, device);
|
|
17
|
+
return true;
|
|
18
|
+
},
|
|
19
|
+
async codeHashes(now) { return [...codes].filter(([, exp]) => exp > now).map(([h]) => h); },
|
|
20
|
+
async add(device) { devices.set(device.id, device); },
|
|
21
|
+
async touch(id, now, verifiedUserId) {
|
|
22
|
+
const d = devices.get(id);
|
|
23
|
+
if (d)
|
|
24
|
+
devices.set(id, { ...d, lastSeenAt: now, ...(verifiedUserId && !d.verifiedUserId ? { verifiedUserId } : {}) });
|
|
25
|
+
},
|
|
26
|
+
async list() { return [...devices.values()]; },
|
|
27
|
+
async revoke(id, now) {
|
|
28
|
+
const d = devices.get(id);
|
|
29
|
+
if (!d || d.revokedAt !== undefined)
|
|
30
|
+
return false;
|
|
31
|
+
devices.set(id, { ...d, revokedAt: now });
|
|
32
|
+
for (const cb of [...subs])
|
|
33
|
+
cb(id);
|
|
34
|
+
return true;
|
|
35
|
+
},
|
|
36
|
+
onRevoked(cb) { subs.add(cb); return () => { subs.delete(cb); }; },
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
port, devices, codes,
|
|
40
|
+
add(id, key, extra = {}) {
|
|
41
|
+
devices.set(id, { id, name: id, createdAt: 1, publicKeyJwk: key.publicJwk, jkt: key.jkt, ...extra });
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** A daemon key, a device key, and a store in which that device is paired. */
|
|
46
|
+
export async function makeTestPairing(opts = {}) {
|
|
47
|
+
const sidecarKey = await signerFromPrivateJwk(await generatePrivateJwk());
|
|
48
|
+
const clientKey = await signerFromPrivateJwk(await generatePrivateJwk());
|
|
49
|
+
const deviceId = opts.deviceId ?? 'dev_test';
|
|
50
|
+
const store = memoryDevices();
|
|
51
|
+
store.add(deviceId, clientKey);
|
|
52
|
+
const wrap = (ch) => {
|
|
53
|
+
let serverHandler = null;
|
|
54
|
+
/** The nonce of a hello this wrapper filled in, awaiting its proof. */
|
|
55
|
+
let injected = null;
|
|
56
|
+
/** Between a filled-in hello and its welcome (or denial), what the client
|
|
57
|
+
* sends next waits here, as a real client waits for its welcome -- a
|
|
58
|
+
* hand-driven test may send requests right behind its hello. */
|
|
59
|
+
let pairing = false;
|
|
60
|
+
const queued = [];
|
|
61
|
+
const release = () => {
|
|
62
|
+
pairing = false;
|
|
63
|
+
for (const q of queued.splice(0))
|
|
64
|
+
serverHandler?.(q);
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
...ch,
|
|
68
|
+
onMessage: (h) => {
|
|
69
|
+
serverHandler = h;
|
|
70
|
+
ch.onMessage((m) => {
|
|
71
|
+
// The identity exchange belongs to the pairing itself: never held.
|
|
72
|
+
if (pairing && m.t !== 'identity-assert') {
|
|
73
|
+
queued.push(m);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (m.t === 'hello' && m.device === undefined && m.enroll === undefined) {
|
|
77
|
+
injected = randomToken();
|
|
78
|
+
pairing = true;
|
|
79
|
+
h({ ...m, clientNonce: injected, device: { id: deviceId } });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
h(m);
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
send: (m) => {
|
|
86
|
+
if (m.t === 'server-proof' && injected !== null) {
|
|
87
|
+
const clientNonce = injected;
|
|
88
|
+
injected = null;
|
|
89
|
+
void clientKey.sign(clientProofPayload({
|
|
90
|
+
serverNonce: m.serverNonce, clientNonce, sidecarId: m.sidecarId, sidecarJkt: sidecarKey.jkt, subject: deviceId,
|
|
91
|
+
})).then((sig) => serverHandler?.({ t: 'client-proof', sig: bytesToB64url(sig) }));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
ch.send(m);
|
|
95
|
+
// After the answer is on its way, so the client sees it first.
|
|
96
|
+
if (pairing && (m.t === 'welcome' || m.t === 'denied'))
|
|
97
|
+
release();
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
const wrapHost = (ch) => {
|
|
102
|
+
let hello = null;
|
|
103
|
+
/** 'real': a real daemon is proving itself; 'played': this wrapper is. */
|
|
104
|
+
let mode = 'none';
|
|
105
|
+
let proven = false;
|
|
106
|
+
const held = [];
|
|
107
|
+
let hostHandler = null;
|
|
108
|
+
return {
|
|
109
|
+
...ch,
|
|
110
|
+
send: (m) => {
|
|
111
|
+
if (m.t === 'hello')
|
|
112
|
+
hello = m;
|
|
113
|
+
if (m.t === 'client-proof' && mode === 'played') {
|
|
114
|
+
proven = true;
|
|
115
|
+
for (const w of held.splice(0))
|
|
116
|
+
hostHandler?.(w);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
ch.send(m);
|
|
120
|
+
},
|
|
121
|
+
onMessage: (h) => {
|
|
122
|
+
hostHandler = h;
|
|
123
|
+
ch.onMessage((m) => {
|
|
124
|
+
// While the played proof is outstanding, everything waits behind
|
|
125
|
+
// the welcome, in order.
|
|
126
|
+
if (mode === 'played' && !proven) {
|
|
127
|
+
held.push(m);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (m.t === 'server-proof') {
|
|
131
|
+
mode = 'real';
|
|
132
|
+
h(m);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (m.t === 'welcome' && mode !== 'real' && !proven) {
|
|
136
|
+
held.push(m);
|
|
137
|
+
if (mode === 'played' || !hello)
|
|
138
|
+
return;
|
|
139
|
+
mode = 'played';
|
|
140
|
+
const serverNonce = randomToken();
|
|
141
|
+
const clientNonce = hello.clientNonce ?? '';
|
|
142
|
+
const subject = hello.device?.id ?? '';
|
|
143
|
+
void sidecarKey.sign(serverProofPayload({ clientNonce, serverNonce, sidecarId: 'sc-test', sidecarJkt: sidecarKey.jkt, subject }))
|
|
144
|
+
.then((sig) => h({ t: 'server-proof', serverNonce, sidecarId: 'sc-test', publicKey: sidecarKey.publicJwk, sig: bytesToB64url(sig) }));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
h(m);
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
return {
|
|
153
|
+
server: { devices: store.port, sidecarKey },
|
|
154
|
+
host: { device: { id: deviceId, sidecarJkt: sidecarKey.jkt }, deviceKey: clientKey },
|
|
155
|
+
deviceId, clientKey, store, wrap, wrapHost,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** The assertion a test client answers every identity challenge with, and
|
|
159
|
+
* the user `testIdentity`'s verifier maps it to. */
|
|
160
|
+
export const TEST_ASSERTION = 'test-assertion';
|
|
161
|
+
export const TEST_USER = 'user_test';
|
|
162
|
+
/** For a daemon that REQUIRES identity (the node daemon's `startSidecar`,
|
|
163
|
+
* spec 2026-09-29-device-enrollment-design Phase 2): a verifier that accepts
|
|
164
|
+
* exactly TEST_ASSERTION as TEST_USER, and a policy that admits exactly that
|
|
165
|
+
* user. `pairedClient` answers challenges with TEST_ASSERTION. Test support
|
|
166
|
+
* only; it verifies nothing real. */
|
|
167
|
+
export function testIdentity() {
|
|
168
|
+
const verdict = (token) => (token === TEST_ASSERTION
|
|
169
|
+
? { ok: true, identity: { userId: TEST_USER, issuer: 'https://issuer.test' } }
|
|
170
|
+
: { ok: false, reason: 'rejected' });
|
|
171
|
+
return {
|
|
172
|
+
identity: {
|
|
173
|
+
explain: async (token) => verdict(token),
|
|
174
|
+
verify: async (token) => { const v = verdict(token); return v.ok ? v.identity : null; },
|
|
175
|
+
},
|
|
176
|
+
admission: { admits: (id) => id.userId === TEST_USER },
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/** The `hello` a paired client sends, before the proof exchange. */
|
|
180
|
+
export function pairedHelloMsg(p, extra = {}) {
|
|
181
|
+
return { t: 'hello', protocol: SIDECAR_PROTOCOL, clientNonce: randomToken(), device: { id: p.deviceId }, ...extra };
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Drive a paired hello by hand: send it, wait for the daemon's `server-proof`
|
|
185
|
+
* among `received` (the messages the test collects from its end of the
|
|
186
|
+
* channel), and answer with this device's client proof. Resolves once the
|
|
187
|
+
* proof is sent (the welcome follows on its own), or once a `denied` arrives
|
|
188
|
+
* instead. The server proof is not checked here -- tests of that check live
|
|
189
|
+
* with the host.
|
|
190
|
+
*/
|
|
191
|
+
export async function pairedHello(p, send, received, extra = {}) {
|
|
192
|
+
const hello = pairedHelloMsg(p, extra);
|
|
193
|
+
const seen = received.length;
|
|
194
|
+
send(hello);
|
|
195
|
+
const deadline = Date.now() + 5000;
|
|
196
|
+
for (;;) {
|
|
197
|
+
const fresh = received.slice(seen);
|
|
198
|
+
if (fresh.some((m) => m.t === 'denied'))
|
|
199
|
+
return;
|
|
200
|
+
const sp = fresh.find((m) => m.t === 'server-proof');
|
|
201
|
+
if (sp) {
|
|
202
|
+
const sig = bytesToB64url(await p.clientKey.sign(clientProofPayload({
|
|
203
|
+
serverNonce: sp.serverNonce, clientNonce: hello.clientNonce ?? '', sidecarId: sp.sidecarId,
|
|
204
|
+
sidecarJkt: p.server.sidecarKey.jkt, subject: p.deviceId,
|
|
205
|
+
})));
|
|
206
|
+
send({ t: 'client-proof', sig });
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (Date.now() > deadline)
|
|
210
|
+
throw new Error('pairedHello: no server-proof arrived');
|
|
211
|
+
await new Promise((r) => setTimeout(r, 1));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* A paired client for a test that talks over a raw socket: send `hello`
|
|
216
|
+
* first, then pass every parsed incoming message to `answer`; it resolves with
|
|
217
|
+
* the `client-proof` to send back when the message is the daemon's
|
|
218
|
+
* `server-proof`, the `identity-assert` (TEST_ASSERTION) for an
|
|
219
|
+
* `identity-challenge`, and null for anything else.
|
|
220
|
+
*/
|
|
221
|
+
export function pairedClient(p, extra = {}) {
|
|
222
|
+
const hello = pairedHelloMsg(p, extra);
|
|
223
|
+
return {
|
|
224
|
+
hello,
|
|
225
|
+
answer: async (m) => {
|
|
226
|
+
if (m.t === 'identity-challenge')
|
|
227
|
+
return { t: 'identity-assert', assertion: TEST_ASSERTION };
|
|
228
|
+
if (m.t !== 'server-proof')
|
|
229
|
+
return null;
|
|
230
|
+
const sig = bytesToB64url(await p.clientKey.sign(clientProofPayload({
|
|
231
|
+
serverNonce: m.serverNonce, clientNonce: hello.clientNonce ?? '', sidecarId: m.sidecarId,
|
|
232
|
+
sidecarJkt: p.server.sidecarKey.jkt, subject: p.deviceId,
|
|
233
|
+
})));
|
|
234
|
+
return { t: 'client-proof', sig };
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/** `pairedHello`, then wait until the welcome (or a denial) has arrived. */
|
|
239
|
+
export async function pairedWelcome(p, send, received, extra = {}) {
|
|
240
|
+
const seen = received.length;
|
|
241
|
+
await pairedHello(p, send, received, extra);
|
|
242
|
+
const deadline = Date.now() + 5000;
|
|
243
|
+
while (!received.slice(seen).some((m) => m.t === 'welcome' || m.t === 'denied')) {
|
|
244
|
+
if (Date.now() > deadline)
|
|
245
|
+
throw new Error('pairedWelcome: no welcome arrived');
|
|
246
|
+
await new Promise((r) => setTimeout(r, 1));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/** Wait until `received` holds a `welcome` or a `denied`: the end of a
|
|
250
|
+
* pairing driven through `wrap`, which completes asynchronously. */
|
|
251
|
+
export async function untilWelcome(received) {
|
|
252
|
+
const deadline = Date.now() + 5000;
|
|
253
|
+
while (!received.some((m) => m.t === 'welcome' || m.t === 'denied')) {
|
|
254
|
+
if (Date.now() > deadline)
|
|
255
|
+
throw new Error('untilWelcome: no welcome arrived');
|
|
256
|
+
await new Promise((r) => setTimeout(r, 1));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../sidecar/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { WebSocket } from 'ws';
|
|
2
2
|
import type { SidecarChannel } from '@corenel/protocol';
|
|
3
|
-
export
|
|
3
|
+
export interface WsChannelOptions {
|
|
4
|
+
/** Consulted for every incoming frame BEFORE it is parsed, with its size in
|
|
5
|
+
* bytes. False terminates the socket and the frame is never parsed. The
|
|
6
|
+
* daemon uses it to cap frames from a connection that has not
|
|
7
|
+
* authenticated yet (see packages/sidecar server.ts). */
|
|
8
|
+
acceptFrame?: (bytes: number) => boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function wsChannel(ws: WebSocket, opts?: WsChannelOptions): SidecarChannel;
|
|
4
11
|
//# sourceMappingURL=wsChannel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsChannel.d.ts","sourceRoot":"","sources":["../../sidecar/wsChannel.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,wBAAgB,SAAS,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"wsChannel.d.ts","sourceRoot":"","sources":["../../sidecar/wsChannel.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B;;;6DAGyD;IACzD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1C;AAWD,wBAAgB,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,GAAE,gBAAqB,GAAG,cAAc,CA6DpF"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
/** The byte length of a received frame, whatever shape `ws` handed over. */
|
|
2
|
+
function frameBytes(data) {
|
|
3
|
+
if (typeof data === 'string')
|
|
4
|
+
return new TextEncoder().encode(data).length;
|
|
5
|
+
if (Array.isArray(data))
|
|
6
|
+
return data.reduce((n, b) => n + frameBytes(b), 0);
|
|
7
|
+
if (data instanceof ArrayBuffer)
|
|
8
|
+
return data.byteLength;
|
|
9
|
+
if (ArrayBuffer.isView(data))
|
|
10
|
+
return data.byteLength;
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
export function wsChannel(ws, opts = {}) {
|
|
2
14
|
let handler = null;
|
|
3
15
|
let closeHandler = null;
|
|
4
16
|
const pending = [];
|
|
@@ -14,6 +26,10 @@ export function wsChannel(ws) {
|
|
|
14
26
|
// no-op there.
|
|
15
27
|
ws.on('open', flushPending);
|
|
16
28
|
ws.on('message', (data) => {
|
|
29
|
+
if (opts.acceptFrame && !opts.acceptFrame(frameBytes(data))) {
|
|
30
|
+
ws.terminate();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
17
33
|
if (!handler)
|
|
18
34
|
return;
|
|
19
35
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsChannel.js","sourceRoot":"","sources":["../../sidecar/wsChannel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wsChannel.js","sourceRoot":"","sources":["../../sidecar/wsChannel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callAgent.d.ts","sourceRoot":"","sources":["../../tools/callAgent.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAS/G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACxD,kEAAkE;IAClE,SAAS,EAAE,MAAM,SAAS,EAAE,CAAC;IAC7B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;yEAOyE;AACzE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAAyD,CAAC;AAEjH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;oCAGoC;AACpC,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAc5E;AAKD;;;2EAG2E;AAC3E,eAAO,MAAM,YAAY,kGAAkG,CAAC;AAE5H,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"callAgent.d.ts","sourceRoot":"","sources":["../../tools/callAgent.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAS/G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACxD,kEAAkE;IAClE,SAAS,EAAE,MAAM,SAAS,EAAE,CAAC;IAC7B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;yEAOyE;AACzE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAAyD,CAAC;AAEjH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;oCAGoC;AACpC,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAc5E;AAKD;;;2EAG2E;AAC3E,eAAO,MAAM,YAAY,kGAAkG,CAAC;AAE5H,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAmHhE"}
|
package/dist/tools/callAgent.js
CHANGED
|
@@ -3,7 +3,7 @@ import { PermissionService } from '../guardrail/permission-service.js';
|
|
|
3
3
|
import { matchesAnyGlob } from '../guardrail/glob.js';
|
|
4
4
|
import { toolAddress } from './namespaces.js';
|
|
5
5
|
import { ORCHESTRATION_ONLY_TOOLS } from './orchestration.js';
|
|
6
|
-
import { recordOf, flushRecord, NO_RUN_STATE } from '../orchestrator/record.js';
|
|
6
|
+
import { recordOf, flushRecord, outputRecorder, headOf, NO_RUN_STATE, MAX_REPORT_CHARS } from '../orchestrator/record.js';
|
|
7
7
|
import { planHash } from '../orchestrator/planDoc.js';
|
|
8
8
|
/** The browser host's strategy tools that run models or shape what later runs
|
|
9
9
|
* (src/workflows/strategy/tools.ts, advertised to the worker as remote decls
|
|
@@ -95,19 +95,29 @@ export function makeCallAgentTool(opts) {
|
|
|
95
95
|
}
|
|
96
96
|
// The approved plan is a contract: if the file it was written to no
|
|
97
97
|
// longer hashes to what was approved, stop rather than delegate against
|
|
98
|
-
// a plan nobody signed off on.
|
|
99
|
-
// it (planWrittenAt)
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
98
|
+
// a plan nobody signed off on. The file is checked once the host has
|
|
99
|
+
// written it (planWrittenAt) -- on the run's branch, or in the folder as
|
|
100
|
+
// it is when the run works without git (planRoot) -- and can read it
|
|
101
|
+
// back; a read error propagates as an ordinary tool error below rather
|
|
102
|
+
// than being treated as unchanged. With no file (no git tools, no
|
|
103
|
+
// writable root, a failed write) the record's own markdown is the plan.
|
|
104
|
+
const planRoot = rec?.planRoot ?? rec?.lock?.root;
|
|
105
|
+
const reader = opts.hostTools().find((t) => t.name === 'sidecar_fs_read_file');
|
|
106
|
+
if (rec?.planWrittenAt && rec.planPath && rec.planHash && planRoot && reader) {
|
|
107
|
+
const content = String(await reader.run({ root: planRoot, path: rec.planPath }, ctx));
|
|
108
|
+
if (await planHash(content.trimEnd()) !== rec.planHash)
|
|
109
|
+
return PLAN_CHANGED;
|
|
110
|
+
}
|
|
111
|
+
else if (rec?.planHash && rec.plan !== undefined && await planHash(rec.plan) !== rec.planHash) {
|
|
112
|
+
return PLAN_CHANGED;
|
|
108
113
|
}
|
|
109
114
|
const taskNo = typeof args.task === 'number' ? args.task : Number.NaN;
|
|
110
115
|
const row = rec?.planTasks?.find((t) => t.n === taskNo);
|
|
116
|
+
// The task this call's report and files are filed under: a task of the
|
|
117
|
+
// approved plan, or any number the model gave when the plan has no
|
|
118
|
+
// task list. A number that is not in the plan files nothing under it.
|
|
119
|
+
const task = row ? row.n : !rec?.planTasks?.length && Number.isFinite(taskNo) ? taskNo : undefined;
|
|
120
|
+
const inTask = task !== undefined ? { task } : {};
|
|
111
121
|
const d = await opts.resolve(agent);
|
|
112
122
|
if (!d)
|
|
113
123
|
return `Agent "${agent}" was not found.`;
|
|
@@ -127,6 +137,9 @@ export function makeCallAgentTool(opts) {
|
|
|
127
137
|
label: agent,
|
|
128
138
|
tools: calleeToolNames(opts.hostTools(), d.policy),
|
|
129
139
|
...(d.skills && d.skills.length ? { skills: d.skills } : {}),
|
|
140
|
+
// An orchestrator logs what the callee writes, under this task and
|
|
141
|
+
// this callee: the record is the run's output, whoever produced it.
|
|
142
|
+
...(rec ? { onFileChange: outputRecorder(ctx, { agent, ...inTask }) } : {}),
|
|
130
143
|
};
|
|
131
144
|
if (row) {
|
|
132
145
|
row.status = 'running';
|
|
@@ -137,7 +150,14 @@ export function makeCallAgentTool(opts) {
|
|
|
137
150
|
if (row)
|
|
138
151
|
row.status = 'done';
|
|
139
152
|
if (rec) {
|
|
140
|
-
|
|
153
|
+
// What the callee handed back is its report on the task: kept (its
|
|
154
|
+
// head) so the run's output can show it after the run.
|
|
155
|
+
const report = headOf(r.text.trim(), MAX_REPORT_CHARS);
|
|
156
|
+
rec.delegations.push({
|
|
157
|
+
agent, at: Date.now(), turns: r.turns, stopReason: r.stopReason, ...(r.sessionId ? { sessionId: r.sessionId } : {}),
|
|
158
|
+
...inTask,
|
|
159
|
+
...(report.text ? { report: report.text } : {}), ...(report.chars !== undefined ? { reportChars: report.chars } : {}),
|
|
160
|
+
});
|
|
141
161
|
await flushRecord(ctx);
|
|
142
162
|
}
|
|
143
163
|
const trace = r.sessionId ? `, trace: ${r.sessionId}` : '';
|
|
@@ -148,7 +168,7 @@ export function makeCallAgentTool(opts) {
|
|
|
148
168
|
if (row)
|
|
149
169
|
row.status = 'error';
|
|
150
170
|
if (rec) {
|
|
151
|
-
rec.delegations.push({ agent, at: Date.now(), turns: 0, stopReason: 'error', error: msg });
|
|
171
|
+
rec.delegations.push({ agent, at: Date.now(), turns: 0, stopReason: 'error', error: msg, ...inTask });
|
|
152
172
|
await flushRecord(ctx);
|
|
153
173
|
}
|
|
154
174
|
return `call_agent(${agent}) failed. Error: ${msg}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callAgent.js","sourceRoot":"","sources":["../../tools/callAgent.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"callAgent.js","sourceRoot":"","sources":["../../tools/callAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,7 +128,7 @@ export function makeSubmitPlanTool(opts = {}) {
|
|
|
128
128
|
rec.planApprovedAt = Date.now();
|
|
129
129
|
await flushRecord(ctx);
|
|
130
130
|
return structured
|
|
131
|
-
? `Plan approved. It
|
|
131
|
+
? `Plan approved and kept in the run record. It is written to ${rec.planPath} on the run's branch, or in the folder as it is if sidecar_git_branch reports no git repository. Delegate each task with call_agent, passing its number as task.`
|
|
132
132
|
: 'Plan approved. Delegate the steps with call_agent.';
|
|
133
133
|
},
|
|
134
134
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../tools/orchestration.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../tools/orchestration.ts"],"names":[],"mappings":"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"}
|