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.
- package/LICENSE +21 -0
- package/README.md +229 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +50 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +98 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/chat.d.ts +4 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +214 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/dream.d.ts +4 -0
- package/dist/commands/dream.d.ts.map +1 -0
- package/dist/commands/dream.js +81 -0
- package/dist/commands/dream.js.map +1 -0
- package/dist/commands/verify.d.ts +2 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +191 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +87 -0
- package/dist/config.js.map +1 -0
- package/dist/memory.d.ts +19 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +127 -0
- package/dist/memory.js.map +1 -0
- package/dist/swd.d.ts +32 -0
- package/dist/swd.d.ts.map +1 -0
- package/dist/swd.js +242 -0
- package/dist/swd.js.map +1 -0
- package/dist/utils.d.ts +39 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +102 -0
- package/dist/utils.js.map +1 -0
- package/package.json +63 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|
package/dist/memory.d.ts
ADDED
|
@@ -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
|