@once-agent/sdk 0.1.7 → 0.1.9
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 +56 -39
- package/dist/cli.js +16 -55
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +6 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +188 -0
- package/dist/doctor.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -269,49 +269,41 @@ If the answer is yes, reuse the same operation ID.
|
|
|
269
269
|
|
|
270
270
|
The package includes the `once` CLI.
|
|
271
271
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
```text
|
|
275
|
-
setup -> scan -> protect -> apply -> doctor
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### 1. Set up Once
|
|
272
|
+
Start with Doctor:
|
|
279
273
|
|
|
280
274
|
```bash
|
|
281
|
-
npx once
|
|
275
|
+
npx once doctor .
|
|
282
276
|
```
|
|
283
277
|
|
|
284
|
-
|
|
278
|
+
Doctor is local and read-only by default. It does not require `ONCE_API_KEY`, does not upload source code, and does not change source files. It reports detected project metadata and likely consequential-operation candidates, then prints the exact `once protect` command for the next step.
|
|
285
279
|
|
|
286
|
-
|
|
280
|
+
A typical first-run workflow is:
|
|
287
281
|
|
|
288
|
-
```
|
|
289
|
-
|
|
282
|
+
```text
|
|
283
|
+
doctor -> protect -> setup/integrate -> apply (when eligible)
|
|
290
284
|
```
|
|
291
285
|
|
|
292
|
-
|
|
286
|
+
### 1. Diagnose locally
|
|
293
287
|
|
|
294
|
-
|
|
288
|
+
```bash
|
|
289
|
+
npx once doctor .
|
|
290
|
+
```
|
|
295
291
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
Preview setup without making changes:
|
|
292
|
+
Generate a review plan and per-callsite integration snippets without changing source:
|
|
299
293
|
|
|
300
294
|
```bash
|
|
301
|
-
npx once
|
|
295
|
+
npx once doctor . --protect
|
|
302
296
|
```
|
|
303
297
|
|
|
304
|
-
|
|
298
|
+
To explicitly verify a configured hosted Once connection as well:
|
|
305
299
|
|
|
306
300
|
```bash
|
|
307
|
-
npx once
|
|
301
|
+
npx once doctor . --connection
|
|
308
302
|
```
|
|
309
303
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
Source code is reviewed locally by the CLI. The scanner does not require uploading your source code.
|
|
304
|
+
Hosted connection verification requires `ONCE_API_KEY`. The default Doctor scan does not.
|
|
313
305
|
|
|
314
|
-
###
|
|
306
|
+
### 2. Review protection candidates
|
|
315
307
|
|
|
316
308
|
```bash
|
|
317
309
|
npx once protect .
|
|
@@ -335,41 +327,67 @@ This can create:
|
|
|
335
327
|
.once/protect-plan.json
|
|
336
328
|
```
|
|
337
329
|
|
|
338
|
-
|
|
330
|
+
Generate per-callsite integration guidance:
|
|
339
331
|
|
|
340
332
|
```bash
|
|
341
|
-
npx once protect . --all --
|
|
333
|
+
npx once protect . --all --snippets
|
|
342
334
|
```
|
|
343
335
|
|
|
344
|
-
|
|
336
|
+
### 3. Set up Once when integration requires it
|
|
345
337
|
|
|
346
|
-
|
|
338
|
+
```bash
|
|
339
|
+
npx once setup .
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Setup can install/configure the SDK, verify your API key, register a supported provider, and prepare local Once configuration.
|
|
343
|
+
|
|
344
|
+
For Runtime HTTP protection, provide the exact target URL:
|
|
347
345
|
|
|
348
346
|
```bash
|
|
349
|
-
npx once
|
|
347
|
+
npx once setup . --runtime-http=https://api.example.com/v1/action
|
|
350
348
|
```
|
|
351
349
|
|
|
352
|
-
|
|
350
|
+
Runtime HTTP setup registers that exact URL in `allowed_urls` and requests `response_replay="required"` for that immutable provider version.
|
|
351
|
+
|
|
352
|
+
Only non-secret provider metadata is written to `.once/config.json`; the provider bearer token is not stored there.
|
|
353
|
+
|
|
354
|
+
Plain `npx once setup .` preserves the existing provider-registration behavior and does not opt that provider version into HTTP response replay.
|
|
355
|
+
|
|
356
|
+
Preview setup without making changes:
|
|
353
357
|
|
|
354
358
|
```bash
|
|
355
|
-
npx once
|
|
359
|
+
npx once setup . --plan
|
|
356
360
|
```
|
|
357
361
|
|
|
358
|
-
|
|
362
|
+
### 4. Use the standalone scanner when you want raw scan output
|
|
359
363
|
|
|
360
|
-
|
|
364
|
+
```bash
|
|
365
|
+
npx once scan .
|
|
366
|
+
```
|
|
361
367
|
|
|
362
|
-
The
|
|
368
|
+
The scanner looks locally for likely side-effecting operations that may benefit from Once protection. Source code is reviewed locally by the CLI and is not uploaded.
|
|
363
369
|
|
|
364
|
-
|
|
370
|
+
### 5. Preview or apply an eligible transformation
|
|
371
|
+
|
|
372
|
+
Preview a patch without modifying application source:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
npx once protect . --all --patch
|
|
376
|
+
```
|
|
365
377
|
|
|
366
|
-
|
|
378
|
+
Apply exactly one eligible, revalidated transformation:
|
|
367
379
|
|
|
368
380
|
```bash
|
|
369
|
-
npx once
|
|
381
|
+
npx once protect . --apply
|
|
370
382
|
```
|
|
371
383
|
|
|
372
|
-
`
|
|
384
|
+
`--apply` is intentionally conservative.
|
|
385
|
+
|
|
386
|
+
Automatic application only proceeds for a narrowly supported callsite that is fully revalidated before modification.
|
|
387
|
+
|
|
388
|
+
The apply engine checks the source fingerprint, recomputes the proposed transformation, verifies TypeScript, writes a backup, uses a temporary file, verifies the result, and rolls back if post-write validation fails.
|
|
389
|
+
|
|
390
|
+
If there are zero or multiple PATCHABLE candidates, automatic apply is rejected rather than guessing.
|
|
373
391
|
|
|
374
392
|
## protect status meanings
|
|
375
393
|
|
|
@@ -516,4 +534,3 @@ That is the failure mode Once is built to address.
|
|
|
516
534
|
|
|
517
535
|
MIT
|
|
518
536
|
|
|
519
|
-
|
package/dist/cli.js
CHANGED
|
@@ -1,65 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { Once, OnceError } from "./index.js";
|
|
2
|
+
import { runDoctor } from "./doctor.js";
|
|
4
3
|
import { runScan } from "./scan.js";
|
|
5
4
|
import { runSetup } from "./setup.js";
|
|
6
5
|
import { runProtect } from "./protect.js";
|
|
7
6
|
import { applyProtectionPlan } from "./apply.js";
|
|
8
7
|
import { runBenchmark } from "./benchmark.js";
|
|
9
8
|
import { runTraceFetch } from "./trace.js";
|
|
10
|
-
async function runDoctor() {
|
|
11
|
-
console.log("");
|
|
12
|
-
console.log("Once Doctor");
|
|
13
|
-
console.log("-----------");
|
|
14
|
-
if (!process.env.ONCE_API_KEY) {
|
|
15
|
-
console.log("✗ ONCE_API_KEY is not set");
|
|
16
|
-
console.log("");
|
|
17
|
-
console.log("Set ONCE_API_KEY and run again.");
|
|
18
|
-
process.exitCode = 1;
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
console.log("✓ ONCE_API_KEY found");
|
|
22
|
-
try {
|
|
23
|
-
const once = new Once();
|
|
24
|
-
const operationId = "doctor-" +
|
|
25
|
-
randomUUID()
|
|
26
|
-
.replaceAll("-", "");
|
|
27
|
-
const truth = await once.truth(operationId);
|
|
28
|
-
console.log("✓ Once API reachable");
|
|
29
|
-
console.log("✓ API key accepted");
|
|
30
|
-
console.log("✓ Truth endpoint working");
|
|
31
|
-
if (truth.ledger_state !==
|
|
32
|
-
"ABSENT" ||
|
|
33
|
-
truth.side_effects !== 0) {
|
|
34
|
-
console.log("✗ Unexpected doctor probe result");
|
|
35
|
-
process.exitCode = 1;
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
console.log("✓ Safety probe passed");
|
|
39
|
-
console.log("");
|
|
40
|
-
console.log("Once is ready.");
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
if (error instanceof
|
|
44
|
-
OnceError) {
|
|
45
|
-
console.log(`✗ Once error: ${error.code ?? "unknown"}`);
|
|
46
|
-
if (error.status) {
|
|
47
|
-
console.log(` HTTP ${error.status}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
console.log("✗ Unexpected error");
|
|
52
|
-
console.error(error);
|
|
53
|
-
}
|
|
54
|
-
process.exitCode = 1;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
9
|
function printHelp() {
|
|
58
10
|
console.log("");
|
|
59
11
|
console.log("Once");
|
|
60
12
|
console.log("----");
|
|
61
13
|
console.log("");
|
|
62
14
|
console.log("Commands:");
|
|
15
|
+
console.log(" once doctor [directory] [--protect] [--connection]");
|
|
16
|
+
console.log(" Run the low-friction local safety check. No API key required.");
|
|
17
|
+
console.log(" Use --protect to generate a review plan and snippets without changing source.");
|
|
18
|
+
console.log(" Use --connection to also verify the hosted Once API connection.");
|
|
19
|
+
console.log("");
|
|
63
20
|
console.log(" once protect [directory]");
|
|
64
21
|
console.log(" Review candidate operations for Once protection.");
|
|
65
22
|
console.log(" Use --all to include all confidence levels.");
|
|
@@ -81,10 +38,10 @@ function printHelp() {
|
|
|
81
38
|
console.log(" once benchmark <trace.jsonl>");
|
|
82
39
|
console.log(" Measure hindsight opportunity separately from measured Once avoidance.");
|
|
83
40
|
console.log("");
|
|
84
|
-
console.log(" once doctor");
|
|
85
|
-
console.log(" Verify your Once connection.");
|
|
86
|
-
console.log("");
|
|
87
41
|
console.log("Examples:");
|
|
42
|
+
console.log(" once doctor .");
|
|
43
|
+
console.log(" once doctor . --protect");
|
|
44
|
+
console.log(" once doctor . --connection");
|
|
88
45
|
console.log(" once protect .");
|
|
89
46
|
console.log(" once protect . --all --write-plan");
|
|
90
47
|
console.log(" once protect . --all --patch");
|
|
@@ -93,16 +50,20 @@ function printHelp() {
|
|
|
93
50
|
console.log(" once scan .");
|
|
94
51
|
console.log(" once trace fetch https://api.github.com/repos/stringsofthemind-oss/once");
|
|
95
52
|
console.log(" once benchmark .once/agent-trace.jsonl");
|
|
96
|
-
console.log(" once doctor");
|
|
97
53
|
}
|
|
98
54
|
async function main() {
|
|
99
55
|
const args = process.argv.slice(2);
|
|
100
56
|
const command = (args.shift() ??
|
|
101
57
|
"doctor").toLowerCase();
|
|
102
58
|
switch (command) {
|
|
103
|
-
case "doctor":
|
|
104
|
-
|
|
59
|
+
case "doctor": {
|
|
60
|
+
const requestedPath = args.find(value => !value.startsWith("--")) ?? ".";
|
|
61
|
+
await runDoctor(requestedPath, {
|
|
62
|
+
protect: args.includes("--protect"),
|
|
63
|
+
connection: args.includes("--connection")
|
|
64
|
+
});
|
|
105
65
|
return;
|
|
66
|
+
}
|
|
106
67
|
case "trace": {
|
|
107
68
|
const subcommand = (args.shift() ?? "").toLowerCase();
|
|
108
69
|
if (subcommand !== "fetch") {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,OAAO,EACR,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CACT,sDAAsD,CACvD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,qFAAqF,CACtF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,uEAAuE,CACxE,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,CAC7B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,wDAAwD,CACzD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,mDAAmD,CACpD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,yDAAyD,CAC1D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,2DAA2D,CAC5D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,6EAA6E,CAC9E,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,wDAAwD,CACzD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,2CAA2C,CAC5C,CAAC;IACF,OAAO,CAAC,GAAG,CACT,iGAAiG,CAClG,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,yBAAyB,CAC1B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,qDAAqD,CACtD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,6DAA6D,CAC9D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,wFAAwF,CACzF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,gCAAgC,CACjC,CAAC;IACF,OAAO,CAAC,GAAG,CACT,8EAA8E,CAC/E,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CACT,iBAAiB,CAClB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,2BAA2B,CAC5B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,8BAA8B,CAC/B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,kBAAkB,CACnB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,qCAAqC,CACtC,CAAC;IACF,OAAO,CAAC,GAAG,CACT,gCAAgC,CACjC,CAAC;IACF,OAAO,CAAC,GAAG,CACT,0BAA0B,CAC3B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,gBAAgB,CACjB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAe,CAChB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,2EAA2E,CAC5E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,MAAM,OAAO,GACX,CACE,IAAI,CAAC,KAAK,EAAE;QACZ,QAAQ,CACT,CAAC,WAAW,EAAE,CAAC;IAElB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,IAAI,GAAG,CAAC;YAEX,MAAM,SAAS,CACb,aAAa,EACb;gBACE,OAAO,EACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC5B,UAAU,EACR,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;aAChC,CACF,CAAC;YAEF,OAAO;QACT,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAErC,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,CAAC;YAEJ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,8GAA8G,CAC/G,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GACpB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAClC,CAAC;YAEJ,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAC/B,CAAC;YAEJ,MAAM,aAAa,CACjB,QAAQ,EACR;gBACE,QAAQ,EACN,gBAAgB;oBACd,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;oBAClD,CAAC,CAAC,SAAS;gBACf,SAAS,EACP,aAAa;oBACX,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC5C,CAAC,CAAC,SAAS;aAChB,CACF,CAAC;YAEF,OAAO;QACT,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GACb,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,CAAC;YAEJ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,CACX,eAAe,CAChB,CAAC;YAEJ,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,IAAI,GAAG,CAAC;YAEX,MAAM,OAAO,CACX,aAAa,EACb,CAAC,UAAU,CACZ,CAAC;YAEF,OAAO;QACT,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,CACX,OAAO,CACR,CAAC;YAEJ,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CACX,cAAc,CACf,CAAC;YAEJ,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,CACX,SAAS,CACV,CAAC;YAEJ,MAAM,aAAa,GACjB,IAAI,CAAC,QAAQ,CACX,YAAY,CACb,CAAC;YAEJ,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,CACX,SAAS,CACV,CAAC;YAEJ,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,IAAI,GAAG,CAAC;YAEX,MAAM,UAAU,CACd,aAAa,EACb;gBACE,UAAU,EACR,KAAK;oBACH,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,UAAU;gBAChB,SAAS,EACP,KAAK;oBACH,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,SAAS;gBACf,UAAU;gBACV,aAAa;aACd,CACF,CAAC;YAEF,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,qBAAqB,CACtB,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,qBAAqB,CACtB,CAAC;gBAEF,IAAI,MAAM,CAAC;gBAEX,IAAI,CAAC;oBACH,MAAM;wBACJ,MAAM,mBAAmB,CACvB,aAAa,CACd,CAAC;gBACN,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GACX,MAAM,CACJ,KAAK,YAAY,KAAK;wBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,KAAK,CACV,CAAC;oBAEJ,IACE,OAAO,CAAC,QAAQ,CACd,mBAAmB,CACpB;wBACD,OAAO,CAAC,QAAQ,CACd,QAAQ,CACT,EACD,CAAC;wBACD,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;oBACJ,CAAC;oBAED,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,CAAC,GAAG,CACT,YAAY,MAAM,CAAC,IAAI,EAAE,CAC1B,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,UAAU,EAAE,CAC/B,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,+BAA+B,CAChC,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,yBAAyB,CAC1B,CAAC;YACJ,CAAC;YAED,OAAO;QACT,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CACX,OAAO,CACR,CAAC;YAEJ,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,CACX,QAAQ,CACT,CAAC;YAEJ,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CACX,gBAAgB,CACjB,CAAC;YAEJ,MAAM,mBAAmB,GACvB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,UAAU,CACd,iBAAiB,CAClB,CACJ,CAAC;YAEJ,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CACX,gBAAgB,CACjB;gBACD,OAAO,CACL,mBAAmB,CACpB,CAAC;YAEJ,MAAM,oBAAoB,GACxB,mBAAmB;gBACjB,CAAC,CAAC,mBAAmB;qBAChB,SAAS,CACR,iBAAiB,CAAC,MAAM,CACzB;qBACA,IAAI,EAAE;gBACX,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAC1B,IAAI,GAAG,CAAC;YAEX,MAAM,QAAQ,CACZ,aAAa,EACb;gBACE,WAAW;gBACX,QAAQ;gBACR,WAAW;gBACX,WAAW;gBACX,oBAAoB;aACrB,CACF,CAAC;YAEF,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,OAAO;QAET;YACE,OAAO,CAAC,GAAG,CACT,oBAAoB,OAAO,EAAE,CAC9B,CAAC;YACF,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,IAAI,CAAC;IACH,MAAM,IAAI,EAAE,CAAC;AACf,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CACX,sBAAsB,CACvB,CAAC;IAEF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAsIF,wBAAsB,SAAS,CAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Kf"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { Once, OnceError } from "./index.js";
|
|
5
|
+
import { collectSourceFiles, detectProjectMetadata, scanFile } from "./scan.js";
|
|
6
|
+
import { runProtect } from "./protect.js";
|
|
7
|
+
const standaloneCli = "npx --yes --package=@once-agent/sdk once";
|
|
8
|
+
function confidenceRank(confidence) {
|
|
9
|
+
switch (confidence) {
|
|
10
|
+
case "HIGH":
|
|
11
|
+
return 0;
|
|
12
|
+
case "MEDIUM":
|
|
13
|
+
return 1;
|
|
14
|
+
default:
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function versionAtLeast(current, required) {
|
|
19
|
+
const parts = current
|
|
20
|
+
.split(".")
|
|
21
|
+
.map(value => Number.parseInt(value, 10));
|
|
22
|
+
const actual = [
|
|
23
|
+
parts[0] ?? 0,
|
|
24
|
+
parts[1] ?? 0,
|
|
25
|
+
parts[2] ?? 0
|
|
26
|
+
];
|
|
27
|
+
for (let index = 0; index < 3; index++) {
|
|
28
|
+
if (actual[index] > required[index]) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (actual[index] < required[index]) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
function printableTarget(requestedPath) {
|
|
38
|
+
if (/^[A-Za-z0-9_./\\-]+$/.test(requestedPath)) {
|
|
39
|
+
return requestedPath;
|
|
40
|
+
}
|
|
41
|
+
return JSON.stringify(requestedPath);
|
|
42
|
+
}
|
|
43
|
+
function printCandidate(finding, index) {
|
|
44
|
+
const functionLabel = finding.functionName
|
|
45
|
+
? `${finding.functionName}()`
|
|
46
|
+
: "operation";
|
|
47
|
+
console.log(`${index + 1}. ${functionLabel} ${finding.file}:${finding.line}`);
|
|
48
|
+
console.log(` ${finding.confidence} · ${finding.category}`);
|
|
49
|
+
console.log(` ${finding.reason}`);
|
|
50
|
+
}
|
|
51
|
+
async function runConnectionDoctor() {
|
|
52
|
+
console.log("");
|
|
53
|
+
console.log("HOSTED CONNECTION");
|
|
54
|
+
console.log("-----------------");
|
|
55
|
+
if (!process.env.ONCE_API_KEY) {
|
|
56
|
+
console.log("✗ ONCE_API_KEY is not set");
|
|
57
|
+
console.log("");
|
|
58
|
+
console.log("Hosted connection verification needs ONCE_API_KEY. Local doctor scanning does not.");
|
|
59
|
+
process.exitCode = 1;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log("✓ ONCE_API_KEY found");
|
|
63
|
+
try {
|
|
64
|
+
const once = new Once();
|
|
65
|
+
const operationId = "doctor-" +
|
|
66
|
+
randomUUID().replaceAll("-", "");
|
|
67
|
+
const truth = await once.truth(operationId);
|
|
68
|
+
console.log("✓ Once API reachable");
|
|
69
|
+
console.log("✓ API key accepted");
|
|
70
|
+
console.log("✓ Truth endpoint working");
|
|
71
|
+
if (truth.ledger_state !== "ABSENT" ||
|
|
72
|
+
truth.side_effects !== 0) {
|
|
73
|
+
console.log("✗ Unexpected doctor probe result");
|
|
74
|
+
process.exitCode = 1;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
console.log("✓ Safety probe passed");
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof OnceError) {
|
|
81
|
+
console.log(`✗ Once error: ${error.code ?? "unknown"}`);
|
|
82
|
+
if (error.status) {
|
|
83
|
+
console.log(` HTTP ${error.status}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log("✗ Unexpected connection error");
|
|
88
|
+
console.error(error);
|
|
89
|
+
}
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function runDoctor(requestedPath, options = {}) {
|
|
94
|
+
const root = path.resolve(requestedPath);
|
|
95
|
+
const stat = await fs.stat(root);
|
|
96
|
+
if (!stat.isDirectory()) {
|
|
97
|
+
throw new Error("Doctor target must be a directory.");
|
|
98
|
+
}
|
|
99
|
+
console.log("");
|
|
100
|
+
console.log("Once Doctor");
|
|
101
|
+
console.log("-----------");
|
|
102
|
+
console.log(`Directory: ${root}`);
|
|
103
|
+
console.log("Mode: local + read-only");
|
|
104
|
+
console.log("Source uploaded: no");
|
|
105
|
+
console.log("API key required: no");
|
|
106
|
+
const nodeVersion = process.versions.node;
|
|
107
|
+
const cliReady = versionAtLeast(nodeVersion, [18, 0, 0]);
|
|
108
|
+
const localReady = versionAtLeast(nodeVersion, [24, 15, 0]);
|
|
109
|
+
console.log("");
|
|
110
|
+
console.log("ENVIRONMENT");
|
|
111
|
+
console.log("-----------");
|
|
112
|
+
console.log(`${cliReady ? "✓" : "✗"} Node.js ${nodeVersion} ${cliReady ? "supports the Once CLI" : "is below the supported CLI minimum (18+)"}`);
|
|
113
|
+
console.log(`${localReady ? "✓" : "!"} protectLocal ${localReady ? "runtime ready" : "needs Node.js 24.15+"}`);
|
|
114
|
+
const metadata = await detectProjectMetadata(root);
|
|
115
|
+
const files = await collectSourceFiles(root);
|
|
116
|
+
const findings = [];
|
|
117
|
+
for (const file of files) {
|
|
118
|
+
findings.push(...await scanFile(root, file));
|
|
119
|
+
}
|
|
120
|
+
const sorted = [...findings].sort((a, b) => confidenceRank(a.confidence) -
|
|
121
|
+
confidenceRank(b.confidence) ||
|
|
122
|
+
a.file.localeCompare(b.file) ||
|
|
123
|
+
a.line - b.line);
|
|
124
|
+
const high = findings.filter(finding => finding.confidence === "HIGH").length;
|
|
125
|
+
const medium = findings.filter(finding => finding.confidence === "MEDIUM").length;
|
|
126
|
+
const low = findings.filter(finding => finding.confidence === "LOW").length;
|
|
127
|
+
console.log("");
|
|
128
|
+
console.log("PROJECT");
|
|
129
|
+
console.log("-------");
|
|
130
|
+
console.log(`Files scanned: ${files.length}`);
|
|
131
|
+
if (metadata.languages.length > 0) {
|
|
132
|
+
console.log(`Languages: ${metadata.languages.join(", ")}`);
|
|
133
|
+
}
|
|
134
|
+
if (metadata.tooling.length > 0) {
|
|
135
|
+
console.log(`Tooling: ${metadata.tooling.join(", ")}`);
|
|
136
|
+
}
|
|
137
|
+
console.log("");
|
|
138
|
+
console.log("SAFETY FINDINGS");
|
|
139
|
+
console.log("---------------");
|
|
140
|
+
console.log(`Consequential-operation candidates: ${findings.length}`);
|
|
141
|
+
console.log(`HIGH ${high} MEDIUM ${medium} LOW ${low}`);
|
|
142
|
+
if (sorted.length === 0) {
|
|
143
|
+
console.log("");
|
|
144
|
+
console.log("No obvious consequential operations were detected.");
|
|
145
|
+
console.log("This does not prove the project has no side effects.");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log("");
|
|
149
|
+
for (const [index, finding] of sorted.slice(0, 8).entries()) {
|
|
150
|
+
printCandidate(finding, index);
|
|
151
|
+
}
|
|
152
|
+
if (sorted.length > 8) {
|
|
153
|
+
console.log("");
|
|
154
|
+
console.log(`... ${sorted.length - 8} additional candidates. Run ${standaloneCli} scan ${printableTarget(requestedPath)} --no-estimate for the full local scan.`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
console.log("");
|
|
158
|
+
console.log("NEXT STEP");
|
|
159
|
+
console.log("---------");
|
|
160
|
+
if (findings.length > 0) {
|
|
161
|
+
console.log("Review protection guidance without changing source code:");
|
|
162
|
+
console.log(` ${standaloneCli} protect ${printableTarget(requestedPath)} --all --snippets`);
|
|
163
|
+
console.log("");
|
|
164
|
+
console.log("Generate a machine-readable protection plan:");
|
|
165
|
+
console.log(` ${standaloneCli} protect ${printableTarget(requestedPath)} --all --write-plan`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log("If you know a consequential operation exists, review the full scanner output:");
|
|
169
|
+
console.log(` ${standaloneCli} scan ${printableTarget(requestedPath)} --no-estimate`);
|
|
170
|
+
}
|
|
171
|
+
console.log("");
|
|
172
|
+
console.log("No source files were changed. Detection is heuristic; review candidates before applying protection.");
|
|
173
|
+
if (options.protect) {
|
|
174
|
+
console.log("");
|
|
175
|
+
console.log("PROTECTION REVIEW");
|
|
176
|
+
console.log("-----------------");
|
|
177
|
+
console.log("Generating .once/protect-plan.json and integration snippets. Source files will remain unchanged.");
|
|
178
|
+
await runProtect(requestedPath, {
|
|
179
|
+
includeAll: true,
|
|
180
|
+
writePlan: true,
|
|
181
|
+
writeSnippets: true
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (options.connection) {
|
|
185
|
+
await runConnectionDoctor();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@once-agent/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Execution safety for side-effecting AI agent tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,11 +26,12 @@
|
|
|
26
26
|
"test:dataset-seal": "npm run build && node ./scripts/dataset-seal-regression.mjs",
|
|
27
27
|
"test:dataset-progress": "npm run build && node ./scripts/dataset-progress-regression.mjs",
|
|
28
28
|
"test:agent-discovery": "node ./scripts/agent-discovery-regression.mjs",
|
|
29
|
+
"test:doctor": "npm run build && node ./scripts/doctor-adoption-regression.mjs",
|
|
29
30
|
"routing:check": "node ./scripts/agent-routing-conformance.mjs",
|
|
30
31
|
"routing:cases": "node ./scripts/agent-routing-conformance.mjs --emit-cases",
|
|
31
32
|
"test:routing-conformance": "node ./scripts/agent-routing-conformance-regression.mjs",
|
|
32
33
|
"test:contract": "npm run build && tsc --noEmit --target ES2022 --module NodeNext --moduleResolution NodeNext --strict --types node ./scripts/sdk-contract-types.ts && node ./scripts/sdk-contract-runtime.mjs",
|
|
33
|
-
"test:release": "npm run benchmark:scan && npm run test:benchmark && npm run test:trace && npm run test:dataset-seal && npm run test:dataset-progress && npm run test:agent-discovery && npm run test:routing-conformance && npm run test:scanner-declarations && npm run test:contract && npm run test:protect && npm run test:capabilities && npm run test:transformer && npm run test:binding && npm run test:patch-planner && npm run test:transformer-protect && npm run test:apply && npm run test:id-conformance && npm run test:consumer && npm run test:activation && npm run test:package && npm run test:runtime-setup && npm run test:connect",
|
|
34
|
+
"test:release": "npm run benchmark:scan && npm run test:benchmark && npm run test:trace && npm run test:dataset-seal && npm run test:dataset-progress && npm run test:agent-discovery && npm run test:doctor && npm run test:routing-conformance && npm run test:scanner-declarations && npm run test:contract && npm run test:protect && npm run test:capabilities && npm run test:transformer && npm run test:binding && npm run test:patch-planner && npm run test:transformer-protect && npm run test:apply && npm run test:id-conformance && npm run test:consumer && npm run test:activation && npm run test:package && npm run test:runtime-setup && npm run test:connect",
|
|
34
35
|
"test:local": "npm run build && node --test ./test/local.test.mjs",
|
|
35
36
|
"test:connect": "npm run build && node --test ./test/connect/*.test.mjs",
|
|
36
37
|
"test:protect": "npm run build && node ./scripts/protect-regression.mjs",
|