@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 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
- A typical workflow is:
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 setup .
275
+ npx once doctor .
282
276
  ```
283
277
 
284
- Setup can install/configure the SDK, verify your API key, register a supported provider, and prepare local Once configuration.
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
- For Runtime HTTP protection, provide the exact target URL:
280
+ A typical first-run workflow is:
287
281
 
288
- ```bash
289
- npx once setup . --runtime-http=https://api.example.com/v1/action
282
+ ```text
283
+ doctor -> protect -> setup/integrate -> apply (when eligible)
290
284
  ```
291
285
 
292
- Runtime HTTP setup registers that exact URL in `allowed_urls` and requests `response_replay="required"` for that immutable provider version.
286
+ ### 1. Diagnose locally
293
287
 
294
- Only non-secret provider metadata is written to `.once/config.json`; the provider bearer token is not stored there.
288
+ ```bash
289
+ npx once doctor .
290
+ ```
295
291
 
296
- Plain `npx once setup .` preserves the existing provider-registration behavior and does not opt that provider version into HTTP response replay.
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 setup . --plan
295
+ npx once doctor . --protect
302
296
  ```
303
297
 
304
- ### 2. Scan for consequential operations
298
+ To explicitly verify a configured hosted Once connection as well:
305
299
 
306
300
  ```bash
307
- npx once scan .
301
+ npx once doctor . --connection
308
302
  ```
309
303
 
310
- The scanner looks locally for likely side-effecting operations that may benefit from Once protection.
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
- ### 3. Review protection candidates
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
- ### 4. Preview a patch
330
+ Generate per-callsite integration guidance:
339
331
 
340
332
  ```bash
341
- npx once protect . --all --patch
333
+ npx once protect . --all --snippets
342
334
  ```
343
335
 
344
- This generates a reviewable patch preview without directly modifying the application source.
336
+ ### 3. Set up Once when integration requires it
345
337
 
346
- You can also generate integration guidance:
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 protect . --all --snippets
347
+ npx once setup . --runtime-http=https://api.example.com/v1/action
350
348
  ```
351
349
 
352
- ### 5. Apply an eligible transformation
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 protect . --apply
359
+ npx once setup . --plan
356
360
  ```
357
361
 
358
- `--apply` is intentionally conservative.
362
+ ### 4. Use the standalone scanner when you want raw scan output
359
363
 
360
- Automatic application only proceeds for a narrowly supported callsite that is fully revalidated before modification.
364
+ ```bash
365
+ npx once scan .
366
+ ```
361
367
 
362
- 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.
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
- If there are zero or multiple PATCHABLE candidates, automatic apply is rejected rather than guessing.
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
- ### 6. Verify the connection
378
+ Apply exactly one eligible, revalidated transformation:
367
379
 
368
380
  ```bash
369
- npx once doctor
381
+ npx once protect . --apply
370
382
  ```
371
383
 
372
- `doctor` verifies that the SDK can reach the configured Once service.
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 { randomUUID } from "node:crypto";
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
- await runDoctor();
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type DoctorOptions = {
2
+ protect?: boolean;
3
+ connection?: boolean;
4
+ };
5
+ export declare function runDoctor(requestedPath: string, options?: DoctorOptions): Promise<void>;
6
+ //# sourceMappingURL=doctor.d.ts.map
@@ -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.7",
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",