@mneme-ai/core 2.19.25 → 2.19.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cosmic/aurelian_v1925.test.js +1 -1
- package/dist/cosmic/aurelian_v1925.test.js.map +1 -1
- package/dist/cosmic/aurelian_v1926.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1926.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1926.test.js +48 -0
- package/dist/cosmic/aurelian_v1926.test.js.map +1 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.d.ts +2 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.d.ts.map +1 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.js +199 -0
- package/dist/dreamspace_evolution/dreamspace_evolution.test.js.map +1 -0
- package/dist/dreamspace_evolution/index.d.ts +140 -0
- package/dist/dreamspace_evolution/index.d.ts.map +1 -0
- package/dist/dreamspace_evolution/index.js +210 -0
- package/dist/dreamspace_evolution/index.js.map +1 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.d.ts +2 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.d.ts.map +1 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.js +160 -0
- package/dist/dreamspace_gestation/dreamspace_gestation.test.js.map +1 -0
- package/dist/dreamspace_gestation/index.d.ts +136 -0
- package/dist/dreamspace_gestation/index.d.ts.map +1 -0
- package/dist/dreamspace_gestation/index.js +186 -0
- package/dist/dreamspace_gestation/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +8 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +11 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.26 — MNEME DREAMSPACE · EVOLUTION (self-authoring MCP catalog · phase 2 of 2)
|
|
3
|
+
*
|
|
4
|
+
* "ของ 1-6 ทุกตัวมอง dreams เป็น product (ผลิต vaccine / prophecy /
|
|
5
|
+
* paradox / artwork). ของ 7 มอง dreams เป็น factory (ผลิต tools
|
|
6
|
+
* ที่ผลิต product ตลอดไป). Factory > product บนแกน compounding +
|
|
7
|
+
* durability."
|
|
8
|
+
* — user audit, 2026-05-17
|
|
9
|
+
*
|
|
10
|
+
* Diagnosis: GESTATION proposes new tools; EVOLUTION decides which
|
|
11
|
+
* survive. Without lifecycle, the auto-proposed catalog grows
|
|
12
|
+
* unboundedly and becomes its own noise. Without mating, two
|
|
13
|
+
* high-fitness siblings never combine into a stronger third.
|
|
14
|
+
*
|
|
15
|
+
* 4 lifecycle bands (deterministic; pure-function):
|
|
16
|
+
* 🥚 GESTATING — age < 7 days; uses < 5 (newborn)
|
|
17
|
+
* 🐣 JUVENILE — age < 30 days; 5 <= uses < 50 (proving itself)
|
|
18
|
+
* 🦋 MATURE — age >= 30 days; uses >= 50 (promotion candidate)
|
|
19
|
+
* 🍂 ATROPHIED — age > 30 days; uses < 1/week (sunset candidate)
|
|
20
|
+
*
|
|
21
|
+
* Mate selection: scan a use-history log for ordered pairs (tool_A
|
|
22
|
+
* then tool_B) that co-occur >= threshold times. Each qualifying
|
|
23
|
+
* pair becomes a CompositionMatingProposal — caller emits a fresh
|
|
24
|
+
* GestationSignal of kind "pattern_co_occurrence" to v2.19.26
|
|
25
|
+
* GESTATION, which proposes a brand-new chimera. Birth via mating.
|
|
26
|
+
*
|
|
27
|
+
* Composes onto:
|
|
28
|
+
* - v2.19.26 GESTATION (proposed tools have ts; we track them)
|
|
29
|
+
* - v2.19.11 MORTAL (lifecycle bands ≈ generations)
|
|
30
|
+
* - v2.19.9 WRAPPER_GENESPLICING (chimera execute target)
|
|
31
|
+
* - v2.19.14 CONSEQUENCE LEDGER (use-history source)
|
|
32
|
+
* - v2.19.25 SLEEP TRAINING (fitness gradient feeds promotion)
|
|
33
|
+
*
|
|
34
|
+
* Honest scope:
|
|
35
|
+
* - PURE FUNCTION lifecycle classifier + mate selector. Caller
|
|
36
|
+
* persists the use-history log + the lifecycle verdicts.
|
|
37
|
+
* - Lifecycle thresholds are CONFIG (caller can override).
|
|
38
|
+
* - Mating only proposes pairs that have actually co-occurred; we
|
|
39
|
+
* never invent novel pairs out of nothing.
|
|
40
|
+
* - HMAC-signed evolution reports + chain of cycles for tamper audit.
|
|
41
|
+
*/
|
|
42
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
43
|
+
const PROTOCOL_VERSION = 1;
|
|
44
|
+
const DEFAULT_CONFIG = {
|
|
45
|
+
gestatingMaxAgeMs: 7 * 86400 * 1000,
|
|
46
|
+
juvenileMaxAgeMs: 30 * 86400 * 1000,
|
|
47
|
+
juvenileMinUses: 5,
|
|
48
|
+
matureMinUses: 50,
|
|
49
|
+
atrophiedMaxUsesPerWeek: 1,
|
|
50
|
+
};
|
|
51
|
+
function canon(v) {
|
|
52
|
+
if (v === null || typeof v !== "object")
|
|
53
|
+
return JSON.stringify(v);
|
|
54
|
+
if (Array.isArray(v))
|
|
55
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
56
|
+
const keys = Object.keys(v).sort();
|
|
57
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
58
|
+
}
|
|
59
|
+
function defaultSecret() {
|
|
60
|
+
return process.env["MNEME_DREAMSPACE_EVOLUTION_SECRET"] || `mneme-dreamspace-evolution-v${PROTOCOL_VERSION}`;
|
|
61
|
+
}
|
|
62
|
+
function hmacHex(body, secret) {
|
|
63
|
+
return createHmac("sha256", secret).update(canon(body)).digest("hex");
|
|
64
|
+
}
|
|
65
|
+
function safeEqHex(a, b) {
|
|
66
|
+
try {
|
|
67
|
+
return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Classify a tool's lifecycle band based on age + use count + recency.
|
|
75
|
+
* Priority order:
|
|
76
|
+
* 1. age < gestatingMax → gestating
|
|
77
|
+
* 2. age < juvenileMax AND uses >= juvenileMin → juvenile
|
|
78
|
+
* 3. age >= juvenileMax AND uses >= matureMin → mature (promote)
|
|
79
|
+
* 4. uses-per-week < atrophiedMax → atrophied (sunset)
|
|
80
|
+
* 5. fallback → juvenile (still proving)
|
|
81
|
+
*/
|
|
82
|
+
export function classifyLifecycle(input) {
|
|
83
|
+
const cfg = { ...DEFAULT_CONFIG, ...input.config };
|
|
84
|
+
const ageMs = Math.max(0, input.nowMs - input.record.bornTs);
|
|
85
|
+
const ageDays = ageMs / 86400000;
|
|
86
|
+
const ageWeeks = Math.max(1 / 7, ageMs / (7 * 86400000));
|
|
87
|
+
const usesPerWeek = input.record.useCount / ageWeeks;
|
|
88
|
+
let band;
|
|
89
|
+
let reason;
|
|
90
|
+
let recommendation;
|
|
91
|
+
if (ageMs < cfg.gestatingMaxAgeMs) {
|
|
92
|
+
band = "gestating";
|
|
93
|
+
reason = `newborn (age ${ageDays.toFixed(1)}d < ${(cfg.gestatingMaxAgeMs / 86400000).toFixed(0)}d threshold)`;
|
|
94
|
+
recommendation = "keep";
|
|
95
|
+
}
|
|
96
|
+
else if (ageMs >= cfg.juvenileMaxAgeMs && input.record.useCount >= cfg.matureMinUses) {
|
|
97
|
+
band = "mature";
|
|
98
|
+
reason = `proven (age ${ageDays.toFixed(1)}d >= ${(cfg.juvenileMaxAgeMs / 86400000).toFixed(0)}d AND uses ${input.record.useCount} >= ${cfg.matureMinUses})`;
|
|
99
|
+
recommendation = "promote";
|
|
100
|
+
}
|
|
101
|
+
else if (ageMs >= cfg.juvenileMaxAgeMs && usesPerWeek < cfg.atrophiedMaxUsesPerWeek) {
|
|
102
|
+
band = "atrophied";
|
|
103
|
+
reason = `unused (age ${ageDays.toFixed(1)}d >= ${(cfg.juvenileMaxAgeMs / 86400000).toFixed(0)}d AND ${usesPerWeek.toFixed(2)}/wk < ${cfg.atrophiedMaxUsesPerWeek}/wk)`;
|
|
104
|
+
recommendation = "sunset";
|
|
105
|
+
}
|
|
106
|
+
else if (input.record.useCount >= cfg.juvenileMinUses) {
|
|
107
|
+
band = "juvenile";
|
|
108
|
+
reason = `proving itself (age ${ageDays.toFixed(1)}d, uses ${input.record.useCount} >= ${cfg.juvenileMinUses})`;
|
|
109
|
+
recommendation = "keep";
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
band = "juvenile";
|
|
113
|
+
reason = `still on probation (age ${ageDays.toFixed(1)}d, uses ${input.record.useCount} < ${cfg.juvenileMinUses})`;
|
|
114
|
+
recommendation = "keep";
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
v: PROTOCOL_VERSION,
|
|
118
|
+
toolName: input.record.toolName,
|
|
119
|
+
band,
|
|
120
|
+
ageMs,
|
|
121
|
+
ageDays,
|
|
122
|
+
useCount: input.record.useCount,
|
|
123
|
+
usesPerWeek,
|
|
124
|
+
reason,
|
|
125
|
+
recommendation,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Scan a chronological use log for ordered (A, B) pairs that occur
|
|
130
|
+
* within `windowMs` of each other, more than `minCount` times.
|
|
131
|
+
*
|
|
132
|
+
* Returns pairs sorted by frequency desc. Each pair becomes a candidate
|
|
133
|
+
* mating signal for a brand-new chimera.
|
|
134
|
+
*/
|
|
135
|
+
export function selectMatingPairs(input) {
|
|
136
|
+
const windowMs = input.windowMs ?? 60 * 1000; // 1-minute window default
|
|
137
|
+
const minCount = input.minCount ?? 4;
|
|
138
|
+
// Sort log by ts ascending
|
|
139
|
+
const sorted = [...input.log].sort((a, b) => a.ts - b.ts);
|
|
140
|
+
const counts = new Map();
|
|
141
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
142
|
+
for (let j = i + 1; j < sorted.length; j++) {
|
|
143
|
+
const dt = sorted[j].ts - sorted[i].ts;
|
|
144
|
+
if (dt <= 0)
|
|
145
|
+
continue;
|
|
146
|
+
if (dt > windowMs)
|
|
147
|
+
break;
|
|
148
|
+
if (sorted[i].toolName === sorted[j].toolName)
|
|
149
|
+
continue;
|
|
150
|
+
const key = `${sorted[i].toolName}::${sorted[j].toolName}`;
|
|
151
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const pairs = [];
|
|
155
|
+
for (const [key, count] of counts) {
|
|
156
|
+
if (count < minCount)
|
|
157
|
+
continue;
|
|
158
|
+
const [toolA, toolB] = key.split("::");
|
|
159
|
+
pairs.push({ toolA, toolB, coOccurrenceCount: count, windowMs });
|
|
160
|
+
}
|
|
161
|
+
pairs.sort((a, b) => b.coOccurrenceCount - a.coOccurrenceCount || a.toolA.localeCompare(b.toolA));
|
|
162
|
+
return pairs;
|
|
163
|
+
}
|
|
164
|
+
export function runEvolutionCycle(input) {
|
|
165
|
+
const nowMs = input.nowMs ?? Date.now();
|
|
166
|
+
const verdicts = input.records.map((r) => classifyLifecycle({ record: r, nowMs, config: input.config }));
|
|
167
|
+
const pairs = selectMatingPairs({
|
|
168
|
+
log: input.log,
|
|
169
|
+
windowMs: input.matingWindowMs,
|
|
170
|
+
minCount: input.matingMinCount,
|
|
171
|
+
});
|
|
172
|
+
const bandCounts = { gestating: 0, juvenile: 0, mature: 0, atrophied: 0 };
|
|
173
|
+
for (const v of verdicts)
|
|
174
|
+
bandCounts[v.band]++;
|
|
175
|
+
let promoteCount = 0, sunsetCount = 0;
|
|
176
|
+
for (const v of verdicts) {
|
|
177
|
+
if (v.recommendation === "promote")
|
|
178
|
+
promoteCount++;
|
|
179
|
+
if (v.recommendation === "sunset")
|
|
180
|
+
sunsetCount++;
|
|
181
|
+
}
|
|
182
|
+
const body = {
|
|
183
|
+
v: PROTOCOL_VERSION,
|
|
184
|
+
cycleAt: input.cycleAt ?? nowMs,
|
|
185
|
+
verdicts,
|
|
186
|
+
matingPairs: pairs,
|
|
187
|
+
bandCounts,
|
|
188
|
+
promoteCount,
|
|
189
|
+
sunsetCount,
|
|
190
|
+
};
|
|
191
|
+
const sig = hmacHex(body, input.secret ?? defaultSecret());
|
|
192
|
+
return { ...body, sig };
|
|
193
|
+
}
|
|
194
|
+
export function verifyEvolutionReport(r, secret) {
|
|
195
|
+
const { sig, ...body } = r;
|
|
196
|
+
return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
|
|
197
|
+
}
|
|
198
|
+
export const LIFECYCLE_EMOJI = {
|
|
199
|
+
gestating: "🥚",
|
|
200
|
+
juvenile: "🐣",
|
|
201
|
+
mature: "🦋",
|
|
202
|
+
atrophied: "🍂",
|
|
203
|
+
};
|
|
204
|
+
export function formatEvolutionLine(r) {
|
|
205
|
+
return `🦋 EVOLUTION · 🥚${r.bandCounts.gestating} · 🐣${r.bandCounts.juvenile} · 🦋${r.bandCounts.mature} · 🍂${r.bandCounts.atrophied} · ↑promote=${r.promoteCount} · ↓sunset=${r.sunsetCount} · 💞pairs=${r.matingPairs.length}`;
|
|
206
|
+
}
|
|
207
|
+
export function formatVerdictLine(v) {
|
|
208
|
+
return `${LIFECYCLE_EMOJI[v.band]} ${v.toolName} · ${v.band} (${v.ageDays.toFixed(1)}d, ${v.useCount} uses, ${v.usesPerWeek.toFixed(1)}/wk) → ${v.recommendation}`;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dreamspace_evolution/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreamspace_gestation.test.d.ts","sourceRoot":"","sources":["../../src/dreamspace_gestation/dreamspace_gestation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { detectToolGaps, proposeToolSpec, verifyProposal, runGestationCycle, verifyGestationReport, formatProposalLine, } from "./index.js";
|
|
3
|
+
const SECRET = "gestation-test-secret-997744";
|
|
4
|
+
function sig(kind, label, relatedTools, count, ts = 1) {
|
|
5
|
+
return { v: 1, kind, label, relatedTools, count, ts };
|
|
6
|
+
}
|
|
7
|
+
describe("v2.19.26 GESTATION · detectToolGaps", () => {
|
|
8
|
+
it("filters below-threshold signals (default minGapCount=3)", () => {
|
|
9
|
+
const out = detectToolGaps({
|
|
10
|
+
signals: [
|
|
11
|
+
sig("reflex_cache_miss", "x", [], 2), // below threshold
|
|
12
|
+
sig("reflex_cache_miss", "y", [], 5), // above
|
|
13
|
+
],
|
|
14
|
+
});
|
|
15
|
+
expect(out.length).toBe(1);
|
|
16
|
+
expect(out[0].label).toBe("y");
|
|
17
|
+
});
|
|
18
|
+
it("co-occurrence has higher threshold (default minCoOccurCount=4)", () => {
|
|
19
|
+
const out = detectToolGaps({
|
|
20
|
+
signals: [
|
|
21
|
+
sig("pattern_co_occurrence", "x", ["a", "b"], 3), // below co-threshold
|
|
22
|
+
sig("pattern_co_occurrence", "y", ["a", "b"], 5), // above
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
expect(out.length).toBe(1);
|
|
26
|
+
expect(out[0].label).toBe("y");
|
|
27
|
+
});
|
|
28
|
+
it("sorts by count desc, then label asc", () => {
|
|
29
|
+
const out = detectToolGaps({
|
|
30
|
+
signals: [
|
|
31
|
+
sig("reflex_cache_miss", "b", [], 5),
|
|
32
|
+
sig("reflex_cache_miss", "a", [], 5),
|
|
33
|
+
sig("reflex_cache_miss", "c", [], 10),
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
expect(out.map((g) => g.label)).toEqual(["c", "a", "b"]);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("v2.19.26 GESTATION · proposeToolSpec (3 gap kinds)", () => {
|
|
40
|
+
it("pattern_co_occurrence -> mneme.auto.X_then_Y chimera", () => {
|
|
41
|
+
const spec = proposeToolSpec({
|
|
42
|
+
gap: sig("pattern_co_occurrence", "git_commit:fix-prefix", ["mneme.ask", "mneme.why"], 6),
|
|
43
|
+
secret: SECRET,
|
|
44
|
+
});
|
|
45
|
+
expect(spec.proposedName).toBe("mneme.auto.ask_then_why");
|
|
46
|
+
expect(spec.composerKind).toBe("sequential");
|
|
47
|
+
expect(spec.composerRecipe.length).toBe(2);
|
|
48
|
+
expect(spec.composerRecipe[0].toolName).toBe("mneme.ask");
|
|
49
|
+
expect(spec.composerRecipe[1].toolName).toBe("mneme.why");
|
|
50
|
+
});
|
|
51
|
+
it("reflex_cache_miss with related tools -> handler chimera", () => {
|
|
52
|
+
const spec = proposeToolSpec({
|
|
53
|
+
gap: sig("reflex_cache_miss", "user_chat:thai-refresh", ["mneme.status", "mneme.whats_new"], 4),
|
|
54
|
+
secret: SECRET,
|
|
55
|
+
});
|
|
56
|
+
expect(spec.proposedName).toContain("mneme.auto.handle_");
|
|
57
|
+
expect(spec.composerRecipe.length).toBe(2);
|
|
58
|
+
});
|
|
59
|
+
it("reflex_cache_miss with NO related tools -> smart_do fallback", () => {
|
|
60
|
+
const spec = proposeToolSpec({
|
|
61
|
+
gap: sig("reflex_cache_miss", "unknown:x", [], 4),
|
|
62
|
+
secret: SECRET,
|
|
63
|
+
});
|
|
64
|
+
expect(spec.composerRecipe[0].toolName).toBe("mneme.smart_do");
|
|
65
|
+
});
|
|
66
|
+
it("user_chat_no_match -> intent handler with query schema", () => {
|
|
67
|
+
const spec = proposeToolSpec({
|
|
68
|
+
gap: sig("user_chat_no_match", "compress yesterday's commits", [], 5),
|
|
69
|
+
secret: SECRET,
|
|
70
|
+
});
|
|
71
|
+
expect(spec.proposedName).toContain("mneme.auto.intent_");
|
|
72
|
+
expect(spec.proposedInputSchema.required).toContain("query");
|
|
73
|
+
});
|
|
74
|
+
it("confidence scales with gap count (capped at 1.0)", () => {
|
|
75
|
+
const low = proposeToolSpec({ gap: sig("reflex_cache_miss", "x", [], 3), secret: SECRET, minGapCount: 3 });
|
|
76
|
+
const high = proposeToolSpec({ gap: sig("reflex_cache_miss", "x", [], 30), secret: SECRET, minGapCount: 3 });
|
|
77
|
+
expect(high.confidence).toBeGreaterThan(low.confidence);
|
|
78
|
+
expect(high.confidence).toBeLessThanOrEqual(1);
|
|
79
|
+
});
|
|
80
|
+
it("HMAC sig verifies untampered; rejects tamper", () => {
|
|
81
|
+
const spec = proposeToolSpec({ gap: sig("reflex_cache_miss", "x", [], 5), secret: SECRET });
|
|
82
|
+
expect(verifyProposal(spec, SECRET)).toBe(true);
|
|
83
|
+
expect(verifyProposal({ ...spec, confidence: 0.99 }, SECRET)).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
it("MEASURED 100% determinism: same gap -> same proposal sig (30 trials)", () => {
|
|
86
|
+
const gap = sig("pattern_co_occurrence", "stable", ["mneme.ask", "mneme.why"], 8, 1_000_000);
|
|
87
|
+
const firstSig = proposeToolSpec({ gap, secret: SECRET }).sig;
|
|
88
|
+
let allEqual = true;
|
|
89
|
+
for (let i = 0; i < 30; i++) {
|
|
90
|
+
if (proposeToolSpec({ gap, secret: SECRET }).sig !== firstSig) {
|
|
91
|
+
allEqual = false;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
expect(allEqual).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe("v2.19.26 GESTATION · runGestationCycle (full loop)", () => {
|
|
99
|
+
it("empty signals -> empty proposals", () => {
|
|
100
|
+
const r = runGestationCycle({ signals: [], cycleAt: 0, secret: SECRET });
|
|
101
|
+
expect(r.qualifyingGaps).toBe(0);
|
|
102
|
+
expect(r.proposals).toEqual([]);
|
|
103
|
+
});
|
|
104
|
+
it("mixed signals: only above-threshold yield proposals", () => {
|
|
105
|
+
const r = runGestationCycle({
|
|
106
|
+
signals: [
|
|
107
|
+
sig("reflex_cache_miss", "x", [], 2), // below
|
|
108
|
+
sig("reflex_cache_miss", "y", [], 5), // qualifies
|
|
109
|
+
sig("pattern_co_occurrence", "z", ["mneme.a", "mneme.b"], 4), // qualifies (co threshold 4)
|
|
110
|
+
sig("user_chat_no_match", "?", [], 1), // below
|
|
111
|
+
],
|
|
112
|
+
cycleAt: 0,
|
|
113
|
+
secret: SECRET,
|
|
114
|
+
});
|
|
115
|
+
expect(r.totalSignals).toBe(4);
|
|
116
|
+
expect(r.qualifyingGaps).toBe(2);
|
|
117
|
+
expect(r.proposals.length).toBe(2);
|
|
118
|
+
});
|
|
119
|
+
it("HMAC sig verifies untampered; rejects tamper", () => {
|
|
120
|
+
const r = runGestationCycle({
|
|
121
|
+
signals: [sig("reflex_cache_miss", "x", [], 5)],
|
|
122
|
+
cycleAt: 0,
|
|
123
|
+
secret: SECRET,
|
|
124
|
+
});
|
|
125
|
+
expect(verifyGestationReport(r, SECRET)).toBe(true);
|
|
126
|
+
expect(verifyGestationReport({ ...r, totalSignals: 999 }, SECRET)).toBe(false);
|
|
127
|
+
});
|
|
128
|
+
it("MEASURED 100% determinism: same signals -> same report sig (30 trials)", () => {
|
|
129
|
+
const input = {
|
|
130
|
+
signals: [
|
|
131
|
+
sig("reflex_cache_miss", "x", [], 5, 1),
|
|
132
|
+
sig("pattern_co_occurrence", "y", ["mneme.a", "mneme.b"], 6, 2),
|
|
133
|
+
],
|
|
134
|
+
cycleAt: 1_000_000,
|
|
135
|
+
secret: SECRET,
|
|
136
|
+
};
|
|
137
|
+
const first = runGestationCycle(input).sig;
|
|
138
|
+
let allEqual = true;
|
|
139
|
+
for (let i = 0; i < 30; i++) {
|
|
140
|
+
if (runGestationCycle(input).sig !== first) {
|
|
141
|
+
allEqual = false;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
expect(allEqual).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe("v2.19.26 GESTATION · formatter", () => {
|
|
149
|
+
it("formatProposalLine includes name + step count + confidence + gap kind", () => {
|
|
150
|
+
const spec = proposeToolSpec({
|
|
151
|
+
gap: sig("pattern_co_occurrence", "x", ["mneme.a", "mneme.b"], 10),
|
|
152
|
+
secret: SECRET,
|
|
153
|
+
});
|
|
154
|
+
const line = formatProposalLine(spec);
|
|
155
|
+
expect(line).toContain("mneme.auto");
|
|
156
|
+
expect(line).toContain("2-step");
|
|
157
|
+
expect(line).toContain("sequential");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
//# sourceMappingURL=dreamspace_gestation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreamspace_gestation.test.js","sourceRoot":"","sources":["../../src/dreamspace_gestation/dreamspace_gestation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.26 — MNEME DREAMSPACE · GESTATION (self-authoring MCP catalog · phase 1 of 2)
|
|
3
|
+
*
|
|
4
|
+
* "Catalog ตัวมัน static — ไม่งอก ไม่ตาย ไม่จับคู่ ไม่เรียนรู้ที่จะ
|
|
5
|
+
* author tool ใหม่. นั่นคือ gap ของกระบวนการ 'ของเดิม + ของใหม่ +
|
|
6
|
+
* การเลือก' — ที่ DREAMS ปัจจุบันยังตอบไม่ได้"
|
|
7
|
+
* — user audit, 2026-05-17
|
|
8
|
+
*
|
|
9
|
+
* Diagnosis: every prior dreams primitive (vaccine_cycle, dream.run,
|
|
10
|
+
* dreams.enqueue/resolve) is a PRODUCT factory — it manufactures
|
|
11
|
+
* one specific artifact (vaccine / claim / verdict). GESTATION is
|
|
12
|
+
* a TOOL factory — it watches for catalog gaps + proposes the
|
|
13
|
+
* composer recipe for a brand-new MCP tool that closes the gap.
|
|
14
|
+
*
|
|
15
|
+
* Three gap classes detected from caller-supplied signals:
|
|
16
|
+
* 1. REFLEX cache miss — user (or AI) tried an event that
|
|
17
|
+
* had no cached prediction; nothing fired. Gap = no pattern
|
|
18
|
+
* matched this event signature.
|
|
19
|
+
* 2. user_chat no-match — user typed a request; EVENT PATTERN
|
|
20
|
+
* MATCH returned zero predictions. Gap = no semantic rule
|
|
21
|
+
* recognised this phrase.
|
|
22
|
+
* 3. pattern co-occurrence — two tools always fire together in
|
|
23
|
+
* sequence (e.g., mneme.ask then mneme.why). Gap = no single
|
|
24
|
+
* composed tool does both — opportunity for chimera.
|
|
25
|
+
*
|
|
26
|
+
* For each gap, propose a ProposedToolSpec with deterministic name,
|
|
27
|
+
* description (from the originating signal), composer recipe (list
|
|
28
|
+
* of existing tools to chain), and a JSON inputSchema derived as the
|
|
29
|
+
* intersection of the composed tools' input schemas. Caller (daemon)
|
|
30
|
+
* feeds the spec to v2.19.9 WRAPPER_GENESPLICING `splice` to actually
|
|
31
|
+
* create the runtime chimera; this module is the PROPOSER, not the
|
|
32
|
+
* executor.
|
|
33
|
+
*
|
|
34
|
+
* Composes onto:
|
|
35
|
+
* - v2.19.9 WRAPPER_GENESPLICING (real splice surface)
|
|
36
|
+
* - v2.19.11 MORTAL (TTL for proposed tools)
|
|
37
|
+
* - v2.19.22 REFLEX (cache miss signal)
|
|
38
|
+
* - v2.19.24 EVENT PATTERN MATCH (no-match signal)
|
|
39
|
+
* - v2.19.25 SLEEP TRAINING (fitness gradient feeds promotion)
|
|
40
|
+
*
|
|
41
|
+
* Honest scope:
|
|
42
|
+
* - PURE FUNCTION proposer; HMAC-signed proposals so daemon can
|
|
43
|
+
* audit forged specs.
|
|
44
|
+
* - Composer recipes are SEQUENCES (Tool_A then Tool_B); we don't
|
|
45
|
+
* synthesise parallelisable or conditional graphs. v2.19.9 supports
|
|
46
|
+
* sequential/fan_out/first_success — we emit "sequential" only.
|
|
47
|
+
* - Names use deterministic snake_case to avoid collisions:
|
|
48
|
+
* `mneme.auto.<tool1>_then_<tool2>`. Caller can rename on promote.
|
|
49
|
+
* - We do NOT execute or load code. Daemon picks specs to promote
|
|
50
|
+
* based on usage telemetry from v2.19.26 EVOLUTION.
|
|
51
|
+
*/
|
|
52
|
+
declare const PROTOCOL_VERSION: 1;
|
|
53
|
+
export type GapKind = "reflex_cache_miss" | "user_chat_no_match" | "pattern_co_occurrence";
|
|
54
|
+
export interface GapSignal {
|
|
55
|
+
v: typeof PROTOCOL_VERSION;
|
|
56
|
+
kind: GapKind;
|
|
57
|
+
/** Human label (e.g., "git_commit:fix-prefix" / "user_chat:thai-รีเฟรช"). */
|
|
58
|
+
label: string;
|
|
59
|
+
/** Tool names already known to be relevant (empty for no_match). */
|
|
60
|
+
relatedTools: string[];
|
|
61
|
+
/** How many times this gap was observed yesterday. */
|
|
62
|
+
count: number;
|
|
63
|
+
ts: number;
|
|
64
|
+
}
|
|
65
|
+
export interface ProposedToolSpec {
|
|
66
|
+
v: typeof PROTOCOL_VERSION;
|
|
67
|
+
/** Deterministic name; daemon can rename on promote. */
|
|
68
|
+
proposedName: string;
|
|
69
|
+
/** Why this tool exists; derived from the originating signal. */
|
|
70
|
+
description: string;
|
|
71
|
+
/** Ordered list of EXISTING tools the chimera invokes. */
|
|
72
|
+
composerRecipe: Array<{
|
|
73
|
+
toolName: string;
|
|
74
|
+
argsPassthrough?: boolean;
|
|
75
|
+
}>;
|
|
76
|
+
/** Composer kind for v2.19.9 splice (always "sequential" for now). */
|
|
77
|
+
composerKind: "sequential" | "fan_out" | "first_success";
|
|
78
|
+
/** JSON Schema of the chimera's input (union of component inputs). */
|
|
79
|
+
proposedInputSchema: {
|
|
80
|
+
type: "object";
|
|
81
|
+
properties: Record<string, unknown>;
|
|
82
|
+
required: string[];
|
|
83
|
+
};
|
|
84
|
+
/** Source gap signal that triggered this proposal. */
|
|
85
|
+
sourceGap: GapSignal;
|
|
86
|
+
/** Confidence 0..1 — based on signal count vs threshold. */
|
|
87
|
+
confidence: number;
|
|
88
|
+
sig: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Filter gap signals down to those above the minimum-count threshold.
|
|
92
|
+
* Below-threshold signals are noise; above-threshold signals are real
|
|
93
|
+
* gaps worth proposing a tool for.
|
|
94
|
+
*/
|
|
95
|
+
export declare function detectToolGaps(input: {
|
|
96
|
+
signals: GapSignal[];
|
|
97
|
+
minGapCount?: number;
|
|
98
|
+
minCoOccurCount?: number;
|
|
99
|
+
}): GapSignal[];
|
|
100
|
+
/**
|
|
101
|
+
* Propose a tool spec from a single gap signal. Pure function;
|
|
102
|
+
* deterministic over (signal + secret). The composer recipe defaults
|
|
103
|
+
* to sequential chaining of the related tools; for no-match gaps with
|
|
104
|
+
* empty relatedTools, the recipe is just `mneme.smart_do` as a fallback
|
|
105
|
+
* so caller has SOMETHING to splice.
|
|
106
|
+
*/
|
|
107
|
+
export declare function proposeToolSpec(input: {
|
|
108
|
+
gap: GapSignal;
|
|
109
|
+
secret?: string;
|
|
110
|
+
minGapCount?: number;
|
|
111
|
+
}): ProposedToolSpec;
|
|
112
|
+
export declare function verifyProposal(spec: ProposedToolSpec, secret?: string): boolean;
|
|
113
|
+
export interface GestationReport {
|
|
114
|
+
v: typeof PROTOCOL_VERSION;
|
|
115
|
+
totalSignals: number;
|
|
116
|
+
qualifyingGaps: number;
|
|
117
|
+
proposals: ProposedToolSpec[];
|
|
118
|
+
cycleAt: number;
|
|
119
|
+
sig: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* One-shot gestation cycle: filter signals → propose specs → HMAC-sign
|
|
123
|
+
* the whole report. Caller runs this during the daemon's idle/dream
|
|
124
|
+
* window (composes onto v2.19.23 THALAMUS dream tier).
|
|
125
|
+
*/
|
|
126
|
+
export declare function runGestationCycle(input: {
|
|
127
|
+
signals: GapSignal[];
|
|
128
|
+
cycleAt?: number;
|
|
129
|
+
minGapCount?: number;
|
|
130
|
+
minCoOccurCount?: number;
|
|
131
|
+
secret?: string;
|
|
132
|
+
}): GestationReport;
|
|
133
|
+
export declare function verifyGestationReport(r: GestationReport, secret?: string): boolean;
|
|
134
|
+
export declare function formatProposalLine(p: ProposedToolSpec): string;
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dreamspace_gestation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAIpC,MAAM,MAAM,OAAO,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,uBAAuB,CAAC;AAE3F,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,sEAAsE;IACtE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,eAAe,CAAC;IACzD,sEAAsE;IACtE,mBAAmB,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACjG,sDAAsD;IACtD,SAAS,EAAE,SAAS,CAAC;IACrB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AA0BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,SAAS,EAAE,CAUd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAgDlH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAG/E;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,eAAe,CAgBlB;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAGlF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAG9D"}
|