@intutic/gate 2.9.1 → 3.0.1

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 (95) hide show
  1. package/dist/actions.d.ts +39 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +139 -0
  4. package/dist/actions.js.map +1 -1
  5. package/dist/client.d.ts +10 -0
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +19 -0
  8. package/dist/client.js.map +1 -1
  9. package/dist/decide.d.ts +269 -0
  10. package/dist/decide.d.ts.map +1 -0
  11. package/dist/decide.js +757 -0
  12. package/dist/decide.js.map +1 -0
  13. package/dist/decideApi.d.ts +24 -0
  14. package/dist/decideApi.d.ts.map +1 -0
  15. package/dist/decideApi.js +32 -0
  16. package/dist/decideApi.js.map +1 -0
  17. package/dist/decideEngine.d.ts +195 -0
  18. package/dist/decideEngine.d.ts.map +1 -0
  19. package/dist/decideEngine.js +707 -0
  20. package/dist/decideEngine.js.map +1 -0
  21. package/dist/decideEvaluate.d.ts +250 -0
  22. package/dist/decideEvaluate.d.ts.map +1 -0
  23. package/dist/decideEvaluate.js +504 -0
  24. package/dist/decideEvaluate.js.map +1 -0
  25. package/dist/decideHostGuard.d.ts +56 -0
  26. package/dist/decideHostGuard.d.ts.map +1 -0
  27. package/dist/decideHostGuard.js +194 -0
  28. package/dist/decideHostGuard.js.map +1 -0
  29. package/dist/decideLog.d.ts +287 -0
  30. package/dist/decideLog.d.ts.map +1 -0
  31. package/dist/decideLog.js +521 -0
  32. package/dist/decideLog.js.map +1 -0
  33. package/dist/decideLogRedaction.d.ts +17 -0
  34. package/dist/decideLogRedaction.d.ts.map +1 -0
  35. package/dist/decideLogRedaction.js +33 -0
  36. package/dist/decideLogRedaction.js.map +1 -0
  37. package/dist/decideRecord.d.ts +128 -0
  38. package/dist/decideRecord.d.ts.map +1 -0
  39. package/dist/decideRecord.js +254 -0
  40. package/dist/decideRecord.js.map +1 -0
  41. package/dist/decideSdk.d.ts +86 -0
  42. package/dist/decideSdk.d.ts.map +1 -0
  43. package/dist/decideSdk.js +146 -0
  44. package/dist/decideSdk.js.map +1 -0
  45. package/dist/dsh.d.ts.map +1 -1
  46. package/dist/dsh.js +6 -1
  47. package/dist/dsh.js.map +1 -1
  48. package/dist/errors.d.ts +26 -2
  49. package/dist/errors.d.ts.map +1 -1
  50. package/dist/errors.js +38 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/gate.d.ts +85 -1
  53. package/dist/gate.d.ts.map +1 -1
  54. package/dist/gate.js +314 -18
  55. package/dist/gate.js.map +1 -1
  56. package/dist/gateRuleRecord.d.ts +244 -0
  57. package/dist/gateRuleRecord.d.ts.map +1 -0
  58. package/dist/gateRuleRecord.js +459 -0
  59. package/dist/gateRuleRecord.js.map +1 -0
  60. package/dist/harness.d.ts.map +1 -1
  61. package/dist/harness.js +22 -10
  62. package/dist/harness.js.map +1 -1
  63. package/dist/index.d.ts +14 -5
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +5 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/lanes.d.ts +94 -0
  68. package/dist/lanes.d.ts.map +1 -0
  69. package/dist/lanes.js +150 -0
  70. package/dist/lanes.js.map +1 -0
  71. package/dist/limits.d.ts +6 -0
  72. package/dist/limits.d.ts.map +1 -1
  73. package/dist/limits.js +6 -0
  74. package/dist/limits.js.map +1 -1
  75. package/dist/refusalDetail.d.ts +58 -0
  76. package/dist/refusalDetail.d.ts.map +1 -0
  77. package/dist/refusalDetail.js +121 -0
  78. package/dist/refusalDetail.js.map +1 -0
  79. package/dist/scopeMatch.d.ts +156 -0
  80. package/dist/scopeMatch.d.ts.map +1 -0
  81. package/dist/scopeMatch.js +438 -0
  82. package/dist/scopeMatch.js.map +1 -0
  83. package/dist/snapshot.d.ts +51 -3
  84. package/dist/snapshot.d.ts.map +1 -1
  85. package/dist/snapshot.js +86 -13
  86. package/dist/snapshot.js.map +1 -1
  87. package/dist/testOutcome.d.ts +164 -0
  88. package/dist/testOutcome.d.ts.map +1 -0
  89. package/dist/testOutcome.js +439 -0
  90. package/dist/testOutcome.js.map +1 -0
  91. package/dist/wrapTools.d.ts +7 -1
  92. package/dist/wrapTools.d.ts.map +1 -1
  93. package/dist/wrapTools.js +30 -2
  94. package/dist/wrapTools.js.map +1 -1
  95. package/package.json +2 -2
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Rule records in the policy snapshot: the `@rule` record, its
3
+ * fallback line, and how a gate that reads it decides a call (Tier R).
4
+ *
5
+ * A gate that cannot evaluate a rule must refuse what the rule covers, never
6
+ * skip it. So for each rule a gate is to enforce, the snapshot writer emits
7
+ * two lines inside the digest, as the decide records do:
8
+ *
9
+ * - an `@rule` record of five tab-separated columns: the tag, the fallback
10
+ * line's id or `-`, the kind, the rollout (`shadow` or `enforce`), and
11
+ * base64 of the canonical JSON of its payload, `{v, ref, sopTitle, …kind
12
+ * fields}`. Every reader up to v22 needs six
13
+ * columns for a rule, so it skips the record;
14
+ * - for an enforcing record, a fallback line: an ordinary `block` rule whose
15
+ * id is `<kind>-fallback:<n>@<sha256(sopId)[:12]>`
16
+ * ({@link gateRuleFallbackId}), on what the rule covers
17
+ * ({@link gateRuleFallback}). A gate that reads `@rule` records skips a
18
+ * fallback line only when a record that decodes names it.
19
+ *
20
+ * A snapshot with any `@rule` record is written in format 3
21
+ * ({@link RULE_SNAPSHOT_FORMAT}). Kinds in this batch:
22
+ *
23
+ * | Kind | From | Gate decision |
24
+ * |---|---|---|
25
+ * | `requires_outcome` | `requires_before: action:run_tests[ok] -> X` | X refused `PREREQUISITE_UNMET` unless the latest test run in the session passed |
26
+ * | `scope_paths` | `scope_paths:` with `scope_paths_mode: enforce` | a file change outside the scope refused `OUT_OF_SCOPE` |
27
+ * | `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` |
28
+ *
29
+ * Only SOPs with no `roles:` compile: a gate knows no agent role.
30
+ *
31
+ * Self-contained but for `./testOutcome.ts`, `./scopeMatch.ts`, `./lanes.ts`
32
+ * and `./phrases.ts` (all carried by `@intutic/gate` as byte-identical
33
+ * copies), so `@intutic/gate` keeps a byte-identical copy of this file too.
34
+ * The Python port is `intutic_clawde/gate/rule_record.py`; both run
35
+ * `fixtures/rule-record-vectors.json`.
36
+ *
37
+ * @module
38
+ */
39
+ import { type OutcomeState } from './testOutcome.js';
40
+ import type { RefusalScope } from './refusalDetail.js';
41
+ /** First column of a rule record. */
42
+ export declare const RULE_RECORD_TAG = "@rule";
43
+ /** The snapshot format a snapshot carrying any rule record is written in. */
44
+ export declare const RULE_SNAPSHOT_FORMAT = 3;
45
+ /** The longest SOP title a record carries, in code points. */
46
+ export declare const RULE_SOP_TITLE_MAX_CHARS = 80;
47
+ /** The most scope paths one record carries, and the longest of them in code points. */
48
+ export declare const RULE_SCOPE_PATHS_MAX = 64;
49
+ export declare const RULE_SCOPE_PATH_MAX_CHARS = 512;
50
+ export type GateRuleKind = 'requires_outcome' | 'scope_paths' | 'plan_approval';
51
+ export declare const GATE_RULE_KINDS: readonly GateRuleKind[];
52
+ /** The four action tokens a v22 hook gate's classifier knows: a fallback on one of them can use the `action` subject. */
53
+ export declare const V22_ACTION_TOKENS: readonly string[];
54
+ interface GateRuleRecordBase {
55
+ v: 1;
56
+ /** `<sopId>#<kind>:<n>`. */
57
+ ref: string;
58
+ sopTitle: string;
59
+ /** The paired fallback line's id; null when the record is shadow and has none. */
60
+ fallbackId: string | null;
61
+ rollout: 'shadow' | 'enforce';
62
+ }
63
+ export interface RequiresOutcomeRecord extends GateRuleRecordBase {
64
+ kind: 'requires_outcome';
65
+ first: 'action:run_tests';
66
+ qualifier: 'ok';
67
+ /** The gated token or tool. */
68
+ then: string;
69
+ /** `~>`: the run must be the call right before. */
70
+ adjacent: boolean;
71
+ }
72
+ export interface ScopePathsRecord extends GateRuleRecordBase {
73
+ kind: 'scope_paths';
74
+ scopePaths: string[];
75
+ }
76
+ export interface PlanApprovalRecord extends GateRuleRecordBase {
77
+ kind: 'plan_approval';
78
+ mode: 'required' | 'strict';
79
+ }
80
+ export type GateRuleRecord = RequiresOutcomeRecord | ScopePathsRecord | PlanApprovalRecord;
81
+ /** `ref`: `<sopId>#<kind>:<n>`. */
82
+ export declare function gateRuleRef(sopId: string, kind: GateRuleKind, n: number): string;
83
+ /** `fallbackId`: `<kind>-fallback:<n>@<first 12 hex of sha256(sopId)>`. */
84
+ export declare function gateRuleFallbackId(kind: GateRuleKind, n: number, sopId: string, sha256Hex: (text: string) => string): string;
85
+ /** What an older gate says when a rule's fallback line refuses. The writer scrubs and bounds it like any reason. */
86
+ export declare function gateRuleFallbackReason(kind: GateRuleKind, sopTitle: string): string;
87
+ /** The record's payload: everything but the kind, the fallback id and the rollout, which are columns. */
88
+ export declare function gateRulePayload(record: GateRuleRecord): {
89
+ v: 1;
90
+ ref: string;
91
+ sopTitle: string;
92
+ } & Record<string, unknown>;
93
+ /** The record as one `.rules` line. */
94
+ export declare function encodeGateRuleRecord(record: GateRuleRecord): string;
95
+ /**
96
+ * Reads an `@rule` line back, its kind, fallback id and rollout from the
97
+ * columns and the rest from the payload. Null, and so the fallback line stays
98
+ * in force, for any other line or when: it does not have five columns; the
99
+ * base64 or JSON is damaged; the kind (column 3) is unknown; the payload has
100
+ * a field its kind does not have or lacks one; the rollout (column 4) is not
101
+ * `shadow` or `enforce`; a field is out of its bounds; the ref does not end
102
+ * `#<kind>:<n>`; an enforcing record's fallback id (column 2) is not
103
+ * `<kind>-fallback:<n>@<12 hex>` for the same n, or a shadow record's is
104
+ * not `-`.
105
+ */
106
+ export declare function decodeGateRuleRecord(line: string): GateRuleRecord | null;
107
+ /**
108
+ * A record as the control plane serves it from policy resolve
109
+ * (`ResolvedPolicy.gateRecords`): which SOP it came from, its kind, rollout
110
+ * and fallback id, and the payload the `@rule` line carries.
111
+ */
112
+ export interface ServedGateRecord {
113
+ sopId: string;
114
+ kind: GateRuleKind;
115
+ rollout: 'shadow' | 'enforce';
116
+ fallbackId: string | null;
117
+ payload: {
118
+ v: 1;
119
+ ref: string;
120
+ sopTitle: string;
121
+ } & Record<string, unknown>;
122
+ }
123
+ /** A record in the served shape. */
124
+ export declare function toServedGateRecord(record: GateRuleRecord, sopId: string): ServedGateRecord;
125
+ /**
126
+ * A served record as a gate record, or null when it does not hold together:
127
+ * checked by encoding it and reading the line back, so a writer never emits
128
+ * a record no gate can decode (its fallback line would refuse instead).
129
+ */
130
+ export declare function fromServedGateRecord(served: ServedGateRecord): GateRuleRecord | null;
131
+ /** The parts of a parsed SOP (`ParsedFrontMatter`, guardrailRender.ts) the records are compiled from. */
132
+ export interface GateRuleFrontMatter {
133
+ roles: readonly string[];
134
+ mode: 'shadow' | 'enforce';
135
+ requiresBefore: ReadonlyArray<readonly [string, string, boolean]>;
136
+ scopePaths: readonly string[];
137
+ scopePathsMode: 'advise' | 'enforce';
138
+ planApproval: 'required' | 'strict' | null;
139
+ }
140
+ /** One fallback line, in the shape the snapshot writer's `GuardPattern` takes (it adds the rationale). */
141
+ export interface GateRuleFallback {
142
+ id: string;
143
+ severity: 'block';
144
+ subject: 'tool' | 'action' | 'phrase';
145
+ source: string;
146
+ ignoreCase: boolean;
147
+ reason: string;
148
+ }
149
+ /**
150
+ * The fallback line for an enforcing record: what an older gate refuses in
151
+ * its place. `requires_outcome`: the gated call (by the action subject for
152
+ * the four tokens a v22 classifier knows, by the token's phrases for a newer
153
+ * token, by the shell tools for a token with no phrases, by the tool subject
154
+ * for a tool); `scope_paths`: every mutation tool; `plan_approval`: every call.
155
+ */
156
+ export declare function gateRuleFallback(record: GateRuleRecord): GateRuleFallback | null;
157
+ /**
158
+ * The records (and, for each enforcing one, its fallback line) one SOP
159
+ * compiles to: each qualified `requires_before`, then its `scope_paths` when
160
+ * `scope_paths_mode: enforce`, then its `plan_approval:`. Nothing for a SOP
161
+ * with `roles:` (a gate knows no role). A shadow SOP (`mode: shadow`, or
162
+ * `entry.shadow`, which the writer sets for SILENT_LOG) gets shadow records
163
+ * and no fallback lines.
164
+ */
165
+ export declare function compileSopGateRecords(entry: {
166
+ sopId: string;
167
+ sopTitle: string;
168
+ shadow?: boolean;
169
+ }, fm: GateRuleFrontMatter, sha256Hex: (text: string) => string): {
170
+ records: GateRuleRecord[];
171
+ fallbacks: GateRuleFallback[];
172
+ };
173
+ /** The refusal codes Tier R gives. */
174
+ export type GateRuleCode = 'PREREQUISITE_UNMET' | 'OUT_OF_SCOPE' | 'OFF_PLAN' | 'PLAN_NOT_APPROVED';
175
+ /** The session's plan as a gate reads it: approved (APPROVED or EXECUTING) with its tools, none, or not readable. */
176
+ export type GateRulePlan = {
177
+ status: 'approved';
178
+ tools: readonly string[];
179
+ } | {
180
+ status: 'none';
181
+ } | {
182
+ status: 'unavailable';
183
+ };
184
+ /**
185
+ * The session's plan from `GET /api/v1/plans/session/:sessionId`: `status`
186
+ * is the HTTP status, or null when the control plane could not be reached.
187
+ * 200 with `lifecycleState` APPROVED or EXECUTING is approved, its tools the
188
+ * steps' `tool` (or `toolName`) names; 200 in any other state, and 404, are
189
+ * none; anything else is unavailable, which refuses as none does.
190
+ */
191
+ export declare function gateRulePlanFromResponse(status: number | null, body: unknown): GateRulePlan;
192
+ /** One call, and what the gate knows of its session, for {@link evaluateGateRuleRecords}. */
193
+ export interface GateRuleCall {
194
+ tool: string;
195
+ input: unknown;
196
+ /** The action tokens the call classifies to. */
197
+ actions: readonly string[];
198
+ /** The gate's working directory and the workspace root (the nearest `.git` above it, else the directory itself). */
199
+ cwd: string;
200
+ root: string;
201
+ /** The session id; empty when the harness sent none. */
202
+ sessionId: string;
203
+ /** The harness's name, for the reasons. */
204
+ harness: string;
205
+ /** The session's outcome state, or null when there is none or it does not read. */
206
+ outcomes: OutcomeState | null;
207
+ /** The harness reports tool results the gate can read (its post event is confirmed). */
208
+ observable: boolean;
209
+ /** The session's plan; only read when a `plan_approval` record applies. */
210
+ plan: GateRulePlan;
211
+ nowMs: number;
212
+ }
213
+ export interface GateRuleFinding {
214
+ code: GateRuleCode;
215
+ /** The rule id the refusal and its events name. */
216
+ ruleId: string;
217
+ reason: string;
218
+ scope: RefusalScope;
219
+ /** The record's ref, or the first record's when several decided together. */
220
+ ref: string;
221
+ }
222
+ export interface GateRuleEvaluation {
223
+ /** The first enforcing record that refuses, or null to let the call on. */
224
+ refusal: GateRuleFinding | null;
225
+ /** What the shadow records would have refused, recorded and not acted on. */
226
+ shadow: GateRuleFinding[];
227
+ }
228
+ /**
229
+ * Tier R: the snapshot's rule records against one call. The enforcing
230
+ * records' first finding refuses; the shadow records' findings are reported
231
+ * and change nothing. A rule failure (an unreadable plan feed, an unreadable
232
+ * outcome state) is a finding, so it refuses whatever the client's
233
+ * `failClosed` says.
234
+ */
235
+ export declare function evaluateGateRuleRecords(records: readonly GateRuleRecord[], call: GateRuleCall): GateRuleEvaluation;
236
+ /**
237
+ * The decoder and Tier R as JavaScript source, for the hook gates to embed
238
+ * after `PHRASES_JS_SOURCE`, `TEST_OUTCOME_JS_SOURCE` and
239
+ * `SCOPE_MATCH_JS_SOURCE`, whose functions these call. The constants the
240
+ * functions read are written into the source.
241
+ */
242
+ export declare const RULE_RECORD_JS_SOURCE: string;
243
+ export {};
244
+ //# sourceMappingURL=gateRuleRecord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateRuleRecord.d.ts","sourceRoot":"","sources":["../src/gateRuleRecord.ts"],"names":[],"mappings":"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"}