@mneme-ai/core 2.19.22 → 2.19.23

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 (63) hide show
  1. package/dist/autonomic_breath/autonomic_breath.test.d.ts +2 -0
  2. package/dist/autonomic_breath/autonomic_breath.test.d.ts.map +1 -0
  3. package/dist/autonomic_breath/autonomic_breath.test.js +140 -0
  4. package/dist/autonomic_breath/autonomic_breath.test.js.map +1 -0
  5. package/dist/autonomic_breath/index.d.ts +135 -0
  6. package/dist/autonomic_breath/index.d.ts.map +1 -0
  7. package/dist/autonomic_breath/index.js +180 -0
  8. package/dist/autonomic_breath/index.js.map +1 -0
  9. package/dist/cosmic/aurelian_v1923.test.d.ts +2 -0
  10. package/dist/cosmic/aurelian_v1923.test.d.ts.map +1 -0
  11. package/dist/cosmic/aurelian_v1923.test.js +89 -0
  12. package/dist/cosmic/aurelian_v1923.test.js.map +1 -0
  13. package/dist/hippocampus_dreams/hippocampus_dreams.test.d.ts +2 -0
  14. package/dist/hippocampus_dreams/hippocampus_dreams.test.d.ts.map +1 -0
  15. package/dist/hippocampus_dreams/hippocampus_dreams.test.js +106 -0
  16. package/dist/hippocampus_dreams/hippocampus_dreams.test.js.map +1 -0
  17. package/dist/hippocampus_dreams/index.d.ts +79 -0
  18. package/dist/hippocampus_dreams/index.d.ts.map +1 -0
  19. package/dist/hippocampus_dreams/index.js +122 -0
  20. package/dist/hippocampus_dreams/index.js.map +1 -0
  21. package/dist/hormonal/hormonal.test.d.ts +2 -0
  22. package/dist/hormonal/hormonal.test.d.ts.map +1 -0
  23. package/dist/hormonal/hormonal.test.js +116 -0
  24. package/dist/hormonal/hormonal.test.js.map +1 -0
  25. package/dist/hormonal/index.d.ts +105 -0
  26. package/dist/hormonal/index.d.ts.map +1 -0
  27. package/dist/hormonal/index.js +132 -0
  28. package/dist/hormonal/index.js.map +1 -0
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +7 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/proprioception/index.d.ts +82 -0
  34. package/dist/proprioception/index.d.ts.map +1 -0
  35. package/dist/proprioception/index.js +170 -0
  36. package/dist/proprioception/index.js.map +1 -0
  37. package/dist/proprioception/proprioception.test.d.ts +2 -0
  38. package/dist/proprioception/proprioception.test.d.ts.map +1 -0
  39. package/dist/proprioception/proprioception.test.js +159 -0
  40. package/dist/proprioception/proprioception.test.js.map +1 -0
  41. package/dist/spinal_reflex/index.d.ts +86 -0
  42. package/dist/spinal_reflex/index.d.ts.map +1 -0
  43. package/dist/spinal_reflex/index.js +180 -0
  44. package/dist/spinal_reflex/index.js.map +1 -0
  45. package/dist/spinal_reflex/spinal_reflex.test.d.ts +2 -0
  46. package/dist/spinal_reflex/spinal_reflex.test.d.ts.map +1 -0
  47. package/dist/spinal_reflex/spinal_reflex.test.js +168 -0
  48. package/dist/spinal_reflex/spinal_reflex.test.js.map +1 -0
  49. package/dist/thalamus/index.d.ts +92 -0
  50. package/dist/thalamus/index.d.ts.map +1 -0
  51. package/dist/thalamus/index.js +95 -0
  52. package/dist/thalamus/index.js.map +1 -0
  53. package/dist/thalamus/thalamus.test.d.ts +2 -0
  54. package/dist/thalamus/thalamus.test.d.ts.map +1 -0
  55. package/dist/thalamus/thalamus.test.js +101 -0
  56. package/dist/thalamus/thalamus.test.js.map +1 -0
  57. package/dist/whats_new.d.ts.map +1 -1
  58. package/dist/whats_new.js +8 -0
  59. package/dist/whats_new.js.map +1 -1
  60. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  61. package/dist/wrapper_genesis/index.js +27 -0
  62. package/dist/wrapper_genesis/index.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { consolidateMemory, verifyConsolidation, formatConsolidationLine } from "./index.js";
