@voicethere/agent 0.2.2 → 0.2.4
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 +32 -7
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -2
- package/dist/cli.js.map +1 -1
- package/dist/sandbox/start-child.d.ts +1 -0
- package/dist/sandbox/start-child.d.ts.map +1 -1
- package/dist/sandbox/start-child.js +6 -4
- package/dist/sandbox/start-child.js.map +1 -1
- package/dist/verify/index.d.ts +1 -0
- package/dist/verify/index.d.ts.map +1 -1
- package/dist/verify/index.js +1 -0
- package/dist/verify/index.js.map +1 -1
- package/dist/verify/lib.d.ts +7 -0
- package/dist/verify/lib.d.ts.map +1 -1
- package/dist/verify/lib.js +44 -0
- package/dist/verify/lib.js.map +1 -1
- package/dist/verify/run-verify-start.d.ts +3 -0
- package/dist/verify/run-verify-start.d.ts.map +1 -0
- package/dist/verify/run-verify-start.js +130 -0
- package/dist/verify/run-verify-start.js.map +1 -0
- package/dist/verify/run-verify.d.ts.map +1 -1
- package/dist/verify/run-verify.js +17 -94
- package/dist/verify/run-verify.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,21 +23,30 @@ npm install
|
|
|
23
23
|
npm run build
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
## Verify locally (
|
|
26
|
+
## Verify locally (static checks, no runtime execution)
|
|
27
27
|
|
|
28
|
-
Before deploying to VoiceThere, build your bundle and run
|
|
28
|
+
Before deploying to VoiceThere, build your bundle and run static checks:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
npx @voicethere/agent verify
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
This runs a short checklist: Node version, bundle build,
|
|
34
|
+
This runs a short checklist: Node version, bundle build, bundle presence, `defineAgent(...)` registration, and at least one supported callback (`onSpeechEvent`, `onUserSpeechFinal`, `onDataChannelMessage`, or `onDataChannelBinary`).
|
|
35
|
+
|
|
36
|
+
For sandbox startup validation (without full voice/WebRTC E2E), use:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx @voicethere/agent verify-start --no-build --bundle ./dist/agent.js
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`verify-start` launches the bundle in the sandboxed child with restricted Node flags (`--permission` + fs-read allowlist), sends `session_start`, and requires `session_start_ack`.
|
|
35
43
|
|
|
36
44
|
| Command | When to use |
|
|
37
45
|
| ------- | ----------- |
|
|
38
|
-
| `npx @voicethere/agent verify` | **Default** — build `agent.ts` → `dist/agent.js`, then run all checks |
|
|
46
|
+
| `npx @voicethere/agent verify` | **Default** — build `agent.ts` → `dist/agent.js`, then run all static checks |
|
|
39
47
|
| `npx @voicethere/agent verify --no-build` | Re-run checks on an existing bundle |
|
|
40
48
|
| `npx @voicethere/agent verify --no-build --bundle ./dist/agent.js` | Verify a specific bundle path |
|
|
49
|
+
| `npx @voicethere/agent verify-start --no-build --bundle ./dist/agent.js` | Verify sandbox startup + restricted Node flags on a specific bundle |
|
|
41
50
|
|
|
42
51
|
Optional flags: `--entry` / `-e`, `--outfile` / `-o` (same as `build`).
|
|
43
52
|
|
|
@@ -208,6 +217,22 @@ For isolated voice agents (default), leave **`shared_child_per_session`** disabl
|
|
|
208
217
|
|
|
209
218
|
See [`templates/game-sync.ts`](./templates/game-sync.ts) for a data-only authoritative server example (60Hz server-side movement + collisions, client render-only).
|
|
210
219
|
|
|
220
|
+
### Game servers + parent/child IPC payload size guidance
|
|
221
|
+
|
|
222
|
+
For game-server style agents, state updates are sent back and forth between the trusted parent and sandboxed child over IPC (`process.send` / `process.on("message")`) using Node V8 serialization.
|
|
223
|
+
|
|
224
|
+
Current guidance:
|
|
225
|
+
|
|
226
|
+
- V8 serialization is fast enough for typical real-time sync payloads up to about **64kB**
|
|
227
|
+
- That is roughly **16,000 `float32` values** (4 bytes each)
|
|
228
|
+
|
|
229
|
+
If you need larger/faster transfers, we can support an alternative transport strategy, for example:
|
|
230
|
+
|
|
231
|
+
- direct process-to-process streaming over `stdin`/`stdout`
|
|
232
|
+
- shared-memory IPC between processes via a dedicated package
|
|
233
|
+
|
|
234
|
+
If you require this, please open an issue in this repository and we will prioritize implementation accordingly.
|
|
235
|
+
|
|
211
236
|
## Building your agent bundle
|
|
212
237
|
|
|
213
238
|
**Recommended:** bundle with the package CLI (same esbuild settings VoiceThere uses in production):
|
|
@@ -323,7 +348,7 @@ Prefer **one esbuild bundle** so production behavior matches `npm run verify:loc
|
|
|
323
348
|
|
|
324
349
|
**Pre-publish checklist**
|
|
325
350
|
|
|
326
|
-
1. `npx @voicethere/agent verify` — build your bundle and run
|
|
351
|
+
1. `npx @voicethere/agent verify` — build your bundle and run static checks
|
|
327
352
|
2. Deploy the bundle to VoiceThere (platform upload or CLI when available)
|
|
328
353
|
|
|
329
354
|
For iterative work: `npx @voicethere/agent build` then `npx @voicethere/agent verify --no-build`.
|
|
@@ -340,7 +365,7 @@ For iterative work: `npx @voicethere/agent build` then `npx @voicethere/agent ve
|
|
|
340
365
|
```bash
|
|
341
366
|
npm run build # compile SDK + example bundle (repo dev)
|
|
342
367
|
npm run build:lib # compile SDK only (tsc → dist/)
|
|
343
|
-
npm run verify:local # repo dev: build example +
|
|
368
|
+
npm run verify:local # repo dev: build example + static verify
|
|
344
369
|
npm run test:ci # typecheck + vitest
|
|
345
370
|
```
|
|
346
371
|
|
|
@@ -348,7 +373,7 @@ Customer project:
|
|
|
348
373
|
|
|
349
374
|
```bash
|
|
350
375
|
npx @voicethere/agent build # bundle agent.ts → dist/agent.js
|
|
351
|
-
npx @voicethere/agent verify # build +
|
|
376
|
+
npx @voicethere/agent verify # build + static checks
|
|
352
377
|
```
|
|
353
378
|
|
|
354
379
|
## Release
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/dist/cli.js
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* npx @voicethere/agent build
|
|
6
6
|
* npx @voicethere/agent verify
|
|
7
|
+
* npx @voicethere/agent verify-start
|
|
7
8
|
*/
|
|
8
9
|
import { buildAgentBundle } from "./build-bundle.js";
|
|
9
10
|
import { DEFAULT_VERIFY_BUNDLE, DEFAULT_VERIFY_ENTRY, } from "./verify/lib.js";
|
|
10
11
|
import { formatVerifyFailure, runAgentVerify, } from "./verify/run-verify.js";
|
|
12
|
+
import { runAgentVerifyStart } from "./verify/run-verify-start.js";
|
|
11
13
|
const DEFAULT_ENTRY = DEFAULT_VERIFY_ENTRY;
|
|
12
14
|
const DEFAULT_OUTFILE = DEFAULT_VERIFY_BUNDLE;
|
|
13
15
|
function printHelp() {
|
|
@@ -17,10 +19,12 @@ Usage:
|
|
|
17
19
|
npx @voicethere/agent
|
|
18
20
|
npx @voicethere/agent build [options]
|
|
19
21
|
npx @voicethere/agent verify [options]
|
|
22
|
+
npx @voicethere/agent verify-start [options]
|
|
20
23
|
|
|
21
24
|
Commands:
|
|
22
25
|
build Bundle agent source to a single ESM file
|
|
23
|
-
verify Build (optional) and run
|
|
26
|
+
verify Build (optional) and run static bundle checks
|
|
27
|
+
verify-start Start bundle in sandbox with restricted Node flags and verify startup
|
|
24
28
|
|
|
25
29
|
Build options:
|
|
26
30
|
--entry, -e <path> Agent entry file (default: ${DEFAULT_ENTRY})
|
|
@@ -38,6 +42,7 @@ Examples:
|
|
|
38
42
|
npx @voicethere/agent build --entry src/agent.ts --outfile dist/agent.js
|
|
39
43
|
npx @voicethere/agent verify
|
|
40
44
|
npx @voicethere/agent verify --no-build --bundle dist/agent.js
|
|
45
|
+
npx @voicethere/agent verify-start --no-build --bundle dist/agent.js
|
|
41
46
|
`);
|
|
42
47
|
}
|
|
43
48
|
function parseBuildArgs(argv) {
|
|
@@ -140,6 +145,19 @@ async function runVerify(argv) {
|
|
|
140
145
|
process.exit(1);
|
|
141
146
|
}
|
|
142
147
|
}
|
|
148
|
+
async function runVerifyStart(argv) {
|
|
149
|
+
const { entry, outfile, bundlePath, noBuild } = parseVerifyArgs(argv);
|
|
150
|
+
if (!noBuild) {
|
|
151
|
+
await buildAgentBundle({ entry, outfile });
|
|
152
|
+
}
|
|
153
|
+
const result = await runAgentVerifyStart({
|
|
154
|
+
bundlePath,
|
|
155
|
+
});
|
|
156
|
+
if (!result.ok) {
|
|
157
|
+
process.stderr.write(`[@voicethere/agent verify-start] FAIL: ${formatVerifyFailure(result)}\n`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
143
161
|
async function main() {
|
|
144
162
|
const args = process.argv.slice(2);
|
|
145
163
|
if (args.length === 0) {
|
|
@@ -158,8 +176,12 @@ async function main() {
|
|
|
158
176
|
await runVerify(args.slice(1));
|
|
159
177
|
return;
|
|
160
178
|
}
|
|
179
|
+
if (args[0] === "verify-start") {
|
|
180
|
+
await runVerifyStart(args.slice(1));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
161
183
|
if (args[0]?.startsWith("-")) {
|
|
162
|
-
process.stderr.write("Missing command. Use `build` or `verify` before options.\n\n");
|
|
184
|
+
process.stderr.write("Missing command. Use `build`, `verify`, or `verify-start` before options.\n\n");
|
|
163
185
|
printHelp();
|
|
164
186
|
process.exit(1);
|
|
165
187
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ export interface StartSandboxedChildOptions {
|
|
|
18
18
|
export interface SandboxedChild {
|
|
19
19
|
pid: number;
|
|
20
20
|
bundlePath: string;
|
|
21
|
+
execArgv: string[];
|
|
21
22
|
send(message: ParentToChildMessage): boolean;
|
|
22
23
|
kill(signal?: NodeJS.Signals): void;
|
|
23
24
|
onMessage(handler: (message: ChildToParentMessage) => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-child.d.ts","sourceRoot":"","sources":["../../src/sandbox/start-child.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,MAAM,CACJ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GACpE,MAAM,IAAI,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,0BAA0B,GAClC,cAAc,
|
|
1
|
+
{"version":3,"file":"start-child.d.ts","sourceRoot":"","sources":["../../src/sandbox/start-child.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,MAAM,CACJ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GACpE,MAAM,IAAI,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,0BAA0B,GAClC,cAAc,CAgFhB"}
|
|
@@ -47,13 +47,14 @@ export function startSandboxedChild(options) {
|
|
|
47
47
|
env[key] = value;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
+
const execArgv = buildChildExecArgv({
|
|
51
|
+
loaderDir: SANDBOX_DIR,
|
|
52
|
+
bundlePath,
|
|
53
|
+
});
|
|
50
54
|
const child = fork(LOADER_ENTRY, [], {
|
|
51
55
|
env,
|
|
52
56
|
stdio: ["ignore", "pipe", "pipe", "ipc"],
|
|
53
|
-
execArgv
|
|
54
|
-
loaderDir: SANDBOX_DIR,
|
|
55
|
-
bundlePath,
|
|
56
|
-
}),
|
|
57
|
+
execArgv,
|
|
57
58
|
});
|
|
58
59
|
child.stderr?.on("data", (chunk) => {
|
|
59
60
|
const message = String(chunk).trim();
|
|
@@ -78,6 +79,7 @@ export function startSandboxedChild(options) {
|
|
|
78
79
|
return {
|
|
79
80
|
pid: child.pid ?? -1,
|
|
80
81
|
bundlePath,
|
|
82
|
+
execArgv: [...execArgv],
|
|
81
83
|
send(message) {
|
|
82
84
|
if (!child.connected)
|
|
83
85
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-child.js","sourceRoot":"","sources":["../../src/sandbox/start-child.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAqB,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,sBAAsB,GAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start-child.js","sourceRoot":"","sources":["../../src/sandbox/start-child.ts"],"names":[],"mappings":"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"}
|
package/dist/verify/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/verify/index.js
CHANGED
package/dist/verify/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAIf,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAIf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/verify/lib.d.ts
CHANGED
|
@@ -2,8 +2,15 @@ import type { ChildToParentMessage } from "../protocol.js";
|
|
|
2
2
|
export declare const VERIFY_SESSION_ID = "local-verify";
|
|
3
3
|
export declare const DEFAULT_VERIFY_BUNDLE = "dist/agent.js";
|
|
4
4
|
export declare const DEFAULT_VERIFY_ENTRY = "agent.ts";
|
|
5
|
+
export declare const VERIFY_CALLBACK_KEYS: readonly ["onSpeechEvent", "onUserSpeechFinal", "onDataChannelMessage", "onDataChannelBinary"];
|
|
6
|
+
export type VerifyCallbackKey = (typeof VERIFY_CALLBACK_KEYS)[number];
|
|
5
7
|
export declare function parseBundleArg(argv: string[], env?: NodeJS.ProcessEnv, cwd?: string): string;
|
|
6
8
|
export declare function waitForSpeak(messages: ChildToParentMessage[], sessionId: string, timeoutMs: number): Promise<Extract<ChildToParentMessage, {
|
|
7
9
|
type: "speak";
|
|
8
10
|
}>>;
|
|
11
|
+
export declare function waitForSessionStartAck(messages: ChildToParentMessage[], sessionId: string, timeoutMs: number): Promise<Extract<ChildToParentMessage, {
|
|
12
|
+
type: "session_start_ack";
|
|
13
|
+
}>>;
|
|
14
|
+
export declare function detectVerifyCallbacks(bundleSource: string): VerifyCallbackKey[];
|
|
15
|
+
export declare function hasDefineAgentRegistration(bundleSource: string): boolean;
|
|
9
16
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/verify/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,eAAO,MAAM,oBAAoB,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAC/C,eAAO,MAAM,oBAAoB,gGAKvB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,GAC1B,MAAM,CAWR;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAuB3D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC,CAuBvE;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,GACnB,iBAAiB,EAAE,CAqBrB;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAExE"}
|
package/dist/verify/lib.js
CHANGED
|
@@ -2,6 +2,12 @@ import { resolve } from "node:path";
|
|
|
2
2
|
export const VERIFY_SESSION_ID = "local-verify";
|
|
3
3
|
export const DEFAULT_VERIFY_BUNDLE = "dist/agent.js";
|
|
4
4
|
export const DEFAULT_VERIFY_ENTRY = "agent.ts";
|
|
5
|
+
export const VERIFY_CALLBACK_KEYS = [
|
|
6
|
+
"onSpeechEvent",
|
|
7
|
+
"onUserSpeechFinal",
|
|
8
|
+
"onDataChannelMessage",
|
|
9
|
+
"onDataChannelBinary",
|
|
10
|
+
];
|
|
5
11
|
export function parseBundleArg(argv, env = process.env, cwd = process.cwd()) {
|
|
6
12
|
for (let i = 0; i < argv.length; i += 1) {
|
|
7
13
|
const arg = argv[i];
|
|
@@ -31,4 +37,42 @@ export function waitForSpeak(messages, sessionId, timeoutMs) {
|
|
|
31
37
|
}, 50);
|
|
32
38
|
});
|
|
33
39
|
}
|
|
40
|
+
export function waitForSessionStartAck(messages, sessionId, timeoutMs) {
|
|
41
|
+
return new Promise((resolvePromise, reject) => {
|
|
42
|
+
const started = Date.now();
|
|
43
|
+
const timer = setInterval(() => {
|
|
44
|
+
const ack = messages.find((m) => m.type === "session_start_ack" && m.sessionId === sessionId);
|
|
45
|
+
if (ack) {
|
|
46
|
+
clearInterval(timer);
|
|
47
|
+
resolvePromise(ack);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (Date.now() - started >= timeoutMs) {
|
|
51
|
+
clearInterval(timer);
|
|
52
|
+
reject(new Error(`Timed out after ${timeoutMs}ms waiting for child session_start_ack IPC`));
|
|
53
|
+
}
|
|
54
|
+
}, 50);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function detectVerifyCallbacks(bundleSource) {
|
|
58
|
+
const matched = new Set();
|
|
59
|
+
for (const key of VERIFY_CALLBACK_KEYS) {
|
|
60
|
+
// Detect common object-literal forms in transpiled bundles:
|
|
61
|
+
// - onSpeechEvent: fn
|
|
62
|
+
// - onSpeechEvent(ctx) {}
|
|
63
|
+
// - { onSpeechEvent, ... } (shorthand)
|
|
64
|
+
const asProperty = new RegExp(`\\b${key}\\b\\s*:`);
|
|
65
|
+
const asMethod = new RegExp(`\\b${key}\\b\\s*\\(`);
|
|
66
|
+
const asShorthand = new RegExp(`\\b${key}\\b(?=\\s*[,}])`);
|
|
67
|
+
if (asProperty.test(bundleSource) ||
|
|
68
|
+
asMethod.test(bundleSource) ||
|
|
69
|
+
asShorthand.test(bundleSource)) {
|
|
70
|
+
matched.add(key);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return [...matched];
|
|
74
|
+
}
|
|
75
|
+
export function hasDefineAgentRegistration(bundleSource) {
|
|
76
|
+
return /\bdefineAgent\s*\(/.test(bundleSource);
|
|
77
|
+
}
|
|
34
78
|
//# sourceMappingURL=lib.js.map
|
package/dist/verify/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/verify/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-verify-start.d.ts","sourceRoot":"","sources":["../../src/verify/run-verify-start.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAoBzB,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAuJ5B"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { startSandboxedChild } from "../sandbox/start-child.js";
|
|
4
|
+
import { VERIFY_SESSION_ID, parseBundleArg, waitForSessionStartAck, } from "./lib.js";
|
|
5
|
+
const START_TIMEOUT_MS = 5000;
|
|
6
|
+
const MIN_NODE_MAJOR = 22;
|
|
7
|
+
function logLine(quiet, message) {
|
|
8
|
+
if (!quiet) {
|
|
9
|
+
process.stdout.write(`${message}\n`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function failCheck(checks, name, detail) {
|
|
13
|
+
checks.push({ name, ok: false, detail });
|
|
14
|
+
return { ok: false, checks, bundlePath: "" };
|
|
15
|
+
}
|
|
16
|
+
export async function runAgentVerifyStart(options = {}) {
|
|
17
|
+
const cwd = options.cwd ?? process.cwd();
|
|
18
|
+
const checks = [];
|
|
19
|
+
const quiet = options.quiet;
|
|
20
|
+
const bundlePath = options.bundlePath ??
|
|
21
|
+
parseBundleArg([], process.env, cwd);
|
|
22
|
+
logLine(quiet, "[@voicethere/agent verify-start]");
|
|
23
|
+
const nodeMajor = Number(process.versions.node.split(".")[0]);
|
|
24
|
+
if (!Number.isFinite(nodeMajor) || nodeMajor < MIN_NODE_MAJOR) {
|
|
25
|
+
return failCheck(checks, "Node.js version", `Node ${MIN_NODE_MAJOR}+ required; found ${process.version}`);
|
|
26
|
+
}
|
|
27
|
+
checks.push({
|
|
28
|
+
name: "Node.js version",
|
|
29
|
+
ok: true,
|
|
30
|
+
detail: process.version,
|
|
31
|
+
});
|
|
32
|
+
logLine(quiet, `✓ Node.js ${process.version}`);
|
|
33
|
+
const resolvedBundle = resolve(cwd, bundlePath);
|
|
34
|
+
if (!existsSync(resolvedBundle)) {
|
|
35
|
+
return failCheck(checks, "Bundle present", `Bundle not found: ${resolvedBundle}`);
|
|
36
|
+
}
|
|
37
|
+
checks.push({
|
|
38
|
+
name: "Bundle present",
|
|
39
|
+
ok: true,
|
|
40
|
+
detail: resolvedBundle,
|
|
41
|
+
});
|
|
42
|
+
logLine(quiet, `✓ Bundle present (${resolvedBundle})`);
|
|
43
|
+
const childMessages = [];
|
|
44
|
+
let childError;
|
|
45
|
+
let earlyExitCode;
|
|
46
|
+
let child;
|
|
47
|
+
try {
|
|
48
|
+
child = startSandboxedChild({
|
|
49
|
+
sessionId: VERIFY_SESSION_ID,
|
|
50
|
+
bundlePath: resolvedBundle,
|
|
51
|
+
onStderr: (message) => {
|
|
52
|
+
if (!quiet) {
|
|
53
|
+
process.stderr.write(`[child stderr] ${message}\n`);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
60
|
+
return failCheck(checks, "Sandbox spawn", detail);
|
|
61
|
+
}
|
|
62
|
+
const exitPromise = new Promise((resolveExit) => {
|
|
63
|
+
child.onExit((code) => {
|
|
64
|
+
earlyExitCode = code;
|
|
65
|
+
resolveExit(code);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
const stopChild = async () => {
|
|
69
|
+
child.kill("SIGTERM");
|
|
70
|
+
await exitPromise;
|
|
71
|
+
};
|
|
72
|
+
checks.push({
|
|
73
|
+
name: "Sandbox spawn",
|
|
74
|
+
ok: true,
|
|
75
|
+
detail: `pid ${child.pid}`,
|
|
76
|
+
});
|
|
77
|
+
logLine(quiet, `✓ Sandbox spawn (pid ${child.pid})`);
|
|
78
|
+
const hasPermissionFlag = child.execArgv.includes("--permission");
|
|
79
|
+
const hasReadAllowlist = child.execArgv.some((arg) => arg.startsWith("--allow-fs-read="));
|
|
80
|
+
if (!hasPermissionFlag || !hasReadAllowlist) {
|
|
81
|
+
await stopChild();
|
|
82
|
+
return failCheck(checks, "Sandbox flags", `Expected --permission and --allow-fs-read flags; got: ${child.execArgv.join(" ")}`);
|
|
83
|
+
}
|
|
84
|
+
checks.push({
|
|
85
|
+
name: "Sandbox flags",
|
|
86
|
+
ok: true,
|
|
87
|
+
detail: child.execArgv.join(" "),
|
|
88
|
+
});
|
|
89
|
+
logLine(quiet, "✓ Sandbox flags");
|
|
90
|
+
child.onMessage((message) => {
|
|
91
|
+
childMessages.push(message);
|
|
92
|
+
if (message.type === "agent_error") {
|
|
93
|
+
childError = message.message;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
child.send({
|
|
97
|
+
type: "session_start",
|
|
98
|
+
sessionId: VERIFY_SESSION_ID,
|
|
99
|
+
env: {
|
|
100
|
+
SESSION_ID: VERIFY_SESSION_ID,
|
|
101
|
+
PROJECT_ID: "local",
|
|
102
|
+
BUILD_ID: "verify-start",
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
try {
|
|
106
|
+
await waitForSessionStartAck(childMessages, VERIFY_SESSION_ID, START_TIMEOUT_MS);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
110
|
+
await stopChild();
|
|
111
|
+
return failCheck(checks, "Bundle startup", detail);
|
|
112
|
+
}
|
|
113
|
+
if (earlyExitCode !== undefined) {
|
|
114
|
+
await stopChild();
|
|
115
|
+
return failCheck(checks, "Bundle startup", `Child exited early with code ${earlyExitCode ?? "null"}`);
|
|
116
|
+
}
|
|
117
|
+
checks.push({ name: "Bundle startup", ok: true });
|
|
118
|
+
logLine(quiet, "✓ Bundle startup");
|
|
119
|
+
if (childError) {
|
|
120
|
+
await stopChild();
|
|
121
|
+
return failCheck(checks, "No agent errors", childError);
|
|
122
|
+
}
|
|
123
|
+
checks.push({ name: "No agent errors", ok: true });
|
|
124
|
+
logLine(quiet, "✓ No agent errors");
|
|
125
|
+
child.send({ type: "session_end", sessionId: VERIFY_SESSION_ID });
|
|
126
|
+
await stopChild();
|
|
127
|
+
logLine(quiet, "[@voicethere/agent verify-start] All checks passed.");
|
|
128
|
+
return { ok: true, checks, bundlePath: resolvedBundle };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=run-verify-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-verify-start.js","sourceRoot":"","sources":["../../src/verify/run-verify-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-verify.d.ts","sourceRoot":"","sources":["../../src/verify/run-verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-verify.d.ts","sourceRoot":"","sources":["../../src/verify/run-verify.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAsB,cAAc,CAClC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAkG5B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAQrE"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { buildAgentBundle } from "../build-bundle.js";
|
|
4
|
-
import {
|
|
5
|
-
import { VERIFY_SESSION_ID, parseBundleArg, waitForSpeak, } from "./lib.js";
|
|
6
|
-
const READY_MS = 300;
|
|
7
|
-
const SPEAK_TIMEOUT_MS = 5000;
|
|
4
|
+
import { detectVerifyCallbacks, hasDefineAgentRegistration, parseBundleArg, } from "./lib.js";
|
|
8
5
|
const MIN_NODE_MAJOR = 22;
|
|
9
|
-
function delay(ms) {
|
|
10
|
-
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
11
|
-
}
|
|
12
6
|
function logLine(quiet, message) {
|
|
13
7
|
if (!quiet) {
|
|
14
8
|
process.stdout.write(`${message}\n`);
|
|
@@ -29,7 +23,7 @@ export async function runAgentVerify(options = {}) {
|
|
|
29
23
|
logLine(quiet, "[@voicethere/agent verify]");
|
|
30
24
|
const nodeMajor = Number(process.versions.node.split(".")[0]);
|
|
31
25
|
if (!Number.isFinite(nodeMajor) || nodeMajor < MIN_NODE_MAJOR) {
|
|
32
|
-
return failCheck(checks, "Node.js version", `Node ${MIN_NODE_MAJOR}+ required
|
|
26
|
+
return failCheck(checks, "Node.js version", `Node ${MIN_NODE_MAJOR}+ required; found ${process.version}`);
|
|
33
27
|
}
|
|
34
28
|
checks.push({
|
|
35
29
|
name: "Node.js version",
|
|
@@ -70,97 +64,26 @@ export async function runAgentVerify(options = {}) {
|
|
|
70
64
|
detail: resolvedBundle,
|
|
71
65
|
});
|
|
72
66
|
logLine(quiet, `✓ Bundle present (${resolvedBundle})`);
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
let child;
|
|
77
|
-
try {
|
|
78
|
-
child = startSandboxedChild({
|
|
79
|
-
sessionId: VERIFY_SESSION_ID,
|
|
80
|
-
bundlePath: resolvedBundle,
|
|
81
|
-
onStderr: (message) => {
|
|
82
|
-
if (!quiet) {
|
|
83
|
-
process.stderr.write(`[child stderr] ${message}\n`);
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
90
|
-
return failCheck(checks, "Sandbox spawn", detail);
|
|
67
|
+
const bundleSource = readFileSync(resolvedBundle, "utf8");
|
|
68
|
+
if (!hasDefineAgentRegistration(bundleSource)) {
|
|
69
|
+
return failCheck(checks, "Agent registration", "Bundle must register handlers with defineAgent(...)");
|
|
91
70
|
}
|
|
92
71
|
checks.push({
|
|
93
|
-
name: "
|
|
72
|
+
name: "Agent registration",
|
|
94
73
|
ok: true,
|
|
95
|
-
detail:
|
|
96
|
-
});
|
|
97
|
-
logLine(quiet, `✓ Sandbox spawn (pid ${child.pid})`);
|
|
98
|
-
child.onMessage((message) => {
|
|
99
|
-
childMessages.push(message);
|
|
100
|
-
if (message.type === "log" && !quiet) {
|
|
101
|
-
process.stdout.write(`[child ${message.level}] ${message.message}\n`);
|
|
102
|
-
}
|
|
103
|
-
if (message.type === "agent_error") {
|
|
104
|
-
childError = message.message;
|
|
105
|
-
}
|
|
106
|
-
if (message.type === "speak" && !quiet) {
|
|
107
|
-
process.stdout.write(`[child speak] ${message.text}\n`);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
const exitPromise = new Promise((resolveExit) => {
|
|
111
|
-
child.onExit((code) => {
|
|
112
|
-
earlyExitCode = code;
|
|
113
|
-
resolveExit(code);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
child.send({
|
|
117
|
-
type: "session_start",
|
|
118
|
-
sessionId: VERIFY_SESSION_ID,
|
|
119
|
-
env: {
|
|
120
|
-
SESSION_ID: VERIFY_SESSION_ID,
|
|
121
|
-
PROJECT_ID: "local",
|
|
122
|
-
BUILD_ID: "verify",
|
|
123
|
-
},
|
|
74
|
+
detail: "defineAgent(...) detected",
|
|
124
75
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
76
|
+
logLine(quiet, "✓ Agent registration (defineAgent)");
|
|
77
|
+
const callbacks = detectVerifyCallbacks(bundleSource);
|
|
78
|
+
if (callbacks.length === 0) {
|
|
79
|
+
return failCheck(checks, "Bundle callbacks", "Expected at least one handler: onSpeechEvent, onUserSpeechFinal, onDataChannelMessage, or onDataChannelBinary");
|
|
128
80
|
}
|
|
129
|
-
checks.push({
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
sessionId: VERIFY_SESSION_ID,
|
|
134
|
-
event: { type: "user_speech_final", text: "hello from verify" },
|
|
81
|
+
checks.push({
|
|
82
|
+
name: "Bundle callbacks",
|
|
83
|
+
ok: true,
|
|
84
|
+
detail: callbacks.join(", "),
|
|
135
85
|
});
|
|
136
|
-
|
|
137
|
-
const speak = await waitForSpeak(childMessages, VERIFY_SESSION_ID, SPEAK_TIMEOUT_MS);
|
|
138
|
-
if (!speak.text.trim()) {
|
|
139
|
-
return failCheck(checks, "Speech response", "Child returned empty speak text for user_speech_final");
|
|
140
|
-
}
|
|
141
|
-
checks.push({
|
|
142
|
-
name: "Speech response",
|
|
143
|
-
ok: true,
|
|
144
|
-
detail: speak.text.trim(),
|
|
145
|
-
});
|
|
146
|
-
logLine(quiet, `✓ Speech response (${speak.text.trim()})`);
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
150
|
-
child.kill("SIGTERM");
|
|
151
|
-
await exitPromise;
|
|
152
|
-
return failCheck(checks, "Speech response", detail);
|
|
153
|
-
}
|
|
154
|
-
if (childError) {
|
|
155
|
-
child.kill("SIGTERM");
|
|
156
|
-
await exitPromise;
|
|
157
|
-
return failCheck(checks, "No agent errors", childError);
|
|
158
|
-
}
|
|
159
|
-
checks.push({ name: "No agent errors", ok: true });
|
|
160
|
-
logLine(quiet, "✓ No agent errors");
|
|
161
|
-
child.send({ type: "session_end", sessionId: VERIFY_SESSION_ID });
|
|
162
|
-
child.kill("SIGTERM");
|
|
163
|
-
await exitPromise;
|
|
86
|
+
logLine(quiet, `✓ Bundle callbacks (${callbacks.join(", ")})`);
|
|
164
87
|
logLine(quiet, "[@voicethere/agent verify] All checks passed.");
|
|
165
88
|
return { ok: true, checks, bundlePath: resolvedBundle };
|
|
166
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-verify.js","sourceRoot":"","sources":["../../src/verify/run-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"run-verify.js","sourceRoot":"","sources":["../../src/verify/run-verify.ts"],"names":[],"mappings":"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"}
|