@coderifts/agent-guard 17.3.2 → 17.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/cjs/atomic-profile.d.ts +46 -0
- package/dist/cjs/atomic-profile.d.ts.map +1 -1
- package/dist/cjs/atomic-profile.js +3 -0
- package/dist/cjs/atomic-profile.js.map +1 -1
- package/dist/cjs/cas-adapters/api.d.ts.map +1 -1
- package/dist/cjs/cas-adapters/api.js +5 -0
- package/dist/cjs/cas-adapters/api.js.map +1 -1
- package/dist/cjs/conditional-write.d.ts +36 -0
- package/dist/cjs/conditional-write.d.ts.map +1 -1
- package/dist/cjs/conditional-write.js +14 -1
- package/dist/cjs/conditional-write.js.map +1 -1
- package/dist/cjs/deny-teaching.d.ts +61 -0
- package/dist/cjs/deny-teaching.d.ts.map +1 -0
- package/dist/cjs/deny-teaching.js +130 -0
- package/dist/cjs/deny-teaching.js.map +1 -0
- package/dist/cjs/execute-tool-call.d.ts +13 -0
- package/dist/cjs/execute-tool-call.d.ts.map +1 -1
- package/dist/cjs/execute-tool-call.js +20 -0
- package/dist/cjs/execute-tool-call.js.map +1 -1
- package/dist/cjs/gate-refusal.d.ts +0 -1
- package/dist/cjs/gate-refusal.d.ts.map +1 -1
- package/dist/cjs/gate-refusal.js +14 -0
- package/dist/cjs/gate-refusal.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +9 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/read-decision.d.ts +11 -3
- package/dist/cjs/read-decision.d.ts.map +1 -1
- package/dist/cjs/read-decision.js +11 -3
- package/dist/cjs/read-decision.js.map +1 -1
- package/dist/cjs/vendor/VENDOR.sha256 +12 -5
- package/dist/esm/atomic-profile.d.ts +46 -0
- package/dist/esm/atomic-profile.d.ts.map +1 -1
- package/dist/esm/atomic-profile.js +3 -0
- package/dist/esm/atomic-profile.js.map +1 -1
- package/dist/esm/cas-adapters/api.d.ts.map +1 -1
- package/dist/esm/cas-adapters/api.js +5 -0
- package/dist/esm/cas-adapters/api.js.map +1 -1
- package/dist/esm/conditional-write.d.ts +36 -0
- package/dist/esm/conditional-write.d.ts.map +1 -1
- package/dist/esm/conditional-write.js +14 -1
- package/dist/esm/conditional-write.js.map +1 -1
- package/dist/esm/deny-teaching.d.ts +61 -0
- package/dist/esm/deny-teaching.d.ts.map +1 -0
- package/dist/esm/deny-teaching.js +125 -0
- package/dist/esm/deny-teaching.js.map +1 -0
- package/dist/esm/execute-tool-call.d.ts +13 -0
- package/dist/esm/execute-tool-call.d.ts.map +1 -1
- package/dist/esm/execute-tool-call.js +20 -0
- package/dist/esm/execute-tool-call.js.map +1 -1
- package/dist/esm/gate-refusal.d.ts +0 -1
- package/dist/esm/gate-refusal.d.ts.map +1 -1
- package/dist/esm/gate-refusal.js +14 -0
- package/dist/esm/gate-refusal.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/read-decision.d.ts +11 -3
- package/dist/esm/read-decision.d.ts.map +1 -1
- package/dist/esm/read-decision.js +11 -3
- package/dist/esm/read-decision.js.map +1 -1
- package/dist/esm/vendor/VENDOR.sha256 +12 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -192,6 +192,45 @@ const { tools, coverage } = guardToolRegistry(rawTools, { guard: { client } });
|
|
|
192
192
|
// observed this run, read `composition_assurance.observed_class`.
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
+
### Reading a decision: `readDecision` — and why you must read `reason`
|
|
196
|
+
|
|
197
|
+
`readDecision(response)` never throws and resolves in one documented order:
|
|
198
|
+
|
|
199
|
+
| Body carries | Result |
|
|
200
|
+
|---|---|
|
|
201
|
+
| `execution_action` in the closed set | that action |
|
|
202
|
+
| `execution_action` PRESENT but **not** in the closed set | the **raw arrived string** + `reason: 'EXECUTION_ACTION_UNRECOGNISED'` |
|
|
203
|
+
| `execution_action` MISSING, body is explicit `decision_spec_version: "1.0"` and not v2 | legacy `decision` → action map |
|
|
204
|
+
| anything else | `'STOP'` + `reason: 'UNREADABLE_DECISION'` |
|
|
205
|
+
|
|
206
|
+
The closed set is `CONTINUE | CONTINUE_WITH_MONITORING | REQUEST_APPROVAL | STOP`. A body is **v2**
|
|
207
|
+
when it carries `decision_result`, carries `preflight_mode`, or its `decision_spec_version` starts
|
|
208
|
+
`"2."`. A **missing** version is not legacy.
|
|
209
|
+
|
|
210
|
+
**The caller MUST read `reason`.** On `EXECUTION_ACTION_UNRECOGNISED` the raw arrived string is
|
|
211
|
+
returned as `executionAction` on purpose, so you can log and reconcile what the server actually
|
|
212
|
+
sent. It is not a control-set action:
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
const r = readDecision(response);
|
|
216
|
+
|
|
217
|
+
// WRONG — an unrecognised action is not STOP, so this proceeds on it.
|
|
218
|
+
if (r.executionAction !== 'STOP') proceed();
|
|
219
|
+
|
|
220
|
+
// RIGHT — branch on the closed set, or check reason first.
|
|
221
|
+
if (r.reason) { halt(r.reason, r.executionAction); }
|
|
222
|
+
else switch (r.executionAction) { /* CONTINUE | CONTINUE_WITH_MONITORING | REQUEST_APPROVAL | STOP */ }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
This reader deliberately does **not** normalise an unrecognised action to `STOP`: that would erase
|
|
226
|
+
the arrived value, which is the only evidence a reconciliation has. `gateDecision` — the merge gate
|
|
227
|
+
— is unconditionally fail-closed and needs no such care.
|
|
228
|
+
|
|
229
|
+
> Interop note (1565/1585): `@coderifts/sdk` ≤ 3.14.1 mapped `decision` → action on **any** bare
|
|
230
|
+
> body, so `{ decision: 'ALLOW' }` read as `CONTINUE` there and `STOP` here. `@coderifts/sdk@3.14.2`
|
|
231
|
+
> gates its legacy arm exactly as this reader does. The two readers still differ by design on one
|
|
232
|
+
> case: a **present-but-unrecognised** action is raw-plus-`reason` here and `STOP` in the SDK.
|
|
233
|
+
|
|
195
234
|
### One-call orchestration with `withCodeRifts` (S1 + S2)
|
|
196
235
|
|
|
197
236
|
`withCodeRifts` wraps `guardToolRegistry` behind a single call that takes a **mandatory** `operation`
|
|
@@ -101,17 +101,63 @@ export declare function atomicConstructionProblems(input: AtomicConstructionInpu
|
|
|
101
101
|
export declare function throwAtomicUnsatisfied(problems: string[]): never;
|
|
102
102
|
/**
|
|
103
103
|
* Per-call outcome union. Host-claimed commit never AUTHORIZED_COMMITTED.
|
|
104
|
+
*
|
|
105
|
+
* Every required boolean below is supplied by the host. The guard classifies
|
|
106
|
+
* the conjunction; it does not independently observe or attest the events.
|
|
104
107
|
*/
|
|
105
108
|
export declare function atomicOutcome(input: {
|
|
109
|
+
/**
|
|
110
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
111
|
+
* independently observe or attest the underlying event.
|
|
112
|
+
*/
|
|
106
113
|
receiptVerified: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
116
|
+
* independently observe or attest the underlying event.
|
|
117
|
+
*/
|
|
107
118
|
grantV2Valid: boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
121
|
+
* independently observe or attest the underlying event.
|
|
122
|
+
*/
|
|
108
123
|
executorMatch: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
126
|
+
* independently observe or attest the underlying event.
|
|
127
|
+
*/
|
|
109
128
|
targetMatch: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
131
|
+
* independently observe or attest the underlying event.
|
|
132
|
+
*/
|
|
110
133
|
nonceFresh: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
136
|
+
* independently observe or attest the underlying event.
|
|
137
|
+
* The executor is a remote party; the guard never witnesses nonce consumption.
|
|
138
|
+
*/
|
|
111
139
|
nonceConsumedOnce: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
142
|
+
* independently observe or attest the underlying event.
|
|
143
|
+
*/
|
|
112
144
|
casCommitted: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
147
|
+
* independently observe or attest the underlying event.
|
|
148
|
+
*/
|
|
113
149
|
readBackOk: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
152
|
+
* independently observe or attest the underlying event.
|
|
153
|
+
*/
|
|
114
154
|
executorAttested: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Supplied by the host. The guard classifies this assertion; it does not
|
|
157
|
+
* independently observe or attest the underlying event.
|
|
158
|
+
* Construction can inspect the mutator register; this classifier input is
|
|
159
|
+
* still host-supplied, not re-read here.
|
|
160
|
+
*/
|
|
115
161
|
mutatorRegistered: boolean;
|
|
116
162
|
authUnavailable?: boolean;
|
|
117
163
|
nonceStoreUnavailable?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-profile.d.ts","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,2BAA2B,EAAG,qBAA8B,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,2BAA2B,EAAG,qBAA8B,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAG,kBAA2B,CAAC;AACnE,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAEvG,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,SAAS,GAAG,eAAe,CAAC;AAEjF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,4NAYnB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/B,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,eAAe,CAkBvD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,qBAAqB,CAIpF;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE7D;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yEAAyE;IACzE,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,WAAa,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iCAAiC,QAGlB,CAAC;AAE7B,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,EAAE,CAgHnF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAOhE;AAED
|
|
1
|
+
{"version":3,"file":"atomic-profile.d.ts","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -220,6 +220,9 @@ function throwAtomicUnsatisfied(problems) {
|
|
|
220
220
|
}
|
|
221
221
|
/**
|
|
222
222
|
* Per-call outcome union. Host-claimed commit never AUTHORIZED_COMMITTED.
|
|
223
|
+
*
|
|
224
|
+
* Every required boolean below is supplied by the host. The guard classifies
|
|
225
|
+
* the conjunction; it does not independently observe or attest the events.
|
|
223
226
|
*/
|
|
224
227
|
function atomicOutcome(input) {
|
|
225
228
|
if (input.authUnavailable || input.nonceStoreUnavailable || input.readBackUnavailable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-profile.js","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":";;;AAiFA,sDAkBC;AAED,8CAIC;AAGD,kDAEC;AA8CD,gEAgHC;AAED,wDAOC;
|
|
1
|
+
{"version":3,"file":"atomic-profile.js","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cas-adapters/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAGL,WAAW,EACX,KAAK,yBAAyB,EAC9B,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAA8B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,YAAY,CAWd;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKjF;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IACtC;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC;CACZ,GACD;IACE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEN,MAAM,MAAM,uBAAuB,CAAC,CAAC,GAAG,OAAO,IAAI;IACjD,oFAAoF;IACpF,cAAc,EAAE,YAAY,CAAC;IAC7B;;;OAGG;IACH,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE;QACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,EAAE,YAAY,CAAC;KAC9B,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EACnD,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cas-adapters/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAGL,WAAW,EACX,KAAK,yBAAyB,EAC9B,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAA8B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,YAAY,CAWd;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKjF;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IACtC;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC;CACZ,GACD;IACE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEN,MAAM,MAAM,uBAAuB,CAAC,CAAC,GAAG,OAAO,IAAI;IACjD,oFAAoF;IACpF,cAAc,EAAE,YAAY,CAAC;IAC7B;;;OAGG;IACH,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE;QACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,EAAE,YAAY,CAAC;KAC9B,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EACnD,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAmDvD;AAED,0FAA0F;AAC1F,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -81,6 +81,11 @@ async function writeApiIfUnchanged(args) {
|
|
|
81
81
|
expected_token: args.expected_token,
|
|
82
82
|
current_token: async () => createApiVersionToken(await args.current_etag()),
|
|
83
83
|
detect_stale_during_commit: detect,
|
|
84
|
+
// 1587 — the same condition the fallback below turns on, reported to the core so the
|
|
85
|
+
// outcome can say `no_op_no_intended_token` instead of leaving the caller to infer it from
|
|
86
|
+
// a comment. One expression, two uses: the behaviour and the report cannot drift apart.
|
|
87
|
+
intended_post_state_known: (written) => typeof written.new_etag === 'string'
|
|
88
|
+
&& written.new_etag.trim().length > 0,
|
|
84
89
|
expected_after_commit: detect
|
|
85
90
|
? async (written) => {
|
|
86
91
|
if (typeof written.new_etag === 'string' && written.new_etag.trim().length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cas-adapters/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,CAAC;;;AAwBb,sDAaC;AAGD,kCAKC;AA+DD,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cas-adapters/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -152,11 +152,36 @@ export declare function conditionalWriteResidual(input: {
|
|
|
152
152
|
* re-check found the resource no longer matches the write's expected post-state
|
|
153
153
|
* (detection only — not a rollback)
|
|
154
154
|
*/
|
|
155
|
+
/** Whether post-commit detection compared anything. See ExecuteIfUnchangedOutcome.detection. */
|
|
156
|
+
export type DetectionState = 'ran' | 'no_op_no_intended_token';
|
|
155
157
|
export type ExecuteIfUnchangedOutcome<T> = {
|
|
156
158
|
status: 'committed';
|
|
157
159
|
result: T;
|
|
158
160
|
version_token: VersionToken;
|
|
159
161
|
observed_token?: VersionToken | null;
|
|
162
|
+
/**
|
|
163
|
+
* 1577/1587 — DID POST-COMMIT DETECTION ACTUALLY RUN?
|
|
164
|
+
*
|
|
165
|
+
* `detect_stale_during_commit` can be true and still do nothing: an adapter whose host did
|
|
166
|
+
* not return an intended post-state has no token to compare against, so its
|
|
167
|
+
* expected_after_commit falls back to a live re-read and tokensEqual is tautologically
|
|
168
|
+
* true. That is documented in cas-adapters/api.ts, in a comment — and a comment is not in
|
|
169
|
+
* the outcome. A caller reading `committed` could not tell a detection that ran from one
|
|
170
|
+
* that was a no-op.
|
|
171
|
+
*
|
|
172
|
+
* 'ran' an intended post-state was compared
|
|
173
|
+
* 'no_op_no_intended_token' requested, but the host supplied no intended post-state
|
|
174
|
+
* absent detection was not requested
|
|
175
|
+
*
|
|
176
|
+
* ABSENT WHEN NOT REQUESTED, deliberately. cas-fs.test.js pins that the successful path
|
|
177
|
+
* WITHOUT the detect flag keeps a byte-identical committed shape; a field that appeared
|
|
178
|
+
* there anyway would break a guarantee someone named on purpose. A caller who did not ask
|
|
179
|
+
* for detection already knows it did not run — the states worth reporting are the two that
|
|
180
|
+
* only arise when it was asked for.
|
|
181
|
+
*
|
|
182
|
+
* Additive and verdict-neutral: no comparison, status or reason changes with it.
|
|
183
|
+
*/
|
|
184
|
+
detection?: DetectionState;
|
|
160
185
|
} | {
|
|
161
186
|
status: 'refused';
|
|
162
187
|
reason: 'stale_version_token';
|
|
@@ -216,6 +241,17 @@ export type ExecuteIfUnchangedArgs<T> = {
|
|
|
216
241
|
* writes — the token is supposed to change. Supply the token of the written state.
|
|
217
242
|
*/
|
|
218
243
|
detect_stale_during_commit?: boolean;
|
|
244
|
+
/**
|
|
245
|
+
* Optional: did the host give an intended post-state for THIS write?
|
|
246
|
+
*
|
|
247
|
+
* Only the adapter knows. cas-adapters/api.ts answers it with the same condition it already
|
|
248
|
+
* uses to decide whether to build a real token or fall back to a live re-read, so the reported
|
|
249
|
+
* state and the behaviour come from one expression rather than two that can drift.
|
|
250
|
+
*
|
|
251
|
+
* Absent → detection is reported as 'ran' when requested, which is what it was before this
|
|
252
|
+
* field existed.
|
|
253
|
+
*/
|
|
254
|
+
intended_post_state_known?: (written: T) => boolean;
|
|
219
255
|
/**
|
|
220
256
|
* Token that should hold after a successful write (the written state's token).
|
|
221
257
|
* Required when detect_stale_during_commit is true; ignored otherwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional-write.d.ts","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,KAAK,GAAG,cAAc,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,sBAAsB,GACtB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,0BAA0B,GAC1B,oBAAoB,CAAC;AAEzB;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,6DAA6D;IAC7D,yBAAyB,EAAE,OAAO,CAAC;IACnC,+FAA+F;IAC/F,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,wEAAwE;IACxE,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,WAAW,CACzB,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAClC,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GACjC,OAAO,CAIT;AASD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,EAAE,OAAO,CAAC;IACjC,GAAG,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;CAC1C,GAAG;IACF,KAAK,EAAE,qBAAqB,CAAC;IAC7B,mDAAmD;IACnD,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CA0CA;AAED,yFAAyF;AACzF,eAAO,MAAM,4BAA4B,iDAAiD,CAAC;AAE3F;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,EAAE,OAAO,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C,GAAG,MAAM,GAAG,IAAI,CAMhB;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,yBAAyB,CAAC,CAAC,IACnC;
|
|
1
|
+
{"version":3,"file":"conditional-write.d.ts","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -178,7 +178,13 @@ async function executeIfUnchanged(args) {
|
|
|
178
178
|
observed_token = null;
|
|
179
179
|
}
|
|
180
180
|
// Post-commit detection (best-effort honesty, not prevention).
|
|
181
|
+
// `detection` records WHETHER it compared anything — the verdict below is unchanged by it.
|
|
182
|
+
let detection;
|
|
181
183
|
if (args.detect_stale_during_commit === true && typeof args.expected_after_commit === 'function') {
|
|
184
|
+
detection = typeof args.intended_post_state_known === 'function'
|
|
185
|
+
&& args.intended_post_state_known(result) === false
|
|
186
|
+
? 'no_op_no_intended_token'
|
|
187
|
+
: 'ran';
|
|
182
188
|
const want = await args.expected_after_commit(result);
|
|
183
189
|
if (!tokensEqual(want, observed_token)) {
|
|
184
190
|
return {
|
|
@@ -191,6 +197,13 @@ async function executeIfUnchanged(args) {
|
|
|
191
197
|
};
|
|
192
198
|
}
|
|
193
199
|
}
|
|
194
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
status: 'committed',
|
|
202
|
+
result,
|
|
203
|
+
version_token: expected,
|
|
204
|
+
observed_token,
|
|
205
|
+
// Spread, not a key set to undefined: the off path must stay byte-identical.
|
|
206
|
+
...(detection === undefined ? {} : { detection }),
|
|
207
|
+
};
|
|
195
208
|
}
|
|
196
209
|
//# sourceMappingURL=conditional-write.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional-write.js","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,CAAC;;;AAqGb,kCAOC;AA0BD,gEAoDC;AASD,4DAYC;
|
|
1
|
+
{"version":3,"file":"conditional-write.js","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deny-teaching.v1 — the machine block that makes a refusal actionable.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY THIS IS NOT deny-remedy.v1 ──────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `deny-remedy.ts` beside this file is pinned to a published schema
|
|
7
|
+
* (capability-demo/docs/deny-remedy.v1.json, sha256 3f51c5af…) and covers exactly THREE grant
|
|
8
|
+
* classes, refusing on purpose to invent a fourth. Widening it would break every copy of that
|
|
9
|
+
* schema in the ecosystem and silently change what a pinned document means.
|
|
10
|
+
*
|
|
11
|
+
* MEASURED: the guard's own refusal vocabulary is much larger than three — 4 AvailabilityCause and
|
|
12
|
+
* 15 IntegrityCause values (src/types.ts) — and NONE of them produced a next step. A caller that
|
|
13
|
+
* got `EXECUTION_ACTION_UNRECOGNISED` was told what was wrong and not what to do next.
|
|
14
|
+
*
|
|
15
|
+
* A deny with no next_action is a dead gate: the bot stops, a human is summoned, and the loop that
|
|
16
|
+
* was supposed to be a protocol becomes a support ticket. This block sits BESIDE the remedy, never
|
|
17
|
+
* replacing it, and answers the one question the cause alone cannot: what is the next call.
|
|
18
|
+
*
|
|
19
|
+
* ── WHAT IT DOES NOT DO ─────────────────────────────────────────────────────────────────────
|
|
20
|
+
*
|
|
21
|
+
* It is emitted AFTER a verdict, reads no key, verifies nothing, and cannot turn a deny into an
|
|
22
|
+
* allow. `retryable` says whether the SAME call could ever succeed unchanged — it is not a promise
|
|
23
|
+
* that it will, and `RETRY_SAME` on an availability cause still runs into the breaker.
|
|
24
|
+
*
|
|
25
|
+
* An unmapped cause gets `next_action: 'ESCALATE_HUMAN'` rather than a guess. That is the honest
|
|
26
|
+
* default for this file: sending a bot to a call that does not address why it was refused is worse
|
|
27
|
+
* than telling it a human is needed.
|
|
28
|
+
*/
|
|
29
|
+
/** What the caller should do next. Closed set — a surface must not invent a sixth. */
|
|
30
|
+
export declare const NEXT_ACTION: Readonly<{
|
|
31
|
+
/** Call preflight again with a grant requested. The change set is fine; authorization is missing. */
|
|
32
|
+
REQUEST_GRANT: "REQUEST_GRANT";
|
|
33
|
+
/** Re-run preflight for the CURRENT change set — the previous decision no longer describes it. */
|
|
34
|
+
REPREFLIGHT: "REPREFLIGHT";
|
|
35
|
+
/** The same call may succeed later, unchanged (transient). */
|
|
36
|
+
RETRY_SAME: "RETRY_SAME";
|
|
37
|
+
/** The request itself must change before any retry can help. */
|
|
38
|
+
FIX_REQUEST: "FIX_REQUEST";
|
|
39
|
+
/** No mechanical next step exists. A person decides. */
|
|
40
|
+
ESCALATE_HUMAN: "ESCALATE_HUMAN";
|
|
41
|
+
}>;
|
|
42
|
+
export type NextAction = (typeof NEXT_ACTION)[keyof typeof NEXT_ACTION];
|
|
43
|
+
export interface DenyTeaching {
|
|
44
|
+
v: 'coderifts.deny.v1';
|
|
45
|
+
reason: string;
|
|
46
|
+
next_action: NextAction;
|
|
47
|
+
payload_shape: Record<string, string>;
|
|
48
|
+
retryable: boolean;
|
|
49
|
+
/** Present only when the refusal names a target the caller addressed. */
|
|
50
|
+
target?: string | null;
|
|
51
|
+
/** The human sentence, kept — the block is the contract, the sentence is the courtesy. */
|
|
52
|
+
human: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @param reason the guard's own cause / refusal code
|
|
56
|
+
* @param human the sentence a person reads; kept alongside, never replaced
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildDenyTeaching(reason: string, human: string, target?: string | null): DenyTeaching;
|
|
59
|
+
/** Every cause this file maps — so a test can assert the guard's vocabulary is covered. */
|
|
60
|
+
export declare function mappedCauses(): string[];
|
|
61
|
+
//# sourceMappingURL=deny-teaching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deny-teaching.d.ts","sourceRoot":"","sources":["../../src/deny-teaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,sFAAsF;AACtF,eAAO,MAAM,WAAW;IACtB,qGAAqG;;IAErG,kGAAkG;;IAElG,8DAA8D;;IAE9D,gEAAgE;;IAEhE,wDAAwD;;EAExD,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAqExE,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,mBAAmB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,YAAY,CAcd;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* deny-teaching.v1 — the machine block that makes a refusal actionable.
|
|
4
|
+
*
|
|
5
|
+
* ── WHY THIS IS NOT deny-remedy.v1 ──────────────────────────────────────────────────────────
|
|
6
|
+
*
|
|
7
|
+
* `deny-remedy.ts` beside this file is pinned to a published schema
|
|
8
|
+
* (capability-demo/docs/deny-remedy.v1.json, sha256 3f51c5af…) and covers exactly THREE grant
|
|
9
|
+
* classes, refusing on purpose to invent a fourth. Widening it would break every copy of that
|
|
10
|
+
* schema in the ecosystem and silently change what a pinned document means.
|
|
11
|
+
*
|
|
12
|
+
* MEASURED: the guard's own refusal vocabulary is much larger than three — 4 AvailabilityCause and
|
|
13
|
+
* 15 IntegrityCause values (src/types.ts) — and NONE of them produced a next step. A caller that
|
|
14
|
+
* got `EXECUTION_ACTION_UNRECOGNISED` was told what was wrong and not what to do next.
|
|
15
|
+
*
|
|
16
|
+
* A deny with no next_action is a dead gate: the bot stops, a human is summoned, and the loop that
|
|
17
|
+
* was supposed to be a protocol becomes a support ticket. This block sits BESIDE the remedy, never
|
|
18
|
+
* replacing it, and answers the one question the cause alone cannot: what is the next call.
|
|
19
|
+
*
|
|
20
|
+
* ── WHAT IT DOES NOT DO ─────────────────────────────────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* It is emitted AFTER a verdict, reads no key, verifies nothing, and cannot turn a deny into an
|
|
23
|
+
* allow. `retryable` says whether the SAME call could ever succeed unchanged — it is not a promise
|
|
24
|
+
* that it will, and `RETRY_SAME` on an availability cause still runs into the breaker.
|
|
25
|
+
*
|
|
26
|
+
* An unmapped cause gets `next_action: 'ESCALATE_HUMAN'` rather than a guess. That is the honest
|
|
27
|
+
* default for this file: sending a bot to a call that does not address why it was refused is worse
|
|
28
|
+
* than telling it a human is needed.
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.NEXT_ACTION = void 0;
|
|
32
|
+
exports.buildDenyTeaching = buildDenyTeaching;
|
|
33
|
+
exports.mappedCauses = mappedCauses;
|
|
34
|
+
/** What the caller should do next. Closed set — a surface must not invent a sixth. */
|
|
35
|
+
exports.NEXT_ACTION = Object.freeze({
|
|
36
|
+
/** Call preflight again with a grant requested. The change set is fine; authorization is missing. */
|
|
37
|
+
REQUEST_GRANT: 'REQUEST_GRANT',
|
|
38
|
+
/** Re-run preflight for the CURRENT change set — the previous decision no longer describes it. */
|
|
39
|
+
REPREFLIGHT: 'REPREFLIGHT',
|
|
40
|
+
/** The same call may succeed later, unchanged (transient). */
|
|
41
|
+
RETRY_SAME: 'RETRY_SAME',
|
|
42
|
+
/** The request itself must change before any retry can help. */
|
|
43
|
+
FIX_REQUEST: 'FIX_REQUEST',
|
|
44
|
+
/** No mechanical next step exists. A person decides. */
|
|
45
|
+
ESCALATE_HUMAN: 'ESCALATE_HUMAN',
|
|
46
|
+
});
|
|
47
|
+
/** The payload shape a next call needs, per action. Field names, not values. */
|
|
48
|
+
const PAYLOAD_SHAPE = Object.freeze({
|
|
49
|
+
[exports.NEXT_ACTION.REQUEST_GRANT]: {
|
|
50
|
+
tool: 'preflight_change_set',
|
|
51
|
+
preflight_mode: 'authorize',
|
|
52
|
+
artifacts: 'Array<{ id, type, before, after }> — the COMPLETE base→head change set',
|
|
53
|
+
context: '{ operation (required), repository?, branch?, pull_request?, environment? }',
|
|
54
|
+
include_execution_grant: 'true — this refusal was about a missing grant',
|
|
55
|
+
},
|
|
56
|
+
[exports.NEXT_ACTION.REPREFLIGHT]: {
|
|
57
|
+
tool: 'preflight_change_set',
|
|
58
|
+
preflight_mode: 'authorize',
|
|
59
|
+
artifacts: 'Array<{ id, type, before, after }> — re-read from the CURRENT head, not the cached set',
|
|
60
|
+
context: '{ operation (required), repository?, branch?, pull_request? }',
|
|
61
|
+
},
|
|
62
|
+
[exports.NEXT_ACTION.RETRY_SAME]: {
|
|
63
|
+
tool: 'preflight_change_set',
|
|
64
|
+
note: 'the identical request; nothing in it needs to change',
|
|
65
|
+
},
|
|
66
|
+
[exports.NEXT_ACTION.FIX_REQUEST]: {
|
|
67
|
+
tool: 'preflight_change_set',
|
|
68
|
+
note: 'the request was rejected on its own terms — see `reason` before resending',
|
|
69
|
+
},
|
|
70
|
+
[exports.NEXT_ACTION.ESCALATE_HUMAN]: {},
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* cause -> next step. Explicit and closed; an unlisted cause escalates rather than guessing.
|
|
74
|
+
*
|
|
75
|
+
* The mapping is by what the caller can DO, not by how bad the cause is. `RECEIPT_MISSING` and
|
|
76
|
+
* `RECEIPT_ENVELOPE_MISMATCH` are different failures with the same next call, and a bot needs the
|
|
77
|
+
* call, not the taxonomy.
|
|
78
|
+
*/
|
|
79
|
+
const BY_CAUSE = Object.freeze({
|
|
80
|
+
// Availability — the server, not the request.
|
|
81
|
+
TIMEOUT: exports.NEXT_ACTION.RETRY_SAME,
|
|
82
|
+
NETWORK: exports.NEXT_ACTION.RETRY_SAME,
|
|
83
|
+
SERVER_ERROR: exports.NEXT_ACTION.RETRY_SAME,
|
|
84
|
+
RATE_LIMITED: exports.NEXT_ACTION.RETRY_SAME,
|
|
85
|
+
// No verifiable authorization for this change set.
|
|
86
|
+
RECEIPT_MISSING: exports.NEXT_ACTION.REQUEST_GRANT,
|
|
87
|
+
RECEIPT_UNVERIFIED: exports.NEXT_ACTION.REQUEST_GRANT,
|
|
88
|
+
// A decision exists and does not describe THIS change set / envelope.
|
|
89
|
+
RECEIPT_ENVELOPE_MISMATCH: exports.NEXT_ACTION.REPREFLIGHT,
|
|
90
|
+
ARTIFACT_MISMATCH: exports.NEXT_ACTION.REPREFLIGHT,
|
|
91
|
+
ANALYSIS_DEGRADED: exports.NEXT_ACTION.REPREFLIGHT,
|
|
92
|
+
// The response could not be read as a decision. Re-asking is the only mechanical move; the
|
|
93
|
+
// guard has already refused to execute, so a re-preflight cannot weaken anything.
|
|
94
|
+
UNREADABLE_DECISION: exports.NEXT_ACTION.REPREFLIGHT,
|
|
95
|
+
EXECUTION_ACTION_UNRECOGNISED: exports.NEXT_ACTION.REPREFLIGHT,
|
|
96
|
+
DECISION_INCONSISTENT: exports.NEXT_ACTION.REPREFLIGHT,
|
|
97
|
+
INVALID_RESPONSE: exports.NEXT_ACTION.REPREFLIGHT,
|
|
98
|
+
SCHEMA_INVALID: exports.NEXT_ACTION.REPREFLIGHT,
|
|
99
|
+
// The request was rejected on its own terms — resending it unchanged repeats the refusal.
|
|
100
|
+
REQUEST_REJECTED: exports.NEXT_ACTION.FIX_REQUEST,
|
|
101
|
+
PAYLOAD_TOO_LARGE: exports.NEXT_ACTION.FIX_REQUEST,
|
|
102
|
+
// Local misconfiguration and version skew: no call the bot can make fixes these.
|
|
103
|
+
CONFIG_ERROR: exports.NEXT_ACTION.ESCALATE_HUMAN,
|
|
104
|
+
DETECTOR_ERROR: exports.NEXT_ACTION.ESCALATE_HUMAN,
|
|
105
|
+
UNSUPPORTED_VERSION: exports.NEXT_ACTION.ESCALATE_HUMAN,
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* @param reason the guard's own cause / refusal code
|
|
109
|
+
* @param human the sentence a person reads; kept alongside, never replaced
|
|
110
|
+
*/
|
|
111
|
+
function buildDenyTeaching(reason, human, target = null) {
|
|
112
|
+
const key = String(reason || '').toUpperCase();
|
|
113
|
+
const next = BY_CAUSE[key] || exports.NEXT_ACTION.ESCALATE_HUMAN;
|
|
114
|
+
return {
|
|
115
|
+
v: 'coderifts.deny.v1',
|
|
116
|
+
reason: key || 'UNKNOWN',
|
|
117
|
+
next_action: next,
|
|
118
|
+
payload_shape: { ...PAYLOAD_SHAPE[next] },
|
|
119
|
+
// Only the transient class. A REPREFLIGHT is a DIFFERENT call, not a retry of this one, and
|
|
120
|
+
// labelling it retryable would invite a bot to resend the request that was just refused.
|
|
121
|
+
retryable: next === exports.NEXT_ACTION.RETRY_SAME,
|
|
122
|
+
...(target ? { target } : {}),
|
|
123
|
+
human: String(human || ''),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Every cause this file maps — so a test can assert the guard's vocabulary is covered. */
|
|
127
|
+
function mappedCauses() {
|
|
128
|
+
return Object.keys(BY_CAUSE).sort();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=deny-teaching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deny-teaching.js","sourceRoot":"","sources":["../../src/deny-teaching.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,19 @@ export type SurfacedEnvelopeFields = {
|
|
|
57
57
|
required_action?: string | null;
|
|
58
58
|
next_actions?: unknown;
|
|
59
59
|
breaking_changes?: number | null;
|
|
60
|
+
/**
|
|
61
|
+
* ── THE CITABLE PAIR (1534) ────────────────────────────────────────────────────────────
|
|
62
|
+
*
|
|
63
|
+
* `grant_id` and `receipt_digest` already exist on a decision this guard has already verified.
|
|
64
|
+
* MEASURED before they were added: this surface lifted decision_id / decision /
|
|
65
|
+
* execution_action / required_action / next_actions / breaking_changes and NEITHER of them, so
|
|
66
|
+
* the block a model actually reads carried no token it could quote.
|
|
67
|
+
*
|
|
68
|
+
* Lifted, never computed. Both are read off the envelope the guard verified; a value this
|
|
69
|
+
* function derived would be a number the guard published rather than one it checked.
|
|
70
|
+
*/
|
|
71
|
+
grant_id?: string | null;
|
|
72
|
+
receipt_digest?: string | null;
|
|
60
73
|
};
|
|
61
74
|
export declare function surfaceEnvelopeFields(envelope: DecisionResultEnvelope | null | undefined): SurfacedEnvelopeFields | null;
|
|
62
75
|
export type ExecuteOpenAIToolCallArgs = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-tool-call.d.ts","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAgB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACtC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACpC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAI9B;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,SAAS,aAAa,EAAE,GACxB;IACE,oGAAoG;IACpG,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C,CAAC;AA+BN,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAWrE;AAoID;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAchC;AAID;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"execute-tool-call.d.ts","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -238,6 +238,26 @@ function surfaceEnvelopeFields(envelope) {
|
|
|
238
238
|
if (out.breaking_changes === undefined)
|
|
239
239
|
delete out.breaking_changes;
|
|
240
240
|
}
|
|
241
|
+
// ── grant_id, from wherever the producer put it ───────────────────────────────────────────
|
|
242
|
+
//
|
|
243
|
+
// MEASURED on real envelopes: the id appears as `execution_grant.grant_id` when a grant was
|
|
244
|
+
// requested, and some producers echo a flat `grant_id`. Both are read; neither is invented, and
|
|
245
|
+
// when there is no grant the key is simply absent rather than null-filled — a caller must be
|
|
246
|
+
// able to tell "no grant was issued" from "a grant was issued and I lost its id".
|
|
247
|
+
const grantObj = e.execution_grant && typeof e.execution_grant === 'object'
|
|
248
|
+
? e.execution_grant : null;
|
|
249
|
+
const grantId = (grantObj && typeof grantObj.grant_id === 'string') ? grantObj.grant_id
|
|
250
|
+
: (typeof e.grant_id === 'string' ? e.grant_id : null);
|
|
251
|
+
if (grantId)
|
|
252
|
+
out.grant_id = grantId;
|
|
253
|
+
// The receipt digest as the producer recorded it. This surface does not hash the token itself:
|
|
254
|
+
// a digest computed here could differ from the one the gate quotes, and two different digests
|
|
255
|
+
// for one receipt is worse than one missing digest.
|
|
256
|
+
const receiptObj = e.receipt && typeof e.receipt === 'object' ? e.receipt : null;
|
|
257
|
+
const digest = (receiptObj && typeof receiptObj.digest === 'string') ? receiptObj.digest
|
|
258
|
+
: (typeof e.receipt_digest === 'string' ? e.receipt_digest : null);
|
|
259
|
+
if (digest)
|
|
260
|
+
out.receipt_digest = digest;
|
|
241
261
|
return Object.keys(out).length > 0 ? out : null;
|
|
242
262
|
}
|
|
243
263
|
function envelopeFromOutcome(outcome) {
|