@intutic/clawde 2.9.0 → 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.
- package/dist/decide.d.ts +269 -0
- package/dist/decide.d.ts.map +1 -0
- package/dist/decide.js +781 -0
- package/dist/decide.js.map +1 -0
- package/dist/decideApi.d.ts +25 -0
- package/dist/decideApi.d.ts.map +1 -0
- package/dist/decideApi.js +36 -0
- package/dist/decideApi.js.map +1 -0
- package/dist/decideEngine.d.ts +195 -0
- package/dist/decideEngine.d.ts.map +1 -0
- package/dist/decideEngine.js +720 -0
- package/dist/decideEngine.js.map +1 -0
- package/dist/decideHostGuard.d.ts +56 -0
- package/dist/decideHostGuard.d.ts.map +1 -0
- package/dist/decideHostGuard.js +200 -0
- package/dist/decideHostGuard.js.map +1 -0
- package/dist/decideSdk.d.ts +86 -0
- package/dist/decideSdk.d.ts.map +1 -0
- package/dist/decideSdk.js +151 -0
- package/dist/decideSdk.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/refusals.d.ts.map +1 -1
- package/dist/refusals.js +3 -0
- package/dist/refusals.js.map +1 -1
- package/package.json +2 -2
package/dist/decide.d.ts
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decide rules: the grammar, the validator and the semantics.
|
|
3
|
+
*
|
|
4
|
+
* A decide rule asks a self-hosted model a few narrow `yes_no` or `choice`
|
|
5
|
+
* questions about a tool call or a model response, turns each answer's
|
|
6
|
+
* probability into yes, no or unknown through a band, and combines the
|
|
7
|
+
* answers with the rule's `when` expression in Kleene three-valued logic:
|
|
8
|
+
* true refuses, false allows, unknown escalates. It is written as one SOP
|
|
9
|
+
* front-matter line, `decide: {json}`, one rule per line, the way a
|
|
10
|
+
* `hook_rule:` line is.
|
|
11
|
+
*
|
|
12
|
+
* This module is the pure part every layer shares:
|
|
13
|
+
*
|
|
14
|
+
* - {@link parseDecideLine} and {@link validateDecideRule}: the shape and the
|
|
15
|
+
* eight ordered checks, each failure with one fixed reason;
|
|
16
|
+
* - {@link parseWhen} and {@link canonicalWhen}: the `when` grammar and its
|
|
17
|
+
* fully parenthesised form, `!=` and `IN` rewritten;
|
|
18
|
+
* - {@link decideHashInput}: the canonical JSON the rule hash is taken over,
|
|
19
|
+
* which leaves out `id`, `title`, `escalate` and `rollout`;
|
|
20
|
+
* - {@link bandValue}, {@link choiceOrders}, {@link choiceAtoms}, the Kleene
|
|
21
|
+
* connectives, {@link decideRuleOutcome} and {@link decideCallOutcome}.
|
|
22
|
+
*
|
|
23
|
+
* Self-contained (no imports, no module state) so `@intutic/gate` can carry
|
|
24
|
+
* a byte-identical copy (`packages/gate-js/src/decide.ts`). The proxy's port
|
|
25
|
+
* is `packages/proxy/src/decide/mod.rs` and the Python gate's is
|
|
26
|
+
* `intutic_clawde/gate/decide.py`; all of them run
|
|
27
|
+
* `fixtures/decide-vectors.json` and must give the same answer, reason text
|
|
28
|
+
* included. The SHA-256 is passed in ({@link decideRuleHash}), because this
|
|
29
|
+
* file also runs where `node:crypto` does not.
|
|
30
|
+
*
|
|
31
|
+
* @module
|
|
32
|
+
*/
|
|
33
|
+
export declare const DECIDE_MAX_QUESTIONS = 8;
|
|
34
|
+
export declare const DECIDE_MAX_OPTIONS = 8;
|
|
35
|
+
export declare const DECIDE_MAX_RULES_PER_CALL = 4;
|
|
36
|
+
export declare const DECIDE_MAX_WHEN_CHARS = 256;
|
|
37
|
+
export declare const DECIDE_MIN_ASK_CHARS = 8;
|
|
38
|
+
export declare const DECIDE_MAX_ASK_CHARS = 300;
|
|
39
|
+
export declare const DECIDE_DEFAULT_BAND: DecideBand;
|
|
40
|
+
/** Appended to every `choice` question's options when absent, and always asked last. */
|
|
41
|
+
export declare const NONE_OF_THESE = "none_of_these";
|
|
42
|
+
/**
|
|
43
|
+
* A question that asks about approval. Approval comes from the harness's ask
|
|
44
|
+
* or the review queue, never from a model reading text, so the validator
|
|
45
|
+
* refuses such a question (check 8). ASCII word boundaries and case folding,
|
|
46
|
+
* as JavaScript, Python's `re.ASCII` and Rust's `(?-u)` all read it.
|
|
47
|
+
*/
|
|
48
|
+
export declare const DECIDE_APPROVAL_RE: RegExp;
|
|
49
|
+
export interface DecideBand {
|
|
50
|
+
yes_at: number;
|
|
51
|
+
no_below: number;
|
|
52
|
+
}
|
|
53
|
+
export interface DecideQuestion {
|
|
54
|
+
type: 'yes_no' | 'choice';
|
|
55
|
+
ask: string;
|
|
56
|
+
/** `choice` only, as written; {@link decideOptions} places `none_of_these`. */
|
|
57
|
+
options?: string[];
|
|
58
|
+
band?: DecideBand;
|
|
59
|
+
}
|
|
60
|
+
/** A rule as its front-matter line carries it: the IR without `kind`. */
|
|
61
|
+
export interface DecideRule {
|
|
62
|
+
id: string;
|
|
63
|
+
title?: string;
|
|
64
|
+
on: 'tool_call' | 'response';
|
|
65
|
+
tools?: string[];
|
|
66
|
+
questions: Record<string, DecideQuestion>;
|
|
67
|
+
when: string;
|
|
68
|
+
band?: DecideBand;
|
|
69
|
+
escalate?: 'ask' | 'review' | 'refuse';
|
|
70
|
+
rollout?: 'shadow' | 'enforce';
|
|
71
|
+
context?: Array<'last_user_turn'>;
|
|
72
|
+
}
|
|
73
|
+
/** A parsed `when`, with `!=` and `IN` already rewritten. */
|
|
74
|
+
export type DecideExpr = {
|
|
75
|
+
op: 'yes';
|
|
76
|
+
q: string;
|
|
77
|
+
} | {
|
|
78
|
+
op: 'eq';
|
|
79
|
+
q: string;
|
|
80
|
+
o: string;
|
|
81
|
+
} | {
|
|
82
|
+
op: 'not';
|
|
83
|
+
a: DecideExpr;
|
|
84
|
+
} | {
|
|
85
|
+
op: 'and' | 'or';
|
|
86
|
+
a: DecideExpr;
|
|
87
|
+
b: DecideExpr;
|
|
88
|
+
};
|
|
89
|
+
export type DecideValidation = {
|
|
90
|
+
ok: true;
|
|
91
|
+
rule: DecideRule;
|
|
92
|
+
expr: DecideExpr;
|
|
93
|
+
} | {
|
|
94
|
+
ok: false;
|
|
95
|
+
reason: string;
|
|
96
|
+
};
|
|
97
|
+
/** A `decide:` line, read or not. An unreadable line is kept, never dropped: it refuses what it would have judged. */
|
|
98
|
+
export type DecideDecl = {
|
|
99
|
+
kind: 'rule';
|
|
100
|
+
rule: DecideRule;
|
|
101
|
+
expr: DecideExpr;
|
|
102
|
+
} | {
|
|
103
|
+
kind: 'unreadable';
|
|
104
|
+
id: string | null;
|
|
105
|
+
error: string;
|
|
106
|
+
};
|
|
107
|
+
/** Parse a `when` expression (§3.3 of the decide LLD). Never throws. Names are not checked here; {@link validateDecideRule} does that. */
|
|
108
|
+
export declare function parseWhen(src: string): {
|
|
109
|
+
ok: true;
|
|
110
|
+
expr: DecideExpr;
|
|
111
|
+
} | {
|
|
112
|
+
ok: false;
|
|
113
|
+
message: string;
|
|
114
|
+
column: number;
|
|
115
|
+
};
|
|
116
|
+
/** The canonical form: fully parenthesised, `!=` and `IN` rewritten. `a AND b != o` → `(a AND (NOT (b == o)))`. */
|
|
117
|
+
export declare function canonicalWhen(e: DecideExpr): string;
|
|
118
|
+
/** A `choice` question's options as asked: `none_of_these` appended when absent and moved last when present. */
|
|
119
|
+
export declare function decideOptions(q: DecideQuestion): string[];
|
|
120
|
+
/** The band a question is judged on: its own, else the rule's, else the default. */
|
|
121
|
+
export declare function decideQuestionBand(rule: DecideRule, name: string): DecideBand;
|
|
122
|
+
/**
|
|
123
|
+
* Validate an untrusted value as a decide rule (the line's JSON, without
|
|
124
|
+
* `kind`). Never throws. The shape comes first, then the eight checks in
|
|
125
|
+
* their fixed order; the first failure is the reason. Questions are visited
|
|
126
|
+
* in sorted name order and `when` atoms left to right, so every port reports
|
|
127
|
+
* the same first failure.
|
|
128
|
+
*/
|
|
129
|
+
export declare function validateDecideRule(value: unknown): DecideValidation;
|
|
130
|
+
/** The value of one `decide:` line (the text after the key). */
|
|
131
|
+
export declare function parseDecideLine(raw: string): DecideDecl;
|
|
132
|
+
/** Every `decide:` line of one SOP, in order. A line reusing an earlier line's id is unreadable: ids are unique within a SOP. */
|
|
133
|
+
export declare function parseDecideLines(values: readonly string[]): DecideDecl[];
|
|
134
|
+
/**
|
|
135
|
+
* What the rule hash covers: `on`, `tools` (sorted), the questions with
|
|
136
|
+
* their bands made explicit and `none_of_these` placed, `when` in canonical
|
|
137
|
+
* form and `context` (sorted), as canonical JSON. `id`, `title`, `escalate`
|
|
138
|
+
* and `rollout` are left out, so flipping shadow to enforce keeps the rule's
|
|
139
|
+
* evidence, while a changed word, option or band starts it over.
|
|
140
|
+
* `tools` and `context` are `[]` when absent.
|
|
141
|
+
*/
|
|
142
|
+
export declare function decideHashInput(rule: DecideRule): string;
|
|
143
|
+
/** `ruleHash`: lower-case hex SHA-256 of {@link decideHashInput}. `sha256Hex` hashes a string's UTF-8 bytes. */
|
|
144
|
+
export declare function decideRuleHash(rule: DecideRule, sha256Hex: (text: string) => string): string;
|
|
145
|
+
/** Kleene's three values: true, false, unknown. */
|
|
146
|
+
export type Tri = 'T' | 'F' | 'U';
|
|
147
|
+
export declare function kAnd(a: Tri, b: Tri): Tri;
|
|
148
|
+
export declare function kOr(a: Tri, b: Tri): Tri;
|
|
149
|
+
export declare function kNot(a: Tri): Tri;
|
|
150
|
+
/** A probability through a band: T at or above `yes_at`, F below `no_below`, U between. */
|
|
151
|
+
export declare function bandValue(p: number, band: DecideBand): Tri;
|
|
152
|
+
/**
|
|
153
|
+
* The orders a `choice` question is asked in, as index lists over its n
|
|
154
|
+
* options: as written and reversed, plus, past three options, the list
|
|
155
|
+
* rotated by half, because reversing leaves the middle in the middle. The
|
|
156
|
+
* order rule of `attributeSops` in the judge cascade.
|
|
157
|
+
*/
|
|
158
|
+
export declare function choiceOrders(n: number): number[][];
|
|
159
|
+
export interface ChoiceAtom {
|
|
160
|
+
/** The probability averaged over the orders. */
|
|
161
|
+
p: number;
|
|
162
|
+
/** The largest probability any order gave minus the smallest. */
|
|
163
|
+
spread: number;
|
|
164
|
+
value: Tri;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Each option's atom `q == o` from the per-order probabilities (option name
|
|
168
|
+
* to probability, one map per order; an option a map leaves out is 0). The
|
|
169
|
+
* mean goes through the band; when the orders disagree by more than the
|
|
170
|
+
* band's width the atom is U whatever the mean. No orders at all is U.
|
|
171
|
+
*/
|
|
172
|
+
export declare function choiceAtoms(options: readonly string[], perOrder: ReadonlyArray<Readonly<Record<string, number>>>, band: DecideBand): Record<string, ChoiceAtom>;
|
|
173
|
+
/** The atoms a `when` is evaluated over. A missing atom is U. */
|
|
174
|
+
export interface DecideAtoms {
|
|
175
|
+
yes: Record<string, Tri>;
|
|
176
|
+
eq: Record<string, Record<string, Tri>>;
|
|
177
|
+
}
|
|
178
|
+
export declare function evalWhen(e: DecideExpr, atoms: DecideAtoms): Tri;
|
|
179
|
+
/** An engine's answer: `p` = p(yes) for `yes_no`; `perOrder` for `choice`, one option map per order of {@link choiceOrders}. */
|
|
180
|
+
export interface DecideAnswerInput {
|
|
181
|
+
p?: number;
|
|
182
|
+
perOrder?: Array<Record<string, number>>;
|
|
183
|
+
}
|
|
184
|
+
/** A fitted combiner: it replaces `when`, and is judged on its own band. */
|
|
185
|
+
export interface DecideCombiner {
|
|
186
|
+
bias: number;
|
|
187
|
+
weights: Record<string, number>;
|
|
188
|
+
band: DecideBand;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* s = σ(bias + Σ w_q · logit(p_q)), summed in sorted question order. A
|
|
192
|
+
* `choice` question enters through the averaged probability of its top
|
|
193
|
+
* option. Null when a weighted
|
|
194
|
+
* question has no answer, which the caller reads as U.
|
|
195
|
+
*/
|
|
196
|
+
export declare function combinerScore(rule: DecideRule, answers: Readonly<Record<string, DecideAnswerInput>>, combiner: DecideCombiner): number | null;
|
|
197
|
+
export interface DecideRuleOutcome {
|
|
198
|
+
/** `when`, or the combiner's band value when one is pinned. */
|
|
199
|
+
value: Tri;
|
|
200
|
+
outcome: 'allow' | 'refuse' | 'escalate';
|
|
201
|
+
code: 'DECIDE_REFUSED' | 'DECIDE_ESCALATED' | null;
|
|
202
|
+
/** How an escalation reaches a person: the rule's `escalate`, when it is `ask` or `review`. */
|
|
203
|
+
via: 'ask' | 'review' | null;
|
|
204
|
+
/** The combiner's score, when one decided. */
|
|
205
|
+
score: number | null;
|
|
206
|
+
atoms: DecideAtoms;
|
|
207
|
+
}
|
|
208
|
+
/** The atoms of a validated rule's answers, each question through its own band. */
|
|
209
|
+
export declare function decideAtoms(rule: DecideRule, answers: Readonly<Record<string, DecideAnswerInput>>): DecideAtoms;
|
|
210
|
+
/**
|
|
211
|
+
* One rule's outcome: T refuses (`DECIDE_REFUSED`), F allows, U escalates
|
|
212
|
+
* through `escalate` (default `ask`); `escalate: refuse` refuses with
|
|
213
|
+
* `DECIDE_ESCALATED`. `expr` is the rule's parsed `when`
|
|
214
|
+
* ({@link validateDecideRule} returns it).
|
|
215
|
+
*/
|
|
216
|
+
export declare function decideRuleOutcome(rule: DecideRule, expr: DecideExpr, answers: Readonly<Record<string, DecideAnswerInput>>, combiner?: DecideCombiner | null): DecideRuleOutcome;
|
|
217
|
+
export interface DecideCandidate {
|
|
218
|
+
ref: string;
|
|
219
|
+
on: 'tool_call' | 'response';
|
|
220
|
+
tools?: readonly string[];
|
|
221
|
+
/** The effective rollout: `enforce` only when every condition for it holds. */
|
|
222
|
+
effective: 'enforce' | 'shadow';
|
|
223
|
+
}
|
|
224
|
+
export interface DecideSelection<C extends DecideCandidate = DecideCandidate> {
|
|
225
|
+
/** At most {@link DECIDE_MAX_RULES_PER_CALL}, enforce first, then in snapshot order. */
|
|
226
|
+
evaluate: C[];
|
|
227
|
+
/** Shadow rules past the limit: not evaluated, logged. */
|
|
228
|
+
skipped: C[];
|
|
229
|
+
/** Set when an enforce rule is past the limit: the call refuses `GOVERNANCE_UNAVAILABLE` before any engine call. */
|
|
230
|
+
unavailable: string | null;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The rules a tool call asks. `candidates` are in snapshot order (SOP order,
|
|
234
|
+
* then line order). A rule matches when it is `on: tool_call` and names the
|
|
235
|
+
* tool exactly.
|
|
236
|
+
*/
|
|
237
|
+
export declare function selectDecideRules<C extends DecideCandidate>(candidates: readonly C[], tool: string): DecideSelection<C>;
|
|
238
|
+
/** One evaluated rule's result. `unavailable`: the engine could not answer (an error, a timeout, a failed canary). */
|
|
239
|
+
export interface DecideRuleResult {
|
|
240
|
+
ref: string;
|
|
241
|
+
effective: 'enforce' | 'shadow';
|
|
242
|
+
outcome: 'allow' | 'refuse' | 'escalate' | 'unavailable';
|
|
243
|
+
code?: 'DECIDE_REFUSED' | 'DECIDE_ESCALATED' | null;
|
|
244
|
+
via?: 'ask' | 'review' | null;
|
|
245
|
+
}
|
|
246
|
+
export interface DecideCallOutcome {
|
|
247
|
+
outcome: 'allow' | 'refuse' | 'escalate';
|
|
248
|
+
code: 'DECIDE_REFUSED' | 'DECIDE_ESCALATED' | 'GOVERNANCE_UNAVAILABLE' | null;
|
|
249
|
+
ruleRef: string | null;
|
|
250
|
+
via: 'ask' | 'review' | null;
|
|
251
|
+
reason: string | null;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The call's outcome from its rules' results, in evaluation order. Only
|
|
255
|
+
* enforce rules count: the first that refuses (or whose engine was
|
|
256
|
+
* unavailable, `GOVERNANCE_UNAVAILABLE`) refuses the call; otherwise the
|
|
257
|
+
* first that escalates escalates it; otherwise the call is allowed. Shadow
|
|
258
|
+
* results never change the call.
|
|
259
|
+
*/
|
|
260
|
+
export declare function decideCallOutcome(selection: Pick<DecideSelection, 'unavailable'>, results: readonly DecideRuleResult[]): DecideCallOutcome;
|
|
261
|
+
/**
|
|
262
|
+
* This module as JavaScript source, for the hook gates to embed: every
|
|
263
|
+
* constant, the parser's error class and every function above, in a scope of
|
|
264
|
+
* the gate's choosing. A test holds the list to the functions this file
|
|
265
|
+
* declares. A CommonJS build names an exported constant `exports.X` inside a
|
|
266
|
+
* function; the source defines each as a plain `X`, so that prefix is dropped.
|
|
267
|
+
*/
|
|
268
|
+
export declare const DECIDE_JS_SOURCE: string;
|
|
269
|
+
//# sourceMappingURL=decide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decide.d.ts","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|