greprag 5.44.3 → 5.46.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 (64) hide show
  1. package/dist/commands/collision-check.d.ts +113 -0
  2. package/dist/commands/collision-check.js +266 -0
  3. package/dist/commands/collision-check.js.map +1 -0
  4. package/dist/commands/coordinate-gate.d.ts +73 -0
  5. package/dist/commands/coordinate-gate.js +108 -0
  6. package/dist/commands/coordinate-gate.js.map +1 -0
  7. package/dist/commands/corpus/refresh.js +1 -1
  8. package/dist/commands/corpus/refresh.js.map +1 -1
  9. package/dist/commands/email.js +20 -2
  10. package/dist/commands/email.js.map +1 -1
  11. package/dist/commands/fix.d.ts +20 -2
  12. package/dist/commands/fix.js +21 -4
  13. package/dist/commands/fix.js.map +1 -1
  14. package/dist/commands/inbox-drain.d.ts +49 -0
  15. package/dist/commands/inbox-drain.js +163 -0
  16. package/dist/commands/inbox-drain.js.map +1 -0
  17. package/dist/commands/inbox-poll.d.ts +47 -0
  18. package/dist/commands/inbox-poll.js +261 -0
  19. package/dist/commands/inbox-poll.js.map +1 -0
  20. package/dist/commands/inbox-watch.js +3 -0
  21. package/dist/commands/inbox-watch.js.map +1 -1
  22. package/dist/commands/ingress-trigger.d.ts +67 -0
  23. package/dist/commands/ingress-trigger.js +103 -0
  24. package/dist/commands/ingress-trigger.js.map +1 -0
  25. package/dist/commands/init.js +41 -0
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/mechanic.d.ts +18 -0
  28. package/dist/commands/mechanic.js +77 -9
  29. package/dist/commands/mechanic.js.map +1 -1
  30. package/dist/commands/memory-format.d.ts +11 -2
  31. package/dist/commands/memory-format.js +22 -8
  32. package/dist/commands/memory-format.js.map +1 -1
  33. package/dist/commands/memory.d.ts +44 -0
  34. package/dist/commands/memory.js +73 -9
  35. package/dist/commands/memory.js.map +1 -1
  36. package/dist/commands/poll-registry.d.ts +13 -0
  37. package/dist/commands/poll-registry.js +94 -0
  38. package/dist/commands/poll-registry.js.map +1 -0
  39. package/dist/commands/state-trigger.d.ts +66 -0
  40. package/dist/commands/state-trigger.js +305 -0
  41. package/dist/commands/state-trigger.js.map +1 -0
  42. package/dist/fix-trigger.d.ts +25 -5
  43. package/dist/fix-trigger.js +35 -11
  44. package/dist/fix-trigger.js.map +1 -1
  45. package/dist/guard.d.ts +13 -0
  46. package/dist/guard.js +58 -3
  47. package/dist/guard.js.map +1 -1
  48. package/dist/hook.js +188 -1
  49. package/dist/hook.js.map +1 -1
  50. package/dist/inbox-attachments.d.ts +37 -0
  51. package/dist/inbox-attachments.js +64 -0
  52. package/dist/inbox-attachments.js.map +1 -0
  53. package/dist/index.js +15 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/session-id.d.ts +12 -0
  56. package/dist/session-id.js +17 -0
  57. package/dist/session-id.js.map +1 -1
  58. package/dist/worktree-state.d.ts +14 -0
  59. package/dist/worktree-state.js +61 -0
  60. package/dist/worktree-state.js.map +1 -0
  61. package/package.json +1 -1
  62. package/skill/greprag/SKILL.md +4 -0
  63. package/skill/mechanic/SKILL.md +22 -10
  64. package/skill/templates/chip-spawn.md +1 -1
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /** state-trigger — Adapter A of the ingress-trigger bridge (the LOCAL half).
3
+ *
4
+ * A Stop / UserPromptSubmit hook computes the cheap DETERMINISTIC state values
5
+ * (stress level, turn count, keyword-seen) from the transcript — NO LLM, NO
6
+ * network — and stashes them in the matchset cache under `stateValues` (see
7
+ * guard.writeStateValues). A `source:"state"` condition clause then reads them on
8
+ * the PreToolUse hot path in microseconds, still local, still fail-open. This is
9
+ * what lets stress migrate from an offline-only backtest signal to a registered,
10
+ * live-firing matchset rule. docs/ingress-trigger-bridge.md, docs/stress-trigger.md
11
+ *
12
+ * STRESS PORT: a faithful TypeScript port of scripts/stress-tune2.py's windowed
13
+ * behavioral composite (the validated winner — AUC 0.835 full / 0.794
14
+ * behavioral-only on 1,069 real turns). Features rep / retry / seqrep / err /
15
+ * churn are streamed over the trailing window exactly as the Python maintains its
16
+ * deques, and the FINAL turn's vector is the live stress reading. Weights +
17
+ * level thresholds are PINNED from that backtest and re-tunable via the script;
18
+ * this module never re-derives them. docs/stress-trigger.md
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.STRESS_HIGH = exports.STRESS_ELEVATED = exports.STRESS_CALM = void 0;
55
+ exports.parseTurns = parseTurns;
56
+ exports.computeStress = computeStress;
57
+ exports.scanKeywords = scanKeywords;
58
+ exports.computeStateValues = computeStateValues;
59
+ const fs = __importStar(require("fs"));
60
+ /** Stress level enum, encoded numerically so the `state` DSL can threshold it
61
+ * with gte/lte (0 calm · 1 elevated · 2 high). */
62
+ exports.STRESS_CALM = 0;
63
+ exports.STRESS_ELEVATED = 1;
64
+ exports.STRESS_HIGH = 2;
65
+ /** PINNED weight vector (rep, retry, seqrep, err, churn), from the stress-tune2
66
+ * backtest narrative: same-TARGET repetition (rep) + errors (err) are the sharp
67
+ * signals; churn + retry corroborate. seqrep (tool-NAME trigram repetition) is
68
+ * deliberately the WEAKEST — it saturates on any sustained tool use (six Reads in
69
+ * a row repeats the (Read,Read,Read) trigram), so a heavy weight would flag
70
+ * ordinary work as stress. Re-tune via scripts/stress-tune2.py, never inline. */
71
+ const STRESS_WEIGHTS = { rep: 0.75, retry: 0.5, seqrep: 0.25, err: 0.75, churn: 0.5 };
72
+ /** PINNED level thresholds on the composite score: tuned so seqrep ALONE (≈0.25)
73
+ * can't reach elevated — it takes real repetition/errors/churn. Same provenance. */
74
+ const STRESS_ELEVATED_AT = 0.6;
75
+ const STRESS_HIGH_AT = 1.1;
76
+ const WINDOW = 4; // recent-turn window (W in stress-tune2.py)
77
+ const SEEN_MAX = 12;
78
+ const NAMESEQ_MAX = 9;
79
+ const TRIGRAM_MAX = 20;
80
+ const ERROR_RE = /\b(error|failed|exception|traceback|exit code [1-9]|not found|no such)\b/i;
81
+ // ---------- Transcript → turns ----------------------------------------------
82
+ function blocks(rec) {
83
+ const msg = (rec.message || {});
84
+ const c = msg.content;
85
+ if (Array.isArray(c))
86
+ return c;
87
+ if (typeof c === 'string')
88
+ return [{ type: 'text', text: c }];
89
+ return [];
90
+ }
91
+ function isRealUser(rec) {
92
+ if (rec.type !== 'user')
93
+ return false;
94
+ for (const b of blocks(rec)) {
95
+ if (b && b.type === 'tool_result')
96
+ return false;
97
+ }
98
+ return true;
99
+ }
100
+ function toolTargetKey(b) {
101
+ const name = b.name || '';
102
+ const inp = (b.input || {});
103
+ let key = (inp.command ?? inp.file_path ?? inp.pattern ?? inp.path);
104
+ if (typeof key !== 'string') {
105
+ try {
106
+ key = JSON.stringify(inp).slice(0, 120);
107
+ }
108
+ catch {
109
+ key = '';
110
+ }
111
+ }
112
+ return `${name}:${key}`;
113
+ }
114
+ function resultIsError(b) {
115
+ if (b.is_error === true)
116
+ return true;
117
+ const c = b.content;
118
+ let txt = '';
119
+ if (typeof c === 'string')
120
+ txt = c;
121
+ else if (c) {
122
+ try {
123
+ txt = JSON.stringify(c);
124
+ }
125
+ catch {
126
+ txt = '';
127
+ }
128
+ }
129
+ return ERROR_RE.test(txt);
130
+ }
131
+ /** Parse the transcript into per-turn summaries. Returns the TRAILING `maxTurns`
132
+ * turns (enough for every short-memory deque) plus the total real-user turn
133
+ * count. Bounded memory: older turns are dropped as they fall out of the window.
134
+ * Best-effort: a missing/corrupt transcript → empty. */
135
+ function parseTurns(transcriptPath, maxTurns = 40) {
136
+ if (!transcriptPath)
137
+ return { turns: [], totalTurns: 0 };
138
+ let lines;
139
+ try {
140
+ lines = fs.readFileSync(transcriptPath, 'utf-8').split('\n');
141
+ }
142
+ catch {
143
+ return { turns: [], totalTurns: 0 };
144
+ }
145
+ const turns = [];
146
+ let total = 0;
147
+ let cur = null;
148
+ const flush = () => {
149
+ if (cur) {
150
+ turns.push(cur);
151
+ if (turns.length > maxTurns)
152
+ turns.shift();
153
+ }
154
+ cur = null;
155
+ };
156
+ for (const line of lines) {
157
+ const trimmed = line.trim();
158
+ if (!trimmed)
159
+ continue;
160
+ let rec;
161
+ try {
162
+ rec = JSON.parse(trimmed);
163
+ }
164
+ catch {
165
+ continue;
166
+ }
167
+ if (isRealUser(rec)) {
168
+ flush();
169
+ total++;
170
+ cur = { proseWords: 0, toolTargets: [], errors: 0, nTools: 0, writes: [] };
171
+ continue;
172
+ }
173
+ if (!cur)
174
+ continue; // pre-first-prompt noise
175
+ if (rec.type === 'assistant') {
176
+ for (const b of blocks(rec)) {
177
+ if (!b)
178
+ continue;
179
+ if (b.type === 'text') {
180
+ cur.proseWords += String(b.text || '').split(/\s+/).filter(Boolean).length;
181
+ }
182
+ else if (b.type === 'tool_use') {
183
+ cur.nTools++;
184
+ cur.toolTargets.push(toolTargetKey(b));
185
+ if (b.name === 'Edit' || b.name === 'Write') {
186
+ const fp = (b.input || {}).file_path;
187
+ if (typeof fp === 'string' && fp)
188
+ cur.writes.push(fp);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ else if (rec.type === 'user') { // tool_result records
194
+ for (const b of blocks(rec)) {
195
+ if (b && b.type === 'tool_result' && resultIsError(b))
196
+ cur.errors++;
197
+ }
198
+ }
199
+ }
200
+ flush();
201
+ return { turns, totalTurns: total };
202
+ }
203
+ /** Stream the windowed behavioral features over the turns and score the FINAL
204
+ * one — the live stress reading. Faithful port of stress-tune2.py
205
+ * features_and_labels (rep / retry / seqrep / err / churn), scored with the
206
+ * pinned weight vector and mapped to a 0/1/2 level. Pure. */
207
+ function computeStress(turns) {
208
+ if (turns.length === 0)
209
+ return { score: 0, level: exports.STRESS_CALM };
210
+ const seen = [];
211
+ const recent = [];
212
+ const nameSeq = [];
213
+ const trigrams = [];
214
+ let prevTargets = new Set();
215
+ let last = { rep: 0, retry: 0, seqrep: 0, err: 0, churn: 0 };
216
+ const pushCap = (arr, v, cap) => {
217
+ arr.push(v);
218
+ if (arr.length > cap)
219
+ arr.shift();
220
+ };
221
+ for (const t of turns) {
222
+ recent.push(t);
223
+ if (recent.length > WINDOW)
224
+ recent.shift();
225
+ const tools = recent.reduce((s, x) => s + x.nTools, 0);
226
+ const errs = recent.reduce((s, x) => s + x.errors, 0);
227
+ const curTargets = new Set(t.toolTargets);
228
+ const rep = t.toolTargets.length
229
+ ? t.toolTargets.filter(tg => seen.includes(tg)).length / t.toolTargets.length : 0;
230
+ let retry = 0;
231
+ for (const tg of curTargets) {
232
+ if (prevTargets.has(tg)) {
233
+ retry = 1;
234
+ break;
235
+ }
236
+ }
237
+ for (const tg of t.toolTargets)
238
+ pushCap(seen, tg, SEEN_MAX);
239
+ let hits = 0, tot = 0;
240
+ for (const tg of t.toolTargets) {
241
+ const nm = tg.split(':', 1)[0];
242
+ pushCap(nameSeq, nm, NAMESEQ_MAX);
243
+ if (nameSeq.length >= 3) {
244
+ const tri = nameSeq.slice(-3).join('');
245
+ tot++;
246
+ if (trigrams.includes(tri))
247
+ hits++;
248
+ pushCap(trigrams, tri, TRIGRAM_MAX);
249
+ }
250
+ }
251
+ const seqrep = tot ? hits / tot : 0;
252
+ const err = tools ? errs / tools : 0;
253
+ const wcount = new Map();
254
+ for (const x of recent) {
255
+ for (const fp of new Set(x.writes))
256
+ wcount.set(fp, (wcount.get(fp) || 0) + 1);
257
+ }
258
+ let churn = 0;
259
+ for (const v of wcount.values()) {
260
+ if (v >= 3) {
261
+ churn = 1;
262
+ break;
263
+ }
264
+ }
265
+ last = { rep, retry, seqrep, err, churn };
266
+ prevTargets = curTargets;
267
+ }
268
+ const score = STRESS_WEIGHTS.rep * last.rep + STRESS_WEIGHTS.retry * last.retry +
269
+ STRESS_WEIGHTS.seqrep * last.seqrep + STRESS_WEIGHTS.err * last.err +
270
+ STRESS_WEIGHTS.churn * last.churn;
271
+ const level = score >= STRESS_HIGH_AT ? exports.STRESS_HIGH
272
+ : score >= STRESS_ELEVATED_AT ? exports.STRESS_ELEVATED : exports.STRESS_CALM;
273
+ return { score: Math.round(score * 1000) / 1000, level };
274
+ }
275
+ // ---------- Keyword scan -----------------------------------------------------
276
+ /** Scan the most recent user prompt for each watched keyword (case-insensitive
277
+ * substring), returning `keyword:<term>` → true for every hit. The Stop hook
278
+ * collects the watched terms from the cached rules so this stays driven by the
279
+ * matchset, never a hardcoded list. Pure. */
280
+ function scanKeywords(latestPrompt, keywords) {
281
+ const out = {};
282
+ const hay = (latestPrompt || '').toLowerCase();
283
+ for (const kw of keywords) {
284
+ if (!kw)
285
+ continue;
286
+ out[`keyword:${kw}`] = hay.includes(kw.toLowerCase());
287
+ }
288
+ return out;
289
+ }
290
+ /** Compute the full stateValues bag for one Stop/UserPromptSubmit fire. Pure
291
+ * given the transcript contents; never throws (parse failures → calm/zero). */
292
+ function computeStateValues(transcriptPath, opts = {}) {
293
+ const { turns, totalTurns } = parseTurns(transcriptPath, opts.maxTurns ?? 40);
294
+ const stress = computeStress(turns);
295
+ const values = {
296
+ stress: stress.level,
297
+ stressScore: stress.score,
298
+ turnCount: totalTurns,
299
+ };
300
+ if (opts.keywords && opts.keywords.length) {
301
+ Object.assign(values, scanKeywords(opts.latestPrompt || '', opts.keywords));
302
+ }
303
+ return values;
304
+ }
305
+ //# sourceMappingURL=state-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-trigger.js","sourceRoot":"","sources":["../../src/commands/state-trigger.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EH,gCAsDC;AAUD,sCA0DC;AAQD,oCAQC;AAgBD,gDAcC;AArPD,uCAAyB;AAYzB;mDACmD;AACtC,QAAA,WAAW,GAAG,CAAC,CAAC;AAChB,QAAA,eAAe,GAAG,CAAC,CAAC;AACpB,QAAA,WAAW,GAAG,CAAC,CAAC;AAE7B;;;;;kFAKkF;AAClF,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtF;qFACqF;AACrF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,4CAA4C;AAC9D,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,QAAQ,GAAG,2EAA2E,CAAC;AAE7F,+EAA+E;AAE/E,SAAS,MAAM,CAAC,GAA4B;IAC1C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAC3D,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAmC,CAAC;IACjE,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,GAA4B;IAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAA0B;IAC/C,MAAM,IAAI,GAAI,CAAC,CAAC,IAAe,IAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;IACvD,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAuB,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,GAAG,EAAE,CAAC;QAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,CAA0B;IAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACpB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,GAAG,GAAG,CAAC,CAAC;SAC9B,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,GAAG,EAAE,CAAC;QAAC,CAAC;IAAC,CAAC;IACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;yDAGyD;AACzD,SAAgB,UAAU,CACxB,cAAkC,EAAE,QAAQ,GAAG,EAAE;IAEjD,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACzD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACrE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAAC,CAAC;IAE9C,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAuB,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7C,CAAC;QACD,GAAG,GAAG,IAAI,CAAC;IACb,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAEtD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,GAAG,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,SAAS,CAAC,yBAAyB;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACtB,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC7E,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACjC,GAAG,CAAC,MAAM,EAAE,CAAC;oBACb,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC5C,MAAM,EAAE,GAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAA6B,CAAC,SAAS,CAAC;wBAClE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE;4BAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,sBAAsB;YACtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AAMD;;;8DAG8D;AAC9D,SAAgB,aAAa,CAAC,KAAoB;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAW,EAAE,CAAC;IAEhE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAE7D,MAAM,OAAO,GAAG,CAAC,GAAa,EAAE,CAAS,EAAE,GAAW,EAAQ,EAAE;QAC9D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM;YAC9B,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;QAAC,CAAC;QAC/E,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxC,GAAG,EAAE,CAAC;gBACN,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;QAAC,CAAC;QAEtE,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC1C,WAAW,GAAG,UAAU,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GACT,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QACjE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;QACnE,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,mBAAW;QACjD,CAAC,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC,CAAC,uBAAe,CAAC,CAAC,CAAC,mBAAW,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,gFAAgF;AAEhF;;;8CAG8C;AAC9C,SAAgB,YAAY,CAAC,YAAoB,EAAE,QAAkB;IACnE,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAcD;gFACgF;AAChF,SAAgB,kBAAkB,CAChC,cAAkC,EAAE,OAA2B,EAAE;IAEjE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAA4B;QACtC,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,SAAS,EAAE,UAAU;KACtB,CAAC;IACF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -11,8 +11,15 @@
11
11
  * docs/mechanic-repairs.md D3/D5/D8; contracts: docs/mechanic-engine-contracts.md.
12
12
  */
13
13
  export interface FixFieldClause {
14
- /** Key into the event's tool_input `command` for Bash, `file_path` for
15
- * Write/Edit, `url` for WebFetch. Dot-paths reach nested fields. */
14
+ /** Which source bag `field` looks up in. Default `tool_input` (the PreToolUse
15
+ * event) keeps every legacy clause byte-for-byte unchanged. `state` reads the
16
+ * precomputed `stateValues` bag (stress / turn-count / keyword-seen) the
17
+ * Stop/UserPromptSubmit hook stashed — STILL local, no hot-path network read
18
+ * (the ingress-trigger bridge's load-bearing split). docs/ingress-trigger-bridge.md */
19
+ source?: 'tool_input' | 'state';
20
+ /** Key into the selected source bag — `command` for Bash, `file_path` for
21
+ * Write/Edit, `url` for WebFetch; `stress`/`turnCount` for a `state` clause.
22
+ * Dot-paths reach nested fields. */
16
23
  field: string;
17
24
  op: string;
18
25
  value?: unknown;
@@ -26,8 +33,16 @@ export type FixCondition = true | FixFieldClause | {
26
33
  } | {
27
34
  not: FixCondition;
28
35
  };
29
- /** The closed operator set. */
30
- export declare const FIX_TRIGGER_OPS: readonly ["contains", "not_contains", "equals", "regex", "path_under", "path_equals", "starts_with", "gt", "lt"];
36
+ /** The closed operator set. `gte`/`lte` are the inclusive numeric pair (added
37
+ * for `state` thresholds like stress level >= elevated, encoded numerically). */
38
+ export declare const FIX_TRIGGER_OPS: readonly ["contains", "not_contains", "equals", "regex", "path_under", "path_equals", "starts_with", "gt", "lt", "gte", "lte"];
39
+ /** A bag of named sources a condition can read. `tool_input` is always present
40
+ * (the PreToolUse event); `state` carries the precomputed stateValues when the
41
+ * caller has them. Absent bag → clauses against it read undefined → false. */
42
+ export interface EvalSources {
43
+ tool_input: Record<string, unknown>;
44
+ state?: Record<string, unknown>;
45
+ }
31
46
  export type TriggerLogger = (msg: string, detail?: Record<string, unknown>) => void;
32
47
  /** Normalize a path to lowercase forward-slash segments with '.'/'..' resolved
33
48
  * (no fs access — pure string work). Drive letters keep their colon segment. */
@@ -35,8 +50,13 @@ export declare function normalizePathSegments(p: string): string[];
35
50
  /** Compile a regex under the safety rails; null when rejected. */
36
51
  export declare function compileSafeRegex(pattern: string, flags: string | undefined, log?: TriggerLogger): RegExp | null;
37
52
  /** Evaluate a condition against one event's tool_input. Pure, never throws:
38
- * every malformed shape evaluates false (and logs via the optional logger). */
53
+ * every malformed shape evaluates false (and logs via the optional logger).
54
+ * Back-compat: a clause with no `source` reads tool_input, exactly as before. */
39
55
  export declare function evaluateCondition(condition: unknown, toolInput: Record<string, unknown>, log?: TriggerLogger, depth?: number): boolean;
56
+ /** Multi-source evaluation — the entry the dispatcher uses once it has the
57
+ * precomputed `state` bag, so a `source:"state"` clause can read it. Identical
58
+ * semantics to evaluateCondition for any clause that omits `source`. Pure. */
59
+ export declare function evaluateConditionMulti(condition: unknown, sources: EvalSources, log?: TriggerLogger, depth?: number): boolean;
40
60
  /** Authoring-time validation: is this a well-formed condition the interpreter
41
61
  * will honor? Returns the list of problems (empty = valid). Used server-side
42
62
  * before a repair row is stored, so a row can't be born unevaluable. */
@@ -16,11 +16,13 @@ exports.FIX_TRIGGER_OPS = void 0;
16
16
  exports.normalizePathSegments = normalizePathSegments;
17
17
  exports.compileSafeRegex = compileSafeRegex;
18
18
  exports.evaluateCondition = evaluateCondition;
19
+ exports.evaluateConditionMulti = evaluateConditionMulti;
19
20
  exports.validateCondition = validateCondition;
20
- /** The closed operator set. */
21
+ /** The closed operator set. `gte`/`lte` are the inclusive numeric pair (added
22
+ * for `state` thresholds like stress level >= elevated, encoded numerically). */
21
23
  exports.FIX_TRIGGER_OPS = [
22
24
  'contains', 'not_contains', 'equals', 'regex',
23
- 'path_under', 'path_equals', 'starts_with', 'gt', 'lt',
25
+ 'path_under', 'path_equals', 'starts_with', 'gt', 'lt', 'gte', 'lte',
24
26
  ];
25
27
  const MAX_DEPTH = 16;
26
28
  const MAX_REGEX_LENGTH = 200;
@@ -158,12 +160,20 @@ function evalClause(clause, input, log) {
158
160
  return normalizePathSegments(s).join('/') === normalizePathSegments(v).join('/');
159
161
  }
160
162
  case 'gt':
161
- case 'lt': {
163
+ case 'lt':
164
+ case 'gte':
165
+ case 'lte': {
162
166
  const n = typeof raw === 'number' ? raw : Number(asString(raw));
163
167
  const v = typeof clause.value === 'number' ? clause.value : Number(asString(clause.value));
164
168
  if (!Number.isFinite(n) || !Number.isFinite(v))
165
169
  return false;
166
- return clause.op === 'gt' ? n > v : n < v;
170
+ if (clause.op === 'gt')
171
+ return n > v;
172
+ if (clause.op === 'lt')
173
+ return n < v;
174
+ if (clause.op === 'gte')
175
+ return n >= v;
176
+ return n <= v;
167
177
  }
168
178
  default:
169
179
  log?.('fix-trigger: unknown operator (clause = false)', { op: clause.op });
@@ -173,7 +183,7 @@ function evalClause(clause, input, log) {
173
183
  /** Tri-state inner walk: `invalid` means "malformed/over-deep — never fire".
174
184
  * Invalid must NOT be inverted by `not` (a broken subtree can't become a
175
185
  * reason to fire), so it propagates as invalid through every combinator. */
176
- function evalNode(condition, toolInput, log, depth) {
186
+ function evalNode(condition, sources, log, depth) {
177
187
  if (condition === true)
178
188
  return true;
179
189
  if (depth > MAX_DEPTH) {
@@ -190,7 +200,7 @@ function evalNode(condition, toolInput, log, depth) {
190
200
  return false;
191
201
  let result = true;
192
202
  for (const sub of c.all) {
193
- const r = evalNode(sub, toolInput, log, depth + 1);
203
+ const r = evalNode(sub, sources, log, depth + 1);
194
204
  if (r === 'invalid')
195
205
  return 'invalid';
196
206
  result = result && r;
@@ -200,7 +210,7 @@ function evalNode(condition, toolInput, log, depth) {
200
210
  if (Array.isArray(c.any)) {
201
211
  let sawInvalid = false;
202
212
  for (const sub of c.any) {
203
- const r = evalNode(sub, toolInput, log, depth + 1);
213
+ const r = evalNode(sub, sources, log, depth + 1);
204
214
  if (r === 'invalid') {
205
215
  sawInvalid = true;
206
216
  continue;
@@ -211,19 +221,30 @@ function evalNode(condition, toolInput, log, depth) {
211
221
  return sawInvalid ? 'invalid' : false;
212
222
  }
213
223
  if ('not' in c) {
214
- const r = evalNode(c.not, toolInput, log, depth + 1);
224
+ const r = evalNode(c.not, sources, log, depth + 1);
215
225
  return r === 'invalid' ? 'invalid' : !r;
216
226
  }
217
227
  if (typeof c.field === 'string' && typeof c.op === 'string') {
218
- return evalClause(c, toolInput, log);
228
+ // Source selection: a `state` clause reads the precomputed stateValues bag,
229
+ // everything else (the default) reads the tool_input event. An absent bag
230
+ // yields an empty record → the clause's field is undefined → false (fail-safe).
231
+ const src = c.source === 'state' ? (sources.state || {}) : sources.tool_input;
232
+ return evalClause(c, src, log);
219
233
  }
220
234
  log?.('fix-trigger: unrecognized condition shape (= false)');
221
235
  return 'invalid';
222
236
  }
223
237
  /** Evaluate a condition against one event's tool_input. Pure, never throws:
224
- * every malformed shape evaluates false (and logs via the optional logger). */
238
+ * every malformed shape evaluates false (and logs via the optional logger).
239
+ * Back-compat: a clause with no `source` reads tool_input, exactly as before. */
225
240
  function evaluateCondition(condition, toolInput, log, depth = 0) {
226
- return evalNode(condition, toolInput, log, depth) === true;
241
+ return evalNode(condition, { tool_input: toolInput }, log, depth) === true;
242
+ }
243
+ /** Multi-source evaluation — the entry the dispatcher uses once it has the
244
+ * precomputed `state` bag, so a `source:"state"` clause can read it. Identical
245
+ * semantics to evaluateCondition for any clause that omits `source`. Pure. */
246
+ function evaluateConditionMulti(condition, sources, log, depth = 0) {
247
+ return evalNode(condition, sources, log, depth) === true;
227
248
  }
228
249
  /** Authoring-time validation: is this a well-formed condition the interpreter
229
250
  * will honor? Returns the list of problems (empty = valid). Used server-side
@@ -249,6 +270,9 @@ function validateCondition(condition, depth = 0) {
249
270
  }
250
271
  if ('not' in c)
251
272
  return validateCondition(c.not, depth + 1);
273
+ if (c.source !== undefined && c.source !== 'tool_input' && c.source !== 'state') {
274
+ return [`clause source must be 'tool_input' or 'state', got '${String(c.source)}'`];
275
+ }
252
276
  if (typeof c.field !== 'string' || c.field.length === 0)
253
277
  return ['clause missing field'];
254
278
  if (typeof c.op !== 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"fix-trigger.js","sourceRoot":"","sources":["../src/fix-trigger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix-trigger.js","sourceRoot":"","sources":["../src/fix-trigger.ts"],"names":[],"mappings":"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"}
package/dist/guard.d.ts CHANGED
@@ -21,7 +21,12 @@ export declare function matchsetCachePath(projectId: string): string;
21
21
  export declare function tallySpoolPath(projectId: string): string;
22
22
  interface RepairTrigger {
23
23
  event?: string;
24
+ /** Trigger SOURCE (bridge): `pre_tool_use` (default, back-compat) | `state`
25
+ * (local hot-path, reads stateValues) | `ingress` (async, off-path → skipped).
26
+ * docs/ingress-trigger-bridge.md */
27
+ source?: 'pre_tool_use' | 'state' | 'ingress';
24
28
  matcher?: string;
29
+ eventKind?: string;
25
30
  condition?: unknown;
26
31
  action?: string;
27
32
  mode?: string;
@@ -49,6 +54,10 @@ export interface MatchsetCacheFile {
49
54
  fetchedAt?: string;
50
55
  /** Local latch journal: nodeId → latch key (sessionId or "project") → ISO. */
51
56
  latchState?: Record<string, Record<string, string>>;
57
+ /** Precomputed local state bag (stress / turnCount / keyword-seen) the Stop hook
58
+ * stashes for `source:"state"` rules to read on the hot path. Preserved on
59
+ * refetch like latchState. */
60
+ stateValues?: Record<string, unknown>;
52
61
  }
53
62
  export interface GuardInput {
54
63
  hook_event_name?: string;
@@ -86,6 +95,10 @@ export declare function wrapDirective(text: string): string;
86
95
  * explicit repair.tier field overrides this once a second directive class ships. */
87
96
  export declare function injectionTier(row: MatchsetRepair): 'note' | 'directive';
88
97
  export declare function readMatchsetCache(projectId: string): MatchsetCacheFile | null;
98
+ /** Merge state values into the matchset cache (Adapter A). Single-writer; no cache yet → no-op. */
99
+ export declare function writeStateValues(projectId: string, values: Record<string, unknown>): void;
100
+ /** Collect watched keyword terms — every `state` clause field `keyword:<term>`. */
101
+ export declare function collectWatchedKeywords(projectId: string): string[];
89
102
  /** Run the dispatcher over one PreToolUse event. Pure given the cache contents
90
103
  * read from disk; mutates only local state files (cache latchState + spool).
91
104
  * Returns the hook output to emit, or null for silence. NO network — tallies