@coderifts/agent-guard 8.4.0 → 8.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/auto-derive.d.ts +74 -0
  3. package/dist/cjs/auto-derive.d.ts.map +1 -0
  4. package/dist/cjs/auto-derive.js +272 -0
  5. package/dist/cjs/auto-derive.js.map +1 -0
  6. package/dist/cjs/auto-recheck.d.ts +76 -0
  7. package/dist/cjs/auto-recheck.d.ts.map +1 -0
  8. package/dist/cjs/auto-recheck.js +240 -0
  9. package/dist/cjs/auto-recheck.js.map +1 -0
  10. package/dist/cjs/cas-attestation.d.ts +35 -2
  11. package/dist/cjs/cas-attestation.d.ts.map +1 -1
  12. package/dist/cjs/cas-attestation.js +105 -2
  13. package/dist/cjs/cas-attestation.js.map +1 -1
  14. package/dist/cjs/execution-proof.d.ts +25 -0
  15. package/dist/cjs/execution-proof.d.ts.map +1 -1
  16. package/dist/cjs/execution-proof.js +6 -0
  17. package/dist/cjs/execution-proof.js.map +1 -1
  18. package/dist/cjs/final-answer-proof.d.ts.map +1 -1
  19. package/dist/cjs/final-answer-proof.js +20 -1
  20. package/dist/cjs/final-answer-proof.js.map +1 -1
  21. package/dist/cjs/guard.d.ts.map +1 -1
  22. package/dist/cjs/guard.js +10 -1
  23. package/dist/cjs/guard.js.map +1 -1
  24. package/dist/cjs/index.d.ts +6 -2
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +17 -2
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/tool-registry.d.ts.map +1 -1
  29. package/dist/cjs/tool-registry.js +36 -6
  30. package/dist/cjs/tool-registry.js.map +1 -1
  31. package/dist/cjs/types.d.ts +45 -1
  32. package/dist/cjs/types.d.ts.map +1 -1
  33. package/dist/cjs/with-coderifts.d.ts +16 -0
  34. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  35. package/dist/cjs/with-coderifts.js +9 -0
  36. package/dist/cjs/with-coderifts.js.map +1 -1
  37. package/dist/esm/auto-derive.d.ts +74 -0
  38. package/dist/esm/auto-derive.d.ts.map +1 -0
  39. package/dist/esm/auto-derive.js +265 -0
  40. package/dist/esm/auto-derive.js.map +1 -0
  41. package/dist/esm/auto-recheck.d.ts +76 -0
  42. package/dist/esm/auto-recheck.d.ts.map +1 -0
  43. package/dist/esm/auto-recheck.js +234 -0
  44. package/dist/esm/auto-recheck.js.map +1 -0
  45. package/dist/esm/cas-attestation.d.ts +35 -2
  46. package/dist/esm/cas-attestation.d.ts.map +1 -1
  47. package/dist/esm/cas-attestation.js +103 -2
  48. package/dist/esm/cas-attestation.js.map +1 -1
  49. package/dist/esm/execution-proof.d.ts +25 -0
  50. package/dist/esm/execution-proof.d.ts.map +1 -1
  51. package/dist/esm/execution-proof.js +6 -0
  52. package/dist/esm/execution-proof.js.map +1 -1
  53. package/dist/esm/final-answer-proof.d.ts.map +1 -1
  54. package/dist/esm/final-answer-proof.js +20 -1
  55. package/dist/esm/final-answer-proof.js.map +1 -1
  56. package/dist/esm/guard.d.ts.map +1 -1
  57. package/dist/esm/guard.js +11 -2
  58. package/dist/esm/guard.js.map +1 -1
  59. package/dist/esm/index.d.ts +6 -2
  60. package/dist/esm/index.d.ts.map +1 -1
  61. package/dist/esm/index.js +5 -1
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/tool-registry.d.ts.map +1 -1
  64. package/dist/esm/tool-registry.js +36 -6
  65. package/dist/esm/tool-registry.js.map +1 -1
  66. package/dist/esm/types.d.ts +45 -1
  67. package/dist/esm/types.d.ts.map +1 -1
  68. package/dist/esm/with-coderifts.d.ts +16 -0
  69. package/dist/esm/with-coderifts.d.ts.map +1 -1
  70. package/dist/esm/with-coderifts.js +9 -0
  71. package/dist/esm/with-coderifts.js.map +1 -1
  72. package/package.json +2 -2