3
+ const SECRET = "hippocampus-test-secret-997744";
4
+ function obs(eventSig, toolName, ts, eventKind = "git_commit") {
5
+ return { eventKind, eventSig, toolName, args: { ts }, ts };
6
+ }
7
+ describe("v2.19.23 HIPPOCAMPUS-DREAMS · consolidateMemory", () => {
8
+ it("empty observations -> zero rules", () => {
9
+ const r = consolidateMemory({ yesterdayObservations: [], consolidatedAt: 0, secret: SECRET });
10
+ expect(r.promotedRules.length).toBe(0);
11
+ expect(r.totalObservations).toBe(0);
12
+ expect(r.crystallisationRatio).toBe(0);
13
+ });
14
+ it("patterns fired >= threshold (3) promoted; below threshold dropped", () => {
15
+ const observations = [
16
+ obs("sigA", "mneme.ask", 1),
17
+ obs("sigA", "mneme.ask", 2),
18
+ obs("sigA", "mneme.ask", 3), // 3 times -> promoted
19
+ obs("sigA", "mneme.why", 4),
20
+ obs("sigA", "mneme.why", 5), // 2 times -> not promoted (below threshold 3)
21
+ obs("sigB", "mneme.status", 6), // 1 time -> not promoted
22
+ ];
23
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
24
+ expect(r.promotedRules.length).toBe(1);
25
+ expect(r.promotedRules[0].toolName).toBe("mneme.ask");
26
+ expect(r.promotedRules[0].occurrenceCount).toBe(3);
27
+ });
28
+ it("priorConfidence = occurrenceCount / total observations for eventSig", () => {
29
+ const observations = [
30
+ obs("sigA", "mneme.ask", 1),
31
+ obs("sigA", "mneme.ask", 2),
32
+ obs("sigA", "mneme.ask", 3),
33
+ obs("sigA", "mneme.why", 4),
34
+ obs("sigA", "mneme.why", 5),
35
+ ];
36
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
37
+ // 3 out of 5 total observations for sigA -> 0.6
38
+ const ask = r.promotedRules.find((p) => p.toolName === "mneme.ask");
39
+ expect(ask.priorConfidence).toBeCloseTo(3 / 5, 5);
40
+ });
41
+ it("custom threshold respected (threshold=1 promotes everything)", () => {
42
+ const observations = [obs("sigA", "t1", 1), obs("sigB", "t2", 2)];
43
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, promotionThreshold: 1, secret: SECRET });
44
+ expect(r.promotedRules.length).toBe(2);
45
+ });
46
+ it("sorted by priorConfidence desc", () => {
47
+ const observations = [
48
+ obs("sigA", "t_low", 1), obs("sigA", "t_low", 2), obs("sigA", "t_low", 3), // 3/10
49
+ obs("sigA", "t_high", 4), obs("sigA", "t_high", 5), obs("sigA", "t_high", 6), obs("sigA", "t_high", 7),
50
+ obs("sigA", "t_high", 8), obs("sigA", "t_high", 9), obs("sigA", "t_high", 10), // 7/10
51
+ ];
52
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
53
+ expect(r.promotedRules.length).toBe(2);
54
+ expect(r.promotedRules[0].toolName).toBe("t_high");
55
+ });
56
+ it("crystallisationRatio = promoted / uniqueEventSigs", () => {
57
+ const observations = [
58
+ obs("sigA", "t1", 1), obs("sigA", "t1", 2), obs("sigA", "t1", 3),
59
+ obs("sigB", "t2", 4),
60
+ ];
61
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
62
+ expect(r.uniqueEventSigs).toBe(2);
63
+ expect(r.promotedRules.length).toBe(1);
64
+ expect(r.crystallisationRatio).toBeCloseTo(1 / 2, 5);
65
+ });
66
+ it("argsTemplate captured from latest occurrence", () => {
67
+ const observations = [
68
+ { eventKind: "git_commit", eventSig: "sigA", toolName: "mneme.ask", args: { v: "v1" }, ts: 1 },
69
+ { eventKind: "git_commit", eventSig: "sigA", toolName: "mneme.ask", args: { v: "v2" }, ts: 2 },
70
+ { eventKind: "git_commit", eventSig: "sigA", toolName: "mneme.ask", args: { v: "v3" }, ts: 3 },
71
+ ];
72
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
73
+ expect(r.promotedRules[0].argsTemplate["v"]).toBe("v3");
74
+ });
75
+ it("HMAC sig verifies on untampered; rejects tamper", () => {
76
+ const observations = [obs("sigA", "t1", 1), obs("sigA", "t1", 2), obs("sigA", "t1", 3)];
77
+ const r = consolidateMemory({ yesterdayObservations: observations, consolidatedAt: 0, secret: SECRET });
78
+ expect(verifyConsolidation(r, SECRET)).toBe(true);
79
+ const tampered = { ...r, totalObservations: 9999 };
80
+ expect(verifyConsolidation(tampered, SECRET)).toBe(false);
81
+ });
82
+ it("MEASURED 100% determinism: same input -> same sig (30 trials)", () => {
83
+ const observations = [
84
+ obs("sigA", "t1", 1), obs("sigA", "t1", 2), obs("sigA", "t1", 3),
85
+ obs("sigB", "t2", 4), obs("sigB", "t2", 5), obs("sigB", "t2", 6),
86
+ ];
87
+ const input = { yesterdayObservations: observations, consolidatedAt: 1_000_000, secret: SECRET };
88
+ const firstSig = consolidateMemory(input).sig;
89
+ let allEqual = true;
90
+ for (let i = 0; i < 30; i++) {
91
+ if (consolidateMemory(input).sig !== firstSig) {
92
+ allEqual = false;
93
+ break;
94
+ }
95
+ }
96
+ expect(allEqual).toBe(true);
97
+ });
98
+ });
99
+ describe("v2.19.23 HIPPOCAMPUS-DREAMS · formatter", () => {
100
+ it("formatConsolidationLine renders digest", () => {
101
+ const r = consolidateMemory({ yesterdayObservations: [obs("sigA", "t1", 1)], consolidatedAt: 0, secret: SECRET });
102
+ const line = formatConsolidationLine(r);
103
+ expect(line).toContain("HIPPOCAMPUS");
104
+ });
105
+ });
106
+ //# sourceMappingURL=hippocampus_dreams.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hippocampus_dreams.test.js","sourceRoot":"","sources":["../../src/hippocampus_dreams/hippocampus_dreams.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * v2.19.23 — MNEME HIPPOCAMPUS-DREAMS (organ #5 of LIMBIC)
3
+ *
4
+ * "ตอน user หลับ daemon ฝัน → ฝึก reflex จาก yesterday"
5
+ *
6
+ * Diagnosis: v2.19.22 REFLEX learns ONLY from same-day observations.
7
+ * Patterns from last week / last month are LOST when the daemon is
8
+ * restarted (in-memory) or when the cache GCs (TTL expired).
9
+ * v2.19.14 DREAMS exists as a cycle but is not wired to consolidate
10
+ * into REFLEX patterns.
11
+ *
12
+ * Fix: HIPPOCAMPUS-DREAMS reads yesterday's pheromone trail, extracts
13
+ * stable patterns (event sig + tool that fired >= K times), and
14
+ * PROMOTES them to BUILTIN_RULES-style priors. Daemon calls this
15
+ * during the dream-tier idle period. The next day's REFLEX starts
16
+ * warm, not cold.
17
+ *
18
+ * Composes onto:
19
+ * - v2.19.22 REFLEX (PheromoneRecord shape; eventCacheKey)
20
+ * - v2.19.23 SPINAL_REFLEX (output is BuiltinReflexRule)
21
+ * - v2.19.14 DREAMS (caller scheduling pattern; dream cycle infra)
22
+ * - v2.19.10 PROOF-CARRYING (consolidation creates HMAC certificate)
23
+ *
24
+ * Honest scope:
25
+ * - PURE FUNCTION consolidator. Caller schedules the call (e.g.,
26
+ * daemon idle hook at 03:00 local time).
27
+ * - Pattern threshold (default 3 occurrences for promotion) configurable.
28
+ * - Output is a list of new rules + a consolidation report; caller
29
+ * persists the rules to JSON and reloads on next boot.
30
+ * - HMAC-signed report so daemon can audit consolidation history.
31
+ */
32
+ declare const PROTOCOL_VERSION: 1;
33
+ export interface YesterdayObservation {
34
+ eventKind: "file_save" | "git_commit" | "terminal_command" | "user_chat" | "tool_call";
35
+ /** Stable signature over event (already hashed by REFLEX caller). */
36
+ eventSig: string;
37
+ /** Tool that followed this event. */
38
+ toolName: string;
39
+ /** Args (for argsTemplate of the promoted rule). */
40
+ args: Record<string, unknown>;
41
+ ts: number;
42
+ }
43
+ export interface PromotedRule {
44
+ id: string;
45
+ eventKind: YesterdayObservation["eventKind"];
46
+ eventSig: string;
47
+ toolName: string;
48
+ argsTemplate: Record<string, unknown>;
49
+ occurrenceCount: number;
50
+ /** confidence promoted from frequency in yesterday's trail. */
51
+ priorConfidence: number;
52
+ reason: string;
53
+ }
54
+ export interface ConsolidationReport {
55
+ v: typeof PROTOCOL_VERSION;
56
+ consolidatedAt: number;
57
+ totalObservations: number;
58
+ uniqueEventSigs: number;
59
+ promotedRules: PromotedRule[];
60
+ promotionThreshold: number;
61
+ /** promotedRules.length / uniqueEventSigs — ratio of patterns stable enough to keep. */
62
+ crystallisationRatio: number;
63
+ sig: string;
64
+ }
65
+ /**
66
+ * Consolidate yesterday's pheromone trail into promoted rules. Patterns
67
+ * that fired >= threshold times become priors for tomorrow's REFLEX
68
+ * cold-start. Returns an HMAC-signed report.
69
+ */
70
+ export declare function consolidateMemory(input: {
71
+ yesterdayObservations: YesterdayObservation[];
72
+ consolidatedAt?: number;
73
+ promotionThreshold?: number;
74
+ secret?: string;
75
+ }): ConsolidationReport;
76
+ export declare function verifyConsolidation(r: ConsolidationReport, secret?: string): boolean;
77
+ export declare function formatConsolidationLine(r: ConsolidationReport): string;
78
+ export {};
79
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hippocampus_dreams/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAGpC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,WAAW,GAAG,YAAY,GAAG,kBAAkB,GAAG,WAAW,GAAG,WAAW,CAAC;IACvF,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAsBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CAmDtB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAGtE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * v2.19.23 — MNEME HIPPOCAMPUS-DREAMS (organ #5 of LIMBIC)
3
+ *
4
+ * "ตอน user หลับ daemon ฝัน → ฝึก reflex จาก yesterday"
5
+ *
6
+ * Diagnosis: v2.19.22 REFLEX learns ONLY from same-day observations.
7
+ * Patterns from last week / last month are LOST when the daemon is
8
+ * restarted (in-memory) or when the cache GCs (TTL expired).
9
+ * v2.19.14 DREAMS exists as a cycle but is not wired to consolidate
10
+ * into REFLEX patterns.
11
+ *
12
+ * Fix: HIPPOCAMPUS-DREAMS reads yesterday's pheromone trail, extracts
13
+ * stable patterns (event sig + tool that fired >= K times), and
14
+ * PROMOTES them to BUILTIN_RULES-style priors. Daemon calls this
15
+ * during the dream-tier idle period. The next day's REFLEX starts
16
+ * warm, not cold.
17
+ *
18
+ * Composes onto:
19
+ * - v2.19.22 REFLEX (PheromoneRecord shape; eventCacheKey)
20
+ * - v2.19.23 SPINAL_REFLEX (output is BuiltinReflexRule)
21
+ * - v2.19.14 DREAMS (caller scheduling pattern; dream cycle infra)
22
+ * - v2.19.10 PROOF-CARRYING (consolidation creates HMAC certificate)
23
+ *
24
+ * Honest scope:
25
+ * - PURE FUNCTION consolidator. Caller schedules the call (e.g.,
26
+ * daemon idle hook at 03:00 local time).
27
+ * - Pattern threshold (default 3 occurrences for promotion) configurable.
28
+ * - Output is a list of new rules + a consolidation report; caller
29
+ * persists the rules to JSON and reloads on next boot.
30
+ * - HMAC-signed report so daemon can audit consolidation history.
31
+ */
32
+ import { createHmac, timingSafeEqual } from "node:crypto";
33
+ const PROTOCOL_VERSION = 1;
34
+ const DEFAULT_PROMOTION_THRESHOLD = 3;
35
+ function canon(v) {
36
+ if (v === null || typeof v !== "object")
37
+ return JSON.stringify(v);
38
+ if (Array.isArray(v))
39
+ return "[" + v.map(canon).join(",") + "]";
40
+ const keys = Object.keys(v).sort();
41
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
42
+ }
43
+ function defaultSecret() {
44
+ return process.env["MNEME_HIPPOCAMPUS_SECRET"] || `mneme-hippocampus-dreams-v${PROTOCOL_VERSION}`;
45
+ }
46
+ function hmacHex(body, secret) {
47
+ return createHmac("sha256", secret).update(canon(body)).digest("hex");
48
+ }
49
+ function safeEqHex(a, b) {
50
+ try {
51
+ return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ /**
58
+ * Consolidate yesterday's pheromone trail into promoted rules. Patterns
59
+ * that fired >= threshold times become priors for tomorrow's REFLEX
60
+ * cold-start. Returns an HMAC-signed report.
61
+ */
62
+ export function consolidateMemory(input) {
63
+ const threshold = input.promotionThreshold ?? DEFAULT_PROMOTION_THRESHOLD;
64
+ const buckets = new Map();
65
+ for (const o of input.yesterdayObservations) {
66
+ const key = `${o.eventSig}::${o.toolName}`;
67
+ const prev = buckets.get(key);
68
+ if (prev) {
69
+ prev.count++;
70
+ prev.sample = o; // last-wins so argsTemplate is freshest
71
+ }
72
+ else {
73
+ buckets.set(key, { count: 1, sample: o });
74
+ }
75
+ }
76
+ // Count occurrences per eventSig (for confidence denominator)
77
+ const eventSigTotals = new Map();
78
+ for (const o of input.yesterdayObservations) {
79
+ eventSigTotals.set(o.eventSig, (eventSigTotals.get(o.eventSig) ?? 0) + 1);
80
+ }
81
+ // Promote
82
+ const promoted = [];
83
+ for (const [key, b] of buckets) {
84
+ if (b.count < threshold)
85
+ continue;
86
+ const total = eventSigTotals.get(b.sample.eventSig);
87
+ const confidence = b.count / total;
88
+ promoted.push({
89
+ id: `hippo_${b.sample.eventSig.slice(0, 8)}_${b.sample.toolName.replace(/[^a-zA-Z0-9]/g, "_")}`,
90
+ eventKind: b.sample.eventKind,
91
+ eventSig: b.sample.eventSig,
92
+ toolName: b.sample.toolName,
93
+ argsTemplate: b.sample.args,
94
+ occurrenceCount: b.count,
95
+ priorConfidence: Math.min(1, Math.max(0, confidence)),
96
+ reason: `Consolidated from ${b.count} ${b.sample.eventKind} observations yesterday (${(confidence * 100).toFixed(0)}% of event sig ${b.sample.eventSig.slice(0, 8)})`,
97
+ });
98
+ }
99
+ promoted.sort((a, b) => b.priorConfidence - a.priorConfidence || a.id.localeCompare(b.id));
100
+ const uniqueEventSigs = eventSigTotals.size;
101
+ const consolidatedAt = input.consolidatedAt ?? Date.now();
102
+ const body = {
103
+ v: PROTOCOL_VERSION,
104
+ consolidatedAt,
105
+ totalObservations: input.yesterdayObservations.length,
106
+ uniqueEventSigs,
107
+ promotedRules: promoted,
108
+ promotionThreshold: threshold,
109
+ crystallisationRatio: uniqueEventSigs === 0 ? 0 : promoted.length / uniqueEventSigs,
110
+ };
111
+ const sig = hmacHex(body, input.secret ?? defaultSecret());
112
+ return { ...body, sig };
113
+ }
114
+ export function verifyConsolidation(r, secret) {
115
+ const { sig, ...body } = r;
116
+ return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
117
+ }
118
+ export function formatConsolidationLine(r) {
119
+ const pct = (r.crystallisationRatio * 100).toFixed(0);
120
+ return `💤 HIPPOCAMPUS · ${r.totalObservations} obs · ${r.uniqueEventSigs} sigs · ${r.promotedRules.length} promoted (${pct}% crystallised)`;
121
+ }
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hippocampus_dreams/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hormonal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hormonal.test.d.ts","sourceRoot":"","sources":["../../src/hormonal/hormonal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { neutralState, updateHormones, tuneFromHormones, emptyLedger, recordHormonal, verifyLedger, formatHormonalLine, } from "./index.js";
3
+ const SECRET = "hormonal-test-secret-997744";
4
+ describe("v2.19.23 HORMONAL · neutralState + invariants", () => {
5
+ it("neutralState: focus 0.5, fatigue 0.0, mood 0.5", () => {
6
+ const s = neutralState(0);
7
+ expect(s.focus).toBe(0.5);
8
+ expect(s.fatigue).toBe(0.0);
9
+ expect(s.mood).toBe(0.5);
10
+ });
11
+ });
12
+ describe("v2.19.23 HORMONAL · updateHormones", () => {
13
+ it("toolError raises fatigue", () => {
14
+ const s = updateHormones({ state: neutralState(0), observation: { toolError: true, elapsedMs: 0 } });
15
+ expect(s.fatigue).toBeGreaterThan(0);
16
+ });
17
+ it("cacheHit=true raises mood", () => {
18
+ const s = updateHormones({ state: neutralState(0), observation: { cacheHit: true, elapsedMs: 0 } });
19
+ expect(s.mood).toBeGreaterThan(0.5);
20
+ });
21
+ it("rapidAction raises focus", () => {
22
+ const s = updateHormones({ state: neutralState(0), observation: { rapidAction: true, elapsedMs: 0 } });
23
+ expect(s.focus).toBeGreaterThan(0.5);
24
+ });
25
+ it("successfulCommit raises mood", () => {
26
+ const s = updateHormones({ state: neutralState(0), observation: { successfulCommit: true, elapsedMs: 0 } });
27
+ expect(s.mood).toBeGreaterThan(0.5);
28
+ });
29
+ it("all signals clamped to [0,1]", () => {
30
+ let s = neutralState(0);
31
+ for (let i = 0; i < 1000; i++) {
32
+ s = updateHormones({ state: s, observation: { toolError: true, cacheHit: true, rapidAction: true, elapsedMs: 0 } });
33
+ }
34
+ expect(s.focus).toBeLessThanOrEqual(1);
35
+ expect(s.focus).toBeGreaterThanOrEqual(0);
36
+ expect(s.fatigue).toBeLessThanOrEqual(1);
37
+ expect(s.mood).toBeLessThanOrEqual(1);
38
+ });
39
+ it("natural decay toward baselines (fatigue -> 0, focus/mood -> 0.5)", () => {
40
+ let s = { v: 1, focus: 0.9, fatigue: 0.9, mood: 0.9, ts: 0 };
41
+ s = updateHormones({ state: s, observation: { elapsedMs: 60 * 60_000 } }); // 1 hour
42
+ // After natural decay only (no observation deltas)
43
+ expect(s.fatigue).toBeLessThan(0.9);
44
+ expect(Math.abs(s.focus - 0.5)).toBeLessThan(Math.abs(0.9 - 0.5));
45
+ expect(Math.abs(s.mood - 0.5)).toBeLessThan(Math.abs(0.9 - 0.5));
46
+ });
47
+ });
48
+ describe("v2.19.23 HORMONAL · tuneFromHormones (cross-organ adjustment)", () => {
49
+ it("neutral state -> midrange config", () => {
50
+ const c = tuneFromHormones(neutralState(0));
51
+ expect(c.breathHeartbeatMs).toBe(50);
52
+ expect(c.reflexPrefetchBudgetMs).toBe(150);
53
+ expect(c.dreamIdleThresholdMs).toBe(30 * 60_000 - 0.5 * 20 * 60_000); // 30 - 10 = 20min
54
+ expect(c.negevTaxMultiplier).toBe(1.0);
55
+ });
56
+ it("high fatigue -> longer breath + stricter negev", () => {
57
+ const c = tuneFromHormones({ v: 1, focus: 0.5, fatigue: 1.0, mood: 0.5, ts: 0 });
58
+ expect(c.breathHeartbeatMs).toBe(200);
59
+ expect(c.negevTaxMultiplier).toBe(1.5);
60
+ });
61
+ it("high focus -> shorter prefetch (don't interrupt deep work)", () => {
62
+ const c = tuneFromHormones({ v: 1, focus: 1.0, fatigue: 0.0, mood: 0.5, ts: 0 });
63
+ expect(c.reflexPrefetchBudgetMs).toBe(100);
64
+ });
65
+ it("high mood -> shorter dream threshold (work harder)", () => {
66
+ const c = tuneFromHormones({ v: 1, focus: 0.5, fatigue: 0.0, mood: 1.0, ts: 0 });
67
+ expect(c.dreamIdleThresholdMs).toBe(10 * 60_000);
68
+ });
69
+ it("MEASURED 100% determinism: same state -> same config (50 trials)", () => {
70
+ const state = { v: 1, focus: 0.7, fatigue: 0.3, mood: 0.6, ts: 0 };
71
+ const first = JSON.stringify(tuneFromHormones(state));
72
+ let allEqual = true;
73
+ for (let i = 0; i < 50; i++) {
74
+ if (JSON.stringify(tuneFromHormones(state)) !== first) {
75
+ allEqual = false;
76
+ break;
77
+ }
78
+ }
79
+ expect(allEqual).toBe(true);
80
+ });
81
+ });
82
+ describe("v2.19.23 HORMONAL · ledger (HMAC chain)", () => {
83
+ it("recordHormonal chains; verify passes untampered", () => {
84
+ let L = emptyLedger();
85
+ let s = neutralState(0);
86
+ L = recordHormonal({ ledger: L, state: s, observation: { elapsedMs: 0, toolError: true }, secret: SECRET });
87
+ s = updateHormones({ state: s, observation: { elapsedMs: 0, toolError: true } });
88
+ L = recordHormonal({ ledger: L, state: s, observation: { elapsedMs: 0, cacheHit: true }, secret: SECRET });
89
+ expect(L.records).toHaveLength(2);
90
+ expect(L.records[1].prevSig).toBe(L.records[0].sig);
91
+ expect(verifyLedger(L, SECRET).ok).toBe(true);
92
+ });
93
+ it("verifyLedger detects tamper at exact step", () => {
94
+ let L = emptyLedger();
95
+ let s = neutralState(0);
96
+ for (let i = 0; i < 4; i++) {
97
+ L = recordHormonal({ ledger: L, state: s, observation: { elapsedMs: 0 }, secret: SECRET });
98
+ }
99
+ const tampered = {
100
+ ...L,
101
+ records: L.records.map((r, i) => (i === 2 ? { ...r, state: { ...r.state, fatigue: 0.99 } } : r)),
102
+ };
103
+ const v = verifyLedger(tampered, SECRET);
104
+ expect(v.ok).toBe(false);
105
+ expect(v.brokenAt).toBe(2);
106
+ });
107
+ });
108
+ describe("v2.19.23 HORMONAL · formatter", () => {
109
+ it("formatHormonalLine includes all 3 signals", () => {
110
+ const line = formatHormonalLine(neutralState(0));
111
+ expect(line).toContain("focus");
112
+ expect(line).toContain("fatigue");
113
+ expect(line).toContain("mood");
114
+ });
115
+ });
116
+ //# sourceMappingURL=hormonal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hormonal.test.js","sourceRoot":"","sources":["../../src/hormonal/hormonal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAE7C,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5G,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtH,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,IAAI,CAAC,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5E,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACpF,mDAAmD;QACnD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB;QACxF,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,KAAK,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAAC,QAAQ,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;QACrF,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,IAAI,CAAC,GAAmB,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5G,CAAC,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,IAAI,CAAC,GAAmB,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,QAAQ,GAAmB;YAC/B,GAAG,CAAC;YACJ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjG,CAAC;QACF,MAAM,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * v2.19.23 — MNEME HORMONAL (organ #6 of LIMBIC) · slow signal across all organs
3
+ *
4
+ * "mood / focus / fatigue ปรับ behavior ทั้งระบบ"
5
+ *
6
+ * Diagnosis: every organ has its own tunables (BREATH heartbeat budget,
7
+ * REFLEX prefetch budget, DREAM idle threshold, NEGEV token budget).
8
+ * Without a meta-signal, every organ tunes itself in isolation — system
9
+ * never adapts to "AI agent is hitting a lot of errors today; slow
10
+ * down" or "user is in a deep flow; minimize interruptions".
11
+ *
12
+ * Fix: HORMONAL ships 3 slow-changing signals (focus / fatigue / mood)
13
+ * that every organ reads. Caller updates the state from observation
14
+ * feeds (error rate raises fatigue; cache hit raises mood; rapid
15
+ * commits raise focus). Every organ exposes a tunable that takes
16
+ * HormonalState as an optional argument.
17
+ *
18
+ * Composes onto:
19
+ * - v2.19.23 BREATH (heartbeatBudgetMs reads fatigue)
20
+ * - v2.19.22 REFLEX (prefetch budgetMs reads focus)
21
+ * - v2.19.23 THALAMUS (dream threshold reads mood)
22
+ * - v2.19.13 NEGEV (token-tax intensity reads fatigue)
23
+ *
24
+ * Honest scope:
25
+ * - 3 signals, each 0..1 clamped.
26
+ * - HMAC-chained ledger for tamper-evident state evolution.
27
+ * - Adjustments are LINEAR + DETERMINISTIC; no ML.
28
+ * - This is METADATA, not state-machine. Caller updates frequency at
29
+ * own cadence (e.g., daemon every 60s).
30
+ */
31
+ declare const PROTOCOL_VERSION: 1;
32
+ export interface HormonalState {
33
+ v: typeof PROTOCOL_VERSION;
34
+ /** 0..1 — high = user is in deep work; minimize interruptions. */
35
+ focus: number;
36
+ /** 0..1 — high = AI agent / daemon hitting errors; slow down. */
37
+ fatigue: number;
38
+ /** 0..1 — high = recent cache hits + successful commits; lean forward. */
39
+ mood: number;
40
+ /** ms since epoch of last update. */
41
+ ts: number;
42
+ }
43
+ export interface HormonalObservation {
44
+ /** +1 per cache hit; -0.5 per cache miss. */
45
+ cacheHit?: boolean;
46
+ /** Raises fatigue by 0.05. */
47
+ toolError?: boolean;
48
+ /** Raises mood by 0.02. */
49
+ successfulCommit?: boolean;
50
+ /** Raises focus by 0.05 per rapid action (>2 actions/min). */
51
+ rapidAction?: boolean;
52
+ /** ms since previous update; used for natural decay. */
53
+ elapsedMs: number;
54
+ }
55
+ export interface HormonalRecord {
56
+ v: typeof PROTOCOL_VERSION;
57
+ ts: number;
58
+ state: HormonalState;
59
+ observation: HormonalObservation;
60
+ prevSig: string | null;
61
+ sig: string;
62
+ }
63
+ export interface HormonalLedger {
64
+ v: typeof PROTOCOL_VERSION;
65
+ records: HormonalRecord[];
66
+ }
67
+ export declare function neutralState(ts?: number): HormonalState;
68
+ /**
69
+ * Apply an observation to evolve the hormonal state. Each signal decays
70
+ * naturally toward 0.5 (focus / mood) or 0.0 (fatigue) at
71
+ * DEFAULT_DECAY_PER_MIN; observation deltas are added after decay.
72
+ */
73
+ export declare function updateHormones(input: {
74
+ state: HormonalState;
75
+ observation: HormonalObservation;
76
+ decayPerMin?: number;
77
+ nowMs?: number;
78
+ }): HormonalState;
79
+ export interface TunedConfig {
80
+ /** BREATH: heartbeat check budget; high fatigue -> longer. */
81
+ breathHeartbeatMs: number;
82
+ /** REFLEX: prefetch budget; high focus -> shorter (don't interrupt). */
83
+ reflexPrefetchBudgetMs: number;
84
+ /** THALAMUS: idle threshold for dream tier; high mood -> shorter (work harder). */
85
+ dreamIdleThresholdMs: number;
86
+ /** NEGEV: token-tax intensity; high fatigue -> stricter. */
87
+ negevTaxMultiplier: number;
88
+ }
89
+ export declare function tuneFromHormones(state: HormonalState): TunedConfig;
90
+ export declare function emptyLedger(): HormonalLedger;
91
+ export declare function recordHormonal(input: {
92
+ ledger: HormonalLedger;
93
+ state: HormonalState;
94
+ observation: HormonalObservation;
95
+ nowMs?: number;
96
+ secret?: string;
97
+ }): HormonalLedger;
98
+ export declare function verifyLedger(ledger: HormonalLedger, secret?: string): {
99
+ ok: boolean;
100
+ brokenAt?: number;
101
+ reason?: string;
102
+ };
103
+ export declare function formatHormonalLine(s: HormonalState): string;
104
+ export {};
105
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hormonal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAIpC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAsBD,wBAAgB,YAAY,CAAC,EAAE,SAAI,GAAG,aAAa,CAElD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAqBhB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAOlE;AAED,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,cAAc,CAWjB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAWzH;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAE3D"}