mythos-router 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,qCAAqC;AACrC,oDAAoD;AACpD,gEAAgE;AAEhE,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAY,MAAM,SAAS,CAAC;AAChD,OAAO,EACL,aAAa,EACb,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,MAAM,EACN,eAAe,EACf,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAoB,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAW,MAAM,aAAa,CAAC;AAE9D,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAEjC;IACC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAgB,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,KAAK,EAAE,CAC3H,CAAC;IACF,iBAAiB,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,GAAG,4BAA4B,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,KAAK,IAAI,CAC3H,CAAC;IAEF,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG;KACjC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAc,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,sDAAsD;IACtD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,EAAE,CAAC;QACX,mBAAmB,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,8CAA8C,MAAM,2EAA2E;SACzI,CAAC,CAAC;QACH,mBAAmB,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,8EAA8E;SACxF,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,2BAA2B,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC9D,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACnG,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,iBAAiB,EAAE,CAAC;YACpB,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,sDAAsD,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACrF,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,yDAAyD;QACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEhD,mBAAmB;QACnB,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,yDAAyD;QACzD,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,mBAAmB,EACnB,MAAM;YACN,kBAAkB;YAClB,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;oBACjD,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;gBACD,uCAAuC;gBACvC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,cAAc;YACd,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,IAAI,eAAe,EAAE,CAAC;wBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;oBACzC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,EAAE,CAAC;wBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;oBACD,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CACF,CAAC;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE3B,iBAAiB;YACjB,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAExE,uDAAuD;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACzD,eAAe,CAAC,SAAS,CAAC,CAAC;YAE3B,kBAAkB;YAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBACtD,MAAM,cAAc,CAClB,mBAAmB,EACnB,SAAS,CAAC,gBAAgB,EAC1B,eAAe,EACf,MAAM,EACN,OAAO,CACR,CAAC;YACJ,CAAC;YAED,uDAAuD;YACvD,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ;gBACrC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,SAAS,CAAC;YACnF,WAAW,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAEzC,cAAc;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE/C,cAAc;YACd,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,CAAC,MAAM,uCAAuC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAC3G,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACjE,8CAA8C;YAC9C,mBAAmB,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,cAAc,CAC3B,OAAkB,EAClB,gBAAwB,EACxB,gBAAkC,EAClC,MAAmB,EACnB,OAAgB;IAEhB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,CAAC,MAAM,yBAAyB,OAAO,IAAI,sBAAsB,GAAG,CAAC,CAAC,KAAK,EAAE,CACpF,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAE1D,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAC5C,OAAO,EACP,MAAM,EACN,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,OAAO;oBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CACF,CAAC;YAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,kBAAkB,CAAC,IAAI;aACjC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACpE,eAAe,CAAC,SAAS,CAAC,CAAC;YAE3B,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,IAAI,OAAO,IAAI,sBAAsB,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,CAAC,GAAG,gDAAgD,CAAC,CAAC,KAAK,EAAE,CACpE,CAAC;gBACF,WAAW,CACT,8BAA8B,EAC9B,2BAA2B,GAAG,sBAAsB,GAAG,WAAW,CACnE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC/B,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC,OAAO,CACnD,8CAA8C,EAC9C,YAAY,sBAAsB,GAAG,OAAO,mCAAmC,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,CAAC,GAAG,wBAAwB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CACxD,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IACE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC1B,KAAK,CAAC,IAAI,KAAK,cAAc;gBAC7B,KAAK,CAAC,IAAI,KAAK,MAAM,EACrB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,SAAiB;IACzD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,yCAAyC;IACzC,OAAO,SAAS,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function dreamCommand(options: {
2
+ force?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=dream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream.d.ts","sourceRoot":"","sources":["../../src/commands/dream.ts"],"names":[],"mappings":"AAiBA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhB"}
@@ -0,0 +1,81 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // mythos-router :: commands/dream.ts
3
+ // Summarization Dream — Memory compression
4
+ // ─────────────────────────────────────────────────────────────
5
+ import { readMemory, writeCompressedMemory, initMemory, appendEntry, } from '../memory.js';
6
+ import { sendMessage } from '../client.js';
7
+ import { c, heading, hr, Spinner, success, info, warn } from '../utils.js';
8
+ // ── Dream Command ────────────────────────────────────────────
9
+ export async function dreamCommand(options) {
10
+ console.log(heading('💤 Summarization Dream'));
11
+ initMemory();
12
+ const { entries, raw } = readMemory();
13
+ const count = entries.length;
14
+ console.log(`${c.dim} Current entries: ${c.cyan}${count}${c.reset}`);
15
+ if (count < 10 && !options.force) {
16
+ info('Not enough entries to dream about. Use --force to override.');
17
+ return;
18
+ }
19
+ // Keep the 20 most recent entries as "active memory"
20
+ const keepRecent = 20;
21
+ const toCompress = entries.slice(0, Math.max(0, entries.length - keepRecent));
22
+ const toKeep = entries.slice(-keepRecent);
23
+ if (toCompress.length === 0) {
24
+ info('Nothing to compress. All entries are recent.');
25
+ return;
26
+ }
27
+ console.log(`${c.dim} Compressing: ${c.yellow}${toCompress.length}${c.dim} entries → summary${c.reset}`);
28
+ console.log(`${c.dim} Keeping: ${c.green}${toKeep.length}${c.dim} recent entries${c.reset}\n`);
29
+ // Build the entries text for summarization
30
+ const entriesText = toCompress
31
+ .map((e) => `| ${e.timestamp} | ${e.action} | ${e.result} |`)
32
+ .join('\n');
33
+ const spinner = new Spinner();
34
+ spinner.start('Dreaming... compressing agentic memory...');
35
+ try {
36
+ const response = await sendMessage([
37
+ {
38
+ role: 'user',
39
+ content: `You are the memory compression engine for mythos-router (Capybara tier).\n\n` +
40
+ `Below are ${toCompress.length} log entries from the project's MEMORY.md.\n` +
41
+ `Compress them into a concise summary that preserves:\n` +
42
+ `1. Key architectural decisions made\n` +
43
+ `2. Files created, modified, or deleted\n` +
44
+ `3. Any errors or corrections that occurred\n` +
45
+ `4. The overall trajectory/intent of the session(s)\n\n` +
46
+ `Output a clear, scannable markdown summary (bullet points preferred).\n` +
47
+ `Do NOT include a table. Do NOT include timestamps for individual items.\n` +
48
+ `This summary will be injected as context for future sessions.\n\n` +
49
+ `---\n\n` +
50
+ `| Timestamp | Action | Verified Result |\n` +
51
+ `|-----------|--------|----------------|\n` +
52
+ entriesText,
53
+ },
54
+ ], 'low', // low effort for summarization — save tokens
55
+ 'You are a memory compression engine. Output only the summary, nothing else.');
56
+ spinner.stop();
57
+ const summary = response.text.trim();
58
+ // Write compressed memory
59
+ writeCompressedMemory(summary, toKeep);
60
+ // Stats
61
+ const beforeSize = raw.length;
62
+ const { raw: afterRaw } = readMemory();
63
+ const afterSize = afterRaw.length;
64
+ const ratio = ((1 - afterSize / beforeSize) * 100).toFixed(1);
65
+ console.log(`\n${c.bold}Dream Summary:${c.reset}\n`);
66
+ console.log(`${c.dim}${summary}${c.reset}`);
67
+ console.log(`\n${hr()}`);
68
+ success(`Compressed ${toCompress.length} entries → summary block`);
69
+ console.log(`${c.dim} Before: ${beforeSize} chars → After: ${afterSize} chars (${ratio}% reduction)${c.reset}`);
70
+ console.log(`${c.dim} Tokens used: ${c.cyan}${response.inputTokens + response.outputTokens}${c.reset}`);
71
+ appendEntry(`dream: compressed ${toCompress.length} entries`, `✅ ${ratio}% reduction`);
72
+ }
73
+ catch (err) {
74
+ spinner.stop();
75
+ console.error(`\n${c.red}✖ Dream failed: ${err.message}${c.reset}`);
76
+ if (err.message?.includes('ANTHROPIC_API_KEY')) {
77
+ warn('API key required for Dream compression (uses Claude to summarize).');
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=dream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/commands/dream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function verifyCommand(): Promise<void>;
2
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAaA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA+HnD"}
@@ -0,0 +1,191 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // mythos-router :: commands/verify.ts
3
+ // Codebase ↔ MEMORY.md drift scanner
4
+ // ─────────────────────────────────────────────────────────────
5
+ import { readdirSync, statSync, readFileSync, existsSync } from 'node:fs';
6
+ import { resolve, relative, join } from 'node:path';
7
+ import { createHash } from 'node:crypto';
8
+ import { readMemory, initMemory, appendEntry } from '../memory.js';
9
+ import { DEFAULT_IGNORE_PATTERNS, MYTHOSIGNORE_FILE } from '../config.js';
10
+ import { c, heading, success, warn, error, info, hr } from '../utils.js';
11
+ // ── Verify Command ───────────────────────────────────────────
12
+ export async function verifyCommand() {
13
+ console.log(heading('SWD Verify — Codebase × Memory Sync'));
14
+ const cwd = process.cwd();
15
+ initMemory();
16
+ // Load ignore patterns
17
+ const ignorePatterns = loadIgnorePatterns(cwd);
18
+ // Scan codebase
19
+ info('Scanning codebase...');
20
+ const files = walkDirectory(cwd, ignorePatterns);
21
+ console.log(`${c.dim} Found ${c.cyan}${files.length}${c.dim} files${c.reset}`);
22
+ // Read memory
23
+ const { entries, raw } = readMemory();
24
+ console.log(`${c.dim} Memory has ${c.cyan}${entries.length}${c.dim} entries${c.reset}`);
25
+ console.log();
26
+ // Extract file paths mentioned in memory
27
+ const mentionedPaths = new Set();
28
+ for (const entry of entries) {
29
+ // Parse paths from action column
30
+ const pathMatches = entry.action.match(/(?:CREATE|MODIFY|DELETE|READ|chat):\s*(.+?)(?:;|$)/gi);
31
+ if (pathMatches) {
32
+ for (const match of pathMatches) {
33
+ const path = match.replace(/^(?:CREATE|MODIFY|DELETE|READ|chat):\s*/i, '').trim();
34
+ if (path && !path.startsWith('chat:')) {
35
+ mentionedPaths.add(path);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ // ── Verify each mentioned path ─────────────────────────
41
+ let verified = 0;
42
+ let drifted = 0;
43
+ let missing = 0;
44
+ if (mentionedPaths.size > 0) {
45
+ console.log(`${c.bold}File References in Memory:${c.reset}\n`);
46
+ for (const rawPath of mentionedPaths) {
47
+ const absPath = resolve(cwd, rawPath);
48
+ const relPath = relative(cwd, absPath);
49
+ if (existsSync(absPath)) {
50
+ const stat = statSync(absPath);
51
+ const hash = hashFile(absPath);
52
+ // Check if the most recent memory entry for this file reflects current state
53
+ const lastEntry = entries
54
+ .filter((e) => e.action.includes(rawPath))
55
+ .pop();
56
+ if (lastEntry?.result.includes('✅')) {
57
+ success(`${relPath} — verified (${formatSize(stat.size)})`);
58
+ verified++;
59
+ }
60
+ else {
61
+ warn(`${relPath} — exists but memory shows: ${lastEntry?.result ?? 'no result'}`);
62
+ drifted++;
63
+ }
64
+ }
65
+ else {
66
+ // Check if it was supposed to be deleted
67
+ const lastEntry = entries
68
+ .filter((e) => e.action.includes(rawPath))
69
+ .pop();
70
+ if (lastEntry?.action.includes('DELETE')) {
71
+ success(`${relPath} — correctly deleted`);
72
+ verified++;
73
+ }
74
+ else {
75
+ error(`${relPath} — missing from filesystem`);
76
+ missing++;
77
+ }
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ info('No file operations found in memory.');
83
+ }
84
+ // ── Untracked files ────────────────────────────────────
85
+ const untrackedFiles = files.filter((f) => {
86
+ const rel = relative(cwd, f);
87
+ return !mentionedPaths.has(rel) && !mentionedPaths.has(f);
88
+ });
89
+ if (untrackedFiles.length > 0) {
90
+ console.log(`\n${c.bold}Untracked Files (not in memory):${c.reset}\n`);
91
+ const showMax = 20;
92
+ for (const f of untrackedFiles.slice(0, showMax)) {
93
+ const rel = relative(cwd, f);
94
+ const stat = statSync(f);
95
+ console.log(` ${c.dim}·${c.reset} ${rel} ${c.dim}(${formatSize(stat.size)})${c.reset}`);
96
+ }
97
+ if (untrackedFiles.length > showMax) {
98
+ console.log(` ${c.dim}... and ${untrackedFiles.length - showMax} more${c.reset}`);
99
+ }
100
+ }
101
+ // ── Summary ────────────────────────────────────────────
102
+ console.log(`\n${hr()}`);
103
+ console.log(`${c.bold}Summary:${c.reset} ` +
104
+ `${c.green}${verified} verified${c.reset} · ` +
105
+ `${c.yellow}${drifted} drift${c.reset} · ` +
106
+ `${c.red}${missing} missing${c.reset} · ` +
107
+ `${c.dim}${untrackedFiles.length} untracked${c.reset}`);
108
+ // Log verification to memory
109
+ appendEntry(`verify: scanned ${files.length} files`, `✅ ${verified} ok, ⚠️ ${drifted} drift, ❌ ${missing} missing`);
110
+ if (drifted > 0 || missing > 0) {
111
+ console.log(`\n${c.yellow}Drift detected. Run ${c.cyan}mythos chat${c.yellow} to reconcile.${c.reset}`);
112
+ }
113
+ else {
114
+ console.log(`\n${c.green}✔ Zero drift. Memory and codebase are in sync.${c.reset}`);
115
+ }
116
+ }
117
+ // ── Directory Walker ─────────────────────────────────────────
118
+ function walkDirectory(dir, ignorePatterns) {
119
+ const results = [];
120
+ function walk(currentDir, depth) {
121
+ if (depth > 10)
122
+ return; // safety limit
123
+ try {
124
+ const entries = readdirSync(currentDir, { withFileTypes: true });
125
+ for (const entry of entries) {
126
+ const name = entry.name;
127
+ const full = join(currentDir, name);
128
+ // Check against ignore patterns
129
+ if (shouldIgnore(name, full, dir, ignorePatterns))
130
+ continue;
131
+ if (entry.isDirectory()) {
132
+ walk(full, depth + 1);
133
+ }
134
+ else if (entry.isFile()) {
135
+ results.push(full);
136
+ }
137
+ }
138
+ }
139
+ catch {
140
+ // Permission denied, etc.
141
+ }
142
+ }
143
+ walk(dir, 0);
144
+ return results;
145
+ }
146
+ // ── Ignore logic ─────────────────────────────────────────────
147
+ function loadIgnorePatterns(cwd) {
148
+ const patterns = [...DEFAULT_IGNORE_PATTERNS];
149
+ const ignorePath = resolve(cwd, MYTHOSIGNORE_FILE);
150
+ if (existsSync(ignorePath)) {
151
+ const content = readFileSync(ignorePath, 'utf-8');
152
+ for (const line of content.split('\n')) {
153
+ const trimmed = line.trim();
154
+ if (trimmed && !trimmed.startsWith('#')) {
155
+ patterns.push(trimmed);
156
+ }
157
+ }
158
+ }
159
+ return patterns;
160
+ }
161
+ function shouldIgnore(name, fullPath, rootDir, patterns) {
162
+ for (const pattern of patterns) {
163
+ if (name === pattern)
164
+ return true;
165
+ if (pattern.startsWith('*.') && name.endsWith(pattern.slice(1)))
166
+ return true;
167
+ if (name.startsWith('.') && !pattern.startsWith('.'))
168
+ continue;
169
+ if (name.startsWith('.'))
170
+ return true; // ignore hidden by default
171
+ }
172
+ return false;
173
+ }
174
+ // ── Utilities ────────────────────────────────────────────────
175
+ function hashFile(path) {
176
+ try {
177
+ const content = readFileSync(path);
178
+ return createHash('sha256').update(content).digest('hex').slice(0, 16);
179
+ }
180
+ catch {
181
+ return 'error';
182
+ }
183
+ }
184
+ function formatSize(bytes) {
185
+ if (bytes < 1024)
186
+ return `${bytes}B`;
187
+ if (bytes < 1048576)
188
+ return `${(bytes / 1024).toFixed(1)}KB`;
189
+ return `${(bytes / 1048576).toFixed(1)}MB`;
190
+ }
191
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const MODEL_ID = "claude-opus-4-6";
2
+ export declare const MAX_CORRECTION_RETRIES = 2;
3
+ export declare const MEMORY_FILE = "MEMORY.md";
4
+ export declare const MEMORY_MAX_LINES = 100;
5
+ export declare const MYTHOSIGNORE_FILE = ".mythosignore";
6
+ export declare const DEFAULT_IGNORE_PATTERNS: string[];
7
+ export declare const CAPYBARA_SYSTEM_PROMPT = "## IDENTITY\nTier: Capybara (Mythos Router \u2014 Specialized in Cybersecurity & PhD Reasoning)\nModel: Claude Opus 4.6 | Protocol: Strict Write Discipline v2.0\nSession: mythos-router local power tool\n\n## CORE DIRECTIVES\n\n### 1. Strict Write Discipline (SWD)\nYou are operating under Strict Write Discipline. This means:\n- NEVER hallucinate filesystem state. If you don't know a file's contents, say so.\n- NEVER claim you wrote/modified/deleted a file unless you are certain the operation succeeded.\n- When you perform ANY file operation, you MUST wrap it in a FILE_ACTION block:\n\n```\n[FILE_ACTION: <absolute_or_relative_path>]\nOPERATION: CREATE | MODIFY | DELETE | READ\nCONTENT_HASH: <sha256 of new content, if applicable>\nDESCRIPTION: <one-line description of what changed>\n[/FILE_ACTION]\n```\n\n- The router will verify EVERY file action you claim against actual filesystem state.\n- If verification fails, you will receive a Correction Turn with the actual state.\n- You have a maximum of 2 correction attempts before yielding to the human.\n\n### 2. Adaptive Deep Reasoning\n- You are running in high-effort adaptive thinking mode.\n- Use your full reasoning capability for complex tasks.\n- For simple queries, respond directly without overthinking.\n\n### 3. Memory Protocol\n- Every action you take will be logged to MEMORY.md with a timestamp and verified result.\n- You can reference MEMORY.md to recall past actions in this project.\n- If memory exceeds 100 entries, a \"Summarization Dream\" will compress older context.\n\n### 4. Response Format\n- Be precise. Be surgical. No slop.\n- When writing code, write complete implementations \u2014 no placeholders, no TODOs.\n- When analyzing, provide concrete evidence and file paths.\n- If uncertain, state your uncertainty explicitly rather than guessing.\n\n## CONSTRAINTS\n- You are a LOCAL power tool. You do not have internet access.\n- You operate on the user's filesystem. Treat it with respect.\n- All file paths should be relative to the project root unless absolute is required.\n";
8
+ export type EffortLevel = 'high' | 'medium' | 'low';
9
+ export declare function getEffort(flag?: string): EffortLevel;
10
+ export declare function validateApiKey(): string;
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,oBAAoB,CAAC;AAE1C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,WAAW,cAAc,CAAC;AACvC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,eAAO,MAAM,uBAAuB,UAUnC,CAAC;AAGF,eAAO,MAAM,sBAAsB,uhEA8ClC,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEpD,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAIpD;AAGD,wBAAgB,cAAc,IAAI,MAAM,CAWvC"}
package/dist/config.js ADDED
@@ -0,0 +1,87 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // mythos-router :: config.ts
3
+ // Constants, system prompt, and validation
4
+ // ─────────────────────────────────────────────────────────────
5
+ export const MODEL_ID = 'claude-opus-4-6';
6
+ export const MAX_CORRECTION_RETRIES = 2;
7
+ export const MEMORY_FILE = 'MEMORY.md';
8
+ export const MEMORY_MAX_LINES = 100;
9
+ export const MYTHOSIGNORE_FILE = '.mythosignore';
10
+ export const DEFAULT_IGNORE_PATTERNS = [
11
+ 'node_modules',
12
+ '.git',
13
+ 'dist',
14
+ 'build',
15
+ '.next',
16
+ 'coverage',
17
+ '*.lock',
18
+ 'package-lock.json',
19
+ 'MEMORY.md',
20
+ ];
21
+ // ── The Leaked "Capybara" System Prompt ──────────────────────
22
+ export const CAPYBARA_SYSTEM_PROMPT = `\
23
+ ## IDENTITY
24
+ Tier: Capybara (Mythos Router — Specialized in Cybersecurity & PhD Reasoning)
25
+ Model: Claude Opus 4.6 | Protocol: Strict Write Discipline v2.0
26
+ Session: mythos-router local power tool
27
+
28
+ ## CORE DIRECTIVES
29
+
30
+ ### 1. Strict Write Discipline (SWD)
31
+ You are operating under Strict Write Discipline. This means:
32
+ - NEVER hallucinate filesystem state. If you don't know a file's contents, say so.
33
+ - NEVER claim you wrote/modified/deleted a file unless you are certain the operation succeeded.
34
+ - When you perform ANY file operation, you MUST wrap it in a FILE_ACTION block:
35
+
36
+ \`\`\`
37
+ [FILE_ACTION: <absolute_or_relative_path>]
38
+ OPERATION: CREATE | MODIFY | DELETE | READ
39
+ CONTENT_HASH: <sha256 of new content, if applicable>
40
+ DESCRIPTION: <one-line description of what changed>
41
+ [/FILE_ACTION]
42
+ \`\`\`
43
+
44
+ - The router will verify EVERY file action you claim against actual filesystem state.
45
+ - If verification fails, you will receive a Correction Turn with the actual state.
46
+ - You have a maximum of ${MAX_CORRECTION_RETRIES} correction attempts before yielding to the human.
47
+
48
+ ### 2. Adaptive Deep Reasoning
49
+ - You are running in high-effort adaptive thinking mode.
50
+ - Use your full reasoning capability for complex tasks.
51
+ - For simple queries, respond directly without overthinking.
52
+
53
+ ### 3. Memory Protocol
54
+ - Every action you take will be logged to MEMORY.md with a timestamp and verified result.
55
+ - You can reference MEMORY.md to recall past actions in this project.
56
+ - If memory exceeds ${MEMORY_MAX_LINES} entries, a "Summarization Dream" will compress older context.
57
+
58
+ ### 4. Response Format
59
+ - Be precise. Be surgical. No slop.
60
+ - When writing code, write complete implementations — no placeholders, no TODOs.
61
+ - When analyzing, provide concrete evidence and file paths.
62
+ - If uncertain, state your uncertainty explicitly rather than guessing.
63
+
64
+ ## CONSTRAINTS
65
+ - You are a LOCAL power tool. You do not have internet access.
66
+ - You operate on the user's filesystem. Treat it with respect.
67
+ - All file paths should be relative to the project root unless absolute is required.
68
+ `;
69
+ export function getEffort(flag) {
70
+ if (flag === 'low' || flag === 'l')
71
+ return 'low';
72
+ if (flag === 'medium' || flag === 'med' || flag === 'm')
73
+ return 'medium';
74
+ return 'high'; // default: full capybara mode
75
+ }
76
+ // ── Validation ───────────────────────────────────────────────
77
+ export function validateApiKey() {
78
+ const key = process.env.ANTHROPIC_API_KEY;
79
+ if (!key) {
80
+ console.error('\x1b[91m✖ ANTHROPIC_API_KEY not set.\x1b[0m\n' +
81
+ ' Set it: export ANTHROPIC_API_KEY="sk-ant-..."\n' +
82
+ ' Or: $env:ANTHROPIC_API_KEY = "sk-ant-..."\n');
83
+ process.exit(1);
84
+ }
85
+ return key;
86
+ }
87
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,8BAA8B;AAC9B,4CAA4C;AAC5C,gEAAgE;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,mBAAmB;IACnB,WAAW;CACZ,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;0BAwBZ,sBAAsB;;;;;;;;;;sBAU1B,gBAAgB;;;;;;;;;;;;CAYrC,CAAC;AAKF,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IACzE,OAAO,MAAM,CAAC,CAAC,8BAA8B;AAC/C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CACX,+CAA+C;YAC7C,oDAAoD;YACpD,oDAAoD,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface MemoryEntry {
2
+ timestamp: string;
3
+ action: string;
4
+ result: string;
5
+ }
6
+ export declare function getMemoryPath(): string;
7
+ export declare function initMemory(): void;
8
+ export declare function appendEntry(action: string, result: string): void;
9
+ export declare function readMemory(): {
10
+ header: string;
11
+ entries: MemoryEntry[];
12
+ raw: string;
13
+ };
14
+ export declare function getEntryCount(): number;
15
+ export declare function needsDream(): boolean;
16
+ export declare function writeCompressedMemory(summary: string, recentEntries: MemoryEntry[]): void;
17
+ export declare function getMemoryContext(maxChars?: number): string;
18
+ export declare function printMemoryStatus(): void;
19
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAGD,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOhE;AAGD,wBAAgB,UAAU,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgCpF;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAGD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAGD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,WAAW,EAAE,GAC3B,IAAI,CAoBN;AAGD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAO,GAAG,MAAM,CASxD;AAGD,wBAAgB,iBAAiB,IAAI,IAAI,CAaxC"}
package/dist/memory.js ADDED
@@ -0,0 +1,127 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // mythos-router :: memory.ts
3
+ // Self-Healing Memory — MEMORY.md management
4
+ // ─────────────────────────────────────────────────────────────
5
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
6
+ import { resolve } from 'node:path';
7
+ import { MEMORY_FILE, MEMORY_MAX_LINES } from './config.js';
8
+ import { timestamp, c, info } from './utils.js';
9
+ // ── Path resolution ──────────────────────────────────────────
10
+ export function getMemoryPath() {
11
+ return resolve(process.cwd(), MEMORY_FILE);
12
+ }
13
+ // ── Initialize MEMORY.md if it doesn't exist ─────────────────
14
+ export function initMemory() {
15
+ const path = getMemoryPath();
16
+ if (!existsSync(path)) {
17
+ const header = `# 🧠 MEMORY.md — mythos-router Agentic Memory\n\n` +
18
+ `> Auto-managed by the Capybara tier. Each model turn is logged.\n` +
19
+ `> When entries exceed ${MEMORY_MAX_LINES} lines, a "Dream" compresses older context.\n\n` +
20
+ `---\n\n` +
21
+ `| Timestamp | Action | Verified Result |\n` +
22
+ `|-----------|--------|----------------|\n`;
23
+ writeFileSync(path, header, 'utf-8');
24
+ }
25
+ }
26
+ // ── Append a single entry ────────────────────────────────────
27
+ export function appendEntry(action, result) {
28
+ initMemory();
29
+ const path = getMemoryPath();
30
+ const ts = timestamp();
31
+ const line = `| ${ts} | ${sanitize(action)} | ${sanitize(result)} |\n`;
32
+ const content = readFileSync(path, 'utf-8');
33
+ writeFileSync(path, content + line, 'utf-8');
34
+ }
35
+ // ── Read all entries ─────────────────────────────────────────
36
+ export function readMemory() {
37
+ initMemory();
38
+ const path = getMemoryPath();
39
+ const raw = readFileSync(path, 'utf-8');
40
+ const lines = raw.split('\n');
41
+ const entries = [];
42
+ const headerLines = [];
43
+ let pastHeader = false;
44
+ for (const line of lines) {
45
+ // Table rows start with |
46
+ if (line.startsWith('|') && !line.includes('---') && !line.includes('Timestamp')) {
47
+ pastHeader = true;
48
+ const cols = line.split('|').map((s) => s.trim()).filter(Boolean);
49
+ if (cols.length >= 3) {
50
+ entries.push({
51
+ timestamp: cols[0],
52
+ action: cols[1],
53
+ result: cols[2],
54
+ });
55
+ }
56
+ }
57
+ else if (!pastHeader) {
58
+ headerLines.push(line);
59
+ }
60
+ }
61
+ return {
62
+ header: headerLines.join('\n'),
63
+ entries,
64
+ raw,
65
+ };
66
+ }
67
+ // ── Count entry lines ────────────────────────────────────────
68
+ export function getEntryCount() {
69
+ const { entries } = readMemory();
70
+ return entries.length;
71
+ }
72
+ // ── Check if Dream is needed ─────────────────────────────────
73
+ export function needsDream() {
74
+ return getEntryCount() > MEMORY_MAX_LINES;
75
+ }
76
+ // ── Write compressed memory ──────────────────────────────────
77
+ export function writeCompressedMemory(summary, recentEntries) {
78
+ const path = getMemoryPath();
79
+ const ts = timestamp();
80
+ let content = `# 🧠 MEMORY.md — mythos-router Agentic Memory\n\n` +
81
+ `> Auto-managed by the Capybara tier.\n\n` +
82
+ `---\n\n` +
83
+ `## 💤 Dream Summary (Compressed ${ts})\n\n` +
84
+ `${summary}\n\n` +
85
+ `---\n\n` +
86
+ `## Recent Entries\n\n` +
87
+ `| Timestamp | Action | Verified Result |\n` +
88
+ `|-----------|--------|----------------|\n`;
89
+ for (const entry of recentEntries) {
90
+ content += `| ${entry.timestamp} | ${entry.action} | ${entry.result} |\n`;
91
+ }
92
+ writeFileSync(path, content, 'utf-8');
93
+ }
94
+ // ── Get memory context for system prompt injection ───────────
95
+ export function getMemoryContext(maxChars = 4000) {
96
+ try {
97
+ const { raw } = readMemory();
98
+ if (raw.length <= maxChars)
99
+ return raw;
100
+ // Return the last maxChars characters (most recent context)
101
+ return '…[truncated]\n' + raw.slice(-maxChars);
102
+ }
103
+ catch {
104
+ return '';
105
+ }
106
+ }
107
+ // ── Print memory status ──────────────────────────────────────
108
+ export function printMemoryStatus() {
109
+ const path = getMemoryPath();
110
+ if (!existsSync(path)) {
111
+ info(`No MEMORY.md found at ${c.dim}${path}${c.reset}`);
112
+ return;
113
+ }
114
+ const { entries, raw } = readMemory();
115
+ const hasSummary = raw.includes('## 💤 Dream Summary');
116
+ console.log(`${c.dim}memory:${c.reset} ${c.cyan}${entries.length}${c.reset} entries` +
117
+ (hasSummary ? ` ${c.magenta}(has dream summary)${c.reset}` : '') +
118
+ (needsDream() ? ` ${c.yellow}(dream recommended)${c.reset}` : ''));
119
+ }
120
+ // ── Sanitize for table ───────────────────────────────────────
121
+ function sanitize(text) {
122
+ return text
123
+ .replace(/\|/g, '∣')
124
+ .replace(/\n/g, ' ')
125
+ .slice(0, 120);
126
+ }
127
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
package/dist/swd.d.ts ADDED
@@ -0,0 +1,32 @@
1
+ export interface FileSnapshot {
2
+ path: string;
3
+ exists: boolean;
4
+ size: number;
5
+ mtime: number;
6
+ hash: string;
7
+ }
8
+ export interface FileAction {
9
+ path: string;
10
+ operation: 'CREATE' | 'MODIFY' | 'DELETE' | 'READ';
11
+ contentHash?: string;
12
+ description: string;
13
+ }
14
+ export interface SWDResult {
15
+ verified: boolean;
16
+ actions: FileActionVerification[];
17
+ correctionPrompt?: string;
18
+ }
19
+ export interface FileActionVerification {
20
+ action: FileAction;
21
+ status: 'verified' | 'drift' | 'failed';
22
+ detail: string;
23
+ }
24
+ export declare function snapshotFile(filePath: string): FileSnapshot;
25
+ export declare function snapshotFiles(paths: string[]): Map<string, FileSnapshot>;
26
+ export declare function parseFileActions(output: string): FileAction[];
27
+ export declare function verifyAction(action: FileAction, before: FileSnapshot, after: FileSnapshot): FileActionVerification;
28
+ export declare function runSWD(modelOutput: string, beforeSnapshots: Map<string, FileSnapshot>): SWDResult;
29
+ export declare function printSWDResults(result: SWDResult): void;
30
+ export declare function prescanPaths(modelOutput: string): string[];
31
+ export declare function detectUnexpectedChanges(beforeAll: Map<string, FileSnapshot>, claimedPaths: Set<string>): string[];
32
+ //# sourceMappingURL=swd.d.ts.map