@run402/sdk 4.97.0 → 4.98.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.
Files changed (138) hide show
  1. package/README.md +2 -2
  2. package/core-dist/binding-file.d.ts +14 -0
  3. package/core-dist/binding-file.js +28 -1
  4. package/core-dist/wallet.js +3 -3
  5. package/dist/errors.d.ts +24 -2
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +44 -2
  8. package/dist/errors.js.map +1 -1
  9. package/dist/index.d.ts +18 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +12 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/kernel.d.ts +34 -0
  14. package/dist/kernel.d.ts.map +1 -1
  15. package/dist/kernel.js +15 -1
  16. package/dist/kernel.js.map +1 -1
  17. package/dist/namespaces/admin.d.ts.map +1 -1
  18. package/dist/namespaces/admin.js +8 -0
  19. package/dist/namespaces/admin.js.map +1 -1
  20. package/dist/namespaces/agent.d.ts +2 -2
  21. package/dist/namespaces/agent.d.ts.map +1 -1
  22. package/dist/namespaces/agent.js +4 -0
  23. package/dist/namespaces/agent.js.map +1 -1
  24. package/dist/namespaces/agent.types.d.ts +5 -0
  25. package/dist/namespaces/agent.types.d.ts.map +1 -1
  26. package/dist/namespaces/apps.d.ts.map +1 -1
  27. package/dist/namespaces/apps.js +2 -0
  28. package/dist/namespaces/apps.js.map +1 -1
  29. package/dist/namespaces/auth.d.ts.map +1 -1
  30. package/dist/namespaces/auth.js +9 -0
  31. package/dist/namespaces/auth.js.map +1 -1
  32. package/dist/namespaces/branches.d.ts.map +1 -1
  33. package/dist/namespaces/branches.js +2 -0
  34. package/dist/namespaces/branches.js.map +1 -1
  35. package/dist/namespaces/ci.d.ts.map +1 -1
  36. package/dist/namespaces/ci.js +2 -0
  37. package/dist/namespaces/ci.js.map +1 -1
  38. package/dist/namespaces/credentials.d.ts +0 -23
  39. package/dist/namespaces/credentials.d.ts.map +1 -1
  40. package/dist/namespaces/credentials.js +29 -0
  41. package/dist/namespaces/credentials.js.map +1 -1
  42. package/dist/namespaces/escalations.d.ts.map +1 -1
  43. package/dist/namespaces/escalations.js +2 -0
  44. package/dist/namespaces/escalations.js.map +1 -1
  45. package/dist/namespaces/grants.d.ts.map +1 -1
  46. package/dist/namespaces/grants.js +4 -0
  47. package/dist/namespaces/grants.js.map +1 -1
  48. package/dist/namespaces/live.d.ts +0 -16
  49. package/dist/namespaces/live.d.ts.map +1 -1
  50. package/dist/namespaces/live.js +19 -0
  51. package/dist/namespaces/live.js.map +1 -1
  52. package/dist/namespaces/me.d.ts.map +1 -1
  53. package/dist/namespaces/me.js +3 -0
  54. package/dist/namespaces/me.js.map +1 -1
  55. package/dist/namespaces/org.d.ts.map +1 -1
  56. package/dist/namespaces/org.js +3 -0
  57. package/dist/namespaces/org.js.map +1 -1
  58. package/dist/namespaces/projects.d.ts.map +1 -1
  59. package/dist/namespaces/projects.js +5 -0
  60. package/dist/namespaces/projects.js.map +1 -1
  61. package/dist/namespaces/repos.d.ts.map +1 -1
  62. package/dist/namespaces/repos.js +5 -0
  63. package/dist/namespaces/repos.js.map +1 -1
  64. package/dist/namespaces/rooms.d.ts.map +1 -1
  65. package/dist/namespaces/rooms.js +3 -0
  66. package/dist/namespaces/rooms.js.map +1 -1
  67. package/dist/namespaces/session.d.ts.map +1 -1
  68. package/dist/namespaces/session.js +18 -0
  69. package/dist/namespaces/session.js.map +1 -1
  70. package/dist/namespaces/transfers.d.ts.map +1 -1
  71. package/dist/namespaces/transfers.js +3 -0
  72. package/dist/namespaces/transfers.js.map +1 -1
  73. package/dist/namespaces/wallets.d.ts.map +1 -1
  74. package/dist/namespaces/wallets.js +2 -0
  75. package/dist/namespaces/wallets.js.map +1 -1
  76. package/dist/namespaces/write-approval.d.ts.map +1 -1
  77. package/dist/namespaces/write-approval.js +3 -0
  78. package/dist/namespaces/write-approval.js.map +1 -1
  79. package/dist/node/actions-node.d.ts.map +1 -1
  80. package/dist/node/actions-node.js +3 -0
  81. package/dist/node/actions-node.js.map +1 -1
  82. package/dist/node/buzz-doctor-contract.d.ts +155 -0
  83. package/dist/node/buzz-doctor-contract.d.ts.map +1 -0
  84. package/dist/node/buzz-doctor-contract.js +385 -0
  85. package/dist/node/buzz-doctor-contract.js.map +1 -0
  86. package/dist/node/buzz-doctor.d.ts +155 -0
  87. package/dist/node/buzz-doctor.d.ts.map +1 -0
  88. package/dist/node/buzz-doctor.js +810 -0
  89. package/dist/node/buzz-doctor.js.map +1 -0
  90. package/dist/node/credentials.d.ts +9 -4
  91. package/dist/node/credentials.d.ts.map +1 -1
  92. package/dist/node/credentials.js +1 -1
  93. package/dist/node/credentials.js.map +1 -1
  94. package/dist/node/diagnostics.d.ts +45 -0
  95. package/dist/node/diagnostics.d.ts.map +1 -0
  96. package/dist/node/diagnostics.js +67 -0
  97. package/dist/node/diagnostics.js.map +1 -0
  98. package/dist/node/doctor.d.ts +101 -0
  99. package/dist/node/doctor.d.ts.map +1 -0
  100. package/dist/node/doctor.js +618 -0
  101. package/dist/node/doctor.js.map +1 -0
  102. package/dist/node/index.d.ts +57 -5
  103. package/dist/node/index.d.ts.map +1 -1
  104. package/dist/node/index.js +36 -1
  105. package/dist/node/index.js.map +1 -1
  106. package/dist/node/init.d.ts +137 -0
  107. package/dist/node/init.d.ts.map +1 -0
  108. package/dist/node/init.js +507 -0
  109. package/dist/node/init.js.map +1 -0
  110. package/dist/node/lightning-wallet.d.ts +61 -0
  111. package/dist/node/lightning-wallet.d.ts.map +1 -0
  112. package/dist/node/lightning-wallet.js +126 -0
  113. package/dist/node/lightning-wallet.js.map +1 -0
  114. package/dist/node/local-actions.d.ts +23 -0
  115. package/dist/node/local-actions.d.ts.map +1 -0
  116. package/dist/node/local-actions.js +38 -0
  117. package/dist/node/local-actions.js.map +1 -0
  118. package/dist/node/org-context.d.ts +169 -0
  119. package/dist/node/org-context.d.ts.map +1 -0
  120. package/dist/node/org-context.js +403 -0
  121. package/dist/node/org-context.js.map +1 -0
  122. package/dist/node/status.d.ts +62 -0
  123. package/dist/node/status.d.ts.map +1 -0
  124. package/dist/node/status.js +132 -0
  125. package/dist/node/status.js.map +1 -0
  126. package/dist/node/vault-target.d.ts +49 -0
  127. package/dist/node/vault-target.d.ts.map +1 -0
  128. package/dist/node/vault-target.js +109 -0
  129. package/dist/node/vault-target.js.map +1 -0
  130. package/dist/node/wallets.d.ts +242 -0
  131. package/dist/node/wallets.d.ts.map +1 -0
  132. package/dist/node/wallets.js +484 -0
  133. package/dist/node/wallets.js.map +1 -0
  134. package/dist/secret-gate.d.ts +377 -0
  135. package/dist/secret-gate.d.ts.map +1 -0
  136. package/dist/secret-gate.js +273 -0
  137. package/dist/secret-gate.js.map +1 -0
  138. package/package.json +2 -1
