run402 4.16.0 → 4.17.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.
@@ -0,0 +1,300 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import {
4
+ mkdirSync,
5
+ readFileSync,
6
+ rmSync,
7
+ writeFileSync,
8
+ } from "node:fs";
9
+ import { dirname, join } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { apiBase, configDir } from "./config.mjs";
12
+ import { currentRun402Version } from "./update-check.mjs";
13
+
14
+ export const DIAGNOSTIC_TELEMETRY_SCHEMA_VERSION = 1;
15
+ export const DIAGNOSTIC_TELEMETRY_FLOW_VERSION = "run402.buzz-doctor.v1";
16
+ export const DIAGNOSTIC_TELEMETRY_BUZZ_FIXTURE_ID = "buzz-cli-v0.5.2-capabilities";
17
+ export const DIAGNOSTIC_TELEMETRY_RETENTION_MS = 24 * 60 * 60 * 1000;
18
+ export const DIAGNOSTIC_TELEMETRY_MAX_EVENTS = 32;
19
+ export const DIAGNOSTIC_TELEMETRY_MAX_QUEUE_BYTES = 16 * 1024;
20
+ export const DIAGNOSTIC_TELEMETRY_TIMEOUT_MS = 2_000;
21
+
22
+ export const DIAGNOSTIC_TELEMETRY_FIELDS = Object.freeze([
23
+ "event_id",
24
+ "event_at",
25
+ "schema_version",
26
+ "flow_version",
27
+ "event",
28
+ "check_name",
29
+ "code",
30
+ "os_family",
31
+ "node_major",
32
+ "run402_major",
33
+ "run402_minor",
34
+ "buzz_fixture_id",
35
+ "install_context",
36
+ ]);
37
+
38
+ const ALLOWED_EVENTS = new Set(["preflight_started", "preflight_passed", "preflight_blocked"]);
39
+ const ALLOWED_CHECKS = new Set([
40
+ "session_shell", "node_runtime", "run402_cli", "buzz_cli", "buzz_agent_target",
41
+ "run402_api", "run402_console", "buzz_relay", "wallet_profile",
42
+ ]);
43
+ const ALLOWED_CODES = new Set([
44
+ "BUZZ_PREFLIGHT_SHELL_UNAVAILABLE",
45
+ "BUZZ_PREFLIGHT_NODE_UNAVAILABLE", "BUZZ_PREFLIGHT_NODE_INCOMPATIBLE",
46
+ "BUZZ_PREFLIGHT_RUN402_UNAVAILABLE", "BUZZ_PREFLIGHT_RUN402_INCOMPATIBLE",
47
+ "BUZZ_PREFLIGHT_RUN402_UPDATE_AVAILABLE",
48
+ "BUZZ_PREFLIGHT_BUZZ_CLI_UNAVAILABLE", "BUZZ_PREFLIGHT_BUZZ_CLI_INCOMPATIBLE",
49
+ "BUZZ_AGENT_TARGET_REQUIRED", "BUZZ_AGENT_TARGET_UNVERIFIED", "BUZZ_AGENT_TARGET_MISMATCH",
50
+ "BUZZ_PREFLIGHT_API_UNREACHABLE", "BUZZ_PREFLIGHT_CONSOLE_UNREACHABLE",
51
+ "BUZZ_PREFLIGHT_RELAY_UNSAFE", "BUZZ_PREFLIGHT_RELAY_UNREACHABLE",
52
+ "BUZZ_PREFLIGHT_WALLET_PROFILE_REQUIRED", "BUZZ_PREFLIGHT_WALLET_PROFILE_NOT_FOUND",
53
+ "BUZZ_PREFLIGHT_WALLET_PROFILE_MISMATCH",
54
+ ]);
55
+ const ALLOWED_INSTALL_CONTEXTS = new Set([
56
+ "project_local", "user_global_npm", "ephemeral_exec", "managed_buzz_sidecar", "custom_path", "unknown",
57
+ ]);
58
+ const ALLOWED_OS_FAMILIES = new Set(["macos", "linux", "windows", "other"]);
59
+ const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
60
+
61
+ export function diagnosticTelemetryQueuePath({ dir = configDir() } = {}) {
62
+ return join(dir, "diagnostic-events-v1.json");
63
+ }
64
+
65
+ export function isDiagnosticTelemetryDisabled(env = process.env) {
66
+ return env.RUN402_TELEMETRY === "0";
67
+ }
68
+
69
+ function coarseOsFamily(platform = process.platform) {
70
+ if (platform === "darwin") return "macos";
71
+ if (platform === "linux") return "linux";
72
+ if (platform === "win32") return "windows";
73
+ return "other";
74
+ }
75
+
76
+ function versionParts(value) {
77
+ const match = String(value ?? "").match(/^(\d+)\.(\d+)/);
78
+ return {
79
+ major: Number(match?.[1] ?? 0),
80
+ minor: Number(match?.[2] ?? 0),
81
+ };
82
+ }
83
+
84
+ function installContext(report) {
85
+ const observed = report?.checks?.find((check) => check?.name === "run402_cli")?.value?.install_context;
86
+ switch (observed) {
87
+ case "local_project": return "project_local";
88
+ case "global_npm": return "user_global_npm";
89
+ case "ephemeral_exec": return "ephemeral_exec";
90
+ case "managed_buzz_sidecar": return "managed_buzz_sidecar";
91
+ case "custom_path":
92
+ case "package_manager_shim": return "custom_path";
93
+ default: return "unknown";
94
+ }
95
+ }
96
+
97
+ function nodeMajor(report) {
98
+ const value = report?.checks?.find((check) => check?.name === "node_runtime")?.value?.major;
99
+ return Number.isSafeInteger(value) && value >= 0 && value <= 999 ? value : 0;
100
+ }
101
+
102
+ export function buildDiagnosticTelemetryEvent({
103
+ report,
104
+ event,
105
+ eventAt = new Date().toISOString(),
106
+ eventId = randomUUID(),
107
+ platform = process.platform,
108
+ run402Version = currentRun402Version(),
109
+ } = {}) {
110
+ if (!ALLOWED_EVENTS.has(event)) throw new Error("Unsupported diagnostic telemetry event");
111
+ const blocked = event === "preflight_blocked"
112
+ ? report?.checks?.find((check) => check?.status === "blocked")
113
+ : null;
114
+ if (event === "preflight_blocked" &&
115
+ (!ALLOWED_CHECKS.has(blocked?.name) || !ALLOWED_CODES.has(blocked?.code))) {
116
+ throw new Error("Blocked diagnostic telemetry requires one frozen check/code pair");
117
+ }
118
+ const version = versionParts(run402Version);
119
+ return {
120
+ event_id: eventId,
121
+ event_at: eventAt,
122
+ schema_version: DIAGNOSTIC_TELEMETRY_SCHEMA_VERSION,
123
+ flow_version: DIAGNOSTIC_TELEMETRY_FLOW_VERSION,
124
+ event,
125
+ check_name: blocked?.name ?? null,
126
+ code: blocked?.code ?? null,
127
+ os_family: coarseOsFamily(platform),
128
+ node_major: nodeMajor(report),
129
+ run402_major: version.major,
130
+ run402_minor: version.minor,
131
+ buzz_fixture_id: DIAGNOSTIC_TELEMETRY_BUZZ_FIXTURE_ID,
132
+ install_context: installContext(report),
133
+ };
134
+ }
135
+
136
+ function isRedactedEvent(value) {
137
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
138
+ if (Object.keys(value).length !== DIAGNOSTIC_TELEMETRY_FIELDS.length) return false;
139
+ if (!DIAGNOSTIC_TELEMETRY_FIELDS.every((field) => Object.hasOwn(value, field))) return false;
140
+ if (!ALLOWED_EVENTS.has(value.event)) return false;
141
+ if (value.event === "preflight_blocked") {
142
+ if (!ALLOWED_CHECKS.has(value.check_name) || !ALLOWED_CODES.has(value.code)) return false;
143
+ } else if (value.check_name !== null || value.code !== null) {
144
+ return false;
145
+ }
146
+ return value.schema_version === DIAGNOSTIC_TELEMETRY_SCHEMA_VERSION &&
147
+ value.flow_version === DIAGNOSTIC_TELEMETRY_FLOW_VERSION &&
148
+ value.buzz_fixture_id === DIAGNOSTIC_TELEMETRY_BUZZ_FIXTURE_ID &&
149
+ ALLOWED_INSTALL_CONTEXTS.has(value.install_context) &&
150
+ ALLOWED_OS_FAMILIES.has(value.os_family) &&
151
+ [value.node_major, value.run402_major, value.run402_minor]
152
+ .every((part) => Number.isSafeInteger(part) && part >= 0 && part <= 999) &&
153
+ typeof value.event_at === "string" && new Date(value.event_at).toISOString() === value.event_at &&
154
+ typeof value.event_id === "string" && UUID_V4_RE.test(value.event_id);
155
+ }
156
+
157
+ export function readDiagnosticTelemetryQueue({
158
+ path = diagnosticTelemetryQueuePath(),
159
+ now = Date.now(),
160
+ } = {}) {
161
+ try {
162
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
163
+ if (parsed?.schema_version !== 1 || !Array.isArray(parsed.events)) return [];
164
+ return parsed.events.filter((event) =>
165
+ isRedactedEvent(event) && now - Date.parse(event.event_at) <= DIAGNOSTIC_TELEMETRY_RETENTION_MS,
166
+ ).slice(-DIAGNOSTIC_TELEMETRY_MAX_EVENTS);
167
+ } catch {
168
+ return [];
169
+ }
170
+ }
171
+
172
+ export function writeDiagnosticTelemetryQueue(events, {
173
+ path = diagnosticTelemetryQueuePath(),
174
+ now = Date.now(),
175
+ } = {}) {
176
+ try {
177
+ let bounded = events.filter((event) =>
178
+ isRedactedEvent(event) && now - Date.parse(event.event_at) <= DIAGNOSTIC_TELEMETRY_RETENTION_MS,
179
+ ).slice(-DIAGNOSTIC_TELEMETRY_MAX_EVENTS);
180
+ let payload = `${JSON.stringify({ schema_version: 1, events: bounded })}\n`;
181
+ while (bounded.length > 0 && Buffer.byteLength(payload, "utf8") > DIAGNOSTIC_TELEMETRY_MAX_QUEUE_BYTES) {
182
+ bounded = bounded.slice(1);
183
+ payload = `${JSON.stringify({ schema_version: 1, events: bounded })}\n`;
184
+ }
185
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
186
+ writeFileSync(path, payload, { mode: 0o600 });
187
+ return true;
188
+ } catch {
189
+ return false;
190
+ }
191
+ }
192
+
193
+ function removeDiagnosticTelemetryQueue(path) {
194
+ try { rmSync(path, { force: true }); } catch { /* best-effort opt-out */ }
195
+ }
196
+
197
+ export function queueBuzzDoctorTelemetry(report, {
198
+ env = process.env,
199
+ path = diagnosticTelemetryQueuePath(),
200
+ startedAt = Date.now(),
201
+ finishedAt = Date.now(),
202
+ createEventId = randomUUID,
203
+ platform = process.platform,
204
+ run402Version = currentRun402Version(),
205
+ launchWorker = launchDiagnosticTelemetryWorker,
206
+ } = {}) {
207
+ if (isDiagnosticTelemetryDisabled(env)) {
208
+ removeDiagnosticTelemetryQueue(path);
209
+ return { status: "disabled", queued: false };
210
+ }
211
+ try {
212
+ const finalEvent = report?.ok ? "preflight_passed" : "preflight_blocked";
213
+ const added = [
214
+ buildDiagnosticTelemetryEvent({
215
+ report,
216
+ event: "preflight_started",
217
+ eventAt: new Date(startedAt).toISOString(),
218
+ eventId: createEventId(),
219
+ platform,
220
+ run402Version,
221
+ }),
222
+ buildDiagnosticTelemetryEvent({
223
+ report,
224
+ event: finalEvent,
225
+ eventAt: new Date(finishedAt).toISOString(),
226
+ eventId: createEventId(),
227
+ platform,
228
+ run402Version,
229
+ }),
230
+ ];
231
+ const queued = [...readDiagnosticTelemetryQueue({ path, now: finishedAt }), ...added];
232
+ if (!writeDiagnosticTelemetryQueue(queued, { path, now: finishedAt })) {
233
+ return { status: "dropped", queued: false };
234
+ }
235
+ try { launchWorker({ path, env }); } catch { /* queue remains for a later connection */ }
236
+ return { status: "queued", queued: true };
237
+ } catch {
238
+ return { status: "dropped", queued: false };
239
+ }
240
+ }
241
+
242
+ export function launchDiagnosticTelemetryWorker({ path, env = process.env } = {}) {
243
+ const child = spawn(process.execPath, [
244
+ fileURLToPath(new URL("./diagnostic-telemetry-worker.mjs", import.meta.url)),
245
+ path ?? diagnosticTelemetryQueuePath(),
246
+ apiBase(),
247
+ ], {
248
+ detached: true,
249
+ stdio: "ignore",
250
+ env,
251
+ windowsHide: true,
252
+ });
253
+ child.unref();
254
+ }
255
+
256
+ export async function flushDiagnosticTelemetryQueue({
257
+ path = diagnosticTelemetryQueuePath(),
258
+ apiOrigin = apiBase(),
259
+ env = process.env,
260
+ fetchImpl = globalThis.fetch,
261
+ timeoutMs = DIAGNOSTIC_TELEMETRY_TIMEOUT_MS,
262
+ now = Date.now(),
263
+ } = {}) {
264
+ if (isDiagnosticTelemetryDisabled(env)) {
265
+ removeDiagnosticTelemetryQueue(path);
266
+ return { sent: 0, retained: 0, status: "disabled" };
267
+ }
268
+ const events = readDiagnosticTelemetryQueue({ path, now });
269
+ const retained = [];
270
+ let sent = 0;
271
+ for (let index = 0; index < events.length; index += 1) {
272
+ const event = events[index];
273
+ const controller = new AbortController();
274
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
275
+ try {
276
+ const response = await fetchImpl(new URL("/client-diagnostic-events/v1", apiOrigin), {
277
+ method: "POST",
278
+ headers: { "content-type": "application/json" },
279
+ body: JSON.stringify(event),
280
+ signal: controller.signal,
281
+ });
282
+ if (response.status === 204) {
283
+ sent += 1;
284
+ } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {
285
+ // A non-retryable schema rejection is safest to drop. The calling
286
+ // doctor has already completed and cannot be affected.
287
+ } else {
288
+ retained.push(event, ...events.slice(index + 1));
289
+ break;
290
+ }
291
+ } catch {
292
+ retained.push(event, ...events.slice(index + 1));
293
+ break;
294
+ } finally {
295
+ clearTimeout(timer);
296
+ }
297
+ }
298
+ writeDiagnosticTelemetryQueue(retained, { path, now: Date.now() });
299
+ return { sent, retained: retained.length, status: retained.length > 0 ? "queued" : "flushed" };
300
+ }
@@ -0,0 +1,181 @@
1
+ import { describe, it } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { mkdtempSync, readFileSync, statSync, writeFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { tmpdir } from "node:os";
6
+ import {
7
+ DIAGNOSTIC_TELEMETRY_FIELDS,
8
+ DIAGNOSTIC_TELEMETRY_MAX_EVENTS,
9
+ buildDiagnosticTelemetryEvent,
10
+ flushDiagnosticTelemetryQueue,
11
+ queueBuzzDoctorTelemetry,
12
+ readDiagnosticTelemetryQueue,
13
+ writeDiagnosticTelemetryQueue,
14
+ } from "./diagnostic-telemetry.mjs";
15
+
16
+ function report({ ok = false } = {}) {
17
+ return {
18
+ ok,
19
+ mode: "buzz",
20
+ binding: {
21
+ expected_subject_hex: "a".repeat(64),
22
+ wallet_profile: "buzz-fizz",
23
+ relay_origin: "wss://relay.private.example",
24
+ },
25
+ checks: [
26
+ { name: "node_runtime", status: "ok", value: { major: 22, executable: "/private/node" } },
27
+ { name: "run402_cli", status: "ok", value: { install_context: "global_npm", executable: "/private/run402" } },
28
+ ...(ok ? [] : [{ name: "run402_api", status: "blocked", code: "BUZZ_PREFLIGHT_API_UNREACHABLE", message: "secret output" }]),
29
+ ],
30
+ };
31
+ }
32
+
33
+ function queueFile() {
34
+ return join(mkdtempSync(join(tmpdir(), "run402-diag-")), "queue.json");
35
+ }
36
+
37
+ function eventId(index) {
38
+ return `123e4567-e89b-42d3-a456-${String(index).padStart(12, "0")}`;
39
+ }
40
+
41
+ describe("Buzz diagnostic telemetry", () => {
42
+ it("builds an exact allowlisted event and ignores sensitive report fields", () => {
43
+ const event = buildDiagnosticTelemetryEvent({
44
+ report: report(),
45
+ event: "preflight_blocked",
46
+ eventAt: "2026-07-31T12:00:00.000Z",
47
+ eventId: eventId(1),
48
+ platform: "darwin",
49
+ run402Version: "4.16.1",
50
+ });
51
+ assert.deepEqual(Object.keys(event), DIAGNOSTIC_TELEMETRY_FIELDS);
52
+ assert.deepEqual(event, {
53
+ event_id: eventId(1),
54
+ event_at: "2026-07-31T12:00:00.000Z",
55
+ schema_version: 1,
56
+ flow_version: "run402.buzz-doctor.v1",
57
+ event: "preflight_blocked",
58
+ check_name: "run402_api",
59
+ code: "BUZZ_PREFLIGHT_API_UNREACHABLE",
60
+ os_family: "macos",
61
+ node_major: 22,
62
+ run402_major: 4,
63
+ run402_minor: 16,
64
+ buzz_fixture_id: "buzz-cli-v0.5.2-capabilities",
65
+ install_context: "user_global_npm",
66
+ });
67
+ const json = JSON.stringify(event);
68
+ for (const forbidden of ["buzz-fizz", "relay.private.example", "/private/node", "/private/run402", "secret output", "a".repeat(64)]) {
69
+ assert.equal(json.includes(forbidden), false);
70
+ }
71
+ });
72
+
73
+ it("queues start plus final state without mutating the doctor verdict", () => {
74
+ const path = queueFile();
75
+ const original = report();
76
+ const before = structuredClone(original);
77
+ let launched = 0;
78
+ let ids = 0;
79
+ const disposition = queueBuzzDoctorTelemetry(original, {
80
+ path,
81
+ startedAt: Date.parse("2026-07-31T12:00:00.000Z"),
82
+ finishedAt: Date.parse("2026-07-31T12:00:01.000Z"),
83
+ createEventId: () => eventId(++ids),
84
+ launchWorker: () => { launched += 1; },
85
+ platform: "linux",
86
+ run402Version: "4.16.1",
87
+ });
88
+ assert.deepEqual(disposition, { status: "queued", queued: true });
89
+ assert.deepEqual(original, before);
90
+ assert.equal(launched, 1);
91
+ assert.deepEqual(readDiagnosticTelemetryQueue({ path, now: Date.parse("2026-07-31T12:00:02.000Z") }).map((entry) => entry.event), [
92
+ "preflight_started",
93
+ "preflight_blocked",
94
+ ]);
95
+ assert.equal(statSync(path).mode & 0o777, 0o600);
96
+ });
97
+
98
+ it("opt-out sends nothing, queues nothing, and removes an old redacted queue", () => {
99
+ const path = queueFile();
100
+ writeFileSync(path, "old queue");
101
+ let launched = 0;
102
+ const disposition = queueBuzzDoctorTelemetry(report({ ok: true }), {
103
+ env: { RUN402_TELEMETRY: "0" },
104
+ path,
105
+ launchWorker: () => { launched += 1; },
106
+ });
107
+ assert.deepEqual(disposition, { status: "disabled", queued: false });
108
+ assert.equal(launched, 0);
109
+ assert.deepEqual(readDiagnosticTelemetryQueue({ path }), []);
110
+ });
111
+
112
+ it("drops corrupt or unwritable queue state without changing diagnostics", () => {
113
+ const path = queueFile();
114
+ writeFileSync(path, "{not json");
115
+ let ids = 0;
116
+ const recovered = queueBuzzDoctorTelemetry(report({ ok: true }), {
117
+ path,
118
+ createEventId: () => eventId(++ids),
119
+ launchWorker: () => { throw new Error("spawn denied"); },
120
+ });
121
+ assert.deepEqual(recovered, { status: "queued", queued: true });
122
+ assert.equal(readDiagnosticTelemetryQueue({ path }).length, 2);
123
+
124
+ const dropped = queueBuzzDoctorTelemetry(report(), {
125
+ path: "/dev/null/not-writable.json",
126
+ createEventId: () => eventId(++ids),
127
+ launchWorker: () => {},
128
+ });
129
+ assert.deepEqual(dropped, { status: "dropped", queued: false });
130
+ });
131
+
132
+ it("bounds retained redacted events by age, count, and bytes", () => {
133
+ const path = queueFile();
134
+ const now = Date.parse("2026-07-31T12:00:00.000Z");
135
+ const events = Array.from({ length: 48 }, (_, index) => buildDiagnosticTelemetryEvent({
136
+ report: report({ ok: true }),
137
+ event: "preflight_passed",
138
+ eventAt: new Date(now - index * 1_000).toISOString(),
139
+ eventId: eventId(index),
140
+ run402Version: "4.16.1",
141
+ }));
142
+ assert.equal(writeDiagnosticTelemetryQueue(events, { path, now }), true);
143
+ const retained = readDiagnosticTelemetryQueue({ path, now });
144
+ assert.ok(retained.length <= DIAGNOSTIC_TELEMETRY_MAX_EVENTS);
145
+ assert.ok(Buffer.byteLength(readFileSync(path)) <= 16 * 1024);
146
+ });
147
+
148
+ it("flushes without credentials and retains only retryable failures", async () => {
149
+ const path = queueFile();
150
+ const now = Date.now();
151
+ const events = [1, 2].map((index) => buildDiagnosticTelemetryEvent({
152
+ report: report({ ok: true }),
153
+ event: "preflight_passed",
154
+ eventAt: new Date(now).toISOString(),
155
+ eventId: eventId(index),
156
+ run402Version: "4.16.1",
157
+ }));
158
+ writeDiagnosticTelemetryQueue(events, { path, now });
159
+ const requests = [];
160
+ const first = await flushDiagnosticTelemetryQueue({
161
+ path,
162
+ apiOrigin: "https://api.run402.test",
163
+ now,
164
+ fetchImpl: async (url, init) => {
165
+ requests.push({ url: String(url), init });
166
+ return { status: requests.length === 1 ? 204 : 503 };
167
+ },
168
+ });
169
+ assert.deepEqual(first, { sent: 1, retained: 1, status: "queued" });
170
+ assert.equal(requests[0].url, "https://api.run402.test/client-diagnostic-events/v1");
171
+ assert.deepEqual(requests[0].init.headers, { "content-type": "application/json" });
172
+ assert.equal(Object.keys(JSON.parse(requests[0].init.body)).length, DIAGNOSTIC_TELEMETRY_FIELDS.length);
173
+
174
+ const second = await flushDiagnosticTelemetryQueue({
175
+ path,
176
+ apiOrigin: "https://api.run402.test",
177
+ fetchImpl: async () => ({ status: 204 }),
178
+ });
179
+ assert.deepEqual(second, { sent: 1, retained: 0, status: "flushed" });
180
+ });
181
+ });
package/lib/doctor.mjs CHANGED
@@ -20,20 +20,33 @@ import {
20
20
  SCAN_SEVERITY,
21
21
  } from "./doctor-source-scan.mjs";
22
22
  import { doctorUpdateCheck } from "./update-check.mjs";
23
+ import { buildBuzzDoctorReport, parseBuzzDoctorArgs } from "./buzz-doctor.mjs";
24
+ import { queueBuzzDoctorTelemetry } from "./diagnostic-telemetry.mjs";
25
+ import { fail } from "./sdk-errors.mjs";
23
26
 
24
27
  const HELP = `run402 doctor — Health and config diagnostics
25
28
 
26
29
  Usage:
27
30
  run402 doctor [--verbose] [--refresh] [--no-scan] [--scan-dir <D>]
31
+ run402 --wallet <profile> doctor --buzz --buzz-agent <npub-or-hex>
28
32
 
29
33
  Output:
30
34
  Stdout is a JSON report { ok, checks: [{ name, status, value?, hint?, message? }] }.
35
+ Buzz mode adds { mode: "buzz", contract_id, generated_at, mutation_state,
36
+ binding, telemetry } and uses check status ok|warning|blocked.
31
37
 
32
38
  Options:
33
39
  --verbose Include extra detail (timing, error messages)
34
40
  --refresh Wait for a bounded live npm version check for the run402 CLI
35
41
  --no-scan Skip the source-tree scan (config / health checks only)
36
42
  --scan-dir D Scan a custom directory instead of \`<cwd>/src\`
43
+ --buzz Run only the zero-mutation Buzz setup preflight
44
+ --buzz-agent P Bind Buzz mode to the intended public agent npub or hex key
45
+
46
+ Telemetry:
47
+ Buzz preflight sends only anonymous allowlisted start/pass/block counters.
48
+ No identity, wallet, relay, domain, path, command output, or installation id
49
+ is sent. Set RUN402_TELEMETRY=0 to disable sending and local queueing.
37
50
 
38
51
  Checks performed:
39
52
  - Config directory exists and is writable
@@ -51,6 +64,12 @@ Checks performed:
51
64
  direct mutation of internal.sessions.authz_version
52
65
  (R402_AUTH_AUTHZ_VERSION_PROHIBITED).
53
66
 
67
+ Buzz mode checks (in order):
68
+ session_shell, node_runtime, run402_cli, buzz_cli, buzz_agent_target,
69
+ run402_api, run402_console, buzz_relay, wallet_profile.
70
+ Buzz mode is read-only and skips the ordinary allowance, tier, project,
71
+ operator, runtime-staleness, and source-tree checks.
72
+
54
73
  Exit codes:
55
74
  0 — all checks pass
56
75
  1 — one or more checks failed (details in output)
@@ -96,6 +115,17 @@ export async function run(sub, args = []) {
96
115
  const scanDirArgIdx = all.indexOf("--scan-dir");
97
116
  const scanDirOverride = scanDirArgIdx >= 0 ? all[scanDirArgIdx + 1] : null;
98
117
 
118
+ const buzzArgs = parseBuzzDoctorArgs(all);
119
+ if (buzzArgs.error) fail(buzzArgs.error);
120
+ if (buzzArgs.buzz) {
121
+ const startedAt = Date.now();
122
+ const report = await buildBuzzDoctorReport({ expectedSubjectHex: buzzArgs.expectedSubjectHex });
123
+ report.telemetry = queueBuzzDoctorTelemetry(report, { startedAt, finishedAt: Date.now() });
124
+ console.log(JSON.stringify(report, null, 2));
125
+ process.exitCode = report.ok ? 0 : 1;
126
+ return;
127
+ }
128
+
99
129
  const checks = [];
100
130
  const CONFIG_DIR = configDir();
101
131
 
@@ -33,7 +33,7 @@ const GLOBAL_FLAGS = new Set(["--wallet", "--profile"]);
33
33
  // its own positional targets. `init` creates wallets, so it must not fail
34
34
  // closed on a not-yet-existing name.
35
35
  const CONFLICT_EXEMPT = new Set(["wallets"]);
36
- const EXISTENCE_EXEMPT = new Set(["wallets", "init"]);
36
+ const EXISTENCE_EXEMPT = new Set(["wallets", "init", "doctor"]);
37
37
 
38
38
  /**
39
39
  * Split the global --wallet/--profile flag (and its value) out of argv so the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402",
3
- "version": "4.16.0",
3
+ "version": "4.17.0",
4
4
  "description": "CLI for Run402 — provision Postgres databases, deploy static sites, generate images, and manage wallets via x402 and MPP micropayments.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -312,7 +312,7 @@ export type * from "./namespaces/projects.types.js";
312
312
  export { IdentityLinks, NostrIdentityLinks } from "./namespaces/identity-links.js";
313
313
  export type * from "./namespaces/identity-links.js";
314
314
  export type * from "./namespaces/identity-links.types.js";
315
- export { Buzz, BuzzHumanAdoptions, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
315
+ export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
316
316
  export type * from "./namespaces/buzz.types.js";
317
317
  export type * from "./namespaces/secrets.js";
318
318
  export type * from "./namespaces/sender-domain.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/sdk/dist/index.js CHANGED
@@ -349,6 +349,6 @@ export { Archives } from "./namespaces/archives.js";
349
349
  export { Snapshots } from "./namespaces/snapshots.js";
350
350
  export { Branches } from "./namespaces/branches.js";
351
351
  export { IdentityLinks, NostrIdentityLinks } from "./namespaces/identity-links.js";
352
- export { Buzz, BuzzHumanAdoptions, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
352
+ export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
353
353
  export { ScopedWallet } from "./namespaces/wallets.js";
354
354
  //# sourceMappingURL=index.js.map