@osstack/protocol 0.10.0 → 0.13.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 @@
1
+ {"version":3,"file":"autonomy.d.ts","sourceRoot":"","sources":["../src/autonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ import { z } from "zod";
2
+ import { Actor, ActorLenient } from "./approval.js";
3
+ const SHA256 = z.string().regex(/^[a-f0-9]{64}$/);
4
+ const BASE64URL_ED25519_SIGNATURE = z.string().regex(/^[A-Za-z0-9_-]{86}$/);
5
+ /**
6
+ * SHA-256 of an empty byte string. Preflight RISK-R3 approval binds this
7
+ * sentinel because no authoritative staged diff exists before Builder runs.
8
+ */
9
+ export const AUTONOMY_EMPTY_DIFF_SHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
10
+ export const AutonomyRiskLevel = z.enum(["R0", "R1", "R2", "R3", "R4"]);
11
+ export const AutonomyRiskPhase = z.enum(["preflight", "post_diff"]);
12
+ const autonomyRiskSignalShape = {
13
+ rule_id: z.string().min(1),
14
+ level: AutonomyRiskLevel,
15
+ message: z.string().min(1),
16
+ path: z.string().min(1).optional(),
17
+ command: z.string().min(1).optional(),
18
+ };
19
+ export const AutonomyRiskSignal = z.object(autonomyRiskSignalShape).strict();
20
+ export const AutonomyRiskSignalLenient = z.object(autonomyRiskSignalShape).passthrough();
21
+ const RISK_ORDER = {
22
+ R0: 0,
23
+ R1: 1,
24
+ R2: 2,
25
+ R3: 3,
26
+ R4: 4,
27
+ };
28
+ function riskSignalKey(signal) {
29
+ return [
30
+ signal.rule_id,
31
+ signal.path ?? "",
32
+ signal.command ?? "",
33
+ signal.level,
34
+ signal.message,
35
+ ].join("\u0000");
36
+ }
37
+ function checkRiskDecision(value, context) {
38
+ const keys = value.signals.map(riskSignalKey);
39
+ const sortedKeys = [...keys].sort();
40
+ if (keys.some((key, index) => key !== sortedKeys[index])) {
41
+ context.addIssue({
42
+ code: z.ZodIssueCode.custom,
43
+ path: ["signals"],
44
+ message: "risk signals must be in canonical order",
45
+ });
46
+ }
47
+ if (new Set(keys).size !== keys.length) {
48
+ context.addIssue({
49
+ code: z.ZodIssueCode.custom,
50
+ path: ["signals"],
51
+ message: "risk signals must not contain duplicates",
52
+ });
53
+ }
54
+ const maximum = value.signals.reduce((current, signal) => RISK_ORDER[signal.level] > RISK_ORDER[current] ? signal.level : current, "R0");
55
+ if (value.level !== maximum) {
56
+ context.addIssue({
57
+ code: z.ZodIssueCode.custom,
58
+ path: ["level"],
59
+ message: `risk level must equal maximum signal level ${maximum}`,
60
+ });
61
+ }
62
+ }
63
+ const autonomyRiskDecisionShape = {
64
+ phase: AutonomyRiskPhase,
65
+ level: AutonomyRiskLevel,
66
+ signals: z.array(AutonomyRiskSignal),
67
+ policy_sha256: SHA256,
68
+ input_sha256: SHA256,
69
+ decided_at: z.string().datetime(),
70
+ };
71
+ export const AutonomyRiskDecision = z
72
+ .object(autonomyRiskDecisionShape)
73
+ .strict()
74
+ .superRefine(checkRiskDecision);
75
+ export const AutonomyRiskDecisionLenient = z
76
+ .object({
77
+ ...autonomyRiskDecisionShape,
78
+ signals: z.array(AutonomyRiskSignalLenient),
79
+ })
80
+ .passthrough()
81
+ .superRefine(checkRiskDecision);
82
+ export const AutonomyRunState = z.enum([
83
+ "queued",
84
+ "classifying",
85
+ "awaiting_approval",
86
+ "blocked",
87
+ "preparing",
88
+ "building",
89
+ "verifying",
90
+ "repairing",
91
+ "reviewing",
92
+ "post_classifying",
93
+ "candidate_proof",
94
+ "committing",
95
+ "pushing",
96
+ "opening_pr",
97
+ "waiting_ci",
98
+ "merging",
99
+ "deploying_staging",
100
+ "verifying_staging",
101
+ "deploying_production",
102
+ "health_checking",
103
+ "rolling_back",
104
+ "deploy_frozen",
105
+ "final_proof",
106
+ "blocked_delivery",
107
+ "delivery_evidence_failed",
108
+ "escalated",
109
+ "cancelled",
110
+ "completed",
111
+ ]);
112
+ export const AutonomyApprovalPhase = z.enum(["preflight", "post_diff"]);
113
+ const canonicalActionScope = z
114
+ .array(z.string().min(1))
115
+ .min(1)
116
+ .superRefine((scope, context) => {
117
+ if (new Set(scope).size !== scope.length) {
118
+ context.addIssue({
119
+ code: z.ZodIssueCode.custom,
120
+ message: "action_scope must not contain duplicates",
121
+ });
122
+ }
123
+ const sorted = [...scope].sort();
124
+ if (scope.some((action, index) => action !== sorted[index])) {
125
+ context.addIssue({
126
+ code: z.ZodIssueCode.custom,
127
+ message: "action_scope must be in canonical order",
128
+ });
129
+ }
130
+ });
131
+ const scopedApprovalRequestShape = {
132
+ approval_id: z.string().min(1),
133
+ autonomy_run_id: z.string().min(1),
134
+ phase: AutonomyApprovalPhase,
135
+ contract_sha256: SHA256,
136
+ diff_sha256: SHA256,
137
+ action_scope: canonicalActionScope,
138
+ risk: z.literal("R3"),
139
+ nonce: z.string().min(1),
140
+ requested_at: z.string().datetime(),
141
+ expires_at: z.string().datetime(),
142
+ request_sha256: SHA256,
143
+ };
144
+ function checkApprovalRequest(request, context) {
145
+ if (request.phase === "preflight" &&
146
+ request.diff_sha256 !== AUTONOMY_EMPTY_DIFF_SHA256) {
147
+ context.addIssue({
148
+ code: z.ZodIssueCode.custom,
149
+ path: ["diff_sha256"],
150
+ message: "preflight approval must bind the empty-diff sentinel",
151
+ });
152
+ }
153
+ if (request.phase === "preflight" &&
154
+ request.action_scope.some((action) => action !== "build" && action !== "verify")) {
155
+ context.addIssue({
156
+ code: z.ZodIssueCode.custom,
157
+ path: ["action_scope"],
158
+ message: "preflight approval may authorize only build and verify",
159
+ });
160
+ }
161
+ if (Date.parse(request.requested_at) >= Date.parse(request.expires_at)) {
162
+ context.addIssue({
163
+ code: z.ZodIssueCode.custom,
164
+ path: ["expires_at"],
165
+ message: "approval request must expire after it is requested",
166
+ });
167
+ }
168
+ }
169
+ export const ScopedApprovalRequest = z
170
+ .object(scopedApprovalRequestShape)
171
+ .strict()
172
+ .superRefine(checkApprovalRequest);
173
+ export const ScopedApprovalRequestLenient = z
174
+ .object(scopedApprovalRequestShape)
175
+ .passthrough()
176
+ .superRefine(checkApprovalRequest);
177
+ export const ScopedApprovalDecisionValue = z.enum(["approve", "reject"]);
178
+ const scopedApprovalDecisionPayloadShape = {
179
+ approval_id: z.string().min(1),
180
+ request_sha256: SHA256,
181
+ autonomy_run_id: z.string().min(1),
182
+ phase: AutonomyApprovalPhase,
183
+ contract_sha256: SHA256,
184
+ diff_sha256: SHA256,
185
+ action_scope: canonicalActionScope,
186
+ decision: ScopedApprovalDecisionValue,
187
+ nonce: z.string().min(1),
188
+ issued_at: z.string().datetime(),
189
+ expires_at: z.string().datetime(),
190
+ decided_by: Actor.refine((actor) => actor.type === "human", "guarded autonomy approval requires a human actor"),
191
+ };
192
+ function checkDecisionValidityWindow(payload, context) {
193
+ if (Date.parse(payload.issued_at) >= Date.parse(payload.expires_at)) {
194
+ context.addIssue({
195
+ code: z.ZodIssueCode.custom,
196
+ path: ["expires_at"],
197
+ message: "signed approval decision must expire after it is issued",
198
+ });
199
+ }
200
+ }
201
+ export const ScopedApprovalDecisionPayload = z
202
+ .object(scopedApprovalDecisionPayloadShape)
203
+ .strict()
204
+ .superRefine(checkDecisionValidityWindow);
205
+ const scopedApprovalDecisionPayloadLenient = z
206
+ .object({
207
+ ...scopedApprovalDecisionPayloadShape,
208
+ decided_by: ActorLenient.refine((actor) => actor.type === "human", "guarded autonomy approval requires a human actor"),
209
+ })
210
+ .passthrough()
211
+ .superRefine(checkDecisionValidityWindow);
212
+ const signedDecisionSignatureShape = {
213
+ algorithm: z.literal("Ed25519"),
214
+ key_id: z.string().min(1),
215
+ value_base64url: BASE64URL_ED25519_SIGNATURE,
216
+ };
217
+ export const ScopedApprovalDecision = z
218
+ .object({
219
+ payload: ScopedApprovalDecisionPayload,
220
+ signature: z.object(signedDecisionSignatureShape).strict(),
221
+ })
222
+ .strict();
223
+ export const ScopedApprovalDecisionLenient = z
224
+ .object({
225
+ payload: scopedApprovalDecisionPayloadLenient,
226
+ signature: z.object(signedDecisionSignatureShape).passthrough(),
227
+ })
228
+ .passthrough();
229
+ export function parseInboundAutonomyRiskDecision(input) {
230
+ return AutonomyRiskDecisionLenient.parse(input);
231
+ }
232
+ export function parseInboundScopedApprovalRequest(input) {
233
+ return ScopedApprovalRequestLenient.parse(input);
234
+ }
235
+ export function parseInboundScopedApprovalDecision(input) {
236
+ return ScopedApprovalDecisionLenient.parse(input);
237
+ }
238
+ /**
239
+ * Validates structural and request-binding invariants. Cryptographic signature,
240
+ * nonce replay, trusted-key, and wall-clock expiry checks belong to the
241
+ * autonomy verifier, which owns those runtime dependencies.
242
+ */
243
+ export function validateScopedApprovalDecisionForRequest(requestInput, decisionInput) {
244
+ const request = ScopedApprovalRequest.parse(requestInput);
245
+ const decision = ScopedApprovalDecision.parse(decisionInput);
246
+ const payload = decision.payload;
247
+ const comparisons = [
248
+ ["approval_id", request.approval_id, payload.approval_id],
249
+ ["request_sha256", request.request_sha256, payload.request_sha256],
250
+ ["autonomy_run_id", request.autonomy_run_id, payload.autonomy_run_id],
251
+ ["phase", request.phase, payload.phase],
252
+ ["contract_sha256", request.contract_sha256, payload.contract_sha256],
253
+ ["diff_sha256", request.diff_sha256, payload.diff_sha256],
254
+ ["nonce", request.nonce, payload.nonce],
255
+ ["expires_at", request.expires_at, payload.expires_at],
256
+ ];
257
+ for (const [field, requestValue, decisionValue] of comparisons) {
258
+ if (requestValue !== decisionValue) {
259
+ throw new Error(`scoped approval ${field} does not match request`);
260
+ }
261
+ }
262
+ if (JSON.stringify(request.action_scope) !== JSON.stringify(payload.action_scope)) {
263
+ throw new Error("scoped approval action_scope does not match request");
264
+ }
265
+ if (Date.parse(payload.issued_at) < Date.parse(request.requested_at)) {
266
+ throw new Error("scoped approval issued_at predates its request");
267
+ }
268
+ return decision;
269
+ }
270
+ //# sourceMappingURL=autonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomy.js","sourceRoot":"","sources":["../src/autonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=autonomy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomy.test.d.ts","sourceRoot":"","sources":["../src/autonomy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,201 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { AUTONOMY_EMPTY_DIFF_SHA256, AutonomyRiskDecision, AutonomyRiskLevel, AutonomyRunState, parseInboundScopedApprovalDecision, ScopedApprovalDecision, ScopedApprovalRequest, validateScopedApprovalDecisionForRequest, } from "./autonomy.js";
3
+ const SHA_A = "a".repeat(64);
4
+ const SHA_B = "b".repeat(64);
5
+ const SHA_C = "c".repeat(64);
6
+ const SIGNATURE = "A".repeat(86);
7
+ function approvalRequest() {
8
+ return {
9
+ approval_id: "approval-1",
10
+ autonomy_run_id: "run-1",
11
+ phase: "post_diff",
12
+ contract_sha256: SHA_A,
13
+ diff_sha256: SHA_B,
14
+ action_scope: ["commit", "open_pr", "push"],
15
+ risk: "R3",
16
+ nonce: "nonce-1",
17
+ requested_at: "2026-07-28T20:00:00.000Z",
18
+ expires_at: "2026-07-28T20:15:00.000Z",
19
+ request_sha256: SHA_C,
20
+ };
21
+ }
22
+ function approvalDecision() {
23
+ return {
24
+ payload: {
25
+ approval_id: "approval-1",
26
+ request_sha256: SHA_C,
27
+ autonomy_run_id: "run-1",
28
+ phase: "post_diff",
29
+ contract_sha256: SHA_A,
30
+ diff_sha256: SHA_B,
31
+ action_scope: ["commit", "open_pr", "push"],
32
+ decision: "approve",
33
+ nonce: "nonce-1",
34
+ issued_at: "2026-07-28T20:01:00.000Z",
35
+ expires_at: "2026-07-28T20:15:00.000Z",
36
+ decided_by: { type: "human", id: "owner" },
37
+ },
38
+ signature: {
39
+ algorithm: "Ed25519",
40
+ key_id: "owner-primary",
41
+ value_base64url: SIGNATURE,
42
+ },
43
+ };
44
+ }
45
+ describe("guarded autonomy protocol contracts", () => {
46
+ it("parses every RISK-R0 through RISK-R4 level and rejects unknown levels", () => {
47
+ for (const level of ["R0", "R1", "R2", "R3", "R4"]) {
48
+ expect(AutonomyRiskLevel.parse(level)).toBe(level);
49
+ }
50
+ expect(AutonomyRiskLevel.safeParse("R5").success).toBe(false);
51
+ });
52
+ it("accepts the complete legal autonomy state set", () => {
53
+ const states = [
54
+ "queued",
55
+ "classifying",
56
+ "awaiting_approval",
57
+ "blocked",
58
+ "preparing",
59
+ "building",
60
+ "verifying",
61
+ "repairing",
62
+ "reviewing",
63
+ "post_classifying",
64
+ "candidate_proof",
65
+ "committing",
66
+ "pushing",
67
+ "opening_pr",
68
+ "waiting_ci",
69
+ "merging",
70
+ "deploying_staging",
71
+ "verifying_staging",
72
+ "deploying_production",
73
+ "health_checking",
74
+ "rolling_back",
75
+ "deploy_frozen",
76
+ "final_proof",
77
+ "blocked_delivery",
78
+ "delivery_evidence_failed",
79
+ "escalated",
80
+ "cancelled",
81
+ "completed",
82
+ ];
83
+ for (const state of states) {
84
+ expect(AutonomyRunState.parse(state)).toBe(state);
85
+ }
86
+ expect(AutonomyRunState.safeParse("approved").success).toBe(false);
87
+ });
88
+ it("requires canonical deterministic risk signals and matching maximum level", () => {
89
+ const decision = {
90
+ phase: "post_diff",
91
+ level: "R3",
92
+ signals: [
93
+ {
94
+ rule_id: "protected-auth",
95
+ level: "R3",
96
+ message: "authentication surface changed",
97
+ path: "src/auth/session.ts",
98
+ },
99
+ ],
100
+ policy_sha256: SHA_A,
101
+ input_sha256: SHA_B,
102
+ decided_at: "2026-07-28T20:00:00.000Z",
103
+ };
104
+ expect(AutonomyRiskDecision.parse(decision)).toEqual(decision);
105
+ expect(AutonomyRiskDecision.safeParse({ ...decision, level: "R2" }).success).toBe(false);
106
+ expect(AutonomyRiskDecision.safeParse({
107
+ ...decision,
108
+ signals: [
109
+ { ...decision.signals[0], rule_id: "z-rule" },
110
+ { ...decision.signals[0], rule_id: "a-rule" },
111
+ ],
112
+ }).success).toBe(false);
113
+ });
114
+ it("supports preflight approval only against the empty-diff sentinel", () => {
115
+ const request = {
116
+ ...approvalRequest(),
117
+ phase: "preflight",
118
+ diff_sha256: AUTONOMY_EMPTY_DIFF_SHA256,
119
+ action_scope: ["build", "verify"],
120
+ };
121
+ expect(ScopedApprovalRequest.parse(request)).toEqual(request);
122
+ expect(ScopedApprovalRequest.safeParse({ ...request, diff_sha256: SHA_B }).success).toBe(false);
123
+ });
124
+ it("accepts a signed post-diff RISK-R3 decision bound to request material", () => {
125
+ const request = ScopedApprovalRequest.parse(approvalRequest());
126
+ const decision = ScopedApprovalDecision.parse(approvalDecision());
127
+ expect(validateScopedApprovalDecisionForRequest(request, decision)).toEqual(decision);
128
+ });
129
+ it("rejects an agent actor even when the signed envelope is otherwise shaped correctly", () => {
130
+ const decision = approvalDecision();
131
+ expect(ScopedApprovalDecision.safeParse({
132
+ ...decision,
133
+ payload: {
134
+ ...decision.payload,
135
+ decided_by: { type: "agent", id: "builder" },
136
+ },
137
+ }).success).toBe(false);
138
+ });
139
+ it("rejects decisions whose contract or staged diff digest does not match the request", () => {
140
+ const request = ScopedApprovalRequest.parse(approvalRequest());
141
+ expect(() => validateScopedApprovalDecisionForRequest(request, {
142
+ ...approvalDecision(),
143
+ payload: { ...approvalDecision().payload, contract_sha256: "d".repeat(64) },
144
+ })).toThrow(/contract_sha256/);
145
+ expect(() => validateScopedApprovalDecisionForRequest(request, {
146
+ ...approvalDecision(),
147
+ payload: { ...approvalDecision().payload, diff_sha256: "e".repeat(64) },
148
+ })).toThrow(/diff_sha256/);
149
+ });
150
+ it("rejects a signed decision issued before its bound request", () => {
151
+ const request = ScopedApprovalRequest.parse(approvalRequest());
152
+ expect(() => validateScopedApprovalDecisionForRequest(request, {
153
+ ...approvalDecision(),
154
+ payload: {
155
+ ...approvalDecision().payload,
156
+ issued_at: "2026-07-28T19:59:59.000Z",
157
+ },
158
+ })).toThrow(/issued_at/);
159
+ });
160
+ it("has no RISK-R4 approval request contract", () => {
161
+ expect(ScopedApprovalRequest.safeParse({ ...approvalRequest(), risk: "R4" }).success).toBe(false);
162
+ });
163
+ it("keeps producers deep-strict while inbound consumers tolerate additive fields", () => {
164
+ const decision = {
165
+ ...approvalDecision(),
166
+ future_top_level: true,
167
+ payload: {
168
+ ...approvalDecision().payload,
169
+ future_payload_field: "vNext",
170
+ decided_by: {
171
+ ...approvalDecision().payload.decided_by,
172
+ display_name: "Owner",
173
+ },
174
+ },
175
+ signature: {
176
+ ...approvalDecision().signature,
177
+ future_signature_field: "vNext",
178
+ },
179
+ };
180
+ expect(ScopedApprovalDecision.safeParse(decision).success).toBe(false);
181
+ expect(() => parseInboundScopedApprovalDecision(decision)).not.toThrow();
182
+ });
183
+ it("rejects non-canonical or replay-ambiguous scope and invalid validity windows", () => {
184
+ expect(ScopedApprovalRequest.safeParse({
185
+ ...approvalRequest(),
186
+ action_scope: ["push", "commit"],
187
+ }).success).toBe(false);
188
+ expect(ScopedApprovalRequest.safeParse({
189
+ ...approvalRequest(),
190
+ action_scope: ["commit", "commit"],
191
+ }).success).toBe(false);
192
+ expect(ScopedApprovalDecision.safeParse({
193
+ ...approvalDecision(),
194
+ payload: {
195
+ ...approvalDecision().payload,
196
+ issued_at: "2026-07-28T20:16:00.000Z",
197
+ },
198
+ }).success).toBe(false);
199
+ });
200
+ });
201
+ //# sourceMappingURL=autonomy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomy.test.js","sourceRoot":"","sources":["../src/autonomy.test.ts"],"names":[],"mappings":"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"}
@@ -41,8 +41,8 @@ export declare const AgentCommand: z.ZodObject<{
41
41
  policy_profile: z.ZodOptional<z.ZodString>;
42
42
  idempotency_key: z.ZodOptional<z.ZodString>;
43
43
  }, "strict", z.ZodTypeAny, {
44
- protocol_version: string;
45
44
  command: string;
45
+ protocol_version: string;
46
46
  actor: {
47
47
  type: "human" | "agent";
48
48
  id: string;
@@ -55,8 +55,8 @@ export declare const AgentCommand: z.ZodObject<{
55
55
  policy_profile?: string | undefined;
56
56
  idempotency_key?: string | undefined;
57
57
  }, {
58
- protocol_version: string;
59
58
  command: string;
59
+ protocol_version: string;
60
60
  actor: {
61
61
  type: "human" | "agent";
62
62
  id: string;
@@ -263,7 +263,7 @@ export declare const AgentCommandResult: z.ZodEffects<z.ZodObject<{
263
263
  retryable: boolean;
264
264
  }>>>;
265
265
  }, "strict", z.ZodTypeAny, {
266
- status: "ok" | "needs_approval" | "blocked" | "error";
266
+ status: "blocked" | "ok" | "needs_approval" | "error";
267
267
  protocol_version: string;
268
268
  error?: {
269
269
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
@@ -289,7 +289,7 @@ export declare const AgentCommandResult: z.ZodEffects<z.ZodObject<{
289
289
  command: string;
290
290
  }[] | undefined;
291
291
  }, {
292
- status: "ok" | "needs_approval" | "blocked" | "error";
292
+ status: "blocked" | "ok" | "needs_approval" | "error";
293
293
  protocol_version: string;
294
294
  error?: {
295
295
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
@@ -315,7 +315,7 @@ export declare const AgentCommandResult: z.ZodEffects<z.ZodObject<{
315
315
  command: string;
316
316
  }[] | undefined;
317
317
  }>, {
318
- status: "ok" | "needs_approval" | "blocked" | "error";
318
+ status: "blocked" | "ok" | "needs_approval" | "error";
319
319
  protocol_version: string;
320
320
  error?: {
321
321
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
@@ -341,7 +341,7 @@ export declare const AgentCommandResult: z.ZodEffects<z.ZodObject<{
341
341
  command: string;
342
342
  }[] | undefined;
343
343
  }, {
344
- status: "ok" | "needs_approval" | "blocked" | "error";
344
+ status: "blocked" | "ok" | "needs_approval" | "error";
345
345
  protocol_version: string;
346
346
  error?: {
347
347
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
@@ -826,7 +826,7 @@ export declare const AgentCommandResultObject: z.ZodObject<{
826
826
  retryable: boolean;
827
827
  }>>>;
828
828
  }, "strict", z.ZodTypeAny, {
829
- status: "ok" | "needs_approval" | "blocked" | "error";
829
+ status: "blocked" | "ok" | "needs_approval" | "error";
830
830
  protocol_version: string;
831
831
  error?: {
832
832
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
@@ -852,7 +852,7 @@ export declare const AgentCommandResultObject: z.ZodObject<{
852
852
  command: string;
853
853
  }[] | undefined;
854
854
  }, {
855
- status: "ok" | "needs_approval" | "blocked" | "error";
855
+ status: "blocked" | "ok" | "needs_approval" | "error";
856
856
  protocol_version: string;
857
857
  error?: {
858
858
  code: "bad_request" | "unsupported_protocol_version" | "unknown_command" | "policy_denied" | "not_found" | "conflict" | "budget_exceeded" | "internal";
package/dist/event.d.ts CHANGED
@@ -16,20 +16,20 @@ export declare const EventEnvelope: z.ZodObject<{
16
16
  }, "strict", z.ZodTypeAny, {
17
17
  type: string;
18
18
  run_id: string;
19
+ payload: Record<string, unknown>;
19
20
  event_id: string;
20
21
  seq: number;
21
22
  session_id: string;
22
23
  created_at: number;
23
24
  terminal: boolean;
24
- payload: Record<string, unknown>;
25
25
  }, {
26
26
  type: string;
27
27
  run_id: string;
28
+ payload: Record<string, unknown>;
28
29
  event_id: string;
29
30
  seq: number;
30
31
  session_id: string;
31
32
  created_at: number;
32
- payload: Record<string, unknown>;
33
33
  terminal?: boolean | undefined;
34
34
  }>;
35
35
  export type EventEnvelope = z.infer<typeof EventEnvelope>;
@@ -8,7 +8,7 @@ interface SchemaEntry {
8
8
  comment?: string;
9
9
  schema: ZodTypeAny;
10
10
  }
11
- /** The 9 public protocol contracts emitted as JSON Schema. Order is stable. */
11
+ /** Public protocol contracts emitted as JSON Schema. Order is stable. */
12
12
  export declare const SCHEMA_MANIFEST: readonly SchemaEntry[];
13
13
  /** filename -> file content for every committed schema. */
14
14
  export declare function generateAll(): Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAatC,UAAU,WAAW;IACnB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EAgBjD,CAAC;AAkBF,2DAA2D;AAC3D,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpD"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAoBtC,UAAU,WAAW;IACnB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,yEAAyE;AACzE,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EA+CjD,CAAC;AAkBF,2DAA2D;AAC3D,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpD"}