@@ -0,0 +1,155 @@
1
+ /**
2
+ * The frozen Buzz setup preflight contract (`run402.buzz-doctor.v1`) and the
3
+ * released Buzz CLI v0.5.2 capability fixture `r.buzz.doctor()` probes
4
+ * against. The objects below are the published fixtures verbatim
5
+ * (`buzz/fixtures/run402-buzz-doctor-v1-contract.json` and
6
+ * `buzz/fixtures/buzz-v0.5.2-cli-capabilities.json`, shipped with the
7
+ * `run402-buzz` skill); `buzz-doctor-contract.test.ts` fails when they drift.
8
+ * The validators are what a consumer of a doctor report (the Buzz setup
9
+ * helper) applies before trusting it.
10
+ */
11
+ /** `run402-buzz-doctor-v1-contract.json`, verbatim. */
12
+ export declare const BUZZ_DOCTOR_CONTRACT: {
13
+ readonly schema_version: 1;
14
+ readonly contract_id: "run402.buzz-doctor.v1";
15
+ readonly mode: "buzz";
16
+ readonly canonical_invocation: readonly ["run402", "--wallet", "<profile>", "doctor", "--buzz", "--buzz-agent", "<npub-or-hex>"];
17
+ readonly flags: {
18
+ readonly mode: "--buzz";
19
+ readonly agent: "--buzz-agent";
20
+ readonly profile: "--wallet";
21
+ };
22
+ readonly check_order: readonly ["session_shell", "node_runtime", "run402_cli", "buzz_cli", "buzz_agent_target", "run402_api", "run402_console", "buzz_relay", "wallet_profile"];
23
+ readonly statuses: readonly ["ok", "warning", "blocked"];
24
+ readonly codes_by_check: {
25
+ readonly session_shell: readonly ["BUZZ_PREFLIGHT_SHELL_UNAVAILABLE"];
26
+ readonly node_runtime: readonly ["BUZZ_PREFLIGHT_NODE_UNAVAILABLE", "BUZZ_PREFLIGHT_NODE_INCOMPATIBLE"];
27
+ readonly run402_cli: readonly ["BUZZ_PREFLIGHT_RUN402_UNAVAILABLE", "BUZZ_PREFLIGHT_RUN402_INCOMPATIBLE", "BUZZ_PREFLIGHT_RUN402_UPDATE_AVAILABLE"];
28
+ readonly buzz_cli: readonly ["BUZZ_PREFLIGHT_BUZZ_CLI_UNAVAILABLE", "BUZZ_PREFLIGHT_BUZZ_CLI_INCOMPATIBLE"];
29
+ readonly buzz_agent_target: readonly ["BUZZ_AGENT_TARGET_REQUIRED", "BUZZ_AGENT_TARGET_UNVERIFIED", "BUZZ_AGENT_TARGET_MISMATCH"];
30
+ readonly run402_api: readonly ["BUZZ_PREFLIGHT_API_UNREACHABLE"];
31
+ readonly run402_console: readonly ["BUZZ_PREFLIGHT_CONSOLE_UNREACHABLE"];
32
+ readonly buzz_relay: readonly ["BUZZ_PREFLIGHT_RELAY_UNSAFE", "BUZZ_PREFLIGHT_RELAY_UNREACHABLE"];
33
+ readonly wallet_profile: readonly ["BUZZ_PREFLIGHT_WALLET_PROFILE_REQUIRED", "BUZZ_PREFLIGHT_WALLET_PROFILE_NOT_FOUND", "BUZZ_PREFLIGHT_WALLET_PROFILE_MISMATCH"];
34
+ };
35
+ readonly next_action: {
36
+ readonly required_fields: readonly ["type", "surface", "command", "why", "safe_to_auto_execute", "requires_approval", "destructive", "idempotent", "spend_impact"];
37
+ readonly surfaces: readonly ["shell", "buzz_chat", "buzz_settings"];
38
+ readonly shell_required_fields: readonly ["argv"];
39
+ readonly non_shell_forbidden_fields: readonly ["argv", "cwd"];
40
+ readonly cardinality_per_actionable_check: 1;
41
+ };
42
+ readonly exit_behavior: {
43
+ readonly passed_or_warning_only: 0;
44
+ readonly completed_with_blocked_checks: 1;
45
+ readonly usage_error: 1;
46
+ readonly completed_report_stream: "stdout";
47
+ readonly usage_error_stream: "stderr";
48
+ };
49
+ readonly freshness: {
50
+ readonly max_age_seconds: 60;
51
+ readonly binding_fields: readonly ["contract_id", "expected_subject_hex", "wallet_profile", "node_executable", "run402_executable", "relay_origin"];
52
+ };
53
+ readonly setup_rejection_codes: readonly ["BUZZ_PREFLIGHT_REPORT_INVALID", "BUZZ_PREFLIGHT_REPORT_STALE", "BUZZ_PREFLIGHT_REPORT_MISMATCH"];
54
+ readonly zero_mutation: {
55
+ readonly mutation_state: "not_started";
56
+ readonly forbidden: readonly ["buzz_event_publish", "buzz_arbitrary_sign", "run402_profile_create_or_select", "run402_wallet_create", "run402_identity_link_mutation", "run402_faucet", "run402_tier_mutation", "run402_project_mutation", "run402_deploy"];
57
+ readonly allowed_lossy_local_writes: readonly ["cli_update_cache", "redacted_diagnostic_queue"];
58
+ };
59
+ };
60
+ /** `buzz-v0.5.2-cli-capabilities.json`, verbatim. */
61
+ export declare const BUZZ_CLI_CAPABILITIES: {
62
+ readonly fixture_version: 1;
63
+ readonly fixture_id: "buzz-cli-v0.5.2-capabilities";
64
+ readonly purpose: "released_buzz_cli_capability_first_compatibility";
65
+ readonly buzz_release: {
66
+ readonly version: "0.5.2";
67
+ readonly release_tag: "v0.5.2";
68
+ readonly release_tag_commit: "3e48f1b2365d326ee1c9582448d86a99b44ecd5d";
69
+ readonly run402_change_required: false;
70
+ };
71
+ readonly help_probes: readonly [{
72
+ readonly argv: readonly ["buzz", "--help"];
73
+ readonly exit_code: 0;
74
+ readonly stdout_contains: readonly ["Buzz CLI — interact with a Buzz relay", "users", "social", "Errors are JSON on stderr"];
75
+ }, {
76
+ readonly argv: readonly ["buzz", "users", "get", "--help"];
77
+ readonly exit_code: 0;
78
+ readonly stdout_contains: readonly ["users get [OPTIONS]", "--pubkey", "Omit for your own profile"];
79
+ }, {
80
+ readonly argv: readonly ["buzz", "social", "publish", "--help"];
81
+ readonly exit_code: 0;
82
+ readonly stdout_contains: readonly ["social publish [OPTIONS]", "--content"];
83
+ }, {
84
+ readonly argv: readonly ["buzz", "social", "event", "--help"];
85
+ readonly exit_code: 0;
86
+ readonly stdout_contains: readonly ["social event --event"];
87
+ }];
88
+ readonly version_probe: {
89
+ readonly argv: readonly ["buzz", "--version"];
90
+ readonly supported: false;
91
+ readonly exit_code: 1;
92
+ readonly stderr_json: {
93
+ readonly error: "user_error";
94
+ readonly retryable: false;
95
+ };
96
+ readonly message_contains: "unexpected argument '--version'";
97
+ };
98
+ readonly json_contract: {
99
+ readonly default_output_format: "json";
100
+ readonly users_get_success_stdout: {
101
+ readonly type: "array";
102
+ readonly empty_array_means: "public_self_profile_unverified";
103
+ readonly profile_pubkey_field: "pubkey";
104
+ };
105
+ readonly social_event_success_stdout: {
106
+ readonly type: "array";
107
+ readonly event_pubkey_field: "pubkey";
108
+ };
109
+ readonly error_stderr: {
110
+ readonly type: "object";
111
+ readonly required_fields: readonly ["error", "message", "retryable"];
112
+ readonly stdout_is_empty: true;
113
+ };
114
+ };
115
+ readonly managed_sidecar: {
116
+ readonly distribution: "bundled_with_buzz_desktop";
117
+ readonly session_discovery: "managed_agent_path";
118
+ readonly public_package_manager_install: false;
119
+ readonly repair_surface: "buzz_settings";
120
+ readonly repair_destination: "Buzz Desktop > Settings > Updates";
121
+ readonly repair_instruction: "Open Buzz Desktop > Settings > Updates, install the available Buzz update or reinstall Buzz Desktop if no update is offered, then restart this agent and rerun setup.";
122
+ };
123
+ readonly public_self_observation: {
124
+ readonly argv: readonly ["buzz", "users", "get"];
125
+ readonly requires_private_key_value_inspection: false;
126
+ readonly empty_or_malformed_result: "BUZZ_AGENT_TARGET_UNVERIFIED";
127
+ };
128
+ readonly write_surface_policy: {
129
+ readonly capability_probes_use_help_only: true;
130
+ readonly publish_is_never_invoked_by_doctor: true;
131
+ readonly event_read_requires_explicit_event_id_and_is_not_used_for_self_discovery: true;
132
+ };
133
+ };
134
+ export declare const BUZZ_DOCTOR_CONTRACT_ID: string;
135
+ export declare const BUZZ_DOCTOR_CHECK_ORDER: readonly string[];
136
+ export declare const BUZZ_DOCTOR_STATUSES: ReadonlySet<string>;
137
+ export declare const BUZZ_DOCTOR_ACTION_SURFACES: ReadonlySet<string>;
138
+ export declare const BUZZ_DOCTOR_MAX_AGE_MS: number;
139
+ /** The reason an action violates the contract, or null. */
140
+ export declare function validateBuzzDoctorAction(action: any, { surface }?: {
141
+ surface?: string;
142
+ }): string | null;
143
+ /** Whether a report honours the contract and is bound to the expected session, fresh. */
144
+ export declare function validateBuzzDoctorReport(report: any, { expectedSubjectHex, walletProfile, nodeExecutable, run402Executable, relayOrigin, now, }?: {
145
+ expectedSubjectHex?: string | null;
146
+ walletProfile?: string;
147
+ nodeExecutable?: string | null;
148
+ run402Executable?: string | null;
149
+ relayOrigin?: string | null;
150
+ now?: number;
151
+ }): {
152
+ valid: boolean;
153
+ reason: string | null;
154
+ };
155
+ //# sourceMappingURL=buzz-doctor-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buzz-doctor-contract.d.ts","sourceRoot":"","sources":["../../src/node/buzz-doctor-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,uDAAuD;AACvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ItB,CAAC;AAEZ,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHvB,CAAC;AAEZ,eAAO,MAAM,uBAAuB,EAAE,MAAyC,CAAC;AAChF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAqC,CAAC;AAC3F,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAA0C,CAAC;AAChG,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAAsD,CAAC;AACnH,eAAO,MAAM,sBAAsB,EAAE,MAA8D,CAAC;AAEpG,2DAA2D;AAC3D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,GAAG,IAAI,CA0B3G;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,EACpD,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,GAAgB,GACjB,GAAE;IACD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA4CjD"}
@@ -0,0 +1,385 @@
1
+ /**
2
+ * The frozen Buzz setup preflight contract (`run402.buzz-doctor.v1`) and the
3
+ * released Buzz CLI v0.5.2 capability fixture `r.buzz.doctor()` probes
4
+ * against. The objects below are the published fixtures verbatim
5
+ * (`buzz/fixtures/run402-buzz-doctor-v1-contract.json` and
6
+ * `buzz/fixtures/buzz-v0.5.2-cli-capabilities.json`, shipped with the
7
+ * `run402-buzz` skill); `buzz-doctor-contract.test.ts` fails when they drift.
8
+ * The validators are what a consumer of a doctor report (the Buzz setup
9
+ * helper) applies before trusting it.
10
+ */
11
+ /* eslint-disable @typescript-eslint/no-explicit-any */
12
+ function deepFreeze(value) {
13
+ if (!value || typeof value !== "object" || Object.isFrozen(value))
14
+ return value;
15
+ Object.freeze(value);
16
+ for (const child of Object.values(value))
17
+ deepFreeze(child);
18
+ return value;
19
+ }
20
+ /** `run402-buzz-doctor-v1-contract.json`, verbatim. */
21
+ export const BUZZ_DOCTOR_CONTRACT = deepFreeze({
22
+ "schema_version": 1,
23
+ "contract_id": "run402.buzz-doctor.v1",
24
+ "mode": "buzz",
25
+ "canonical_invocation": [
26
+ "run402",
27
+ "--wallet",
28
+ "<profile>",
29
+ "doctor",
30
+ "--buzz",
31
+ "--buzz-agent",
32
+ "<npub-or-hex>"
33
+ ],
34
+ "flags": {
35
+ "mode": "--buzz",
36
+ "agent": "--buzz-agent",
37
+ "profile": "--wallet"
38
+ },
39
+ "check_order": [
40
+ "session_shell",
41
+ "node_runtime",
42
+ "run402_cli",
43
+ "buzz_cli",
44
+ "buzz_agent_target",
45
+ "run402_api",
46
+ "run402_console",
47
+ "buzz_relay",
48
+ "wallet_profile"
49
+ ],
50
+ "statuses": [
51
+ "ok",
52
+ "warning",
53
+ "blocked"
54
+ ],
55
+ "codes_by_check": {
56
+ "session_shell": [
57
+ "BUZZ_PREFLIGHT_SHELL_UNAVAILABLE"
58
+ ],
59
+ "node_runtime": [
60
+ "BUZZ_PREFLIGHT_NODE_UNAVAILABLE",
61
+ "BUZZ_PREFLIGHT_NODE_INCOMPATIBLE"
62
+ ],
63
+ "run402_cli": [
64
+ "BUZZ_PREFLIGHT_RUN402_UNAVAILABLE",
65
+ "BUZZ_PREFLIGHT_RUN402_INCOMPATIBLE",
66
+ "BUZZ_PREFLIGHT_RUN402_UPDATE_AVAILABLE"
67
+ ],
68
+ "buzz_cli": [
69
+ "BUZZ_PREFLIGHT_BUZZ_CLI_UNAVAILABLE",
70
+ "BUZZ_PREFLIGHT_BUZZ_CLI_INCOMPATIBLE"
71
+ ],
72
+ "buzz_agent_target": [
73
+ "BUZZ_AGENT_TARGET_REQUIRED",
74
+ "BUZZ_AGENT_TARGET_UNVERIFIED",
75
+ "BUZZ_AGENT_TARGET_MISMATCH"
76
+ ],
77
+ "run402_api": [
78
+ "BUZZ_PREFLIGHT_API_UNREACHABLE"
79
+ ],
80
+ "run402_console": [
81
+ "BUZZ_PREFLIGHT_CONSOLE_UNREACHABLE"
82
+ ],
83
+ "buzz_relay": [
84
+ "BUZZ_PREFLIGHT_RELAY_UNSAFE",
85
+ "BUZZ_PREFLIGHT_RELAY_UNREACHABLE"
86
+ ],
87
+ "wallet_profile": [
88
+ "BUZZ_PREFLIGHT_WALLET_PROFILE_REQUIRED",
89
+ "BUZZ_PREFLIGHT_WALLET_PROFILE_NOT_FOUND",
90
+ "BUZZ_PREFLIGHT_WALLET_PROFILE_MISMATCH"
91
+ ]
92
+ },
93
+ "next_action": {
94
+ "required_fields": [
95
+ "type",
96
+ "surface",
97
+ "command",
98
+ "why",
99
+ "safe_to_auto_execute",
100
+ "requires_approval",
101
+ "destructive",
102
+ "idempotent",
103
+ "spend_impact"
104
+ ],
105
+ "surfaces": [
106
+ "shell",
107
+ "buzz_chat",
108
+ "buzz_settings"
109
+ ],
110
+ "shell_required_fields": [
111
+ "argv"
112
+ ],
113
+ "non_shell_forbidden_fields": [
114
+ "argv",
115
+ "cwd"
116
+ ],
117
+ "cardinality_per_actionable_check": 1
118
+ },
119
+ "exit_behavior": {
120
+ "passed_or_warning_only": 0,
121
+ "completed_with_blocked_checks": 1,
122
+ "usage_error": 1,
123
+ "completed_report_stream": "stdout",
124
+ "usage_error_stream": "stderr"
125
+ },
126
+ "freshness": {
127
+ "max_age_seconds": 60,
128
+ "binding_fields": [
129
+ "contract_id",
130
+ "expected_subject_hex",
131
+ "wallet_profile",
132
+ "node_executable",
133
+ "run402_executable",
134
+ "relay_origin"
135
+ ]
136
+ },
137
+ "setup_rejection_codes": [
138
+ "BUZZ_PREFLIGHT_REPORT_INVALID",
139
+ "BUZZ_PREFLIGHT_REPORT_STALE",
140
+ "BUZZ_PREFLIGHT_REPORT_MISMATCH"
141
+ ],
142
+ "zero_mutation": {
143
+ "mutation_state": "not_started",
144
+ "forbidden": [
145
+ "buzz_event_publish",
146
+ "buzz_arbitrary_sign",
147
+ "run402_profile_create_or_select",
148
+ "run402_wallet_create",
149
+ "run402_identity_link_mutation",
150
+ "run402_faucet",
151
+ "run402_tier_mutation",
152
+ "run402_project_mutation",
153
+ "run402_deploy"
154
+ ],
155
+ "allowed_lossy_local_writes": [
156
+ "cli_update_cache",
157
+ "redacted_diagnostic_queue"
158
+ ]
159
+ }
160
+ });
161
+ /** `buzz-v0.5.2-cli-capabilities.json`, verbatim. */
162
+ export const BUZZ_CLI_CAPABILITIES = deepFreeze({
163
+ "fixture_version": 1,
164
+ "fixture_id": "buzz-cli-v0.5.2-capabilities",
165
+ "purpose": "released_buzz_cli_capability_first_compatibility",
166
+ "buzz_release": {
167
+ "version": "0.5.2",
168
+ "release_tag": "v0.5.2",
169
+ "release_tag_commit": "3e48f1b2365d326ee1c9582448d86a99b44ecd5d",
170
+ "run402_change_required": false
171
+ },
172
+ "help_probes": [
173
+ {
174
+ "argv": [
175
+ "buzz",
176
+ "--help"
177
+ ],
178
+ "exit_code": 0,
179
+ "stdout_contains": [
180
+ "Buzz CLI \u2014 interact with a Buzz relay",
181
+ "users",
182
+ "social",
183
+ "Errors are JSON on stderr"
184
+ ]
185
+ },
186
+ {
187
+ "argv": [
188
+ "buzz",
189
+ "users",
190
+ "get",
191
+ "--help"
192
+ ],
193
+ "exit_code": 0,
194
+ "stdout_contains": [
195
+ "users get [OPTIONS]",
196
+ "--pubkey",
197
+ "Omit for your own profile"
198
+ ]
199
+ },
200
+ {
201
+ "argv": [
202
+ "buzz",
203
+ "social",
204
+ "publish",
205
+ "--help"
206
+ ],
207
+ "exit_code": 0,
208
+ "stdout_contains": [
209
+ "social publish [OPTIONS]",
210
+ "--content"
211
+ ]
212
+ },
213
+ {
214
+ "argv": [
215
+ "buzz",
216
+ "social",
217
+ "event",
218
+ "--help"
219
+ ],
220
+ "exit_code": 0,
221
+ "stdout_contains": [
222
+ "social event --event"
223
+ ]
224
+ }
225
+ ],
226
+ "version_probe": {
227
+ "argv": [
228
+ "buzz",
229
+ "--version"
230
+ ],
231
+ "supported": false,
232
+ "exit_code": 1,
233
+ "stderr_json": {
234
+ "error": "user_error",
235
+ "retryable": false
236
+ },
237
+ "message_contains": "unexpected argument '--version'"
238
+ },
239
+ "json_contract": {
240
+ "default_output_format": "json",
241
+ "users_get_success_stdout": {
242
+ "type": "array",
243
+ "empty_array_means": "public_self_profile_unverified",
244
+ "profile_pubkey_field": "pubkey"
245
+ },
246
+ "social_event_success_stdout": {
247
+ "type": "array",
248
+ "event_pubkey_field": "pubkey"
249
+ },
250
+ "error_stderr": {
251
+ "type": "object",
252
+ "required_fields": [
253
+ "error",
254
+ "message",
255
+ "retryable"
256
+ ],
257
+ "stdout_is_empty": true
258
+ }
259
+ },
260
+ "managed_sidecar": {
261
+ "distribution": "bundled_with_buzz_desktop",
262
+ "session_discovery": "managed_agent_path",
263
+ "public_package_manager_install": false,
264
+ "repair_surface": "buzz_settings",
265
+ "repair_destination": "Buzz Desktop > Settings > Updates",
266
+ "repair_instruction": "Open Buzz Desktop > Settings > Updates, install the available Buzz update or reinstall Buzz Desktop if no update is offered, then restart this agent and rerun setup."
267
+ },
268
+ "public_self_observation": {
269
+ "argv": [
270
+ "buzz",
271
+ "users",
272
+ "get"
273
+ ],
274
+ "requires_private_key_value_inspection": false,
275
+ "empty_or_malformed_result": "BUZZ_AGENT_TARGET_UNVERIFIED"
276
+ },
277
+ "write_surface_policy": {
278
+ "capability_probes_use_help_only": true,
279
+ "publish_is_never_invoked_by_doctor": true,
280
+ "event_read_requires_explicit_event_id_and_is_not_used_for_self_discovery": true
281
+ }
282
+ });
283
+ export const BUZZ_DOCTOR_CONTRACT_ID = BUZZ_DOCTOR_CONTRACT.contract_id;
284
+ export const BUZZ_DOCTOR_CHECK_ORDER = BUZZ_DOCTOR_CONTRACT.check_order;
285
+ export const BUZZ_DOCTOR_STATUSES = new Set(BUZZ_DOCTOR_CONTRACT.statuses);
286
+ export const BUZZ_DOCTOR_ACTION_SURFACES = new Set(BUZZ_DOCTOR_CONTRACT.next_action.surfaces);
287
+ export const BUZZ_DOCTOR_MAX_AGE_MS = BUZZ_DOCTOR_CONTRACT.freshness.max_age_seconds * 1000;
288
+ /** The reason an action violates the contract, or null. */
289
+ export function validateBuzzDoctorAction(action, { surface } = {}) {
290
+ if (!action || typeof action !== "object" || Array.isArray(action))
291
+ return "action_not_object";
292
+ for (const field of BUZZ_DOCTOR_CONTRACT.next_action.required_fields) {
293
+ if (!(field in action))
294
+ return `action_missing_${field}`;
295
+ }
296
+ if (!BUZZ_DOCTOR_ACTION_SURFACES.has(action.surface))
297
+ return "action_surface_invalid";
298
+ if (surface && action.surface !== surface)
299
+ return "action_surface_mismatch";
300
+ if (typeof action.type !== "string" || action.type.length === 0)
301
+ return "action_type_invalid";
302
+ if (typeof action.command !== "string" || action.command.length === 0)
303
+ return "action_command_invalid";
304
+ if (typeof action.why !== "string" || action.why.length === 0)
305
+ return "action_why_invalid";
306
+ for (const field of ["safe_to_auto_execute", "requires_approval", "destructive", "idempotent"]) {
307
+ if (typeof action[field] !== "boolean")
308
+ return `action_${field}_invalid`;
309
+ }
310
+ if (!action.spend_impact || action.spend_impact.currency !== "USD" || action.spend_impact.max_amount !== "0") {
311
+ return "action_spend_impact_invalid";
312
+ }
313
+ if (action.surface === "shell") {
314
+ if (!Array.isArray(action.argv) || action.argv.length === 0 || action.argv.some((part) => typeof part !== "string")) {
315
+ return "action_argv_invalid";
316
+ }
317
+ }
318
+ else {
319
+ for (const field of BUZZ_DOCTOR_CONTRACT.next_action.non_shell_forbidden_fields) {
320
+ if (field in action)
321
+ return `action_${field}_forbidden`;
322
+ }
323
+ }
324
+ return null;
325
+ }
326
+ /** Whether a report honours the contract and is bound to the expected session, fresh. */
327
+ export function validateBuzzDoctorReport(report, { expectedSubjectHex, walletProfile, nodeExecutable, run402Executable, relayOrigin, now = Date.now(), } = {}) {
328
+ if (!report || typeof report !== "object" || Array.isArray(report))
329
+ return { valid: false, reason: "report_not_object" };
330
+ if (report.contract_id !== BUZZ_DOCTOR_CONTRACT_ID || report.mode !== "buzz")
331
+ return { valid: false, reason: "contract_mismatch" };
332
+ if (!Array.isArray(report.checks))
333
+ return { valid: false, reason: "checks_not_array" };
334
+ if (report.checks.length !== BUZZ_DOCTOR_CHECK_ORDER.length)
335
+ return { valid: false, reason: "check_count_mismatch" };
336
+ for (let index = 0; index < BUZZ_DOCTOR_CHECK_ORDER.length; index += 1) {
337
+ const check = report.checks[index];
338
+ const expectedName = BUZZ_DOCTOR_CHECK_ORDER[index];
339
+ if (!check || check.name !== expectedName)
340
+ return { valid: false, reason: "check_order_mismatch" };
341
+ if (!BUZZ_DOCTOR_STATUSES.has(check.status))
342
+ return { valid: false, reason: "check_status_invalid" };
343
+ const codes = BUZZ_DOCTOR_CONTRACT.codes_by_check[expectedName];
344
+ if (check.status === "blocked" && !codes?.includes(check.code)) {
345
+ return { valid: false, reason: "check_code_invalid" };
346
+ }
347
+ const actionable = check.status === "blocked" || (check.status === "warning" && Array.isArray(check.next_actions));
348
+ if (actionable) {
349
+ if (!Array.isArray(check.next_actions) || check.next_actions.length !== 1)
350
+ return { valid: false, reason: "action_cardinality_invalid" };
351
+ const actionReason = validateBuzzDoctorAction(check.next_actions[0]);
352
+ if (actionReason)
353
+ return { valid: false, reason: actionReason };
354
+ }
355
+ else if ("next_actions" in check) {
356
+ return { valid: false, reason: "passing_action_forbidden" };
357
+ }
358
+ }
359
+ const generatedAt = Date.parse(report.generated_at);
360
+ if (!Number.isFinite(generatedAt) || generatedAt > now || now - generatedAt > BUZZ_DOCTOR_MAX_AGE_MS) {
361
+ return { valid: false, reason: "report_stale" };
362
+ }
363
+ const binding = report.binding;
364
+ if (!binding || typeof binding !== "object")
365
+ return { valid: false, reason: "binding_missing" };
366
+ const expected = {
367
+ contract_id: BUZZ_DOCTOR_CONTRACT_ID,
368
+ expected_subject_hex: expectedSubjectHex,
369
+ wallet_profile: walletProfile,
370
+ node_executable: nodeExecutable,
371
+ run402_executable: run402Executable,
372
+ relay_origin: relayOrigin,
373
+ };
374
+ for (const field of BUZZ_DOCTOR_CONTRACT.freshness.binding_fields) {
375
+ if (expected[field] !== undefined && binding[field] !== expected[field])
376
+ return { valid: false, reason: `binding_${field}_mismatch` };
377
+ }
378
+ const computedOk = report.checks.every((check) => check.status !== "blocked");
379
+ if (report.ok !== computedOk)
380
+ return { valid: false, reason: "verdict_mismatch" };
381
+ if (report.mutation_state !== BUZZ_DOCTOR_CONTRACT.zero_mutation.mutation_state)
382
+ return { valid: false, reason: "mutation_state_invalid" };
383
+ return { valid: true, reason: null };
384
+ }
385
+ //# sourceMappingURL=buzz-doctor-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buzz-doctor-contract.js","sourceRoot":"","sources":["../../src/node/buzz-doctor-contract.ts"],"names":[],"mappings":"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"}