@mneme-ai/core 2.19.23 → 2.19.25

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 (53) hide show
  1. package/dist/cosmic/aurelian_v1923.test.js +2 -1
  2. package/dist/cosmic/aurelian_v1923.test.js.map +1 -1
  3. package/dist/cosmic/aurelian_v1924.test.d.ts +2 -0
  4. package/dist/cosmic/aurelian_v1924.test.d.ts.map +1 -0
  5. package/dist/cosmic/aurelian_v1924.test.js +48 -0
  6. package/dist/cosmic/aurelian_v1924.test.js.map +1 -0
  7. package/dist/cosmic/aurelian_v1925.test.d.ts +2 -0
  8. package/dist/cosmic/aurelian_v1925.test.d.ts.map +1 -0
  9. package/dist/cosmic/aurelian_v1925.test.js +48 -0
  10. package/dist/cosmic/aurelian_v1925.test.js.map +1 -0
  11. package/dist/endocrine/endocrine.test.d.ts +2 -0
  12. package/dist/endocrine/endocrine.test.d.ts.map +1 -0
  13. package/dist/endocrine/endocrine.test.js +198 -0
  14. package/dist/endocrine/endocrine.test.js.map +1 -0
  15. package/dist/endocrine/index.d.ts +159 -0
  16. package/dist/endocrine/index.d.ts.map +1 -0
  17. package/dist/endocrine/index.js +277 -0
  18. package/dist/endocrine/index.js.map +1 -0
  19. package/dist/event_pattern_match/event_pattern_match.test.d.ts +2 -0
  20. package/dist/event_pattern_match/event_pattern_match.test.d.ts.map +1 -0
  21. package/dist/event_pattern_match/event_pattern_match.test.js +175 -0
  22. package/dist/event_pattern_match/event_pattern_match.test.js.map +1 -0
  23. package/dist/event_pattern_match/index.d.ts +99 -0
  24. package/dist/event_pattern_match/index.d.ts.map +1 -0
  25. package/dist/event_pattern_match/index.js +318 -0
  26. package/dist/event_pattern_match/index.js.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +6 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/sleep_training/index.d.ts +162 -0
  32. package/dist/sleep_training/index.d.ts.map +1 -0
  33. package/dist/sleep_training/index.js +218 -0
  34. package/dist/sleep_training/index.js.map +1 -0
  35. package/dist/sleep_training/sleep_training.test.d.ts +2 -0
  36. package/dist/sleep_training/sleep_training.test.d.ts.map +1 -0
  37. package/dist/sleep_training/sleep_training.test.js +296 -0
  38. package/dist/sleep_training/sleep_training.test.js.map +1 -0
  39. package/dist/tool_tier/index.d.ts +101 -0
  40. package/dist/tool_tier/index.d.ts.map +1 -0
  41. package/dist/tool_tier/index.js +228 -0
  42. package/dist/tool_tier/index.js.map +1 -0
  43. package/dist/tool_tier/tool_tier.test.d.ts +2 -0
  44. package/dist/tool_tier/tool_tier.test.d.ts.map +1 -0
  45. package/dist/tool_tier/tool_tier.test.js +133 -0
  46. package/dist/tool_tier/tool_tier.test.js.map +1 -0
  47. package/dist/whats_new.d.ts.map +1 -1
  48. package/dist/whats_new.js +16 -0
  49. package/dist/whats_new.js.map +1 -1
  50. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  51. package/dist/wrapper_genesis/index.js +23 -0
  52. package/dist/wrapper_genesis/index.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,277 @@