package/README.md CHANGED
@@ -161,6 +161,8 @@ Honesty (verbatim, and also on the machine proof as
161
161
  `limits.commit_observation_is_observed_at_t3_not_atomic: true`):
162
162
  `commit_observation is observed at T3, not atomic: another writer may act between write and observation; token-only adapters compare version token not content; host attestation is a host claim layered on the measurement`.
163
163
 
164
+ When `withCodeRifts({ executorAttestation: { registry } })` is set and a CAS outcome carries a verified `cr.exec.attest.v1` token, the T3 section upgrades to `committed — executor-attested (ATTEST_VALID, kid …)`. Invalid attestation stays host-claimed with `attest_status` visible. Observation-side only.
165
+
164
166
  > **Supply `artifacts[]` with content.** If the guard detects a contract change (e.g. from
165
167
  > `filesTouched`/`diff`) but you did **not** supply `artifacts[]` with `before`/`after`, it fails
166
168
  > closed **locally** with `outcome.verdict.cause === 'MISSING_ARTIFACT_CONTENT'` — the tool does not
@@ -0,0 +1,74 @@
1
+ /**
2
+ * S1 auto-derive — wrap-layer before/after pair from the tool call + current-state readers.
3
+ *
4
+ * Default OFF. Frozen guardToolCall is unchanged. Host args.artifacts always win.
5
+ * BEFORE comes from a reader of the SAME target (fs path / api / db / registry).
6
+ * AFTER is the call's intended write content. Missing target → before:null
7
+ * (derivation_note before_unavailable); empty file → before:"".
8
+ *
9
+ * Reader throw/timeout → today's fragment path (binder lift); never block on derivation.
10
+ * Observation-only: derivation is not a fingerprint preimage field.
11
+ */
12
+ import type { ArtifactType, ResolveConfig } from './artifact-resolver.js';
13
+ import type { GuardConfig, ToolCallDescriptor } from './types.js';
14
+ export declare const AUTO_DERIVE_SOURCE: "guard_auto_derived";
15
+ export declare const AUTO_DERIVE_READ_TIMEOUT_MS = 2000;
16
+ export type AutoDeriveMode = 'host_supplied' | 'auto_derived' | 'fragment_only';
17
+ export type AutoDeriveTargetKind = 'fs' | 'api' | 'db' | 'registry';
18
+ export type AutoDeriveTarget = {
19
+ kind: AutoDeriveTargetKind;
20
+ key: string;
21
+ };
22
+ export type AutoDeriveNote = {
23
+ target: string;
24
+ note: 'before_unavailable' | 'reader_threw' | 'reader_timeout' | 'not_contract_path';
25
+ };
26
+ export type AutoDeriveObservation = {
27
+ derivation?: {
28
+ mode: AutoDeriveMode;
29
+ targets: ReadonlyArray<AutoDeriveTarget>;
30
+ notes?: ReadonlyArray<AutoDeriveNote>;
31
+ };
32
+ };
33
+ export type AutoDeriveReader = (key: string) => string | null | Promise<string | null>;
34
+ /** Current-state readers. Return null = absent (not empty). Throw/timeout → fragment fallback. */
35
+ export type AutoDeriveReaders = {
36
+ fs?: AutoDeriveReader;
37
+ api?: AutoDeriveReader;
38
+ db?: AutoDeriveReader;
39
+ registry?: AutoDeriveReader;
40
+ };
41
+ export type AutoDeriveConfig = {
42
+ readers?: AutoDeriveReaders;
43
+ /** CAP-202 resolve() config (pathTypeHints, ssotPrefer). Optional; not required for fs reads. */
44
+ resolveConfig?: ResolveConfig;
45
+ };
46
+ export type DerivedArtifact = {
47
+ id: string;
48
+ type: ArtifactType;
49
+ before: string | null;
50
+ after: string;
51
+ source: typeof AUTO_DERIVE_SOURCE;
52
+ };
53
+ /** Default fs reader: utf8 contents, ENOENT → null (absent ≠ empty). Other errors throw. */
54
+ export declare function defaultFsReader(filePath: string): Promise<string | null>;
55
+ export declare function normalizeAutoDerive(raw: unknown): AutoDeriveConfig | null;
56
+ export type AutoDeriveResult = {
57
+ call: ToolCallDescriptor;
58
+ derivation: NonNullable<AutoDeriveObservation['derivation']>;
59
+ failed?: {
60
+ cause: string;
61
+ };
62
+ };
63
+ /**
64
+ * Derive a before/after pair onto the call descriptor when the host did not supply artifacts.
65
+ * Never throws out — reader failures return the bound call with fragment_only + failed.cause.
66
+ */
67
+ export declare function runAutoDerive(args: {
68
+ bound: ToolCallDescriptor;
69
+ rawArgs: unknown;
70
+ cfg: AutoDeriveConfig;
71
+ config: GuardConfig;
72
+ }): Promise<AutoDeriveResult>;
73
+ export declare function attachDerivation<T>(outcome: T, derivation: NonNullable<AutoDeriveObservation['derivation']> | null | undefined): T;
74
+ //# sourceMappingURL=auto-derive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-derive.d.ts","sourceRoot":"","sources":["../../src/auto-derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAc,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAExF,eAAO,MAAM,kBAAkB,EAAG,oBAA6B,CAAC;AAChE,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC;AAEhF,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,oBAAoB,GAAG,cAAc,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;CACtF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,cAAc,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACzC,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;KACvC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,GAAG,EAAE,MAAM,KACR,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5C,kGAAkG;AAClG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,CAAC,EAAE,gBAAgB,CAAC;IACtB,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,EAAE,CAAC,EAAE,gBAAgB,CAAC;IACtB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iGAAiG;IACjG,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,kBAAkB,CAAC;CACnC,CAAC;AAYF,4FAA4F;AAC5F,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU9E;AAkBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAgBzE;AA0FD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmG5B;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,WAAW,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9E,CAAC,CAGH"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ /**
3
+ * S1 auto-derive — wrap-layer before/after pair from the tool call + current-state readers.
4
+ *
5
+ * Default OFF. Frozen guardToolCall is unchanged. Host args.artifacts always win.
6
+ * BEFORE comes from a reader of the SAME target (fs path / api / db / registry).
7
+ * AFTER is the call's intended write content. Missing target → before:null
8
+ * (derivation_note before_unavailable); empty file → before:"".
9
+ *
10
+ * Reader throw/timeout → today's fragment path (binder lift); never block on derivation.
11
+ * Observation-only: derivation is not a fingerprint preimage field.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.AUTO_DERIVE_READ_TIMEOUT_MS = exports.AUTO_DERIVE_SOURCE = void 0;
15
+ exports.defaultFsReader = defaultFsReader;
16
+ exports.normalizeAutoDerive = normalizeAutoDerive;
17
+ exports.runAutoDerive = runAutoDerive;
18
+ exports.attachDerivation = attachDerivation;
19
+ const node_fs_1 = require("node:fs");
20
+ const artifact_resolver_js_1 = require("./artifact-resolver.js");
21
+ exports.AUTO_DERIVE_SOURCE = 'guard_auto_derived';
22
+ exports.AUTO_DERIVE_READ_TIMEOUT_MS = 2000;
23
+ function iso() {
24
+ return new Date().toISOString();
25
+ }
26
+ function emit(config, e) {
27
+ if (config.onEvent) {
28
+ try {
29
+ config.onEvent(e);
30
+ }
31
+ catch { /* onEvent never throws out */ }
32
+ }
33
+ }
34
+ /** Default fs reader: utf8 contents, ENOENT → null (absent ≠ empty). Other errors throw. */
35
+ async function defaultFsReader(filePath) {
36
+ try {
37
+ return await node_fs_1.promises.readFile(filePath, 'utf8');
38
+ }
39
+ catch (err) {
40
+ const code = err && typeof err === 'object' && 'code' in err
41
+ ? String(err.code)
42
+ : '';
43
+ if (code === 'ENOENT')
44
+ return null;
45
+ throw err;
46
+ }
47
+ }
48
+ function looksLikeResolveConfig(o) {
49
+ return 'ssotPrefer' in o
50
+ || 'generatedGlobs' in o
51
+ || 'pathTypeHints' in o
52
+ || 'openApiAssembly' in o
53
+ || 'maxRefDepth' in o;
54
+ }
55
+ function looksLikeReaders(o) {
56
+ const r = o;
57
+ return typeof r.fs === 'function'
58
+ || typeof r.api === 'function'
59
+ || typeof r.db === 'function'
60
+ || typeof r.registry === 'function';
61
+ }
62
+ function normalizeAutoDerive(raw) {
63
+ if (raw === true)
64
+ return { readers: { fs: defaultFsReader } };
65
+ if (!raw || raw === false || typeof raw !== 'object')
66
+ return null;
67
+ const o = raw;
68
+ const cfg = {};
69
+ if (o.resolveConfig && typeof o.resolveConfig === 'object')
70
+ cfg.resolveConfig = o.resolveConfig;
71
+ if (o.readers && typeof o.readers === 'object') {
72
+ if (looksLikeReaders(o.readers)) {
73
+ cfg.readers = { ...o.readers };
74
+ }
75
+ else if (looksLikeResolveConfig(o.readers)) {
76
+ cfg.resolveConfig = o.readers;
77
+ }
78
+ }
79
+ if (!cfg.readers)
80
+ cfg.readers = {};
81
+ if (typeof cfg.readers.fs !== 'function')
82
+ cfg.readers.fs = defaultFsReader;
83
+ return cfg;
84
+ }
85
+ function rawRecord(args) {
86
+ if (!args || typeof args !== 'object' || Array.isArray(args))
87
+ return null;
88
+ return args;
89
+ }
90
+ function hostSuppliedArtifacts(args) {
91
+ const a = rawRecord(args);
92
+ return !!(a && Array.isArray(a.artifacts));
93
+ }
94
+ function targetFromArgs(a) {
95
+ if (typeof a.path === 'string' && a.path.length > 0)
96
+ return { kind: 'fs', key: a.path };
97
+ if (typeof a.url === 'string' && a.url.length > 0)
98
+ return { kind: 'api', key: a.url };
99
+ if (typeof a.endpoint === 'string' && a.endpoint.length > 0)
100
+ return { kind: 'api', key: a.endpoint };
101
+ if (typeof a.table === 'string' && a.table.length > 0) {
102
+ const id = a.id != null ? String(a.id) : '';
103
+ return { kind: 'db', key: id ? `${a.table}/${id}` : a.table };
104
+ }
105
+ if (typeof a.key === 'string' && a.key.length > 0)
106
+ return { kind: 'registry', key: a.key };
107
+ return null;
108
+ }
109
+ function intendedAfter(a, before) {
110
+ for (const k of ['contents', 'content', 'new_content', 'new_contents']) {
111
+ if (typeof a[k] === 'string')
112
+ return a[k];
113
+ }
114
+ const oldS = typeof a.old_string === 'string' ? a.old_string : null;
115
+ const newS = typeof a.new_string === 'string' ? a.new_string : null;
116
+ if (newS == null)
117
+ return null;
118
+ if (typeof before === 'string' && oldS && oldS.length > 0 && before.includes(oldS)) {
119
+ return before.replace(oldS, newS);
120
+ }
121
+ if (newS.length > 0)
122
+ return newS;
123
+ return null;
124
+ }
125
+ function typeForTarget(target, a, resolveConfig) {
126
+ if (typeof a.type === 'string' && a.type) {
127
+ const t = a.type;
128
+ if (t === 'openapi' || t === 'graphql' || t === 'grpc' || t === 'asyncapi' || t === 'mcp_manifest') {
129
+ return t;
130
+ }
131
+ }
132
+ if (target.kind === 'fs') {
133
+ const hinted = resolveConfig && resolveConfig.pathTypeHints
134
+ ? resolveConfig.pathTypeHints[target.key]
135
+ : undefined;
136
+ if (hinted)
137
+ return hinted;
138
+ return (0, artifact_resolver_js_1.classifyByName)(target.key);
139
+ }
140
+ return null;
141
+ }
142
+ async function withTimeout(p, ms) {
143
+ let timer;
144
+ try {
145
+ return await Promise.race([
146
+ p,
147
+ new Promise((_, reject) => {
148
+ timer = setTimeout(() => {
149
+ const e = new Error(`autoDerive reader timed out after ${ms}ms`);
150
+ e.name = 'TimeoutError';
151
+ reject(e);
152
+ }, Math.max(1, ms));
153
+ }),
154
+ ]);
155
+ }
156
+ finally {
157
+ if (timer)
158
+ clearTimeout(timer);
159
+ }
160
+ }
161
+ async function readCurrent(readers, target) {
162
+ const fn = readers[target.kind];
163
+ if (typeof fn !== 'function') {
164
+ const err = new Error(`autoDerive: no ${target.kind} reader`);
165
+ err.code = 'NO_READER';
166
+ throw err;
167
+ }
168
+ return withTimeout(Promise.resolve(fn(target.key)), exports.AUTO_DERIVE_READ_TIMEOUT_MS);
169
+ }
170
+ /**
171
+ * Derive a before/after pair onto the call descriptor when the host did not supply artifacts.
172
+ * Never throws out — reader failures return the bound call with fragment_only + failed.cause.
173
+ */
174
+ async function runAutoDerive(args) {
175
+ const bound = args.bound;
176
+ if (hostSuppliedArtifacts(args.rawArgs)) {
177
+ return {
178
+ call: bound,
179
+ derivation: { mode: 'host_supplied', targets: [] },
180
+ };
181
+ }
182
+ const a = rawRecord(args.rawArgs) || rawRecord(bound.arguments);
183
+ if (!a) {
184
+ return { call: bound, derivation: { mode: 'fragment_only', targets: [] } };
185
+ }
186
+ const target = targetFromArgs(a);
187
+ if (!target) {
188
+ return { call: bound, derivation: { mode: 'fragment_only', targets: [] } };
189
+ }
190
+ const type = typeForTarget(target, a, args.cfg.resolveConfig);
191
+ if (!type) {
192
+ return {
193
+ call: bound,
194
+ derivation: {
195
+ mode: 'fragment_only',
196
+ targets: [target],
197
+ notes: [{ target: target.key, note: 'not_contract_path' }],
198
+ },
199
+ };
200
+ }
201
+ const readers = args.cfg.readers || { fs: defaultFsReader };
202
+ let before;
203
+ try {
204
+ before = await readCurrent(readers, target);
205
+ }
206
+ catch (err) {
207
+ const name = err && typeof err === 'object' && 'name' in err
208
+ ? String(err.name)
209
+ : '';
210
+ const cause = name === 'TimeoutError' ? 'reader_timeout' : 'reader_threw';
211
+ emit(args.config, { type: 'derive_failed', at: iso(), cause });
212
+ return {
213
+ call: bound,
214
+ derivation: {
215
+ mode: 'fragment_only',
216
+ targets: [target],
217
+ notes: [{
218
+ target: target.key,
219
+ note: cause === 'reader_timeout' ? 'reader_timeout' : 'reader_threw',
220
+ }],
221
+ },
222
+ failed: { cause },
223
+ };
224
+ }
225
+ const after = intendedAfter(a, before);
226
+ if (after == null) {
227
+ return {
228
+ call: bound,
229
+ derivation: { mode: 'fragment_only', targets: [target] },
230
+ };
231
+ }
232
+ const notes = [];
233
+ if (before === null) {
234
+ notes.push({ target: target.key, note: 'before_unavailable' });
235
+ // Absence must not erase a binder-lifted fragment pair (old_string/new_string).
236
+ if (Array.isArray(bound.artifacts) && bound.artifacts.length > 0) {
237
+ return {
238
+ call: bound,
239
+ derivation: {
240
+ mode: 'fragment_only',
241
+ targets: [target],
242
+ notes,
243
+ },
244
+ };
245
+ }
246
+ }
247
+ const derived = {
248
+ id: `${type}:${target.key}`,
249
+ type,
250
+ before,
251
+ after,
252
+ source: exports.AUTO_DERIVE_SOURCE,
253
+ };
254
+ const call = {
255
+ ...bound,
256
+ artifacts: [derived],
257
+ };
258
+ return {
259
+ call,
260
+ derivation: {
261
+ mode: 'auto_derived',
262
+ targets: [target],
263
+ ...(notes.length ? { notes } : {}),
264
+ },
265
+ };
266
+ }
267
+ function attachDerivation(outcome, derivation) {
268
+ if (!derivation)
269
+ return outcome;
270
+ return { ...outcome, derivation };
271
+ }
272
+ //# sourceMappingURL=auto-derive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-derive.js","sourceRoot":"","sources":["../../src/auto-derive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * S6 auto-recheck loop — host-side orchestration AFTER a BLOCK with a remediation_transaction.
3
+ *
4
+ * Default OFF. The frozen guardToolCall is unchanged; this wraps it. The guard never writes
5
+ * artifacts: the host's applyFix applies the fix (honesty line). After applyFix true, artifacts
6
+ * are re-resolved FRESH (resolve() from artifact-resolver when resolveInput is supplied, else
7
+ * the host-updated call / rebind).
8
+ *
9
+ * recheck_scope is an OUTPUT on the BLOCK envelope (app remediation-transaction.js). The
10
+ * preflight request does not accept a scope hint (measured SDK / authorizeChangeSet) — so
11
+ * each attempt is a FULL re-preflight. Noted, not faked.
12
+ *
13
+ * Nothing here enters a fingerprint preimage (host orchestration only).
14
+ */
15
+ import type { GuardConfig, GuardOutcome, ToolCallDescriptor, ExecuteFactory, GuardToolCallContext } from './types.js';
16
+ import type { RemediationTransactionView } from './remediation-loop-attestation.js';
17
+ import type { ResolveInput, ResolveConfig } from './artifact-resolver.js';
18
+ /** Hard cap on RE-preflights per original call. */
19
+ export declare const AUTO_RECHECK_MAX_CAP = 3;
20
+ export type RecheckTrailEntry = {
21
+ attempt: number;
22
+ decision_id: string | null;
23
+ fingerprint: string | null;
24
+ execution_action: string | null;
25
+ };
26
+ export type RecheckStopReason = 'no_progress' | 'apply_fix_declined' | 'apply_fix_threw' | 'exhausted';
27
+ export type RecheckObservation = {
28
+ recheck_trail?: ReadonlyArray<RecheckTrailEntry>;
29
+ /** 849 metric feed. Present only when the loop ran. value true iff a recheck landed allow-class. */
30
+ fixed_after_block?: {
31
+ value: true | null;
32
+ attempt_count: number | null;
33
+ };
34
+ recheck_stop_reason?: RecheckStopReason;
35
+ };
36
+ export type AutoRecheckApplyFixContext = {
37
+ call: ToolCallDescriptor;
38
+ attempt: number;
39
+ outcome: GuardOutcome<unknown>;
40
+ };
41
+ export type AutoRecheckConfig = {
42
+ /**
43
+ * Bound on RE-preflights per original call. Allowed 1–3; values above 3 clamp to 3.
44
+ * Values below 1 disable the loop.
45
+ */
46
+ maxAttempts: number;
47
+ /**
48
+ * HOST applies the fix. The guard never writes artifacts.
49
+ * false / throw → loop ends, original BLOCK stands.
50
+ */
51
+ applyFix: (remediation: RemediationTransactionView, context: AutoRecheckApplyFixContext) => boolean | Promise<boolean>;
52
+ /**
53
+ * Optional. After applyFix true, produce a fresh git snapshot for resolve() (CAP-202).
54
+ * When absent, the loop re-runs `rebind` / uses artifacts the host attached on context.call.
55
+ */
56
+ resolveInput?: () => ResolveInput | Promise<ResolveInput>;
57
+ resolveConfig?: ResolveConfig;
58
+ };
59
+ export declare function clampMaxAttempts(n: unknown): number;
60
+ export declare function normalizeAutoRecheck(raw: unknown): AutoRecheckConfig | null;
61
+ export type AutoRecheckLoopArgs<T> = {
62
+ call: ToolCallDescriptor;
63
+ factory: ExecuteFactory<T>;
64
+ config: GuardConfig;
65
+ callContext?: GuardToolCallContext;
66
+ rebind: () => ToolCallDescriptor | Promise<ToolCallDescriptor>;
67
+ /** Re-collect freshness VALUES from the FRESH call (full re-preflight). */
68
+ refreshContext?: (call: ToolCallDescriptor) => Promise<GuardToolCallContext | undefined>;
69
+ };
70
+ /**
71
+ * First call is always a normal guardToolCall. The loop runs only when autoRecheck is
72
+ * normalized (applyFix present, maxAttempts in 1–3) AND the outcome is BLOCK with a
73
+ * remediation_transaction.
74
+ */
75
+ export declare function runAutoRecheckLoop<T>(args: AutoRecheckLoopArgs<T>): Promise<GuardOutcome<T>>;
76
+ //# sourceMappingURL=auto-recheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-recheck.d.ts","sourceRoot":"","sources":["../../src/auto-recheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAEZ,kBAAkB,EAClB,cAAc,EAEd,oBAAoB,EAGrB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE1E,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,oBAAoB,GACpB,iBAAiB,GACjB,WAAW,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACjD,oGAAoG;IACpG,iBAAiB,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,CACR,WAAW,EAAE,0BAA0B,EACvC,OAAO,EAAE,0BAA0B,KAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAYF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAMnD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAU3E;AAuHD,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,MAAM,EAAE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CAC1F,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA4ElG"}