@intutic/shared-types 2.9.1 → 3.0.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 (119) hide show
  1. package/dist/decide.d.ts +269 -0
  2. package/dist/decide.d.ts.map +1 -0
  3. package/dist/decide.js +781 -0
  4. package/dist/decide.js.map +1 -0
  5. package/dist/decideEngine.d.ts +195 -0
  6. package/dist/decideEngine.d.ts.map +1 -0
  7. package/dist/decideEngine.js +720 -0
  8. package/dist/decideEngine.js.map +1 -0
  9. package/dist/decideEvaluate.d.ts +250 -0
  10. package/dist/decideEvaluate.d.ts.map +1 -0
  11. package/dist/decideEvaluate.js +518 -0
  12. package/dist/decideEvaluate.js.map +1 -0
  13. package/dist/decideHostGuard.d.ts +56 -0
  14. package/dist/decideHostGuard.d.ts.map +1 -0
  15. package/dist/decideHostGuard.js +200 -0
  16. package/dist/decideHostGuard.js.map +1 -0
  17. package/dist/decideLog.d.ts +287 -0
  18. package/dist/decideLog.d.ts.map +1 -0
  19. package/dist/decideLog.js +543 -0
  20. package/dist/decideLog.js.map +1 -0
  21. package/dist/decideLogRedaction.d.ts +12 -0
  22. package/dist/decideLogRedaction.d.ts.map +1 -0
  23. package/dist/decideLogRedaction.js +19 -0
  24. package/dist/decideLogRedaction.js.map +1 -0
  25. package/dist/decideRecord.d.ts +128 -0
  26. package/dist/decideRecord.d.ts.map +1 -0
  27. package/dist/decideRecord.js +266 -0
  28. package/dist/decideRecord.js.map +1 -0
  29. package/dist/decideSdk.d.ts +86 -0
  30. package/dist/decideSdk.d.ts.map +1 -0
  31. package/dist/decideSdk.js +151 -0
  32. package/dist/decideSdk.js.map +1 -0
  33. package/dist/errors.d.ts +11 -1
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/errors.js +12 -1
  36. package/dist/errors.js.map +1 -1
  37. package/dist/gateLimits.d.ts +27 -0
  38. package/dist/gateLimits.d.ts.map +1 -1
  39. package/dist/gateLimits.js +29 -1
  40. package/dist/gateLimits.js.map +1 -1
  41. package/dist/gateRuleRecord.d.ts +244 -0
  42. package/dist/gateRuleRecord.d.ts.map +1 -0
  43. package/dist/gateRuleRecord.js +474 -0
  44. package/dist/gateRuleRecord.js.map +1 -0
  45. package/dist/guardrailIr.d.ts +301 -10
  46. package/dist/guardrailIr.d.ts.map +1 -1
  47. package/dist/guardrailIr.js +86 -7
  48. package/dist/guardrailIr.js.map +1 -1
  49. package/dist/guardrailRender.d.ts +35 -2
  50. package/dist/guardrailRender.d.ts.map +1 -1
  51. package/dist/guardrailRender.js +133 -7
  52. package/dist/guardrailRender.js.map +1 -1
  53. package/dist/index.d.ts +28 -6
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +162 -8
  56. package/dist/index.js.map +1 -1
  57. package/dist/lanes.d.ts +94 -0
  58. package/dist/lanes.d.ts.map +1 -0
  59. package/dist/lanes.js +160 -0
  60. package/dist/lanes.js.map +1 -0
  61. package/dist/loopVerify.d.ts +49 -0
  62. package/dist/loopVerify.d.ts.map +1 -0
  63. package/dist/loopVerify.js +77 -0
  64. package/dist/loopVerify.js.map +1 -0
  65. package/dist/mcpBudgets.d.ts +8 -8
  66. package/dist/notifications.d.ts +1 -1
  67. package/dist/notifications.d.ts.map +1 -1
  68. package/dist/notifications.js +14 -0
  69. package/dist/notifications.js.map +1 -1
  70. package/dist/providers.d.ts +13 -0
  71. package/dist/providers.d.ts.map +1 -1
  72. package/dist/providers.js +31 -0
  73. package/dist/providers.js.map +1 -1
  74. package/dist/refusalDetail.d.ts +58 -0
  75. package/dist/refusalDetail.d.ts.map +1 -0
  76. package/dist/refusalDetail.js +128 -0
  77. package/dist/refusalDetail.js.map +1 -0
  78. package/dist/responses/decide.d.ts +1858 -0
  79. package/dist/responses/decide.d.ts.map +1 -0
  80. package/dist/responses/decide.js +166 -0
  81. package/dist/responses/decide.js.map +1 -0
  82. package/dist/responses/gateways.d.ts +745 -101
  83. package/dist/responses/gateways.d.ts.map +1 -1
  84. package/dist/responses/gateways.js +34 -2
  85. package/dist/responses/gateways.js.map +1 -1
  86. package/dist/responses/guardrails.d.ts +1434 -144
  87. package/dist/responses/guardrails.d.ts.map +1 -1
  88. package/dist/responses/identity.d.ts +6 -6
  89. package/dist/responses/index.d.ts +1 -0
  90. package/dist/responses/index.d.ts.map +1 -1
  91. package/dist/responses/index.js +1 -0
  92. package/dist/responses/index.js.map +1 -1
  93. package/dist/responses/integrations.d.ts +84 -84
  94. package/dist/responses/observability.d.ts +272 -92
  95. package/dist/responses/observability.d.ts.map +1 -1
  96. package/dist/responses/observability.js +31 -1
  97. package/dist/responses/observability.js.map +1 -1
  98. package/dist/responses/rules.d.ts +1026 -187
  99. package/dist/responses/rules.d.ts.map +1 -1
  100. package/dist/responses/rules.js +47 -1
  101. package/dist/responses/rules.js.map +1 -1
  102. package/dist/scopeMatch.d.ts +156 -0
  103. package/dist/scopeMatch.d.ts.map +1 -0
  104. package/dist/scopeMatch.js +451 -0
  105. package/dist/scopeMatch.js.map +1 -0
  106. package/dist/sopKeySince.d.ts +41 -0
  107. package/dist/sopKeySince.d.ts.map +1 -0
  108. package/dist/sopKeySince.js +81 -0
  109. package/dist/sopKeySince.js.map +1 -0
  110. package/dist/testOutcome.d.ts +164 -0
  111. package/dist/testOutcome.d.ts.map +1 -0
  112. package/dist/testOutcome.js +454 -0
  113. package/dist/testOutcome.js.map +1 -0
  114. package/dist/upstreamRetry.d.ts +2 -2
  115. package/dist/workspaceSettings.d.ts +91 -0
  116. package/dist/workspaceSettings.d.ts.map +1 -1
  117. package/dist/workspaceSettings.js +48 -2
  118. package/dist/workspaceSettings.js.map +1 -1
  119. package/package.json +2 -2
