@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,543 @@
1
+ "use strict";
2
+ /**
3
+ * The decide log, and the drift alarm it feeds.
4
+ *
5
+ * Every process that evaluates a call's decide rules appends one line to
6
+ * `~/.intutic/logs/decide-YYYY-MM-DD.jsonl` (the UTC date), mode 0600, with
7
+ * a single append write: what was asked, of which model, and what came back.
8
+ * Stored by default: the hash of each state sent, the rule hashes, the model
9
+ * digest, every answer's probability and band, the outcome and the mode, and
10
+ * the call's arguments only after redaction, cut to
11
+ * {@link DECIDE_ARGS_EXCERPT_MAX_BYTES}. A line is at most
12
+ * {@link DECIDE_LOG_LINE_MAX_BYTES}; the excerpt is shortened first. The log
13
+ * is its own file, never a trace file, so nothing that uploads and deletes
14
+ * traces touches it.
15
+ *
16
+ * Drift (engine protection 8): each rule keeps its last
17
+ * {@link DECIDE_STATS_KEEP} decisions in `~/.intutic/decide/stats/<ruleHash>.json`.
18
+ * Against the eval run the rule's pin came from, `decide.drift` fires when
19
+ * the escalation rate moves more than {@link DECIDE_DRIFT_ESCALATION_DELTA}
20
+ * from the run's, or a question's median probability leaves the run's
21
+ * [p10, p90], at most once per {@link DECIDE_DRIFT_INTERVAL_MS} per rule and
22
+ * only once {@link DECIDE_DRIFT_MIN_DECISIONS} decisions are kept.
23
+ *
24
+ * Every gate that evaluates decide rules writes it, with the same record and
25
+ * redaction and under the same home directory ({@link decideLogDeps}):
26
+ * `intutic decide check` for the shell and n8n gates, the JavaScript hook
27
+ * gates (which embed {@link DECIDE_LOG_JS_SOURCE}), and both gate SDKs. A
28
+ * write that fails never changes the decision.
29
+ *
30
+ * Self-contained but for the decide modules beside it, so `@intutic/gate`
31
+ * carries a byte-identical copy. Files are reached through the `fs` its
32
+ * caller passes. The Python port is `intutic_clawde/gate/decide_log.py`; both
33
+ * run `fixtures/decide-log-vectors.json`.
34
+ *
35
+ * @module
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.DECIDE_LOG_JS_SOURCE = exports.DECIDE_REDACTED = exports.DECIDE_DRIFT_INTERVAL_MS = exports.DECIDE_DRIFT_ESCALATION_DELTA = exports.DECIDE_DRIFT_MIN_DECISIONS = exports.DECIDE_STATS_KEEP = exports.DECIDE_LOG_RETENTION_DAYS = exports.DECIDE_ARGS_EXCERPT_MAX_BYTES = exports.DECIDE_LOG_LINE_MAX_BYTES = void 0;
39
+ exports.decideLogFileName = decideLogFileName;
40
+ exports.decideLogFileDate = decideLogFileDate;
41
+ exports.decideUtf8Prefix = decideUtf8Prefix;
42
+ exports.decideRedact = decideRedact;
43
+ exports.decideArgsExcerpt = decideArgsExcerpt;
44
+ exports.buildDecideDecisionRecord = buildDecideDecisionRecord;
45
+ exports.buildDecideEventRecord = buildDecideEventRecord;
46
+ exports.decideLogLine = decideLogLine;
47
+ exports.appendDecideLogLine = appendDecideLogLine;
48
+ exports.decideTrackedP = decideTrackedP;
49
+ exports.recordDecideStats = recordDecideStats;
50
+ exports.checkDecideDrift = checkDecideDrift;
51
+ exports.readDecideStats = readDecideStats;
52
+ exports.writeDecideStats = writeDecideStats;
53
+ exports.writeDecideCallLog = writeDecideCallLog;
54
+ exports.decideEngineHost = decideEngineHost;
55
+ exports.decideLogEngine = decideLogEngine;
56
+ exports.readDecideEvalRunBaseline = readDecideEvalRunBaseline;
57
+ exports.decideLogDeps = decideLogDeps;
58
+ const decide_js_1 = require("./decide.js");
59
+ const decideEngine_js_1 = require("./decideEngine.js");
60
+ /** The longest line the log holds, in UTF-8 bytes. */
61
+ exports.DECIDE_LOG_LINE_MAX_BYTES = 8192;
62
+ /** The longest arguments excerpt, in UTF-8 bytes, cut on a character boundary. */
63
+ exports.DECIDE_ARGS_EXCERPT_MAX_BYTES = 2048;
64
+ /** Days a decide log file is kept before housekeeping deletes it. */
65
+ exports.DECIDE_LOG_RETENTION_DAYS = 30;
66
+ /** Decisions kept per rule for the drift alarm. */
67
+ exports.DECIDE_STATS_KEEP = 200;
68
+ /** Fewer kept decisions than this never raise drift: one escalation in three is noise, not drift. */
69
+ exports.DECIDE_DRIFT_MIN_DECISIONS = 20;
70
+ /** An escalation rate this far (absolute) from the eval run's is drift. */
71
+ exports.DECIDE_DRIFT_ESCALATION_DELTA = 0.15;
72
+ /** At most one `decide.drift` per rule in this window. */
73
+ exports.DECIDE_DRIFT_INTERVAL_MS = 86_400_000;
74
+ /** What a redacted match is replaced with. */
75
+ exports.DECIDE_REDACTED = '[REDACTED]';
76
+ // ---------------------------------------------------------------------------
77
+ // Files and text
78
+ // ---------------------------------------------------------------------------
79
+ /** `decide-YYYY-MM-DD.jsonl` for the UTC date of `atMs`; `decide-state-…` for raw states. */
80
+ function decideLogFileName(atMs, kind = 'decide') {
81
+ return `${kind}-${new Date(atMs).toISOString().slice(0, 10)}.jsonl`;
82
+ }
83
+ /** The UTC date a decide log file name carries, as epoch milliseconds at midnight, or null when the name is not one. */
84
+ function decideLogFileDate(name) {
85
+ const m = /^decide(?:-state)?-([0-9]{4}-[0-9]{2}-[0-9]{2})\.jsonl$/.exec(name);
86
+ if (!m)
87
+ return null;
88
+ const t = Date.parse(`${m[1]}T00:00:00.000Z`);
89
+ return Number.isNaN(t) ? null : t;
90
+ }
91
+ function utf8Length(s) {
92
+ return new TextEncoder().encode(s).length;
93
+ }
94
+ /** The longest prefix of whole characters within `max` UTF-8 bytes. */
95
+ function decideUtf8Prefix(s, max) {
96
+ let bytes = 0;
97
+ let end = 0;
98
+ for (const ch of s) {
99
+ const cp = ch.codePointAt(0);
100
+ const n = cp < 0x80 ? 1 : cp < 0x800 ? 2 : cp < 0x10000 ? 3 : 4;
101
+ if (bytes + n > max)
102
+ break;
103
+ bytes += n;
104
+ end += ch.length;
105
+ }
106
+ return s.slice(0, end);
107
+ }
108
+ /**
109
+ * `text` with every match of each source replaced by {@link DECIDE_REDACTED},
110
+ * the sources applied in order. A source that does not compile is skipped.
111
+ */
112
+ function decideRedact(text, sources) {
113
+ let out = text;
114
+ for (const source of sources) {
115
+ let re;
116
+ try {
117
+ re = new RegExp(source, 'g');
118
+ }
119
+ catch {
120
+ continue;
121
+ }
122
+ out = out.replace(re, exports.DECIDE_REDACTED);
123
+ }
124
+ return out;
125
+ }
126
+ /** The call's arguments as canonical JSON, redacted, then cut to `maxBytes`. */
127
+ function decideArgsExcerpt(toolInput, sources, maxBytes = exports.DECIDE_ARGS_EXCERPT_MAX_BYTES) {
128
+ return decideUtf8Prefix(decideRedact((0, decideEngine_js_1.decideCanonicalJson)(toolInput ?? {}), sources), maxBytes);
129
+ }
130
+ /** The `q == o` atoms a `when` names, as `"q == o"` strings, in order of appearance. */
131
+ function eqAtoms(e, out = []) {
132
+ if (e.op === 'eq') {
133
+ const key = `${e.q} == ${e.o}`;
134
+ if (!out.includes(key))
135
+ out.push(key);
136
+ }
137
+ else if (e.op === 'not')
138
+ eqAtoms(e.a, out);
139
+ else if (e.op === 'and' || e.op === 'or') {
140
+ eqAtoms(e.a, out);
141
+ eqAtoms(e.b, out);
142
+ }
143
+ return out;
144
+ }
145
+ function logAnswer(rule, expr, name, a) {
146
+ const q = rule.questions[name];
147
+ if (!q)
148
+ return null;
149
+ const band = (0, decide_js_1.decideQuestionBand)(rule, name);
150
+ const pair = [band.no_below, band.yes_at];
151
+ if (q.type === 'yes_no') {
152
+ const p = typeof a.p === 'number' ? a.p : null;
153
+ return { type: 'yes_no', p, pRaw: p, value: p === null ? 'U' : (0, decide_js_1.bandValue)(p, band), band: pair };
154
+ }
155
+ const atoms = (0, decide_js_1.choiceAtoms)((0, decide_js_1.decideOptions)(q), a.perOrder ?? [], band);
156
+ const used = expr ? eqAtoms(expr).filter((k) => k.startsWith(`${name} == `)) : [];
157
+ return {
158
+ type: 'choice',
159
+ p: Object.fromEntries(Object.entries(atoms).map(([o, c]) => [o, c.p])),
160
+ spread: Object.fromEntries(Object.entries(atoms).map(([o, c]) => [o, c.spread])),
161
+ atoms: Object.fromEntries(used.map((k) => [k, atoms[k.slice(name.length + 4)]?.value ?? 'U'])),
162
+ band: pair,
163
+ };
164
+ }
165
+ function whenValue(r) {
166
+ if (r.outcome === 'unavailable')
167
+ return null;
168
+ if (r.outcome === 'allow')
169
+ return 'F';
170
+ return r.code === 'DECIDE_REFUSED' ? 'T' : 'U';
171
+ }
172
+ /**
173
+ * The `decide.decision` record of one evaluated call. `rules` are the
174
+ * entries the call was evaluated over; each report's state is rebuilt from
175
+ * its entry and the call (it is deterministic) and hashed with `sha256Hex`.
176
+ */
177
+ function buildDecideDecisionRecord(evaluation, rules, ctx, sha256Hex) {
178
+ const byRef = new Map(rules.map((r) => [r.ref, r]));
179
+ const logged = evaluation.rules.map((rep) => {
180
+ const entry = byRef.get(rep.ref);
181
+ const v = entry ? (0, decide_js_1.validateDecideRule)(entry.ir) : null;
182
+ const rule = v && v.ok ? v.rule : null;
183
+ const expr = rule ? (0, decide_js_1.parseWhen)(rule.when).expr : null;
184
+ let stateHash = null;
185
+ if (entry && rule) {
186
+ try {
187
+ const state = (0, decideEngine_js_1.buildDecideToolCallState)({
188
+ ruleId: rule.id,
189
+ sopTitle: entry.sopTitle,
190
+ ruleText: entry.ruleText,
191
+ tool: ctx.tool,
192
+ cwd: ctx.cwd,
193
+ toolInput: ctx.toolInput,
194
+ ...((rule.context ?? []).includes('last_user_turn') ? { lastUserTurn: ctx.lastUserTurn ?? null } : {}),
195
+ });
196
+ stateHash = `sha256:${sha256Hex(state)}`;
197
+ }
198
+ catch {
199
+ stateHash = null;
200
+ }
201
+ }
202
+ let answers = null;
203
+ if (rule && rep.answers) {
204
+ answers = {};
205
+ for (const name of Object.keys(rep.answers).sort()) {
206
+ const a = logAnswer(rule, expr, name, rep.answers[name]);
207
+ if (a)
208
+ answers[name] = a;
209
+ }
210
+ }
211
+ return {
212
+ ref: rep.ref,
213
+ ruleHash: rep.ruleHash,
214
+ rollout: entry?.rollout ?? 'shadow',
215
+ effective: rep.effective,
216
+ why: rep.why,
217
+ stateHash,
218
+ modelDigest: rep.modelDigest,
219
+ answers,
220
+ when: whenValue(rep),
221
+ outcome: rep.outcome,
222
+ escalate: entry?.ir.escalate ?? 'ask',
223
+ error: rep.error,
224
+ };
225
+ });
226
+ return {
227
+ v: 1,
228
+ event: 'decide.decision',
229
+ at: new Date(ctx.atMs).toISOString(),
230
+ harness: ctx.harness,
231
+ workspaceId: ctx.workspaceId,
232
+ sessionId: ctx.sessionId,
233
+ tool: ctx.tool,
234
+ lane: ctx.lane ?? null,
235
+ revertRate: typeof ctx.revertRate === 'number' && Number.isFinite(ctx.revertRate) ? ctx.revertRate : null,
236
+ stateHash: logged[0]?.stateHash ?? null,
237
+ argsExcerpt: decideArgsExcerpt(ctx.toolInput, ctx.redact),
238
+ engine: ctx.engine,
239
+ budgetMs: ctx.budgetMs,
240
+ latencyMs: ctx.latencyMs,
241
+ outcome: evaluation.call.outcome,
242
+ code: evaluation.call.code,
243
+ rules: logged,
244
+ skipped: [...evaluation.skipped],
245
+ };
246
+ }
247
+ /** An event other than a decision, in the same envelope. */
248
+ function buildDecideEventRecord(event, ctx, body) {
249
+ return { v: 1, event, at: new Date(ctx.atMs).toISOString(), harness: ctx.harness, workspaceId: ctx.workspaceId, sessionId: ctx.sessionId, ...body };
250
+ }
251
+ /**
252
+ * The record as one JSON line (with its newline) of at most `max` bytes.
253
+ * Over it, the arguments excerpt is shortened first, by halves down to
254
+ * nothing; then each choice answer keeps only its atoms; then the answers
255
+ * go. Whatever was cut, `truncated` says so.
256
+ */
257
+ function decideLogLine(record, max = exports.DECIDE_LOG_LINE_MAX_BYTES) {
258
+ const fits = (r) => {
259
+ const line = JSON.stringify(r) + '\n';
260
+ return utf8Length(line) <= max ? line : null;
261
+ };
262
+ const whole = fits(record);
263
+ if (whole)
264
+ return whole;
265
+ const r = { ...record, truncated: true };
266
+ if (typeof r.argsExcerpt === 'string') {
267
+ let excerpt = r.argsExcerpt;
268
+ while (excerpt.length > 0) {
269
+ excerpt = decideUtf8Prefix(excerpt, Math.floor(utf8Length(excerpt) / 2));
270
+ const line = fits({ ...r, argsExcerpt: excerpt });
271
+ if (line)
272
+ return line;
273
+ }
274
+ r.argsExcerpt = '';
275
+ }
276
+ if (Array.isArray(r.rules)) {
277
+ const slim = r.rules.map((rule) => ({
278
+ ...rule,
279
+ answers: rule.answers
280
+ ? Object.fromEntries(Object.entries(rule.answers).map(([n, a]) => [n, a.type === 'choice' ? { type: 'choice', atoms: a.atoms, band: a.band } : a]))
281
+ : null,
282
+ }));
283
+ const line = fits({ ...r, rules: slim });
284
+ if (line)
285
+ return line;
286
+ const bare = fits({ ...r, rules: slim.map((rule) => ({ ...rule, answers: null })) });
287
+ if (bare)
288
+ return bare;
289
+ }
290
+ // Nothing smaller is a record; the envelope alone always fits.
291
+ return JSON.stringify({ v: 1, event: record.event, at: record.at, truncated: true }) + '\n';
292
+ }
293
+ /** Appends one line to `dir/file` with a single write to a file opened for append, mode 0600 in a 0700 directory. */
294
+ function appendDecideLogLine(fs, dir, file, line) {
295
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
296
+ const fd = fs.openSync(`${dir}/${file}`, 'a', 0o600);
297
+ try {
298
+ fs.writeSync(fd, line);
299
+ }
300
+ finally {
301
+ fs.closeSync(fd);
302
+ }
303
+ }
304
+ /** The probability a question's answer is tracked by, or null when it has none. */
305
+ function decideTrackedP(rule, name, a) {
306
+ const q = rule.questions[name];
307
+ if (!q)
308
+ return null;
309
+ if (q.type === 'yes_no')
310
+ return typeof a.p === 'number' ? a.p : null;
311
+ const atoms = (0, decide_js_1.choiceAtoms)((0, decide_js_1.decideOptions)(q), a.perOrder ?? [], (0, decide_js_1.decideQuestionBand)(rule, name));
312
+ const ps = Object.values(atoms).map((c) => c.p);
313
+ return ps.length === 0 ? null : Math.max(...ps);
314
+ }
315
+ /** `stats` with `d` appended and only the last {@link DECIDE_STATS_KEEP} kept. */
316
+ function recordDecideStats(stats, ruleHash, d) {
317
+ const prior = stats && stats.ruleHash === ruleHash ? stats : { v: 1, ruleHash, decisions: [], lastDriftAtMs: null };
318
+ return { ...prior, decisions: [...prior.decisions, d].slice(-exports.DECIDE_STATS_KEEP) };
319
+ }
320
+ /** The median of a non-empty list. */
321
+ function median(xs) {
322
+ const s = [...xs].sort((a, b) => a - b);
323
+ const m = Math.floor(s.length / 2);
324
+ return s.length % 2 === 1 ? s[m] : (s[m - 1] + s[m]) / 2;
325
+ }
326
+ /**
327
+ * Whether the kept decisions have drifted from the eval run. Null below
328
+ * {@link DECIDE_DRIFT_MIN_DECISIONS}, inside {@link DECIDE_DRIFT_INTERVAL_MS}
329
+ * of the last drift, or when nothing moved. The escalation rate is checked
330
+ * first, then each question in name order.
331
+ */
332
+ function checkDecideDrift(stats, run, nowMs) {
333
+ const n = stats.decisions.length;
334
+ if (n < exports.DECIDE_DRIFT_MIN_DECISIONS)
335
+ return null;
336
+ if (stats.lastDriftAtMs !== null && nowMs - stats.lastDriftAtMs < exports.DECIDE_DRIFT_INTERVAL_MS)
337
+ return null;
338
+ const rate = stats.decisions.filter((d) => d.outcome === 'escalate').length / n;
339
+ if (Math.abs(rate - run.escalationRate) > exports.DECIDE_DRIFT_ESCALATION_DELTA) {
340
+ return { measure: 'escalation_rate', question: null, value: rate, expected: run.escalationRate, threshold: exports.DECIDE_DRIFT_ESCALATION_DELTA, n };
341
+ }
342
+ for (const name of Object.keys(run.questions).sort()) {
343
+ const range = run.questions[name];
344
+ const ps = stats.decisions.map((d) => d.p[name]).filter((p) => typeof p === 'number');
345
+ if (ps.length < exports.DECIDE_DRIFT_MIN_DECISIONS)
346
+ continue;
347
+ const m = median(ps);
348
+ if (m < range.p10 || m > range.p90)
349
+ return { measure: 'median_p', question: name, value: m, expected: [range.p10, range.p90], threshold: null, n: ps.length };
350
+ }
351
+ return null;
352
+ }
353
+ function statsOf(v, ruleHash) {
354
+ if (typeof v !== 'object' || v === null)
355
+ return null;
356
+ const s = v;
357
+ if (s.v !== 1 || s.ruleHash !== ruleHash || !Array.isArray(s.decisions))
358
+ return null;
359
+ const decisions = s.decisions.filter((d) => typeof d === 'object' && d !== null && typeof d.atMs === 'number' &&
360
+ ['allow', 'refuse', 'escalate'].includes(d.outcome) &&
361
+ typeof d.p === 'object' && d.p !== null);
362
+ return { v: 1, ruleHash, decisions, lastDriftAtMs: typeof s.lastDriftAtMs === 'number' ? s.lastDriftAtMs : null };
363
+ }
364
+ /** A rule's stats file, `dir/<ruleHash>.json`, replaced whole by a rename. A file that does not read is no stats. */
365
+ function readDecideStats(fs, dir, ruleHash) {
366
+ try {
367
+ return statsOf(JSON.parse(fs.readFileSync(`${dir}/${ruleHash}.json`, 'utf8')), ruleHash);
368
+ }
369
+ catch {
370
+ return null;
371
+ }
372
+ }
373
+ function writeDecideStats(fs, dir, stats) {
374
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
375
+ const tmp = `${dir}/${stats.ruleHash}.json.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`;
376
+ fs.writeFileSync(tmp, JSON.stringify(stats) + '\n', { mode: 0o600 });
377
+ fs.renameSync(tmp, `${dir}/${stats.ruleHash}.json`);
378
+ }
379
+ /**
380
+ * Writes one evaluated call: its `decide.decision` line, a `decide.canary_failed`,
381
+ * `decide.unavailable` or `decide.not_evaluated` line when one applies, then
382
+ * each answered rule's stats, and a `decide.drift` line for each rule that
383
+ * drifted from the eval run of the pin it ran under. Returns the drifts.
384
+ * Throws on a write error; a caller on the decision path catches it, because
385
+ * a log that cannot be written must not change the decision.
386
+ */
387
+ function writeDecideCallLog(evaluation, rules, ctx, deps) {
388
+ if (evaluation.rules.length === 0 && evaluation.skipped.length === 0 && evaluation.call.outcome === 'allow')
389
+ return [];
390
+ const file = decideLogFileName(ctx.atMs);
391
+ const append = (r) => appendDecideLogLine(deps.fs, deps.logsDir, file, decideLogLine(r));
392
+ const record = buildDecideDecisionRecord(evaluation, rules, ctx, deps.sha256Hex);
393
+ append(record);
394
+ const head = { atMs: ctx.atMs, harness: ctx.harness, workspaceId: ctx.workspaceId, sessionId: ctx.sessionId };
395
+ if (evaluation.canary === 'failed') {
396
+ append(buildDecideEventRecord('decide.canary_failed', head, { engineHost: ctx.engine.host, modelDigest: ctx.engine.digest }));
397
+ }
398
+ const unavailable = evaluation.rules.filter((r) => r.outcome === 'unavailable');
399
+ if (unavailable.length > 0) {
400
+ append(buildDecideEventRecord('decide.unavailable', head, { tool: ctx.tool, rules: unavailable.map((r) => ({ ref: r.ref, effective: r.effective, error: r.error })) }));
401
+ }
402
+ const notEvaluated = evaluation.rules.filter((r) => r.why === 'not_evaluated');
403
+ if (notEvaluated.length > 0) {
404
+ append(buildDecideEventRecord('decide.not_evaluated', head, { modelDigest: ctx.engine.digest, rules: notEvaluated.map((r) => ({ ref: r.ref, ruleHash: r.ruleHash })) }));
405
+ }
406
+ const drifts = [];
407
+ const byRef = new Map(rules.map((r) => [r.ref, r]));
408
+ for (const rep of evaluation.rules) {
409
+ const entry = byRef.get(rep.ref);
410
+ if (!entry || !rep.answers || rep.outcome === 'unavailable')
411
+ continue;
412
+ const v = (0, decide_js_1.validateDecideRule)(entry.ir);
413
+ if (!v.ok)
414
+ continue;
415
+ const p = {};
416
+ for (const [name, a] of Object.entries(rep.answers)) {
417
+ const x = decideTrackedP(v.rule, name, a);
418
+ if (x !== null)
419
+ p[name] = x;
420
+ }
421
+ let stats = recordDecideStats(readDecideStats(deps.fs, deps.statsDir, rep.ruleHash), rep.ruleHash, { atMs: ctx.atMs, outcome: rep.outcome, p });
422
+ const pin = entry.pins.find((x) => x.modelDigest === rep.modelDigest);
423
+ const run = pin ? deps.evalRun(rep.ruleHash, pin.evalRunId) : null;
424
+ const drift = run ? checkDecideDrift(stats, run, ctx.atMs) : null;
425
+ if (drift) {
426
+ stats = { ...stats, lastDriftAtMs: ctx.atMs };
427
+ drifts.push(drift);
428
+ append(buildDecideEventRecord('decide.drift', head, { ruleRef: rep.ref, ruleHash: rep.ruleHash, modelDigest: rep.modelDigest, evalRunId: pin.evalRunId, ...drift }));
429
+ }
430
+ writeDecideStats(deps.fs, deps.statsDir, stats);
431
+ }
432
+ return drifts;
433
+ }
434
+ // ---------------------------------------------------------------------------
435
+ // Where a gate writes it
436
+ // ---------------------------------------------------------------------------
437
+ /** `host:port` of an engine URL, as the log records it; never its path, query or credentials. */
438
+ function decideEngineHost(url) {
439
+ try {
440
+ const u = new URL(url);
441
+ return u.port ? `${u.hostname}:${u.port}` : u.hostname;
442
+ }
443
+ catch {
444
+ return '';
445
+ }
446
+ }
447
+ /**
448
+ * The engine as a call's record names it: the configured adapter, host and
449
+ * model (`cfg` is null when the engine is not configured), and the model,
450
+ * digest and canary the evaluation reported.
451
+ */
452
+ function decideLogEngine(cfg, evaluation) {
453
+ return {
454
+ adapter: cfg?.adapter ?? '',
455
+ host: cfg ? decideEngineHost(cfg.url) : '',
456
+ model: evaluation.engine?.model ?? cfg?.model ?? null,
457
+ digest: evaluation.engine?.modelDigest ?? null,
458
+ digestStrength: evaluation.engine?.digestStrength ?? null,
459
+ canary: evaluation.canary,
460
+ };
461
+ }
462
+ /**
463
+ * The drift baseline of the eval run `intutic decide eval` stored at
464
+ * `decideDir/evals/<ruleHash>/runs/<evalRunId>.json`, or null when there is
465
+ * none, it does not read, or either name is not a plain file name.
466
+ */
467
+ function readDecideEvalRunBaseline(fs, decideDir, ruleHash, evalRunId) {
468
+ if (!/^[0-9a-f]+$/.test(ruleHash) || !/^[A-Za-z0-9_-][A-Za-z0-9._-]*$/.test(evalRunId))
469
+ return null;
470
+ try {
471
+ const run = JSON.parse(fs.readFileSync(`${decideDir}/evals/${ruleHash}/runs/${evalRunId}.json`, 'utf8'));
472
+ const b = run?.baseline;
473
+ if (!b || typeof b.escalationRate !== 'number' || typeof b.questions !== 'object' || b.questions === null)
474
+ return null;
475
+ return b;
476
+ }
477
+ catch {
478
+ return null;
479
+ }
480
+ }
481
+ /**
482
+ * Where a gate writes the decide log and its drift stats under the home
483
+ * directory `home`, as `intutic decide check` does: `~/.intutic/logs`,
484
+ * `~/.intutic/decide/stats`, and the eval runs `decide eval` stored under
485
+ * `~/.intutic/decide/evals`.
486
+ */
487
+ function decideLogDeps(fs, home, sha256Hex) {
488
+ const intutic = `${home}/.intutic`;
489
+ return {
490
+ fs,
491
+ logsDir: `${intutic}/logs`,
492
+ statsDir: `${intutic}/decide/stats`,
493
+ sha256Hex,
494
+ evalRun: (ruleHash, evalRunId) => readDecideEvalRunBaseline(fs, `${intutic}/decide`, ruleHash, evalRunId),
495
+ };
496
+ }
497
+ // ---------------------------------------------------------------------------
498
+ // As source
499
+ // ---------------------------------------------------------------------------
500
+ /**
501
+ * This module as JavaScript source, for the hook gates to embed: every
502
+ * constant and every function above. The embedding scope supplies what it
503
+ * imports from `decide.ts` (`bandValue`, `choiceAtoms`, `decideOptions`,
504
+ * `decideQuestionBand`, `parseWhen`, `validateDecideRule`) and
505
+ * `decideEngine.ts` (`buildDecideToolCallState`, `decideCanonicalJson`). A
506
+ * test holds the list to the functions this file declares.
507
+ */
508
+ exports.DECIDE_LOG_JS_SOURCE = (0, decideEngine_js_1.decideModuleSource)([
509
+ `const DECIDE_LOG_LINE_MAX_BYTES = ${exports.DECIDE_LOG_LINE_MAX_BYTES};`,
510
+ `const DECIDE_ARGS_EXCERPT_MAX_BYTES = ${exports.DECIDE_ARGS_EXCERPT_MAX_BYTES};`,
511
+ `const DECIDE_LOG_RETENTION_DAYS = ${exports.DECIDE_LOG_RETENTION_DAYS};`,
512
+ `const DECIDE_STATS_KEEP = ${exports.DECIDE_STATS_KEEP};`,
513
+ `const DECIDE_DRIFT_MIN_DECISIONS = ${exports.DECIDE_DRIFT_MIN_DECISIONS};`,
514
+ `const DECIDE_DRIFT_ESCALATION_DELTA = ${exports.DECIDE_DRIFT_ESCALATION_DELTA};`,
515
+ `const DECIDE_DRIFT_INTERVAL_MS = ${exports.DECIDE_DRIFT_INTERVAL_MS};`,
516
+ `const DECIDE_REDACTED = ${JSON.stringify(exports.DECIDE_REDACTED)};`,
517
+ decideLogFileName,
518
+ decideLogFileDate,
519
+ utf8Length,
520
+ decideUtf8Prefix,
521
+ decideRedact,
522
+ decideArgsExcerpt,
523
+ eqAtoms,
524
+ logAnswer,
525
+ whenValue,
526
+ buildDecideDecisionRecord,
527
+ buildDecideEventRecord,
528
+ decideLogLine,
529
+ appendDecideLogLine,
530
+ decideTrackedP,
531
+ recordDecideStats,
532
+ median,
533
+ checkDecideDrift,
534
+ statsOf,
535
+ readDecideStats,
536
+ writeDecideStats,
537
+ writeDecideCallLog,
538
+ decideEngineHost,
539
+ decideLogEngine,
540
+ readDecideEvalRunBaseline,
541
+ decideLogDeps,
542
+ ]);
543
+ //# sourceMappingURL=decideLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLog.js","sourceRoot":"","sources":["../src/decideLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The patterns a decide log's arguments excerpt is redacted with: the
3
+ * gate's credential-value patterns (`secretPatterns.ts`) and the PII
4
+ * detectors' regexes (`piiDetectors.json`), applied without the detectors'
5
+ * validators, so a stored excerpt loses more than live traffic would, never
6
+ * less. Kept apart from `decideLog.ts`, which the gate SDK copies byte for
7
+ * byte; `fixtures/decide-log-vectors.json` pins the list for the Python port.
8
+ *
9
+ * @module
10
+ */
11
+ export declare function decideLogRedactionSources(): string[];
12
+ //# sourceMappingURL=decideLogRedaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLogRedaction.d.ts","sourceRoot":"","sources":["../src/decideLogRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * The patterns a decide log's arguments excerpt is redacted with: the
4
+ * gate's credential-value patterns (`secretPatterns.ts`) and the PII
5
+ * detectors' regexes (`piiDetectors.json`), applied without the detectors'
6
+ * validators, so a stored excerpt loses more than live traffic would, never
7
+ * less. Kept apart from `decideLog.ts`, which the gate SDK copies byte for
8
+ * byte; `fixtures/decide-log-vectors.json` pins the list for the Python port.
9
+ *
10
+ * @module
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.decideLogRedactionSources = decideLogRedactionSources;
14
+ const piiDetectors_js_1 = require("./piiDetectors.js");
15
+ const secretPatterns_js_1 = require("./secretPatterns.js");
16
+ function decideLogRedactionSources() {
17
+ return [...secretPatterns_js_1.SECRET_VALUE_PATTERNS.map((p) => p.source), ...piiDetectors_js_1.PII_DEFINITION.detectors.map((d) => d.regex)];
18
+ }
19
+ //# sourceMappingURL=decideLogRedaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLogRedaction.js","sourceRoot":"","sources":["../src/decideLogRedaction.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAKH,8DAEC;AALD,uDAAkD;AAClD,2DAA2D;AAE3D,SAAgB,yBAAyB;IACvC,OAAO,CAAC,GAAG,yCAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,gCAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AACzG,CAAC"}