1
+ /**
2
+ * v2.19.25 — MNEME ENDOCRINE (extends v2.19.23 HORMONAL)
3
+ *
4
+ * "Mneme อ่าน mood signals (commit tone, time-of-day, idle pattern,
5
+ * error frequency) → ผลิต 'hormones' ที่ทุก organ ฟัง → behavior
6
+ * ทั้งระบบเปลี่ยน"
7
+ * — user audit, 2026-05-17
8
+ *
9
+ * Diagnosis: v2.19.23 HORMONAL ships 3 generic signals (focus /
10
+ * fatigue / mood) — useful but abstract. The user wants the named
11
+ * biological vocabulary that maps DIRECTLY to behavior:
12
+ * - CORTISOL (stress) → reflex calmer, daemon quieter
13
+ * - DOPAMINE (flow) → reflex strengthens current pattern
14
+ * - MELATONIN (rest) → deep dream cycle, suppress all
15
+ * - OXYTOCIN (social) → surface TRINITY + CONFESSIONAL
16
+ *
17
+ * ENDOCRINE adds 4 NAMED hormones with explicit source detectors +
18
+ * cross-organ effect ladder. Each hormone has its own decay
19
+ * constant + clamped to [0,1]. Sources are pure-function classifiers
20
+ * over commit messages / clock / streak signals.
21
+ *
22
+ * Composes onto v2.19.23 HORMONAL (HormonalState is parallel; both
23
+ * coexist — generic and named — caller picks abstraction level).
24
+ *
25
+ * Honest scope:
26
+ * - PURE FUNCTION classifiers + state update. Caller hooks the actual
27
+ * signal sources (commit msg / shell error code / system clock /
28
+ * idle detect).
29
+ * - Hormone levels are CORRELATION not CAUSATION; the cross-organ
30
+ * "effects" are POLICIES, applied by each organ at its own pace.
31
+ * - HMAC-chained ledger so daemon can audit hormone evolution over
32
+ * time + roll back if a misclassified signal spikes a hormone wrongly.
33
+ */
34
+ import { createHmac, timingSafeEqual } from "node:crypto";
35
+ const PROTOCOL_VERSION = 1;
36
+ const CLAMP = (x) => Math.max(0, Math.min(1, x));
37
+ function canon(v) {
38
+ if (v === null || typeof v !== "object")
39
+ return JSON.stringify(v);
40
+ if (Array.isArray(v))
41
+ return "[" + v.map(canon).join(",") + "]";
42
+ const keys = Object.keys(v).sort();
43
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
44
+ }
45
+ function defaultSecret() {
46
+ return process.env["MNEME_ENDOCRINE_SECRET"] || `mneme-endocrine-v${PROTOCOL_VERSION}`;
47
+ }
48
+ function hmacHex(body, secret) {
49
+ return createHmac("sha256", secret).update(canon(body)).digest("hex");
50
+ }
51
+ function safeEqHex(a, b) {
52
+ try {
53
+ return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ export function neutralEndocrineState(ts = 0) {
60
+ return { v: PROTOCOL_VERSION, cortisol: 0, dopamine: 0, melatonin: 0, oxytocin: 0, ts };
61
+ }
62
+ // ─── source detectors (pure functions over signal) ──────────────────
63
+ /**
64
+ * CORTISOL spikes from:
65
+ * - Stress keywords in commit msg (case-insensitive):
66
+ * fuck / damn / finally / broken / wtf / fix-fix / hotfix / rollback
67
+ * - Error count > 3 in 15-min window
68
+ * - Late-night activity (22:00..03:00)
69
+ */
70
+ export function detectCortisolDelta(signals) {
71
+ let delta = 0;
72
+ if (signals.commitMessage) {
73
+ const m = signals.commitMessage.toLowerCase();
74
+ if (/\b(fuck|damn|finally|broken|wtf|fix[\s-]?fix|hotfix|rollback)\b/.test(m))
75
+ delta += 0.18;
76
+ }
77
+ if (typeof signals.errorCountWindow === "number" && signals.errorCountWindow > 3) {
78
+ delta += Math.min(0.25, signals.errorCountWindow * 0.04);
79
+ }
80
+ if (typeof signals.hourOfDay === "number") {
81
+ const h = signals.hourOfDay;
82
+ if (h >= 22 || h <= 3)
83
+ delta += 0.08;
84
+ }
85
+ return delta;
86
+ }
87
+ /**
88
+ * DOPAMINE spikes from:
89
+ * - greenStreakCount >= 5 consecutive successful commits
90
+ * - testPassStreakCount >= 5
91
+ * - No errors in the last window
92
+ */
93
+ export function detectDopamineDelta(signals) {
94
+ let delta = 0;
95
+ if (typeof signals.greenStreakCount === "number" && signals.greenStreakCount >= 5) {
96
+ delta += Math.min(0.2, (signals.greenStreakCount - 4) * 0.04);
97
+ }
98
+ if (typeof signals.testPassStreakCount === "number" && signals.testPassStreakCount >= 5) {
99
+ delta += Math.min(0.15, (signals.testPassStreakCount - 4) * 0.03);
100
+ }
101
+ if (typeof signals.errorCountWindow === "number" && signals.errorCountWindow === 0) {
102
+ delta += 0.05;
103
+ }
104
+ return delta;
105
+ }
106
+ /**
107
+ * MELATONIN spikes from:
108
+ * - Late local hour (22:00 onwards; peaks at 02:00)
109
+ * - Sustained idle (>15min)
110
+ */
111
+ export function detectMelatoninDelta(signals) {
112
+ let delta = 0;
113
+ if (typeof signals.hourOfDay === "number") {
114
+ const h = signals.hourOfDay;
115
+ // Peak melatonin around 02:00; high from 22:00 to 06:00.
116
+ if (h >= 22)
117
+ delta += (h - 21) * 0.04;
118
+ else if (h <= 5)
119
+ delta += (6 - h) * 0.04;
120
+ }
121
+ if (typeof signals.idleMs === "number" && signals.idleMs >= 15 * 60_000) {
122
+ delta += Math.min(0.2, (signals.idleMs / (15 * 60_000)) * 0.06);
123
+ }
124
+ return delta;
125
+ }
126
+ /**
127
+ * OXYTOCIN spikes from:
128
+ * - Co-Authored-By trailer in commit message
129
+ * - distinctAuthorsHour >= 2 (pair / mob session)
130
+ */
131
+ export function detectOxytocinDelta(signals) {
132
+ let delta = 0;
133
+ if (signals.hasCoAuthor)
134
+ delta += 0.2;
135
+ if (signals.commitMessage && /co-authored-by:/i.test(signals.commitMessage))
136
+ delta += 0.1;
137
+ if (typeof signals.distinctAuthorsHour === "number" && signals.distinctAuthorsHour >= 2) {
138
+ delta += Math.min(0.15, (signals.distinctAuthorsHour - 1) * 0.05);
139
+ }
140
+ return delta;
141
+ }
142
+ /**
143
+ * Half-life decay per hormone (different time constants reflect biology):
144
+ * cortisol — fast decay (stress passes)
145
+ * dopamine — fast decay (flow is fragile)
146
+ * melatonin — slow decay (sleep pressure builds + releases gradually)
147
+ * oxytocin — medium decay (social warmth lingers)
148
+ */
149
+ const HALF_LIFE_MIN = {
150
+ cortisol: 30,
151
+ dopamine: 20,
152
+ melatonin: 90,
153
+ oxytocin: 60,
154
+ };
155
+ function decayFactor(elapsedMs, halfLifeMin) {
156
+ const minutes = elapsedMs / 60_000;
157
+ // Standard half-life decay: x * 0.5^(t/h)
158
+ return Math.pow(0.5, minutes / halfLifeMin);
159
+ }
160
+ /** Evolve endocrine state given new signals + elapsed time. */
161
+ export function produceFromSignals(input) {
162
+ const decayed = {
163
+ cortisol: input.state.cortisol * decayFactor(input.signals.elapsedMs, HALF_LIFE_MIN.cortisol),
164
+ dopamine: input.state.dopamine * decayFactor(input.signals.elapsedMs, HALF_LIFE_MIN.dopamine),
165
+ melatonin: input.state.melatonin * decayFactor(input.signals.elapsedMs, HALF_LIFE_MIN.melatonin),
166
+ oxytocin: input.state.oxytocin * decayFactor(input.signals.elapsedMs, HALF_LIFE_MIN.oxytocin),
167
+ };
168
+ return {
169
+ v: PROTOCOL_VERSION,
170
+ cortisol: CLAMP(decayed.cortisol + detectCortisolDelta(input.signals)),
171
+ dopamine: CLAMP(decayed.dopamine + detectDopamineDelta(input.signals)),
172
+ melatonin: CLAMP(decayed.melatonin + detectMelatoninDelta(input.signals)),
173
+ oxytocin: CLAMP(decayed.oxytocin + detectOxytocinDelta(input.signals)),
174
+ ts: input.nowMs ?? input.state.ts + input.signals.elapsedMs,
175
+ };
176
+ }
177
+ /**
178
+ * Hormones → organ behavior. Pure function over current state.
179
+ *
180
+ * - cortisol high → reflex calmer (less aggressive); daemon quieter; suppress notifications
181
+ * - dopamine high → reflex strengthens current pattern (aggressive surface advanced tools)
182
+ * - melatonin high → deep dream cycle; SUPPRESS notifications (let user rest)
183
+ * - oxytocin high → surface TRINITY + CONFESSIONAL (collaboration tools)
184
+ */
185
+ export function crossOrganEffects(state) {
186
+ // Baseline 0.5; adjusted by hormone balance.
187
+ let aggressiveness = 0.5;
188
+ aggressiveness -= state.cortisol * 0.4; // stress calms
189
+ aggressiveness += state.dopamine * 0.4; // flow energises
190
+ aggressiveness -= state.melatonin * 0.3; // sleep calms
191
+ aggressiveness = CLAMP(aggressiveness);
192
+ let quietness = 0.3;
193
+ quietness += state.cortisol * 0.4; // stress → quiet
194
+ quietness += state.melatonin * 0.5; // sleep → very quiet
195
+ quietness -= state.dopamine * 0.2; // flow → slightly chatty
196
+ quietness = CLAMP(quietness);
197
+ const dreamDepth = CLAMP(0.3 + state.melatonin * 0.7);
198
+ const notificationsSuppressed = state.melatonin >= 0.6 || state.cortisol >= 0.7;
199
+ const surfaceTrinityAndConfessional = state.oxytocin >= 0.4;
200
+ // Dominant mood
201
+ const levels = [
202
+ ["cortisol", state.cortisol], ["dopamine", state.dopamine],
203
+ ["melatonin", state.melatonin], ["oxytocin", state.oxytocin],
204
+ ];
205
+ levels.sort((a, b) => b[1] - a[1]);
206
+ const top = levels[0];
207
+ const dominantMood = top[1] < 0.2 ? "calm baseline" : `${top[0]} dominant (${top[1].toFixed(2)})`;
208
+ return {
209
+ reflexAggressiveness: aggressiveness,
210
+ daemonQuietness: quietness,
211
+ dreamCycleDepth: dreamDepth,
212
+ notificationsSuppressed,
213
+ surfaceTrinityAndConfessional,
214
+ dominantMood,
215
+ };
216
+ }
217
+ export function emptyEndocrineLedger() {
218
+ return { v: PROTOCOL_VERSION, records: [] };
219
+ }
220
+ export function recordEndocrine(input) {
221
+ const prev = input.ledger.records[input.ledger.records.length - 1];
222
+ const body = {
223
+ v: PROTOCOL_VERSION,
224
+ ts: input.nowMs ?? input.state.ts,
225
+ state: input.state,
226
+ signals: input.signals,
227
+ prevSig: prev ? prev.sig : null,
228
+ };
229
+ const sig = hmacHex(body, input.secret ?? defaultSecret());
230
+ return { v: PROTOCOL_VERSION, records: [...input.ledger.records, { ...body, sig }] };
231
+ }
232
+ export function verifyEndocrineLedger(ledger, secret) {
233
+ const sec = secret ?? defaultSecret();
234
+ let prevSig = null;
235
+ for (let i = 0; i < ledger.records.length; i++) {
236
+ const r = ledger.records[i];
237
+ const { sig, ...body } = r;
238
+ if (body.prevSig !== prevSig)
239
+ return { ok: false, brokenAt: i, reason: `prevSig mismatch at step ${i}` };
240
+ if (!safeEqHex(hmacHex(body, sec), sig))
241
+ return { ok: false, brokenAt: i, reason: `HMAC mismatch at step ${i}` };
242
+ prevSig = sig;
243
+ }
244
+ return { ok: true };
245
+ }
246
+ export function formatEndocrineLine(s) {
247
+ return `🧪 ENDOCRINE · 🩸${s.cortisol.toFixed(2)} · ⚡${s.dopamine.toFixed(2)} · 🌙${s.melatonin.toFixed(2)} · 💞${s.oxytocin.toFixed(2)}`;
248
+ }
249
+ export function listHormoneInfo() {
250
+ return [
251
+ {
252
+ hormone: "cortisol",
253
+ emoji: "🩸",
254
+ sources: ["stress keywords in commit msg", "error count > 3 in 15min", "hour 22:00-03:00 (late night)"],
255
+ effects: ["reflex calmer", "daemon quieter", "notifications suppressed at >= 0.7"],
256
+ },
257
+ {
258
+ hormone: "dopamine",
259
+ emoji: "⚡",
260
+ sources: ["green commit streak >= 5", "test pass streak >= 5", "zero errors window"],
261
+ effects: ["reflex aggressive surface advanced tools", "slightly chattier daemon"],
262
+ },
263
+ {
264
+ hormone: "melatonin",
265
+ emoji: "🌙",
266
+ sources: ["late local hour (22:00 onwards)", "early-morning (00:00-06:00)", "idle > 15min"],
267
+ effects: ["deep dream cycle", "very quiet daemon", "notifications suppressed at >= 0.6"],
268
+ },
269
+ {
270
+ hormone: "oxytocin",
271
+ emoji: "💞",
272
+ sources: ["Co-Authored-By trailer", "distinct authors >= 2 in hour"],
273
+ effects: ["surface TRINITY VOTE + CONFESSIONAL", "multi-vendor consensus"],
274
+ },
275
+ ];
276
+ }
277
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endocrine/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event_pattern_match.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event_pattern_match.test.d.ts","sourceRoot":"","sources":["../../src/event_pattern_match/event_pattern_match.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { matchEventPatterns, reportMatch, verifyReport, listBuiltinPatterns, formatPredictionLine, BUILTIN_PATTERNS, } from "./index.js";
3
+ const SECRET = "event-pattern-test-secret-997744";
4
+ function evt(kind, text, ts = 1) {
5
+ return { v: 1, kind, text, ts };
6
+ }
7
+ describe("v2.19.24 EVENT PATTERN MATCH · BUILTIN_PATTERNS coverage", () => {
8
+ it("ships >= 18 patterns covering 5 event kinds", () => {
9
+ expect(BUILTIN_PATTERNS.length).toBeGreaterThanOrEqual(18);
10
+ const kinds = new Set();
11
+ for (const p of BUILTIN_PATTERNS)
12
+ for (const k of p.eventKinds)
13
+ kinds.add(k);
14
+ expect(kinds.has("git_commit")).toBe(true);
15
+ expect(kinds.has("file_save")).toBe(true);
16
+ expect(kinds.has("clipboard")).toBe(true);
17
+ expect(kinds.has("terminal_command")).toBe(true);
18
+ expect(kinds.has("user_chat")).toBe(true);
19
+ });
20
+ it("every pattern has unique id + at least one suggested tool", () => {
21
+ const ids = new Set();
22
+ for (const p of BUILTIN_PATTERNS) {
23
+ expect(ids.has(p.id)).toBe(false);
24
+ ids.add(p.id);
25
+ expect(p.tools.length).toBeGreaterThan(0);
26
+ for (const t of p.tools) {
27
+ expect(t.confidence).toBeGreaterThan(0);
28
+ expect(t.confidence).toBeLessThanOrEqual(1);
29
+ }
30
+ }
31
+ });
32
+ it("listBuiltinPatterns returns a copy (mutation-safe)", () => {
33
+ const before = BUILTIN_PATTERNS.length;
34
+ const a = listBuiltinPatterns();
35
+ a.pop();
36
+ expect(BUILTIN_PATTERNS.length).toBe(before);
37
+ });
38
+ });
39
+ describe("v2.19.24 EVENT PATTERN MATCH · the user's canonical scenario", () => {
40
+ it("'fix: token leak in auth.ts' commit -> bug_prophet + forensics.vulns + apoptosis.detect + antivirus", () => {
41
+ const predictions = matchEventPatterns({
42
+ event: evt("git_commit", "fix: token leak in auth.ts"),
43
+ topN: 10,
44
+ });
45
+ const tools = predictions.map((p) => p.toolName);
46
+ // fix: prefix pattern -> bug_prophet + premortem
47
+ expect(tools).toContain("mneme.bug_prophet.prophesy");
48
+ // security_token_leak -> forensics.vulns + apoptosis + antivirus
49
+ expect(tools).toContain("mneme.forensics.vulns");
50
+ expect(tools).toContain("mneme.apoptosis.detect");
51
+ expect(tools).toContain("mneme.antivirus.scan");
52
+ // forensics.vulns matched 2 patterns (token_leak + auth_file) -> max confidence
53
+ const vulns = predictions.find((p) => p.toolName === "mneme.forensics.vulns");
54
+ expect(vulns.matchedPatterns.length).toBeGreaterThanOrEqual(1);
55
+ expect(vulns.confidence).toBeGreaterThanOrEqual(0.85);
56
+ });
57
+ it("'check this with claude code' clipboard -> handoff.universal (1-step not 10-step)", () => {
58
+ const predictions = matchEventPatterns({
59
+ event: evt("clipboard", "check this with claude code"),
60
+ });
61
+ expect(predictions[0].toolName).toBe("mneme.handoff.universal");
62
+ expect(predictions[0].confidence).toBeGreaterThanOrEqual(0.9);
63
+ });
64
+ it("Thai 'ตรวจของแท้' clipboard -> caption.sever + provenance.evaluate (multilingual)", () => {
65
+ const predictions = matchEventPatterns({
66
+ event: evt("clipboard", "ตรวจของแท้ของรองเท้านี้"),
67
+ });
68
+ const tools = predictions.map((p) => p.toolName);
69
+ expect(tools).toContain("mneme.caption.sever");
70
+ expect(tools).toContain("mneme.provenance.evaluate");
71
+ });
72
+ });
73
+ describe("v2.19.24 EVENT PATTERN MATCH · multi-pattern merge (max-confidence wins)", () => {
74
+ it("when 2 patterns suggest same tool with different confidence -> highest wins + both matchedPatterns recorded", () => {
75
+ const customPatterns = [
76
+ {
77
+ id: "p_low",
78
+ eventKinds: ["git_commit"],
79
+ regex: /low/,
80
+ tools: [{ toolName: "shared.tool", argsTemplate: {}, confidence: 0.3 }],
81
+ reason: "low",
82
+ },
83
+ {
84
+ id: "p_high",
85
+ eventKinds: ["git_commit"],
86
+ regex: /low/,
87
+ tools: [{ toolName: "shared.tool", argsTemplate: {}, confidence: 0.9 }],
88
+ reason: "high",
89
+ },
90
+ ];
91
+ const predictions = matchEventPatterns({
92
+ event: evt("git_commit", "low intensity commit"),
93
+ patterns: customPatterns,
94
+ });
95
+ expect(predictions.length).toBe(1);
96
+ expect(predictions[0].confidence).toBe(0.9);
97
+ expect(predictions[0].matchedPatterns).toContain("p_low");
98
+ expect(predictions[0].matchedPatterns).toContain("p_high");
99
+ });
100
+ it("event kind filters patterns (clipboard pattern does NOT fire on git_commit)", () => {
101
+ const predictions = matchEventPatterns({
102
+ event: evt("git_commit", "check this with claude code"),
103
+ });
104
+ const tools = predictions.map((p) => p.toolName);
105
+ expect(tools).not.toContain("mneme.handoff.universal");
106
+ });
107
+ it("no matching patterns -> empty predictions", () => {
108
+ const predictions = matchEventPatterns({
109
+ event: evt("git_commit", "absolutely no keywords just words"),
110
+ });
111
+ expect(predictions).toEqual([]);
112
+ });
113
+ it("topN respected; sorted by confidence desc", () => {
114
+ const predictions = matchEventPatterns({
115
+ event: evt("git_commit", "fix: cve-2024-1234 token leak api_key in auth.ts"),
116
+ topN: 3,
117
+ });
118
+ expect(predictions.length).toBeLessThanOrEqual(3);
119
+ for (let i = 1; i < predictions.length; i++) {
120
+ expect(predictions[i - 1].confidence).toBeGreaterThanOrEqual(predictions[i].confidence);
121
+ }
122
+ });
123
+ });
124
+ describe("v2.19.24 EVENT PATTERN MATCH · file-type hints", () => {
125
+ it("'.test.ts' file save -> coverage check", () => {
126
+ const predictions = matchEventPatterns({
127
+ event: evt("file_save", "src/auth.test.ts"),
128
+ });
129
+ const tools = predictions.map((p) => p.toolName);
130
+ expect(tools).toContain("mneme.ask");
131
+ });
132
+ it("config file save (package.json) -> deps.oracle + premortem", () => {
133
+ const predictions = matchEventPatterns({
134
+ event: evt("file_save", "package.json"),
135
+ });
136
+ const tools = predictions.map((p) => p.toolName);
137
+ expect(tools).toContain("mneme.deps.oracle");
138
+ expect(tools).toContain("mneme.premortem");
139
+ });
140
+ });
141
+ describe("v2.19.24 EVENT PATTERN MATCH · HMAC report + determinism", () => {
142
+ it("reportMatch HMAC verifies on untampered; rejects tamper", () => {
143
+ const r = reportMatch({ event: evt("git_commit", "fix: bug"), secret: SECRET });
144
+ expect(verifyReport(r, SECRET)).toBe(true);
145
+ const tampered = { ...r, patternsMatched: 999 };
146
+ expect(verifyReport(tampered, SECRET)).toBe(false);
147
+ });
148
+ it("MEASURED 100% determinism: same event -> same report sig (30 trials)", () => {
149
+ const event = evt("git_commit", "fix: token leak in auth.ts", 1_000_000);
150
+ const firstSig = reportMatch({ event, secret: SECRET }).sig;
151
+ let allEqual = true;
152
+ for (let i = 0; i < 30; i++) {
153
+ if (reportMatch({ event, secret: SECRET }).sig !== firstSig) {
154
+ allEqual = false;
155
+ break;
156
+ }
157
+ }
158
+ expect(allEqual).toBe(true);
159
+ });
160
+ });
161
+ describe("v2.19.24 EVENT PATTERN MATCH · formatter", () => {
162
+ it("formatPredictionLine includes tool, conf%, matched pattern ids", () => {
163
+ const line = formatPredictionLine({
164
+ toolName: "mneme.forensics.vulns",
165
+ argsTemplate: {},
166
+ confidence: 0.85,
167
+ matchedPatterns: ["security_token_leak", "security_auth_file"],
168
+ });
169
+ expect(line).toContain("mneme.forensics.vulns");
170
+ expect(line).toContain("85%");
171
+ expect(line).toContain("security_token_leak");
172
+ expect(line).toContain("security_auth_file");
173
+ });
174
+ });
175
+ //# sourceMappingURL=event_pattern_match.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event_pattern_match.test.js","sourceRoot":"","sources":["../../src/event_pattern_match/event_pattern_match.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,GAAG,kCAAkC,CAAC;AAElD,SAAS,GAAG,CAAC,IAA2B,EAAE,IAAY,EAAE,EAAE,GAAG,CAAC;IAC5D,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AAED,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,gBAAgB;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACvC,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,CAAC,CAAC,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,EAAE,CAAC,qGAAqG,EAAE,GAAG,EAAE;QAC7G,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,4BAA4B,CAAC;YACtD,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,iDAAiD;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACtD,iEAAiE;QACjE,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAChD,gFAAgF;QAChF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,uBAAuB,CAAE,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,6BAA6B,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,yBAAyB,CAAC;SACnD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACxF,EAAE,CAAC,6GAA6G,EAAE,GAAG,EAAE;QACrH,MAAM,cAAc,GAAsB;YACxC;gBACE,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,CAAC,YAAY,CAAC;gBAC1B,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;gBACvE,MAAM,EAAE,KAAK;aACd;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,UAAU,EAAE,CAAC,YAAY,CAAC;gBAC1B,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;gBACvE,MAAM,EAAE,MAAM;aACf;SACF,CAAC;QACF,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;YAChD,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,6BAA6B,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,mCAAmC,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,kDAAkD,CAAC;YAC5E,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,4BAA4B,EAAE,SAAS,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;QAC5D,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;QAC3F,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,IAAI,GAAG,oBAAoB,CAAC;YAChC,QAAQ,EAAE,uBAAuB;YACjC,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;SAC/D,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * v2.19.24 — MNEME EVENT PATTERN MATCH (extends v2.19.23 SPINAL REFLEX)
3
+ *
4
+ * "user commit 'fix: token leak in auth.ts' → reflex detect 'fix:' +
5
+ * 'token leak' + 'auth' → pre-execute bug_prophet + forensics.vulns +
6
+ * apoptosis.detect in 200ms → AI ตอนถามจริงได้ผลใน 0ms"
7
+ * — user audit, 2026-05-17
8
+ *
9
+ * Diagnosis: v2.19.23 SPINAL REFLEX ships 8 BUILTIN_RULES that match
10
+ * on `eventKind + contextPredicate`. The predicates are coarse: they
11
+ * match TYPE OF EVENT, not SEMANTIC CONTENT. A commit message
12
+ * "fix: token leak" gets the same predictions as "feat: add dark mode"
13
+ * because both are git_commit events.
14
+ *
15
+ * Fix: SEMANTIC PATTERN MATCHER inspects event content (commit text,
16
+ * file path, clipboard text, shell command) against a regex pattern
17
+ * library. Each pattern proposes specific follow-up tools with
18
+ * confidence. Multi-pattern hits are MERGED via max-confidence
19
+ * (most-confident-rule-wins per tool name).
20
+ *
21
+ * Built-in patterns (15+) cover:
22
+ * - Commit-message intent (fix / feat / chore / docs / security)
23
+ * - Security keywords (token leak / cve / vuln / exploit / xss / sql)
24
+ * - File-type hints (.ts → bug_prophet; .test.* → coverage; .md → docs)
25
+ * - Clipboard handoff signals ("check this with claude" → handoff.universal)
26
+ * - Shell command intent ("npm install" → deps.oracle; "git push" → premortem)
27
+ *
28
+ * Composes onto:
29
+ * - v2.19.23 SPINAL REFLEX (Prediction interface; blendPredictions consumer)
30
+ * - v2.19.22 REFLEX (eventCacheKey; cache surface)
31
+ * - v2.19.10 REVERSE-WRAPPER BUILTIN_RULES pattern (proven)
32
+ *
33
+ * Honest scope:
34
+ * - PURE FUNCTION matcher; deterministic; HMAC-signed report.
35
+ * - Patterns are REGEX, not NLP. False positives expected on noisy
36
+ * commit messages; caller can ignore matches with confidence < 0.5.
37
+ * - Caller hooks the actual event sources (git post-commit hook /
38
+ * fs.watch / clipboard observer); this module is the SEMANTIC
39
+ * classifier only.
40
+ */
41
+ declare const PROTOCOL_VERSION: 1;
42
+ export type SemanticEventKind = "git_commit" | "file_save" | "clipboard" | "terminal_command" | "user_chat";
43
+ export interface SemanticEvent {
44
+ v: typeof PROTOCOL_VERSION;
45
+ kind: SemanticEventKind;
46
+ /** Full text content of the event (commit msg, file path, clipboard text, etc). */
47
+ text: string;
48
+ /** Optional structured context (e.g., { filePath, sha, args }). */
49
+ context?: Record<string, unknown>;
50
+ ts: number;
51
+ }
52
+ export interface SemanticPattern {
53
+ id: string;
54
+ eventKinds: SemanticEventKind[];
55
+ regex: RegExp;
56
+ /** Tools this pattern suggests when matched, each with prior confidence. */
57
+ tools: Array<{
58
+ toolName: string;
59
+ argsTemplate: Record<string, unknown>;
60
+ confidence: number;
61
+ }>;
62
+ reason: string;
63
+ }
64
+ export interface SemanticPrediction {
65
+ toolName: string;
66
+ argsTemplate: Record<string, unknown>;
67
+ confidence: number;
68
+ matchedPatterns: string[];
69
+ }
70
+ /**
71
+ * 18 built-in semantic patterns covering the most common AI-agent
72
+ * workflows on a code repo. Each pattern is one regex over event.text
73
+ * + optional eventKind filter + a list of suggested tools.
74
+ */
75
+ export declare const BUILTIN_PATTERNS: readonly SemanticPattern[];
76
+ /** Match an event against ALL patterns; return ranked predictions. */
77
+ export declare function matchEventPatterns(input: {
78
+ event: SemanticEvent;
79
+ patterns?: readonly SemanticPattern[];
80
+ topN?: number;
81
+ }): SemanticPrediction[];
82
+ export interface MatchReport {
83
+ v: typeof PROTOCOL_VERSION;
84
+ event: SemanticEvent;
85
+ predictions: SemanticPrediction[];
86
+ patternsConsidered: number;
87
+ patternsMatched: number;
88
+ sig: string;
89
+ }
90
+ export declare function reportMatch(input: {
91
+ event: SemanticEvent;
92
+ topN?: number;
93
+ secret?: string;
94
+ }): MatchReport;
95
+ export declare function verifyReport(r: MatchReport, secret?: string): boolean;
96
+ export declare function listBuiltinPatterns(): SemanticPattern[];
97
+ export declare function formatPredictionLine(p: SemanticPrediction): string;
98
+ export {};
99
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/event_pattern_match/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,kBAAkB,GAAG,WAAW,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9F,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,eAAe,EA8LtD,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,kBAAkB,EAAE,CA6BvB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAsBD,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAaxG;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAGlE"}