@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.
- package/LICENSE +21 -0
- package/dist/autonomy.d.ts +1300 -0
- package/dist/autonomy.d.ts.map +1 -0
- package/dist/autonomy.js +270 -0
- package/dist/autonomy.js.map +1 -0
- package/dist/autonomy.test.d.ts +2 -0
- package/dist/autonomy.test.d.ts.map +1 -0
- package/dist/autonomy.test.js +201 -0
- package/dist/autonomy.test.js.map +1 -0
- package/dist/envelope.d.ts +8 -8
- package/dist/event.d.ts +2 -2
- package/dist/generate.d.ts +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +30 -1
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +2 -2
- package/dist/schemas.test.js +5 -0
- package/dist/schemas.test.js.map +1 -1
- package/package.json +9 -9
- package/schemas/autonomy-risk-decision.schema.json +86 -0
- package/schemas/autonomy-risk-level.schema.json +12 -0
- package/schemas/autonomy-run-state.schema.json +35 -0
- package/schemas/scoped-approval-decision.schema.json +131 -0
- package/schemas/scoped-approval-request.schema.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonomy.d.ts","sourceRoot":"","sources":["../src/autonomy.ts"],"names":[],"mappings":"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"}
|
package/dist/autonomy.js
ADDED
|
@@ -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 @@
|
|
|
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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"}
|
package/dist/envelope.d.ts
CHANGED
|
@@ -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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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>;
|
package/dist/generate.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ interface SchemaEntry {
|
|
|
8
8
|
comment?: string;
|
|
9
9
|
schema: ZodTypeAny;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
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>;
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|