@@ -0,0 +1,474 @@
1
+ "use strict";
2
+ /**
3
+ * Rule records in the policy snapshot: the `@rule` record, its
4
+ * fallback line, and how a gate that reads it decides a call (Tier R).
5
+ *
6
+ * A gate that cannot evaluate a rule must refuse what the rule covers, never
7
+ * skip it. So for each rule a gate is to enforce, the snapshot writer emits
8
+ * two lines inside the digest, as the decide records do:
9
+ *
10
+ * - an `@rule` record of five tab-separated columns: the tag, the fallback
11
+ * line's id or `-`, the kind, the rollout (`shadow` or `enforce`), and
12
+ * base64 of the canonical JSON of its payload, `{v, ref, sopTitle, …kind
13
+ * fields}`. Every reader up to v22 needs six
14
+ * columns for a rule, so it skips the record;
15
+ * - for an enforcing record, a fallback line: an ordinary `block` rule whose
16
+ * id is `<kind>-fallback:<n>@<sha256(sopId)[:12]>`
17
+ * ({@link gateRuleFallbackId}), on what the rule covers
18
+ * ({@link gateRuleFallback}). A gate that reads `@rule` records skips a
19
+ * fallback line only when a record that decodes names it.
20
+ *
21
+ * A snapshot with any `@rule` record is written in format 3
22
+ * ({@link RULE_SNAPSHOT_FORMAT}). Kinds in this batch:
23
+ *
24
+ * | Kind | From | Gate decision |
25
+ * |---|---|---|
26
+ * | `requires_outcome` | `requires_before: action:run_tests[ok] -> X` | X refused `PREREQUISITE_UNMET` unless the latest test run in the session passed |
27
+ * | `scope_paths` | `scope_paths:` with `scope_paths_mode: enforce` | a file change outside the scope refused `OUT_OF_SCOPE` |
28
+ * | `plan_approval` | `plan_approval: required\|strict` | refused `PLAN_NOT_APPROVED` until the session's plan is approved; under `strict`, a tool not in the plan refused `OFF_PLAN` |
29
+ *
30
+ * Only SOPs with no `roles:` compile: a gate knows no agent role.
31
+ *
32
+ * Self-contained but for `./testOutcome.ts`, `./scopeMatch.ts`, `./lanes.ts`
33
+ * and `./phrases.ts` (all carried by `@intutic/gate` as byte-identical
34
+ * copies), so `@intutic/gate` keeps a byte-identical copy of this file too.
35
+ * The Python port is `intutic_clawde/gate/rule_record.py`; both run
36
+ * `fixtures/rule-record-vectors.json`.
37
+ *
38
+ * @module
39
+ */
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.RULE_RECORD_JS_SOURCE = exports.V22_ACTION_TOKENS = exports.GATE_RULE_KINDS = exports.RULE_SCOPE_PATH_MAX_CHARS = exports.RULE_SCOPE_PATHS_MAX = exports.RULE_SOP_TITLE_MAX_CHARS = exports.RULE_SNAPSHOT_FORMAT = exports.RULE_RECORD_TAG = void 0;
42
+ exports.gateRuleRef = gateRuleRef;
43
+ exports.gateRuleFallbackId = gateRuleFallbackId;
44
+ exports.gateRuleFallbackReason = gateRuleFallbackReason;
45
+ exports.gateRulePayload = gateRulePayload;
46
+ exports.encodeGateRuleRecord = encodeGateRuleRecord;
47
+ exports.decodeGateRuleRecord = decodeGateRuleRecord;
48
+ exports.toServedGateRecord = toServedGateRecord;
49
+ exports.fromServedGateRecord = fromServedGateRecord;
50
+ exports.gateRuleFallback = gateRuleFallback;
51
+ exports.compileSopGateRecords = compileSopGateRecords;
52
+ exports.gateRulePlanFromResponse = gateRulePlanFromResponse;
53
+ exports.evaluateGateRuleRecords = evaluateGateRuleRecords;
54
+ const lanes_js_1 = require("./lanes.js");
55
+ const scopeMatch_js_1 = require("./scopeMatch.js");
56
+ const testOutcome_js_1 = require("./testOutcome.js");
57
+ /** First column of a rule record. */
58
+ exports.RULE_RECORD_TAG = '@rule';
59
+ /** The snapshot format a snapshot carrying any rule record is written in. */
60
+ exports.RULE_SNAPSHOT_FORMAT = 3;
61
+ /** The longest SOP title a record carries, in code points. */
62
+ exports.RULE_SOP_TITLE_MAX_CHARS = 80;
63
+ /** The most scope paths one record carries, and the longest of them in code points. */
64
+ exports.RULE_SCOPE_PATHS_MAX = 64;
65
+ exports.RULE_SCOPE_PATH_MAX_CHARS = 512;
66
+ exports.GATE_RULE_KINDS = ['requires_outcome', 'scope_paths', 'plan_approval'];
67
+ /** The four action tokens a v22 hook gate's classifier knows: a fallback on one of them can use the `action` subject. */
68
+ exports.V22_ACTION_TOKENS = ['action:deploy', 'action:publish', 'action:release', 'action:db_write'];
69
+ /**
70
+ * The fields of each kind's payload, sorted: `{v, ref, sopTitle, …kind
71
+ * fields}`. The kind, the fallback id and the rollout are columns 3, 2 and 4,
72
+ * not payload fields. Any other field refuses the record.
73
+ */
74
+ const RULE_RECORD_FIELDS = {
75
+ requires_outcome: ['adjacent', 'first', 'qualifier', 'ref', 'sopTitle', 'then', 'v'],
76
+ scope_paths: ['ref', 'scopePaths', 'sopTitle', 'v'],
77
+ plan_approval: ['mode', 'ref', 'sopTitle', 'v'],
78
+ };
79
+ /** `ref`: `<sopId>#<kind>:<n>`. */
80
+ function gateRuleRef(sopId, kind, n) {
81
+ return sopId + '#' + kind + ':' + n;
82
+ }
83
+ /** `fallbackId`: `<kind>-fallback:<n>@<first 12 hex of sha256(sopId)>`. */
84
+ function gateRuleFallbackId(kind, n, sopId, sha256Hex) {
85
+ return kind + '-fallback:' + n + '@' + sha256Hex(sopId).slice(0, 12);
86
+ }
87
+ /** What an older gate says when a rule's fallback line refuses. The writer scrubs and bounds it like any reason. */
88
+ function gateRuleFallbackReason(kind, sopTitle) {
89
+ if (kind === 'requires_outcome')
90
+ return 'Qualified requires_before (' + sopTitle + '): this gate cannot read test results, so the call it gates is refused; upgrade the Intutic gate';
91
+ if (kind === 'scope_paths')
92
+ return 'scope_paths_mode: enforce (' + sopTitle + '): this gate cannot check a change against the scope, so every file change is refused; upgrade the Intutic gate';
93
+ return 'plan_approval (' + sopTitle + '): this gate cannot check plan approval, so every call is refused; upgrade the Intutic gate';
94
+ }
95
+ function ruleIsObject(v) {
96
+ return v !== null && typeof v === 'object' && !Array.isArray(v);
97
+ }
98
+ /** JSON with keys sorted at every level and no whitespace, so a record is byte-stable. */
99
+ function ruleCanonicalJson(v) {
100
+ if (Array.isArray(v))
101
+ return '[' + v.map(ruleCanonicalJson).join(',') + ']';
102
+ if (ruleIsObject(v))
103
+ return '{' + Object.keys(v).sort().map((k) => JSON.stringify(k) + ':' + ruleCanonicalJson(v[k])).join(',') + '}';
104
+ return JSON.stringify(v);
105
+ }
106
+ function ruleToBase64(text) {
107
+ let binary = '';
108
+ for (const byte of new TextEncoder().encode(text))
109
+ binary += String.fromCharCode(byte);
110
+ return btoa(binary);
111
+ }
112
+ /** Standard base64 back to UTF-8 text. Throws on anything but the canonical encoding of valid UTF-8. */
113
+ function ruleFromBase64(b64) {
114
+ const text = new TextDecoder('utf-8', { fatal: true }).decode(Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)));
115
+ if (ruleToBase64(text) !== b64)
116
+ throw new Error('not canonical base64');
117
+ return text;
118
+ }
119
+ /** A short text a record may carry: a string with no tab, CR or LF, at most `max` code points (and, with `min`, at least that many). */
120
+ function ruleText(v, max, min) {
121
+ if (typeof v !== 'string' || /[\t\r\n]/.test(v))
122
+ return false;
123
+ const n = Array.from(v).length;
124
+ return n >= min && n <= max;
125
+ }
126
+ /** The record's payload: everything but the kind, the fallback id and the rollout, which are columns. */
127
+ function gateRulePayload(record) {
128
+ const payload = {};
129
+ for (const k of Object.keys(record))
130
+ if (k !== 'kind' && k !== 'fallbackId' && k !== 'rollout')
131
+ payload[k] = record[k];
132
+ return payload;
133
+ }
134
+ /** The record as one `.rules` line. */
135
+ function encodeGateRuleRecord(record) {
136
+ return [exports.RULE_RECORD_TAG, record.fallbackId ?? '-', record.kind, record.rollout, ruleToBase64(ruleCanonicalJson(gateRulePayload(record)))].join('\t');
137
+ }
138
+ /**
139
+ * Reads an `@rule` line back, its kind, fallback id and rollout from the
140
+ * columns and the rest from the payload. Null, and so the fallback line stays
141
+ * in force, for any other line or when: it does not have five columns; the
142
+ * base64 or JSON is damaged; the kind (column 3) is unknown; the payload has
143
+ * a field its kind does not have or lacks one; the rollout (column 4) is not
144
+ * `shadow` or `enforce`; a field is out of its bounds; the ref does not end
145
+ * `#<kind>:<n>`; an enforcing record's fallback id (column 2) is not
146
+ * `<kind>-fallback:<n>@<12 hex>` for the same n, or a shadow record's is
147
+ * not `-`.
148
+ */
149
+ function decodeGateRuleRecord(line) {
150
+ const f = line.split('\t');
151
+ if (f.length !== 5 || f[0] !== '@rule' || !f[4])
152
+ return null;
153
+ const kind = f[2];
154
+ if (kind !== 'requires_outcome' && kind !== 'scope_paths' && kind !== 'plan_approval')
155
+ return null;
156
+ let r;
157
+ try {
158
+ r = JSON.parse(ruleFromBase64(f[4]));
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ if (!ruleIsObject(r))
164
+ return null;
165
+ const fields = RULE_RECORD_FIELDS[kind];
166
+ const keys = Object.keys(r).sort();
167
+ if (keys.length !== fields.length || keys.some((k, i) => k !== fields[i]))
168
+ return null;
169
+ if (f[3] !== 'shadow' && f[3] !== 'enforce')
170
+ return null;
171
+ r = { ...r, kind, fallbackId: f[1] === '-' ? null : f[1], rollout: f[3] };
172
+ if (!ruleIsObject(r))
173
+ return null;
174
+ if (r.v !== 1)
175
+ return null;
176
+ if (!ruleText(r.sopTitle, 80, 0))
177
+ return null;
178
+ if (typeof r.ref !== 'string')
179
+ return null;
180
+ const m = /^.+#([a-z_]+):([1-9][0-9]{0,5})$/.exec(r.ref);
181
+ if (!m || m[1] !== kind)
182
+ return null;
183
+ if (r.rollout === 'enforce') {
184
+ if (typeof r.fallbackId !== 'string' || !new RegExp('^' + kind + '-fallback:' + m[2] + '@[0-9a-f]{12}$').test(r.fallbackId))
185
+ return null;
186
+ }
187
+ else if (r.fallbackId !== null) {
188
+ return null;
189
+ }
190
+ if (kind === 'requires_outcome') {
191
+ if (r.first !== 'action:run_tests' || r.qualifier !== 'ok' || typeof r.adjacent !== 'boolean')
192
+ return null;
193
+ if (typeof r.then !== 'string' || !/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/.test(r.then) || r.then === 'action:run_tests')
194
+ return null;
195
+ }
196
+ else if (kind === 'scope_paths') {
197
+ const paths = r.scopePaths;
198
+ if (!Array.isArray(paths) || paths.length < 1 || paths.length > 64 || paths.some((p) => !ruleText(p, 512, 1)))
199
+ return null;
200
+ }
201
+ else if (r.mode !== 'required' && r.mode !== 'strict') {
202
+ return null;
203
+ }
204
+ return r;
205
+ }
206
+ /** A record in the served shape. */
207
+ function toServedGateRecord(record, sopId) {
208
+ return { sopId, kind: record.kind, rollout: record.rollout, fallbackId: record.fallbackId, payload: gateRulePayload(record) };
209
+ }
210
+ /**
211
+ * A served record as a gate record, or null when it does not hold together:
212
+ * checked by encoding it and reading the line back, so a writer never emits
213
+ * a record no gate can decode (its fallback line would refuse instead).
214
+ */
215
+ function fromServedGateRecord(served) {
216
+ if (!ruleIsObject(served) || !ruleIsObject(served.payload))
217
+ return null;
218
+ const fields = Object.keys(served.payload).filter((k) => k !== 'kind' && k !== 'fallbackId' && k !== 'rollout');
219
+ if (fields.length !== Object.keys(served.payload).length)
220
+ return null;
221
+ const line = [exports.RULE_RECORD_TAG, served.fallbackId ?? '-', served.kind, served.rollout, ruleToBase64(ruleCanonicalJson(served.payload))].join('\t');
222
+ return decodeGateRuleRecord(line);
223
+ }
224
+ /** A title as a record carries it: tabs and newlines collapsed, at most 80 code points. */
225
+ function ruleSopTitle(title) {
226
+ return Array.from(title.replace(/[\t\r\n]+/g, ' ').trim()).slice(0, 80).join('');
227
+ }
228
+ /** A regex literal for a tool name in a portable-ERE tool rule. */
229
+ function ruleEscape(s) {
230
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
231
+ }
232
+ /**
233
+ * The fallback line for an enforcing record: what an older gate refuses in
234
+ * its place. `requires_outcome`: the gated call (by the action subject for
235
+ * the four tokens a v22 classifier knows, by the token's phrases for a newer
236
+ * token, by the shell tools for a token with no phrases, by the tool subject
237
+ * for a tool); `scope_paths`: every mutation tool; `plan_approval`: every call.
238
+ */
239
+ function gateRuleFallback(record) {
240
+ if (record.fallbackId === null)
241
+ return null;
242
+ const base = { id: record.fallbackId, severity: 'block', reason: gateRuleFallbackReason(record.kind, record.sopTitle) };
243
+ if (record.kind === 'plan_approval')
244
+ return { ...base, subject: 'tool', source: ' [^ ]+ ', ignoreCase: false };
245
+ if (record.kind === 'scope_paths') {
246
+ const tools = [...scopeMatch_js_1.SCOPE_WRITE_TOOLS, ...scopeMatch_js_1.SCOPE_EDIT_TOOLS, ...scopeMatch_js_1.SCOPE_DELETE_TOOLS, ...scopeMatch_js_1.SCOPE_MOVE_TOOLS, ...scopeMatch_js_1.SCOPE_EDITOR_TOOLS];
247
+ return { ...base, subject: 'tool', source: ' [^ ]*(' + tools.map(ruleEscape).join('|') + ') ', ignoreCase: true };
248
+ }
249
+ const then = record.then;
250
+ if (exports.V22_ACTION_TOKENS.indexOf(then) !== -1)
251
+ return { ...base, subject: 'action', source: ' (' + ruleEscape(then) + ') ', ignoreCase: true };
252
+ if (then.slice(0, 7) === 'action:') {
253
+ const phrases = Object.prototype.hasOwnProperty.call(lanes_js_1.LANE_PHRASES, then) ? lanes_js_1.LANE_PHRASES[then] : [];
254
+ if (phrases.length > 0)
255
+ return { ...base, subject: 'phrase', source: phrases.join('|'), ignoreCase: true };
256
+ return { ...base, subject: 'tool', source: ' [^ ]*(' + scopeMatch_js_1.SCOPE_SHELL_TOOLS.map(ruleEscape).join('|') + ') ', ignoreCase: true };
257
+ }
258
+ return { ...base, subject: 'tool', source: ' (' + ruleEscape(then) + ') ', ignoreCase: false };
259
+ }
260
+ /**
261
+ * The records (and, for each enforcing one, its fallback line) one SOP
262
+ * compiles to: each qualified `requires_before`, then its `scope_paths` when
263
+ * `scope_paths_mode: enforce`, then its `plan_approval:`. Nothing for a SOP
264
+ * with `roles:` (a gate knows no role). A shadow SOP (`mode: shadow`, or
265
+ * `entry.shadow`, which the writer sets for SILENT_LOG) gets shadow records
266
+ * and no fallback lines.
267
+ */
268
+ function compileSopGateRecords(entry, fm, sha256Hex) {
269
+ const out = { records: [], fallbacks: [] };
270
+ if (fm.roles.length > 0)
271
+ return out;
272
+ const rollout = fm.mode === 'shadow' || entry.shadow === true ? 'shadow' : 'enforce';
273
+ const sopTitle = ruleSopTitle(entry.sopTitle);
274
+ const add = (record) => {
275
+ out.records.push(record);
276
+ const fallback = gateRuleFallback(record);
277
+ if (fallback)
278
+ out.fallbacks.push(fallback);
279
+ };
280
+ const base = (kind, n) => ({
281
+ v: 1,
282
+ ref: gateRuleRef(entry.sopId, kind, n),
283
+ sopTitle,
284
+ fallbackId: rollout === 'enforce' ? gateRuleFallbackId(kind, n, entry.sopId, sha256Hex) : null,
285
+ rollout,
286
+ });
287
+ let n = 0;
288
+ for (const [first, then, adjacent] of fm.requiresBefore) {
289
+ if (first !== 'action:run_tests[ok]' || !/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/.test(then) || then === 'action:run_tests')
290
+ continue;
291
+ n += 1;
292
+ add({ ...base('requires_outcome', n), kind: 'requires_outcome', first: 'action:run_tests', qualifier: 'ok', then, adjacent });
293
+ }
294
+ if (fm.scopePathsMode === 'enforce') {
295
+ const paths = fm.scopePaths.filter((p) => ruleText(p, 512, 1)).slice(0, 64);
296
+ if (paths.length > 0)
297
+ add({ ...base('scope_paths', 1), kind: 'scope_paths', scopePaths: paths });
298
+ }
299
+ if (fm.planApproval !== null)
300
+ add({ ...base('plan_approval', 1), kind: 'plan_approval', mode: fm.planApproval });
301
+ return out;
302
+ }
303
+ /**
304
+ * The session's plan from `GET /api/v1/plans/session/:sessionId`: `status`
305
+ * is the HTTP status, or null when the control plane could not be reached.
306
+ * 200 with `lifecycleState` APPROVED or EXECUTING is approved, its tools the
307
+ * steps' `tool` (or `toolName`) names; 200 in any other state, and 404, are
308
+ * none; anything else is unavailable, which refuses as none does.
309
+ */
310
+ function gateRulePlanFromResponse(status, body) {
311
+ if (status === 404)
312
+ return { status: 'none' };
313
+ if (status !== 200 || !ruleIsObject(body))
314
+ return { status: 'unavailable' };
315
+ if (body.lifecycleState !== 'APPROVED' && body.lifecycleState !== 'EXECUTING')
316
+ return { status: 'none' };
317
+ const tools = [];
318
+ for (const step of Array.isArray(body.steps) ? body.steps : []) {
319
+ if (!ruleIsObject(step))
320
+ continue;
321
+ const tool = typeof step.tool === 'string' ? step.tool : step.toolName;
322
+ if (typeof tool === 'string' && tool.trim() !== '' && tools.indexOf(tool.trim()) === -1)
323
+ tools.push(tool.trim());
324
+ }
325
+ return { status: 'approved', tools };
326
+ }
327
+ function ruleLower(s) {
328
+ return s.toLowerCase();
329
+ }
330
+ /** The plan rule of `records` (strict beats required), or null. */
331
+ function rulePlanFinding(records, call) {
332
+ if (records.length === 0 || (0, scopeMatch_js_1.isPlanExemptTool)(call.tool))
333
+ return null;
334
+ const strict = records.find((r) => r.mode === 'strict');
335
+ const rec = strict ?? records[0];
336
+ const ruleId = 'plan_approval.' + rec.sopTitle;
337
+ const scope = { tools: [call.tool] };
338
+ if (call.sessionId === '') {
339
+ return { code: 'PLAN_NOT_APPROVED', ruleId, scope, ref: rec.ref, reason: 'plan_approval: ' + rec.mode + ' (' + rec.sopTitle + '): ' + call.harness + ' sent no session id, so no approved plan can be found for this session' };
340
+ }
341
+ if (call.plan.status !== 'approved') {
342
+ const why = call.plan.status === 'none' ? 'this session has no approved plan' : 'the approved plans could not be read';
343
+ return { code: 'PLAN_NOT_APPROVED', ruleId, scope, ref: rec.ref, reason: 'plan_approval: ' + rec.mode + ' (' + rec.sopTitle + '): ' + why + '; get the plan approved, then retry' };
344
+ }
345
+ if (rec.mode === 'strict') {
346
+ const tool = ruleLower(call.tool);
347
+ if (!call.plan.tools.some((t) => ruleLower(t) === tool)) {
348
+ return { code: 'OFF_PLAN', ruleId, scope, ref: rec.ref, reason: call.tool + ' is not a step of this session\'s approved plan (plan_approval: strict, ' + rec.sopTitle + ')' };
349
+ }
350
+ }
351
+ return null;
352
+ }
353
+ /** The first requires_outcome record the call is gated by and does not meet, or null. */
354
+ function ruleRequiresFinding(records, call) {
355
+ const tool = ruleLower(call.tool);
356
+ for (const rec of records) {
357
+ if (call.actions.indexOf(rec.then) === -1 && ruleLower(rec.then) !== tool)
358
+ continue;
359
+ let c;
360
+ let why = null;
361
+ if (!call.observable)
362
+ c = 'not_observable';
363
+ else if (call.sessionId === '')
364
+ c = 'no_session';
365
+ else {
366
+ const got = (0, testOutcome_js_1.prerequisiteCase)(call.outcomes, rec.first, rec.adjacent, call.nowMs);
367
+ c = got.case;
368
+ why = got.why;
369
+ }
370
+ if (c === 'met')
371
+ continue;
372
+ return {
373
+ code: 'PREREQUISITE_UNMET',
374
+ ruleId: 'requires_before.' + rec.first + '[ok]' + (rec.adjacent ? '~>' : '->') + rec.then,
375
+ reason: (0, testOutcome_js_1.prerequisiteUnmetReason)(rec.first, rec.then, c, why, call.harness),
376
+ scope: { tools: [rec.then], step: rec.first },
377
+ ref: rec.ref,
378
+ };
379
+ }
380
+ return null;
381
+ }
382
+ /** A change outside the union of the records' scopes, or null. */
383
+ function ruleScopeFinding(records, call) {
384
+ if (records.length === 0)
385
+ return null;
386
+ const targets = (0, scopeMatch_js_1.changeTargets)(call.tool, call.input);
387
+ if (targets.length === 0)
388
+ return null;
389
+ const scopes = [];
390
+ for (const r of records)
391
+ for (const p of r.scopePaths)
392
+ if (scopes.indexOf(p) === -1)
393
+ scopes.push(p);
394
+ const outside = [];
395
+ for (const t of targets) {
396
+ const rel = (0, scopeMatch_js_1.scopeRelativePath)(t.target, call.cwd, call.root);
397
+ if ((rel === null || !(0, scopeMatch_js_1.isWithinScope)(rel, scopes)) && outside.indexOf(t.target) === -1)
398
+ outside.push(t.target);
399
+ }
400
+ if (outside.length === 0)
401
+ return null;
402
+ const rec = records[0];
403
+ return {
404
+ code: 'OUT_OF_SCOPE',
405
+ ruleId: 'scope_paths.' + rec.sopTitle,
406
+ reason: 'Changes outside the declared file scope: ' + outside.join(', ') + ' (scope: ' + scopes.join(', ') + ')',
407
+ scope: { paths: outside },
408
+ ref: rec.ref,
409
+ };
410
+ }
411
+ /** The findings of one rollout's records, in order: plan approval, then qualified prerequisites, then scope. */
412
+ function ruleFindings(records, call) {
413
+ const out = [];
414
+ const plan = rulePlanFinding(records.filter((r) => r.kind === 'plan_approval'), call);
415
+ if (plan)
416
+ out.push(plan);
417
+ const requires = ruleRequiresFinding(records.filter((r) => r.kind === 'requires_outcome'), call);
418
+ if (requires)
419
+ out.push(requires);
420
+ const scope = ruleScopeFinding(records.filter((r) => r.kind === 'scope_paths'), call);
421
+ if (scope)
422
+ out.push(scope);
423
+ return out;
424
+ }
425
+ /**
426
+ * Tier R: the snapshot's rule records against one call. The enforcing
427
+ * records' first finding refuses; the shadow records' findings are reported
428
+ * and change nothing. A rule failure (an unreadable plan feed, an unreadable
429
+ * outcome state) is a finding, so it refuses whatever the client's
430
+ * `failClosed` says.
431
+ */
432
+ function evaluateGateRuleRecords(records, call) {
433
+ const enforce = ruleFindings(records.filter((r) => r.rollout === 'enforce'), call);
434
+ return { refusal: enforce.length > 0 ? enforce[0] : null, shadow: ruleFindings(records.filter((r) => r.rollout === 'shadow'), call) };
435
+ }
436
+ /**
437
+ * The decoder and Tier R as JavaScript source, for the hook gates to embed
438
+ * after `PHRASES_JS_SOURCE`, `TEST_OUTCOME_JS_SOURCE` and
439
+ * `SCOPE_MATCH_JS_SOURCE`, whose functions these call. The constants the
440
+ * functions read are written into the source.
441
+ */
442
+ exports.RULE_RECORD_JS_SOURCE = [
443
+ `const RULE_RECORD_FIELDS = ${JSON.stringify(RULE_RECORD_FIELDS)};`,
444
+ `const LANE_PHRASES = ${JSON.stringify(lanes_js_1.LANE_PHRASES)};`,
445
+ `const V22_ACTION_TOKENS = ${JSON.stringify(exports.V22_ACTION_TOKENS)};`,
446
+ `const SCOPE_WRITE_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_WRITE_TOOLS)};`,
447
+ `const SCOPE_EDIT_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_EDIT_TOOLS)};`,
448
+ `const SCOPE_DELETE_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_DELETE_TOOLS)};`,
449
+ `const SCOPE_MOVE_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_MOVE_TOOLS)};`,
450
+ `const SCOPE_EDITOR_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_EDITOR_TOOLS)};`,
451
+ `const SCOPE_SHELL_TOOLS = ${JSON.stringify(scopeMatch_js_1.SCOPE_SHELL_TOOLS)};`,
452
+ ...[
453
+ ruleIsObject,
454
+ ruleFromBase64,
455
+ ruleToBase64,
456
+ ruleText,
457
+ decodeGateRuleRecord,
458
+ gateRuleFallbackReason,
459
+ ruleEscape,
460
+ gateRuleFallback,
461
+ ruleLower,
462
+ rulePlanFinding,
463
+ ruleRequiresFinding,
464
+ ruleScopeFinding,
465
+ ruleFindings,
466
+ evaluateGateRuleRecords,
467
+ gateRulePlanFromResponse,
468
+ ].map((fn) => fn
469
+ .toString()
470
+ .replace(/\(0,\s*(?:[\w$]+_js_\d+|__vite_ssr_import_\d+__)\.([\w$]+)\)/g, '$1')
471
+ .replace(/\b(?:[\w$]+_js_\d+|__vite_ssr_import_\d+__)\.([\w$]+)/g, '$1')
472
+ .replace(/\bexports\./g, '')),
473
+ ].join('\n');
474
+ //# sourceMappingURL=gateRuleRecord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateRuleRecord.js","sourceRoot":"","sources":["../src/gateRuleRecord.ts"],"names":[],"mappings":"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"}