@memstack/mcp 0.7.3 → 0.8.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/README.md +8 -3
- package/dist/cli.js +491 -37
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +22 -2
- package/dist/index.js +387 -35
- package/dist/index.js.map +1 -1
- package/package.json +9 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../config-env/src/index.ts","../src/config.ts","../src/server.ts"],"names":[],"mappings":";;;;;;AAaA,SAAS,eAAA,GAA+B;AACtC,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAC,OAAA,CAAQ,IAAI,cAAA,EAAgB;AACjE,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AACnF,EAAA;AACA,EAAA,IAAI,OAAA,CAAQ,IAAI,iBAAA,EAAmB;AACjC,IAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,QAAQ,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAC1E,EAAA;AACA,EAAA,OAAO,IAAI,gBAAA,CAAiB;IAC1B,MAAA,EAAQ,OAAA,CAAQ,IAAI,cAAA,IAAkB,EAAA;AACtC,IAAA,OAAA,EAAS,QAAQ,GAAA,CAAI,wBAAA;AACrB,IAAA,YAAA,EAAc,QAAQ,GAAA,CAAI;GAC3B,CAAA;AACH;AAEA,SAAS,qBAAA,GAAuD;AAC9D,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,wBAAA,EAA0B,OAAO,MAAA;AACjD,EAAA,IAAI,OAAA,CAAQ,IAAI,cAAA,EAAgB;AAC9B,IAAA,OAAO,IAAI,sBAAA,CAAuB,EAAE,QAAQ,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAC1E,EAAA;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,mBAAA,GAAgD;AAC7D,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,gBAAA,IAAoB,QAAA;AAEhD,EAAA,QAAQ,OAAA;IACN,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,sBAAA,EAAA;IAEb,KAAK,UAAA;AACH,MAAA,OAAO,IAAI,sBAAA,CAAuB;QAChC,GAAA,EAAK,OAAA,CAAQ,IAAI,YAAA,IAAgB;OAClC,CAAA;IAEH,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,kBAAA,CAAmB;QAC5B,UAAA,EAAY,OAAA,CAAQ,IAAI,YAAA,IAAgB;OACzC,CAAA;IAEH,KAAK,UAAA;AACH,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc;AAC7B,QAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAC1D,MAAA;AACA,MAAA,OAAO,IAAI,sBAAA,CAAuB;AAChC,QAAA,gBAAA,EAAkB,QAAQ,GAAA,CAAI;OAC/B,CAAA;AAEH,IAAA,KAAK,QAAA,EAAU;AACb,MAAA,IAAI;AAEF,QAAA,MAAM,aAAA,GAAgB,MAAM,OAAO,gBAAgB,CAAA;AACnD,QAAA,MAAM,EAAA,GAAK,IAAI,aAAA,CAAc,OAAA;AAC3B,UAAA,OAAA,CAAQ,IAAI,WAAA,IAAe;AAAA,SAAA;AAE7B,QAAA,OAAO,IAAI,oBAAA,CAAqB,EAAE,EAAA,EAAiB,CAAA;MACrD,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,KAAA;AACR,UAAA;AAAA,SAAA;AAEJ,MAAA;AACF,IAAA;AAEA,IAAA,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,SAAS,CAAA;AACpC,QAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAM,OAAA;AACvB,UAAA,OAAA,CAAQ,IAAI,SAAA,IAAa;AAAA,SAAA;AAE3B,QAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAiB,CAAA;MAC3D,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,KAAA;AACR,UAAA;AAAA,SAAA;AAEJ,MAAA;AACF,IAAA;AAEA,IAAA;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,OAAO,CAAA,6DAAA,CAA+D,CAAA;AAAA;AAE1H;AAaA,eAAsB,iBAAA,GAA8C;AAClE,EAAA,MAAM,MAAM,eAAA,EAAA;AACZ,EAAA,MAAM,YAAY,qBAAA,EAAA;AAClB,EAAA,MAAM,OAAA,GAAU,MAAM,mBAAA,EAAA;AACtB,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,CAAI,uBAAA,KAA4B,OAAA;AAC7D,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,SAAA;AAErD,EAAA,OAAO;AACL,IAAA,MAAA,EAAQ,EAAE,GAAA,EAAK,SAAA,EAAW,SAAS,QAAA,EAAU,EAAE,cAAA,EAAa;AAC5D,IAAA;AAAA,GAAA;AAEJ;;;ACjHA,eAAsB,UAAA,GAA0E;AAC9F,EAAA,OAAO,iBAAA,EAAkB;AAC3B;ACQA,IAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAI,GAAA,CAAI,iBAAA,EAAmB,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AAEzF,IAAM,KAAA,GAAQ;AAAA,EACV;AAAA,IACI,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EACI,oKAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yBAAA,EAA0B;AAAA,QAClE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA,EAAmD;AAAA,QAC3F,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qDAAA,EAAsD;AAAA,QACjG,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,qDAAA,EAAsD;AAAA,QACrH,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,0FAAA,EAA2F;AAAA,QACtI,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qCAAA;AAAsC,OACnF;AAAA,MACA,QAAA,EAAU,CAAC,SAAS;AAAA;AACxB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACI,qHAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yBAAA,EAA0B;AAAA,QAClE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA,EAAmD;AAAA,QAC3F,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yCAAA,EAA0C;AAAA,QACrF,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,yBAAA,EAA0B;AAAA,QACzF,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,0FAAA,EAA2F;AAAA,QACtI,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qCAAA;AAAsC,OACnF;AAAA,MACA,QAAA,EAAU,CAAC,SAAS;AAAA;AACxB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EACI,oJAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,QAAA,EAAU;AAAA,UACN,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa,iCAAA;AAAA,UACb,KAAA,EAAO;AAAA,YACH,IAAA,EAAM,QAAA;AAAA,YACN,UAAA,EAAY;AAAA,cACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yBAAA,EAA0B;AAAA,cAClE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA,EAAmD;AAAA,cAC3F,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yCAAA,EAA0C;AAAA,cACrF,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,yBAAA,EAA0B;AAAA,cACzF,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,0FAAA,EAA2F;AAAA,cACtI,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qCAAA;AAAsC,aACnF;AAAA,YACA,QAAA,EAAU,CAAC,SAAS;AAAA;AACxB;AACJ,OACJ;AAAA,MACA,QAAA,EAAU,CAAC,UAAU;AAAA;AACzB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,EAAA,EAAI,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,WAAA;AAAY,OACnD;AAAA,MACA,QAAA,EAAU,CAAC,IAAI;AAAA;AACnB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,sGAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,8DAAA,EAA+D;AAAA,QACrG,QAAA,EAAU;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAC,QAAA,EAAU,WAAA,EAAa,YAAY,QAAQ,CAAA;AAAA,UAClD,WAAA,EAAa;AAAA,SACjB;AAAA,QACA,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,sCAAA,EAAuC;AAAA,QAC7E,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,4BAAA,EAA6B;AAAA,QAC5F,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,wBAAA,EAAyB;AAAA,QAC/F,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA,EAAmD;AAAA,QAC3F,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,uDAAA,EAAwD;AAAA,QACrG,aAAA,EAAe,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,wDAAA;AAAyD;AAC3G;AACJ,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EACI,kIAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yDAAA,EAA0D;AAAA,QACpG,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,wBAAA,EAAyB;AAAA,QAC/F,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA;AAAmD;AAC/F;AACJ,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EACI,wGAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yDAAA,EAA0D;AAAA,QACpG,cAAA,EAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,uEAAA,EAAwE;AAAA,QACvH,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yCAAA,EAA0C;AAAA,QACtF,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kDAAA;AAAmD;AAC/F;AACJ,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACI,wLAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,IAAA,EAAM;AAAA,UACF,IAAA,EAAM,QAAA;AAAA,UACN,MAAM,CAAC,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,UAAU,SAAS,CAAA;AAAA,UAC9D,WAAA,EAAa;AAAA,SACjB;AAAA,QACA,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,sEAAA,EAAuE;AAAA,QAC/G,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,uEAAA,EAAwE;AAAA,QAC/G,aAAA,EAAe,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,yEAAA,EAA0E;AAAA,QACxH,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,wEAAA,EAAyE;AAAA,QACrH,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,qCAAA;AAAsC,OAChH;AAAA,MACA,QAAA,EAAU,CAAC,MAAM;AAAA;AACrB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,kEAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,2DAAA;AAA4D;AACxG;AACJ,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,qHAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,kCAAA;AAAmC,OACrG;AAAA,MACA,QAAA,EAAU,CAAC,KAAK;AAAA;AACpB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,sFAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,YAAY;AAAC;AACjB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,+BAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,EAAA,EAAI,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qBAAA;AAAsB,OAC7D;AAAA,MACA,QAAA,EAAU,CAAC,IAAI;AAAA;AACnB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,sBAAA;AAAuB,OACzF;AAAA,MACA,QAAA,EAAU,CAAC,KAAK;AAAA;AACpB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,mGAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,EAAA,EAAI,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,oBAAA;AAAqB,OAC5D;AAAA,MACA,QAAA,EAAU,CAAC,IAAI;AAAA;AACnB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,mGAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,4DAAA;AAA6D;AACzG;AACJ,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,8HAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,kDAAA;AAAmD,OAC1H;AAAA,MACA,QAAA,EAAU,CAAC,UAAU;AAAA;AACzB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,8DAAA;AAAA,IACb,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,YAAY;AAAC;AACjB,GACJ;AAAA,EACA;AAAA,IACI,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EACI,kMAAA;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACR,IAAA,EAAM;AAAA,UACF,IAAA,EAAM,QAAA;AAAA,UACN,MAAM,CAAC,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,UAAU,SAAS,CAAA;AAAA,UAC9D,WAAA,EAAa;AAAA,SACjB;AAAA,QACA,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,sEAAA,EAAuE;AAAA,QAC/G,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,gCAAA,EAAiC;AAAA,QACxE,aAAA,EAAe,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,uCAAA,EAAwC;AAAA,QACtF,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,0CAAA,EAA2C;AAAA,QACvF,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,uCAAA;AAAwC,OAClH;AAAA,MACA,QAAA,EAAU,CAAC,MAAM;AAAA;AACrB;AAER,CAAA;AAyFA,SAAS,kBAAA,CAAmB,MAAoB,cAAA,EAAuC;AACnF,EAAA,MAAM,cAAc,CAAC,OAAA,EAAS,gBAAgB,SAAA,EAAW,QAAA,EAAU,UAAU,SAAS,CAAA;AACtF,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,OAAA;AAC1B,EAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,IAAI,YAAY,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACnF;AACA,EAAA,OAAO;AAAA,IACH,IAAA;AAAA,IACA,OAAA,EAAA,CAAU,IAAA,CAAK,OAAA,IAAW,cAAA,EAAgB,IAAA,EAAK;AAAA,IAC/C,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,aAAa,IAAA,CAAK;AAAA,GACtB;AACJ;AAEA,SAAS,gBAAgB,OAAA,EAA0B;AAC/C,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW,OAAO,EAAA;AACtD,EAAA,OAAO,OAAO,OAAO,CAAA;AACzB;AAEA,SAAS,aAAa,IAAA,EAAqC;AACvD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,GAAG,OAAO,MAAA;AACjC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,IAAA,EAAK,CAAE,MAAA,GAAS,CAAC,CAAA;AAC7F,EAAA,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,MAAA;AAC5C;AAEA,SAAS,gBAAgB,UAAA,EAAyC;AAC9D,EAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,IAAA,EAAM,OAAO,MAAA;AAC5D,EAAA,MAAM,CAAA,GAAI,OAAO,UAAU,CAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,MAAA;AACrB,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AACrC;AAEO,SAAS,YAAA,CAAa;AAAA,EACzB,MAAA;AAAA,EACA,cAAA;AAAA,EACA,EAAA,EAAI;AACR,CAAA,EAKW;AACP,EAAA,MAAM,EAAA,GAAK,UAAA,IAAc,IAAI,QAAA,CAAS,MAAM,CAAA;AAC5C,EAAA,MAAM,SAAS,IAAI,MAAA;AAAA,IACf,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IACzC,EAAE,YAAA,EAAc,EAAE,KAAA,EAAO,EAAC,EAAG,SAAA,EAAW,EAAC,EAAG,OAAA,EAAS,EAAC,EAAE;AAAE,GAC9D;AAEA,EAAA,MAAA,CAAO,iBAAA,CAAkB,wBAAwB,aAAa;AAAA,IAC1D,KAAA,EAAO;AAAA,GACX,CAAE,CAAA;AAEF,EAAA,MAAA,CAAO,iBAAA,CAAkB,qBAAA,EAAuB,OAAO,OAAA,KAAY;AAC/D,IAAA,MAAM,IAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,SAAA,IAAa,EAAC;AAE3C,IAAA,IAAI;AACA,MAAA,QAAQ,OAAA,CAAQ,OAAO,IAAA;AAAM,QACzB,KAAK,gBAAA,EAAkB;AACnB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA;AACzC,UAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAClF,UAAA,MAAM,KAAA,GAAsB;AAAA,YACxB,OAAA,EAAA,CAAU,CAAA,CAAE,OAAA,IAAW,cAAA,EAAgB,IAAA,EAAK;AAAA,YAC5C,OAAA;AAAA,YACA,UAAA,EAAY,eAAA,CAAgB,CAAA,CAAE,UAAU,CAAA;AAAA,YACxC,IAAA,EAAM,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA;AAAA,YACzB,YAAY,CAAA,CAAE,UAAA;AAAA,YACd,UAAU,CAAA,CAAE;AAAA,WAChB;AACA,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,OAAA,CAAQ,KAAK,CAAA;AACrC,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,cAAA,EAAgB;AACjB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA;AACzC,UAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAClF,UAAA,MAAM,KAAA,GAA0B;AAAA,YAC5B,OAAA,EAAA,CAAU,CAAA,CAAE,OAAA,IAAW,cAAA,EAAgB,IAAA,EAAK;AAAA,YAC5C,OAAA;AAAA,YACA,UAAA,EAAY,eAAA,CAAgB,CAAA,CAAE,UAAU,CAAA;AAAA,YACxC,IAAA,EAAM,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA;AAAA,YACzB,YAAY,CAAA,CAAE,UAAA;AAAA,YACd,UAAU,CAAA,CAAE;AAAA,WAChB;AACA,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,MAAM,KAAK,CAAA;AAC1C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,oBAAA,EAAsB;AACvB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,MAAA,GAA6B,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YACtD,OAAA,EAAA,CAAU,CAAA,CAAE,OAAA,IAAW,cAAA,EAAgB,IAAA,EAAK;AAAA,YAC5C,OAAA,EAAS,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA;AAAA,YAClC,UAAA,EAAY,eAAA,CAAgB,CAAA,CAAE,UAAU,CAAA;AAAA,YACxC,IAAA,EAAM,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA;AAAA,YACzB,YAAY,CAAA,CAAE,UAAA;AAAA,YACd,UAAU,CAAA,CAAE;AAAA,WAChB,CAAE,CAAA;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,WAAW,MAAM,CAAA;AAChD,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,YAAA,EAAc;AACf,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,SAAS,MAAM,EAAA,CAAG,MAAA,CAAO,GAAA,CAAI,EAAE,EAAE,CAAA;AACvC,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,iBAAA,EAAmB;AACpB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,KAAA,GAA6B;AAAA,YAC/B,OAAA,EAAS,EAAE,OAAA,IAAW,cAAA;AAAA,YACtB,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,aAAa,CAAA,CAAE,WAAA;AAAA,YACf,cAAc,CAAA,CAAE,YAAA,GAAe,IAAI,IAAA,CAAK,CAAA,CAAE,YAAY,CAAA,GAAI,KAAA,CAAA;AAAA,YAC1D,eAAe,CAAA,CAAE,aAAA,GAAgB,IAAI,IAAA,CAAK,CAAA,CAAE,aAAa,CAAA,GAAI,KAAA;AAAA,WACjE;AACA,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,SAAS,KAAK,CAAA;AAC7C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,wBAAA,EAA0B;AAC3B,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,IAAA,GAAuB;AAAA,YACzB,OAAA,EAAS,EAAE,OAAA,IAAW,cAAA;AAAA,YACtB,WAAW,CAAA,CAAE,SAAA;AAAA,YACb,aAAa,CAAA,CAAE;AAAA,WACnB;AACA,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,eAAe,IAAI,CAAA;AAClD,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,kBAAA,EAAoB;AACrB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,IAAA,GAAyB;AAAA,YAC3B,OAAA,EAAS,EAAE,OAAA,IAAW,cAAA;AAAA,YACtB,WAAW,CAAA,CAAE,SAAA,GAAY,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,KAAA,CAAA;AAAA,YACjD,gBAAgB,CAAA,CAAE,cAAA;AAAA,YAClB,aAAa,CAAA,CAAE;AAAA,WACnB;AACA,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,UAAU,IAAI,CAAA;AAC7C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,cAAA,EAAgB;AACjB,UAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,IAAA,EAAiC,cAAc,CAAA;AACnF,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC7C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,oBAAA,EAAsB;AACvB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,SAAS,MAAM,EAAA,CAAG,OAAO,UAAA,CAAW,CAAA,CAAE,WAAW,cAAc,CAAA;AACrE,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,cAAA,EAAgB;AACjB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,SAAS,MAAM,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,EAAE,GAAG,CAAA;AAC1C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,cAAA,EAAgB;AACjB,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,KAAA,EAAM;AACrC,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,eAAA,EAAiB;AAClB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAC3B,UAAA,OAAO;AAAA,YACH,OAAA,EAAS;AAAA,cACL,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC,CAAA;AAAE;AAC9E,WACJ;AAAA,QACJ;AAAA,QAEA,KAAK,oBAAA,EAAsB;AACvB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,QAAQ,MAAM,EAAA,CAAG,MAAA,CAAO,UAAA,CAAW,EAAE,GAAG,CAAA;AAC9C,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,KAAA,EAAM,EAAG,IAAA,EAAM,CAAC,GAAG;AAAA,WAC1F;AAAA,QACJ;AAAA,QAEA,KAAK,cAAA,EAAgB;AACjB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,EAAE,CAAA;AAC1B,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC,GAAG;AAAA,WACzF;AAAA,QACJ;AAAA,QAEA,KAAK,eAAA,EAAiB;AAClB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,MAAM,SAAS,MAAM,EAAA,CAAG,MAAA,CAAO,CAAA,CAAE,WAAW,cAAc,CAAA;AAC1D,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,eAAA,EAAiB;AAClB,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,IAAI,CAAC,CAAA,CAAE,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,QAAQ,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACtE,YAAA,OAAO;AAAA,cACH,SAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,GAAG,OAAA,EAAS,uBAAA,IAA2B,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,cACrH,OAAA,EAAS;AAAA,aACb;AAAA,UACJ;AACA,UAAA,MAAM,QAAA,GAA6B;AAAA,YAC/B,OAAA,EAAS,CAAA;AAAA,YACT,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACvC;AACA,UAAA,MAAM,EAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,UAAA,OAAO;AAAA,YACH,SAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,EAAE,QAAA,CAAS,MAAA,IAAU,IAAA,EAAM,CAAC,GAAG;AAAA,WACvG;AAAA,QACJ;AAAA,QAEA,KAAK,eAAA,EAAiB;AAClB,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,EAAO;AAC/B,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA,KAAK,sBAAA,EAAwB;AACzB,UAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,IAAA,EAAiC,cAAc,CAAA;AACnF,UAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,YAAY,QAAQ,CAAA;AACnD,UAAA,OAAO;AAAA,YACH,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,WAC9E;AAAA,QACJ;AAAA,QAEA;AACI,UAAA,OAAO;AAAA,YACH,OAAA,EAAS;AAAA,cACL;AAAA,gBACI,IAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,iBAAiB,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI;AAAA;AAC1E,aACJ;AAAA,YACA,OAAA,EAAS;AAAA,WACb;AAAA;AACR,IACJ,SAAS,GAAA,EAAK;AACV,MAAA,OAAO;AAAA,QACH,OAAA,EAAS;AAAA,UACL;AAAA,YACI,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG;AAAA;AACpF,SACJ;AAAA,QACA,OAAA,EAAS;AAAA,OACb;AAAA,IACJ;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,iBAAA,CAAkB,4BAA4B,aAAa;AAAA,IAC9D,SAAA,EAAW;AAAA,MACP;AAAA,QACI,GAAA,EAAK,4BAAA;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACd;AAAA,MACA;AAAA,QACI,GAAA,EAAK,0BAAA;AAAA,QACL,IAAA,EAAM,oBAAA;AAAA,QACN,WAAA,EAAa,mCAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACd;AACJ,GACJ,CAAE,CAAA;AAEF,EAAA,MAAA,CAAO,iBAAA,CAAkB,yBAAA,EAA2B,OAAO,OAAA,KAAY;AACnE,IAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,CAAO,GAAA;AAE3B,IAAA,IAAI;AACA,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,CAAM,4BAA4B,CAAA;AACrD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACT,QAAA,OAAO;AAAA,UACH,QAAA,EAAU;AAAA,YACN;AAAA,cACI,GAAA;AAAA,cACA,QAAA,EAAU,YAAA;AAAA,cACV,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,OAAO,CAAA,sBAAA,EAAyB,GAAG,IAAI;AAAA;AAClE;AACJ,SACJ;AAAA,MACJ;AAEA,MAAA,MAAM,GAAG,eAAA,EAAiB,QAAQ,CAAA,GAAI,MAAA;AAEtC,MAAA,IAAI,aAAa,SAAA,EAAW;AACxB,QAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,MAAA,CAAO,eAAe,EAAE,OAAA,EAAS,iBAAiB,CAAA;AACvE,QAAA,OAAO;AAAA,UACH,QAAA,EAAU;AAAA,YACN,EAAE,GAAA,EAAK,QAAA,EAAU,eAAA,EAAiB,IAAA,EAAM,IAAI,YAAA;AAAa;AAC7D,SACJ;AAAA,MACJ;AAEA,MAAA,IAAI,aAAa,OAAA,EAAS;AACtB,QAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,MAAA,CAAO,KAAA,EAAM;AACpC,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA;AAC7C,QAAA,MAAM,SAAS,OAAA,GACT,EAAE,SAAS,eAAA,EAAiB,GAAG,SAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,GAC3D,EAAE,OAAA,EAAS,eAAA,EAAiB,OAAO,CAAA,EAAG,KAAA,EAAO,MAAM,KAAA,EAAM;AAC/D,QAAA,OAAO;AAAA,UACH,QAAA,EAAU;AAAA,YACN,EAAE,GAAA,EAAK,QAAA,EAAU,kBAAA,EAAoB,IAAA,EAAM,KAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAE;AAC/E,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO;AAAA,QACH,QAAA,EAAU;AAAA,UACN;AAAA,YACI,GAAA;AAAA,YACA,QAAA,EAAU,YAAA;AAAA,YACV,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,OAAO,CAAA,kBAAA,EAAqB,QAAQ,IAAI;AAAA;AACnE;AACJ,OACJ;AAAA,IACJ,SAAS,GAAA,EAAK;AACV,MAAA,OAAO;AAAA,QACH,QAAA,EAAU;AAAA,UACN;AAAA,YACI,GAAA;AAAA,YACA,QAAA,EAAU,YAAA;AAAA,YACV,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG;AAAA;AACpF;AACJ,OACJ;AAAA,IACJ;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,iBAAA,CAAkB,0BAA0B,aAAa;AAAA,IAC5D,OAAA,EAAS;AAAA,MACL;AAAA,QACI,IAAA,EAAM,gBAAA;AAAA,QACN,WAAA,EAAa,uDAAA;AAAA,QACb,SAAA,EAAW;AAAA,UACP;AAAA,YACI,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa,sCAAA;AAAA,YACb,QAAA,EAAU;AAAA;AACd;AACJ;AACJ;AACJ,GACJ,CAAE,CAAA;AAEF,EAAA,MAAA,CAAO,iBAAA,CAAkB,sBAAA,EAAwB,OAAO,OAAA,KAAY;AAChE,IAAA,IAAI;AACA,MAAA,MAAM,aAAA,GACF,OAAA,CAAQ,MAAA,CAAO,SAAA,EAAW,OAAA,IAAW,cAAA;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,MAAA,CAAO,eAAe,EAAE,OAAA,EAAS,eAAe,CAAA;AACrE,MAAA,OAAO;AAAA,QACH,QAAA,EAAU;AAAA,UACN;AAAA,YACI,IAAA,EAAM,WAAA;AAAA,YACN,SAAS,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAI,YAAA;AAAa;AAC7D;AACJ,OACJ;AAAA,IACJ,SAAS,GAAA,EAAK;AACV,MAAA,OAAO;AAAA,QACH,QAAA,EAAU;AAAA,UACN;AAAA,YACI,IAAA,EAAM,WAAA;AAAA,YACN,OAAA,EAAS;AAAA,cACL,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA;AACpE;AACJ;AACJ,OACJ;AAAA,IACJ;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACX","file":"index.js","sourcesContent":["import type { MemStackConfig, StorageProvider, LLMProvider, EmbeddingProvider } from \"@memstack/core\";\nimport {\n InMemoryStorageAdapter,\n DiskStorageAdapter,\n MarkdownStorageAdapter,\n PostgresStorageAdapter,\n SQLiteStorageAdapter,\n RedisStorageAdapter,\n OpenAILLMAdapter,\n AnthropicLLMAdapter,\n OpenAIEmbeddingAdapter,\n} from \"@memstack/core\";\n\nfunction buildLLMAdapter(): LLMProvider {\n if (!process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {\n throw new Error(\"At least one of OPENAI_API_KEY or ANTHROPIC_API_KEY must be set\");\n }\n if (process.env.ANTHROPIC_API_KEY) {\n return new AnthropicLLMAdapter({ apiKey: process.env.ANTHROPIC_API_KEY });\n }\n return new OpenAILLMAdapter({\n apiKey: process.env.OPENAI_API_KEY ?? \"\",\n baseURL: process.env.MEMSTACK_OPENAI_BASE_URL,\n defaultModel: process.env.MEMSTACK_LLM_MODEL,\n });\n}\n\nfunction buildEmbeddingAdapter(): EmbeddingProvider | undefined {\n if (process.env.MEMSTACK_OPENAI_BASE_URL) return undefined;\n if (process.env.OPENAI_API_KEY) {\n return new OpenAIEmbeddingAdapter({ apiKey: process.env.OPENAI_API_KEY });\n }\n return undefined;\n}\n\nasync function buildStorageAdapter(): Promise<StorageProvider> {\n const storage = process.env.MEMSTACK_STORAGE ?? \"memory\";\n\n switch (storage) {\n case \"memory\":\n return new InMemoryStorageAdapter();\n\n case \"markdown\":\n return new MarkdownStorageAdapter({\n dir: process.env.MEMSTACK_DIR ?? \"./memories\",\n });\n\n case \"disk\":\n return new DiskStorageAdapter({\n storageDir: process.env.MEMSTACK_DIR ?? \"./memstack-data\",\n });\n\n case \"postgres\":\n if (!process.env.DATABASE_URL) {\n throw new Error(\"postgres storage requires DATABASE_URL\");\n }\n return new PostgresStorageAdapter({\n connectionString: process.env.DATABASE_URL,\n });\n\n case \"sqlite\": {\n try {\n // @ts-expect-error optional peer dep\n const BetterSqlite3 = await import(\"better-sqlite3\");\n const db = new BetterSqlite3.default(\n process.env.SQLITE_PATH ?? \"./memstack.db\",\n );\n return new SQLiteStorageAdapter({ db: db as never });\n } catch {\n throw new Error(\n \"SQLite requires better-sqlite3. Install: npm install better-sqlite3\",\n );\n }\n }\n\n case \"redis\": {\n try {\n const Redis = await import(\"ioredis\");\n const client = new Redis.default(\n process.env.REDIS_URL ?? \"redis://localhost:6379\",\n );\n return new RedisStorageAdapter({ redis: client as never });\n } catch {\n throw new Error(\n \"Redis requires ioredis. Install: npm install ioredis\",\n );\n }\n }\n\n default:\n throw new Error(`Unknown MEMSTACK_STORAGE: \"${storage}\". Supported: memory, markdown, disk, postgres, sqlite, redis`);\n }\n}\n\nexport interface EnvConfigResult {\n config: MemStackConfig;\n /** From MEMSTACK_ACTOR, defaults to \"default\". Only meaningful for clients that scope work to one actor per process (e.g. the MCP server). */\n defaultActorId: string;\n}\n\n/**\n * Builds a MemStackConfig purely from environment variables. Shared by\n * @memstack/cli, @memstack/mcp, and @memstack/server so storage/LLM/embedding\n * wiring and env var behavior can't drift between the three entry points.\n */\nexport async function loadConfigFromEnv(): Promise<EnvConfigResult> {\n const llm = buildLLMAdapter();\n const embedding = buildEmbeddingAdapter();\n const storage = await buildStorageAdapter();\n const embedOnStore = process.env.MEMSTACK_EMBED_ON_STORE !== \"false\";\n const defaultActorId = process.env.MEMSTACK_ACTOR ?? \"default\";\n\n return {\n config: { llm, embedding, storage, defaults: { embedOnStore } },\n defaultActorId,\n };\n}\n","import type { MemStackConfig } from \"@memstack/core\";\nimport { loadConfigFromEnv } from \"@memstack/config-env\";\n\nexport async function loadConfig(): Promise<{ config: MemStackConfig; defaultActorId: string }> {\n return loadConfigFromEnv();\n}\n","import { readFileSync } from \"node:fs\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n ListPromptsRequestSchema,\n GetPromptRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { MemStack } from \"@memstack/core\";\nimport type { MemStackConfig, PruneStrategy, MemoryType, Memory, MemStackSnapshot, ProcessInput, MemoryStoreInput, MemoryRetrieveQuery, ContextOptions, SummarizeOptions } from \"@memstack/core\";\n\nconst pkg = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf-8\")) as { version: string };\n\nconst TOOLS = [\n {\n name: \"memory_process\",\n description:\n \"Store a memory with auto-enrichment (importance scoring, tag extraction, auto-summarization, auto-pruning). This is the primary method for recording interactions.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score (0.0-1.0). Auto-scored if omitted.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization. Auto-extracted if omitted.\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_store\",\n description:\n \"Store a memory directly without enrichment. Use this when you already have importance/tags or want precise control.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score 0.0-1.0. Default: 0.5.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_store_batch\",\n description:\n \"Store multiple memories in one call, directly without enrichment. Embeddings (if configured) are computed in a single batched call for efficiency.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n memories: {\n type: \"array\",\n description: \"Memories to store (at least 1).\",\n items: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score 0.0-1.0. Default: 0.5.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n },\n required: [\"memories\"],\n },\n },\n {\n name: \"memory_get\",\n description: \"Get a single memory by ID. Returns null if not found.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_retrieve\",\n description: \"Retrieve memories for an actor with optional filtering, semantic search, and date range constraints.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n query: { type: \"string\", description: \"Semantic search query (used with semantic/hybrid strategies)\" },\n strategy: {\n type: \"string\",\n enum: [\"recent\", \"important\", \"semantic\", \"hybrid\"],\n description: \"Retrieval strategy. Default: recent.\",\n },\n limit: { type: \"number\", description: \"Maximum number of memories to return\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Filter by tags (any match)\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Filter by memory types\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n createdAfter: { type: \"string\", description: \"ISO-8601 date. Only memories created after this time.\" },\n createdBefore: { type: \"string\", description: \"ISO-8601 date. Only memories created before this time.\" },\n },\n },\n },\n {\n name: \"memory_compile_context\",\n description:\n \"Compile memories into an LLM-ready system prompt (markdown formatted, token-budgeted, split into important and recent sections).\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n maxTokens: { type: \"number\", description: \"Maximum tokens for the compiled context. Default: 2000.\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Filter by memory types\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_summarize\",\n description:\n \"Summarize old memories into a single summary memory. Compresses N interactions into 1 summary via LLM.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n olderThan: { type: \"string\", description: \"ISO-8601 date. Only summarize memories older than this.\" },\n skipMostRecent: { type: \"number\", description: \"Skip the N most recent memories to preserve conversational freshness.\" },\n targetCount: { type: \"number\", description: \"Maximum number of memories to summarize\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_prune\",\n description:\n \"Prune (delete) memories matching the given strategy. Scoped to a single actor — defaults to the current session actor. Returns the pruned memory IDs and count. Handle with care.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\",\n enum: [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"compose\"],\n description: \"Prune strategy type. Note: 'custom' is not available via MCP because it requires a JS function.\",\n },\n actorId: { type: \"string\", description: \"Actor ID to scope pruning to. Defaults to the current session actor.\" },\n maxAge: { type: \"number\", description: \"Max age in seconds (for byAge). Memories older than this are removed.\" },\n minImportance: { type: \"number\", description: \"Minimum importance (for byImportance). Memories below this are removed.\" },\n maxPerActor: { type: \"number\", description: \"Maximum memories per actor (for byCount). Excess memories are removed.\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Memory types to prune (for byType).\" },\n },\n required: [\"type\"],\n },\n },\n {\n name: \"memory_purge_actor\",\n description: \"Delete ALL memories belonging to a specific actor. Irreversible.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n actorId: { type: \"string\", description: \"Actor ID to purge. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_merge\",\n description: \"Merge multiple memories into one. Uses the highest-importance memory as the base and appends content from the rest.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n ids: { type: \"array\", items: { type: \"string\" }, description: \"Memory IDs to merge (at least 2)\" },\n },\n required: [\"ids\"],\n },\n },\n {\n name: \"memory_stats\",\n description: \"Get memory statistics: total count, by type, by actor, average importance, and more.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {},\n },\n },\n {\n name: \"memory_delete\",\n description: \"Delete a single memory by ID.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID to delete\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_delete_many\",\n description: \"Delete multiple memories by ID in one call. Returns the number actually deleted.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n ids: { type: \"array\", items: { type: \"string\" }, description: \"Memory IDs to delete\" },\n },\n required: [\"ids\"],\n },\n },\n {\n name: \"memory_touch\",\n description: \"Bump a memory's recency (last-accessed timestamp) without changing its content, id, or createdAt.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID to touch\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_export\",\n description: \"Export a snapshot of memories for backup or migration. Returns { version, memories, exportedAt }.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n actorId: { type: \"string\", description: \"Actor ID to export. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_import\",\n description: \"Import memories from a snapshot previously produced by memory_export. Restores each memory as-is, including its original ID.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n memories: { type: \"array\", items: { type: \"object\" }, description: \"Memories to import, as produced by memory_export\" },\n },\n required: [\"memories\"],\n },\n },\n {\n name: \"memory_health\",\n description: \"Check the health of storage, LLM, and embedding connections.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {},\n },\n },\n {\n name: \"memory_dry_run_prune\",\n description:\n \"Preview what would be pruned by a given strategy WITHOUT actually deleting. Scoped to a single actor — defaults to the current session actor. Returns the memory IDs that would be removed.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\",\n enum: [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"compose\"],\n description: \"Prune strategy type to preview. Note: 'custom' is not available via MCP because it requires a JS function.\",\n },\n actorId: { type: \"string\", description: \"Actor ID to scope pruning to. Defaults to the current session actor.\" },\n maxAge: { type: \"number\", description: \"Max age in seconds (for byAge)\" },\n minImportance: { type: \"number\", description: \"Minimum importance (for byImportance)\" },\n maxPerActor: { type: \"number\", description: \"Maximum memories per actor (for byCount)\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Memory types to evaluate (for byType)\" },\n },\n required: [\"type\"],\n },\n },\n];\n\ninterface MCPProcessArgs {\n content: string;\n actorId?: string;\n importance?: number;\n tags?: string[];\n memoryType?: string;\n metadata?: Record<string, unknown>;\n}\n\ninterface MCPStoreArgs {\n content: string;\n actorId?: string;\n importance?: number;\n tags?: string[];\n memoryType?: string;\n metadata?: Record<string, unknown>;\n}\n\ninterface MCPStoreBatchArgs {\n memories: MCPStoreArgs[];\n}\n\ninterface MCPGetArgs {\n id: string;\n}\n\ninterface MCPDeleteManyArgs {\n ids: string[];\n}\n\ninterface MCPTouchArgs {\n id: string;\n}\n\ninterface MCPExportArgs {\n actorId?: string;\n}\n\ninterface MCPImportArgs {\n memories: Memory[];\n}\n\ninterface MCPRetrieveArgs {\n actorId?: string;\n query?: string;\n strategy?: \"recent\" | \"important\" | \"semantic\" | \"hybrid\";\n limit?: number;\n tags?: string[];\n memoryTypes?: string[];\n createdAfter?: string;\n createdBefore?: string;\n}\n\ninterface MCPCompileContextArgs {\n actorId?: string;\n maxTokens?: number;\n memoryTypes?: string[];\n}\n\ninterface MCPSummarizeArgs {\n actorId?: string;\n olderThan?: string;\n skipMostRecent?: number;\n targetCount?: number;\n}\n\ninterface MCPPruneArgs {\n type: \"byAge\" | \"byImportance\" | \"byCount\" | \"byType\" | \"compose\";\n actorId?: string;\n maxAge?: number;\n minImportance?: number;\n maxPerActor?: number;\n memoryTypes?: string[];\n}\n\ninterface MCPPurgeArgs {\n actorId?: string;\n}\n\ninterface MCPMergeArgs {\n ids: string[];\n}\n\ninterface MCPDeleteArgs {\n id: string;\n}\n\nfunction buildPruneStrategy(args: MCPPruneArgs, defaultActorId: string): PruneStrategy {\n const VALID_TYPES = [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"custom\", \"compose\"];\n const type = args.type ?? \"byAge\";\n if (!VALID_TYPES.includes(type)) {\n throw new Error(`Invalid prune type: ${type}. Valid: ${VALID_TYPES.join(\", \")}`);\n }\n return {\n type: type as PruneStrategy[\"type\"],\n actorId: (args.actorId ?? defaultActorId).trim(),\n maxAge: args.maxAge,\n minImportance: args.minImportance,\n maxPerActor: args.maxPerActor,\n memoryTypes: args.memoryTypes as MemoryType[] | undefined,\n };\n}\n\nfunction sanitizeContent(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (content === null || content === undefined) return \"\";\n return String(content);\n}\n\nfunction sanitizeTags(tags: unknown): string[] | undefined {\n if (!Array.isArray(tags)) return undefined;\n const filtered = tags.filter((t): t is string => typeof t === \"string\" && t.trim().length > 0);\n return filtered.length > 0 ? filtered : undefined;\n}\n\nfunction clampImportance(importance: unknown): number | undefined {\n if (importance === undefined || importance === null) return undefined;\n const n = Number(importance);\n if (isNaN(n)) return undefined;\n return Math.max(0, Math.min(1, n));\n}\n\nexport function createServer({\n config,\n defaultActorId,\n ms: providedMs,\n}: {\n config: MemStackConfig;\n defaultActorId: string;\n /** Reuse an existing MemStack instance instead of constructing one from config. Used by HTTP mode to avoid reconnecting storage per request. */\n ms?: MemStack;\n}): Server {\n const ms = providedMs ?? new MemStack(config);\n const server = new Server(\n { name: \"memstack\", version: pkg.version },\n { capabilities: { tools: {}, resources: {}, prompts: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: TOOLS,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const args = (request.params.arguments ?? {}) as Record<string, unknown>;\n\n try {\n switch (request.params.name) {\n case \"memory_process\": {\n const a = args as unknown as MCPProcessArgs;\n const content = sanitizeContent(a.content);\n if (!content) throw new Error(\"content is required and must be a non-empty string\");\n const input: ProcessInput = {\n actorId: (a.actorId ?? defaultActorId).trim(),\n content,\n importance: clampImportance(a.importance),\n tags: sanitizeTags(a.tags),\n memoryType: a.memoryType as MemoryType | undefined,\n metadata: a.metadata,\n };\n const result = await ms.process(input);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_store\": {\n const a = args as unknown as MCPStoreArgs;\n const content = sanitizeContent(a.content);\n if (!content) throw new Error(\"content is required and must be a non-empty string\");\n const input: MemoryStoreInput = {\n actorId: (a.actorId ?? defaultActorId).trim(),\n content,\n importance: clampImportance(a.importance),\n tags: sanitizeTags(a.tags),\n memoryType: a.memoryType as MemoryType | undefined,\n metadata: a.metadata,\n };\n const result = await ms.memory.store(input);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_store_batch\": {\n const a = args as unknown as MCPStoreBatchArgs;\n const inputs: MemoryStoreInput[] = a.memories.map((m) => ({\n actorId: (m.actorId ?? defaultActorId).trim(),\n content: sanitizeContent(m.content),\n importance: clampImportance(m.importance),\n tags: sanitizeTags(m.tags),\n memoryType: m.memoryType as MemoryType | undefined,\n metadata: m.metadata,\n }));\n const result = await ms.memory.storeBatch(inputs);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_get\": {\n const a = args as unknown as MCPGetArgs;\n const result = await ms.memory.get(a.id);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_retrieve\": {\n const a = args as unknown as MCPRetrieveArgs;\n const query: MemoryRetrieveQuery = {\n actorId: a.actorId ?? defaultActorId,\n query: a.query,\n strategy: a.strategy,\n limit: a.limit,\n tags: a.tags,\n memoryTypes: a.memoryTypes as MemoryType[] | undefined,\n createdAfter: a.createdAfter ? new Date(a.createdAfter) : undefined,\n createdBefore: a.createdBefore ? new Date(a.createdBefore) : undefined,\n };\n const result = await ms.memory.retrieve(query);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_compile_context\": {\n const a = args as unknown as MCPCompileContextArgs;\n const opts: ContextOptions = {\n actorId: a.actorId ?? defaultActorId,\n maxTokens: a.maxTokens,\n memoryTypes: a.memoryTypes as MemoryType[] | undefined,\n };\n const result = await ms.memory.compileContext(opts);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_summarize\": {\n const a = args as unknown as MCPSummarizeArgs;\n const opts: SummarizeOptions = {\n actorId: a.actorId ?? defaultActorId,\n olderThan: a.olderThan ? new Date(a.olderThan) : undefined,\n skipMostRecent: a.skipMostRecent,\n targetCount: a.targetCount,\n };\n const result = await ms.memory.summarize(opts);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_prune\": {\n const strategy = buildPruneStrategy(args as unknown as MCPPruneArgs, defaultActorId);\n const result = await ms.memory.prune(strategy);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_purge_actor\": {\n const a = args as unknown as MCPPurgeArgs;\n const result = await ms.memory.purgeActor(a.actorId ?? defaultActorId);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_merge\": {\n const a = args as unknown as MCPMergeArgs;\n const result = await ms.memory.merge(a.ids);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_stats\": {\n const result = await ms.memory.stats();\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_delete\": {\n const a = args as unknown as MCPDeleteArgs;\n await ms.memory.delete(a.id);\n return {\n content: [\n { type: \"text\" as const, text: JSON.stringify({ deleted: true }, null, 2) },\n ],\n };\n }\n\n case \"memory_delete_many\": {\n const a = args as unknown as MCPDeleteManyArgs;\n const count = await ms.memory.deleteMany(a.ids);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ deleted: count }, null, 2) }],\n };\n }\n\n case \"memory_touch\": {\n const a = args as unknown as MCPTouchArgs;\n await ms.memory.touch(a.id);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ touched: true }, null, 2) }],\n };\n }\n\n case \"memory_export\": {\n const a = args as unknown as MCPExportArgs;\n const result = await ms.export(a.actorId ?? defaultActorId);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_import\": {\n const a = args as unknown as MCPImportArgs;\n if (!a.memories || !Array.isArray(a.memories) || a.memories.length === 0) {\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ imported: 0, message: \"No memories to import\" }, null, 2) }],\n isError: true,\n };\n }\n const snapshot: MemStackSnapshot = {\n version: 1,\n memories: a.memories,\n exportedAt: new Date().toISOString(),\n };\n await ms.import(snapshot);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ imported: a.memories.length }, null, 2) }],\n };\n }\n\n case \"memory_health\": {\n const result = await ms.health();\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_dry_run_prune\": {\n const strategy = buildPruneStrategy(args as unknown as MCPPruneArgs, defaultActorId);\n const result = await ms.memory.dryRunPrune(strategy);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n default:\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify({ error: `Unknown tool: ${request.params.name}` }),\n },\n ],\n isError: true,\n };\n }\n } catch (err) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),\n },\n ],\n isError: true,\n };\n }\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n {\n uri: \"memory://{actorId}/context\",\n name: \"Actor Memory Context\",\n description: \"Compiled LLM-ready context for an actor\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"memory://{actorId}/stats\",\n name: \"Actor Memory Stats\",\n description: \"Diagnostic stats for actor memory\",\n mimeType: \"application/json\",\n },\n ],\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const uri = request.params.uri;\n\n try {\n const parsed = uri.match(/^memory:\\/\\/([^/]+)\\/(.+)$/);\n if (!parsed) {\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: `Invalid resource URI: ${uri}` }),\n },\n ],\n };\n }\n\n const [, resourceActorId, resource] = parsed;\n\n if (resource === \"context\") {\n const ctx = await ms.memory.compileContext({ actorId: resourceActorId });\n return {\n contents: [\n { uri, mimeType: \"text/markdown\", text: ctx.systemPrompt },\n ],\n };\n }\n\n if (resource === \"stats\") {\n const stats = await ms.memory.stats();\n const byActor = stats.byActor[resourceActorId];\n const result = byActor\n ? { actorId: resourceActorId, ...byActor, total: stats.total }\n : { actorId: resourceActorId, count: 0, total: stats.total };\n return {\n contents: [\n { uri, mimeType: \"application/json\", text: JSON.stringify(result, null, 2) },\n ],\n };\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: `Unknown resource: ${resource}` }),\n },\n ],\n };\n } catch (err) {\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),\n },\n ],\n };\n }\n });\n\n server.setRequestHandler(ListPromptsRequestSchema, async () => ({\n prompts: [\n {\n name: \"memory_context\",\n description: \"Injects compiled memory context for the current actor\",\n arguments: [\n {\n name: \"actorId\",\n description: \"Actor ID (defaults to session actor)\",\n required: false,\n },\n ],\n },\n ],\n }));\n\n server.setRequestHandler(GetPromptRequestSchema, async (request) => {\n try {\n const promptActorId =\n request.params.arguments?.actorId ?? defaultActorId;\n const ctx = await ms.memory.compileContext({ actorId: promptActorId });\n return {\n messages: [\n {\n role: \"assistant\" as const,\n content: { type: \"text\" as const, text: ctx.systemPrompt },\n },\n ],\n };\n } catch (err) {\n return {\n messages: [\n {\n role: \"assistant\" as const,\n content: {\n type: \"text\" as const,\n text: `Error: ${err instanceof Error ? err.message : String(err)}`,\n },\n },\n ],\n };\n }\n });\n\n return server;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../config-env/src/config-file.ts","../../config-env/src/project.ts","../../config-env/src/index.ts","../src/config.ts","../src/server.ts","../src/harness.ts","../src/hook.ts"],"names":["join","existsSync","readFileSync","loadConfig","pkg","TOOLS","Server","ListToolsRequestSchema","CallToolRequestSchema","InMemoryStorageAdapter","defaultRecallNamespaces","GLOBAL_NAMESPACE"],"mappings":"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","file":"index.js","sourcesContent":["// ~/.memstack/config.json. Holds the LLM provider and key and\n// the storage choice, so harness MCP configs carry no secrets. The file never\n// makes MemStack install a storage driver; it only records which one to load.\nimport { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const STORAGE_TYPES = [\"memory\", \"markdown\", \"disk\", \"postgres\", \"sqlite\", \"redis\"] as const;\nexport type StorageType = (typeof STORAGE_TYPES)[number];\n\nexport interface MemStackConfigFile {\n version: 1;\n llm?: {\n provider: \"openai-compatible\" | \"anthropic\";\n apiKey: string;\n baseURL?: string;\n model?: string;\n };\n storage?: {\n type: StorageType;\n /** File path for sqlite, directory for disk and markdown. */\n path?: string;\n /** Connection URL for postgres and redis. */\n url?: string;\n };\n}\n\n/** `$MEMSTACK_HOME`, or `~/.memstack`. */\nexport function memstackHome(): string {\n return process.env.MEMSTACK_HOME ?? join(homedir(), \".memstack\");\n}\n\nexport function configFilePath(home: string = memstackHome()): string {\n return join(home, \"config.json\");\n}\n\n/** The parsed config file, or undefined when it does not exist. Throws on invalid content. */\nexport function readConfigFile(path: string = configFilePath()): MemStackConfigFile | undefined {\n if (!existsSync(path)) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(path, \"utf8\"));\n } catch (error) {\n throw new Error(`${path} is not valid JSON: ${(error as Error).message}`);\n }\n return validateConfigFile(parsed, path);\n}\n\n/**\n * Writes the config file atomically, creating the directory with mode 0700\n * and the file with mode 0600, and tightening modes of existing ones.\n */\nexport function writeConfigFile(config: MemStackConfigFile, path: string = configFilePath()): void {\n validateConfigFile(config, path);\n const dir = join(path, \"..\");\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n chmodSync(dir, 0o700);\n const tmp = `${path}.${process.pid}.tmp`;\n writeFileSync(tmp, `${JSON.stringify(config, null, 2)}\\n`, { mode: 0o600 });\n chmodSync(tmp, 0o600);\n renameSync(tmp, path);\n}\n\n/** Warnings about the config file's permissions; empty when they are owner-only or the file is absent. */\nexport function checkConfigPermissions(path: string = configFilePath()): string[] {\n if (process.platform === \"win32\" || !existsSync(path)) return [];\n const warnings: string[] = [];\n const fileMode = statSync(path).mode & 0o777;\n if (fileMode & 0o077) {\n warnings.push(`${path} is readable by other users (mode ${fileMode.toString(8)}). Run: chmod 600 ${path}`);\n }\n const dir = join(path, \"..\");\n const dirMode = statSync(dir).mode & 0o777;\n if (dirMode & 0o077) {\n warnings.push(`${dir} is accessible by other users (mode ${dirMode.toString(8)}). Run: chmod 700 ${dir}`);\n }\n return warnings;\n}\n\nfunction validateConfigFile(value: unknown, path: string): MemStackConfigFile {\n const fail = (message: string): never => {\n throw new Error(`Invalid ${path}: ${message}`);\n };\n if (!isObject(value)) fail(\"expected a JSON object\");\n const config = value as Record<string, unknown>;\n if (config.version !== 1) fail(`unsupported version ${JSON.stringify(config.version)}, expected 1`);\n\n if (config.llm !== undefined) {\n if (!isObject(config.llm)) fail(\"llm must be an object\");\n const llm = config.llm as Record<string, unknown>;\n if (llm.provider !== \"openai-compatible\" && llm.provider !== \"anthropic\") {\n fail('llm.provider must be \"openai-compatible\" or \"anthropic\"');\n }\n if (typeof llm.apiKey !== \"string\" || !llm.apiKey) fail(\"llm.apiKey must be a non-empty string\");\n for (const key of [\"baseURL\", \"model\"]) {\n if (llm[key] !== undefined && typeof llm[key] !== \"string\") fail(`llm.${key} must be a string`);\n }\n }\n\n if (config.storage !== undefined) {\n if (!isObject(config.storage)) fail(\"storage must be an object\");\n const storage = config.storage as Record<string, unknown>;\n if (!STORAGE_TYPES.includes(storage.type as StorageType)) {\n fail(`storage.type must be one of ${STORAGE_TYPES.join(\", \")}`);\n }\n for (const key of [\"path\", \"url\"]) {\n if (storage[key] !== undefined && typeof storage[key] !== \"string\") fail(`storage.${key} must be a string`);\n }\n }\n\n return config as unknown as MemStackConfigFile;\n}\n\nfunction isObject(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","// Project identity shared by every harness. The ID is derived\n// from the repository itself every time, with no stored state, so it survives\n// remote changes, moves, new clones, new machines, and switching storage.\nimport { execFileSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, realpathSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport type ProjectSource = \"pin\" | \"root-commit\" | \"remote\" | \"git\" | \"directory\";\n\nexport interface ProjectIdentity {\n /** Stable ID used in `project:<id>` namespaces. */\n id: string;\n source: ProjectSource;\n /** What the ID was derived from: the pinned name, commit hash, remote, or path. */\n key: string;\n /** Git working tree root, or the directory itself outside git. */\n root: string;\n /**\n * IDs this project had before a more stable source became available,\n * e.g. before its first commit. Memories under them are adopted once.\n */\n previousIds: string[];\n}\n\nexport const PIN_FILE = \".memstack.json\";\nconst PIN_PATTERN = /^[a-z0-9][a-z0-9._-]{0,63}$/i;\n\n/**\n * Resolves the project for a working directory, preferring, in order:\n *\n * 1. a pinned ID in `.memstack.json` at the repository root, shared by the team;\n * 2. the repository's first commit on its main line, which every clone shares\n * and which survives adding or renaming a remote and moving the folder;\n * 3. the normalized `origin` remote, for shallow clones whose first commit is\n * not available;\n * 4. the shared git directory, for repositories without commits, so worktrees\n * still match;\n * 5. the directory, outside git.\n */\nexport function resolveProject(cwd: string = process.cwd()): ProjectIdentity {\n const dir = realpathSync(resolve(cwd));\n const root = git(dir, [\"rev-parse\", \"--show-toplevel\"]);\n const base = root ?? dir;\n\n const pinned = readPin(base);\n const fallbacks = transitionalIds(dir, root);\n\n if (pinned) return { id: pinned, source: \"pin\", key: pinned, root: base, previousIds: [] };\n if (!root) return { ...identity(\"directory\", dir), root: dir, previousIds: [] };\n\n const shallow = git(root, [\"rev-parse\", \"--is-shallow-repository\"]) === \"true\";\n const rootCommit = shallow ? null : firstCommit(root);\n if (rootCommit) return { ...identity(\"root-commit\", rootCommit), root, previousIds: fallbacks };\n\n const remote = git(root, [\"config\", \"--get\", \"remote.origin.url\"]);\n const normalized = shallow && remote ? normalizeRemote(remote) : null;\n if (normalized) return { ...identity(\"remote\", normalized), root, previousIds: fallbacks };\n\n const gitId = identity(\"git\", gitRepoKey(root));\n return { ...gitId, root, previousIds: fallbacks.filter((id) => id !== gitId.id) };\n}\n\n/**\n * Writes `.memstack.json` with a pinned project ID at the repository root.\n * Commit the file so every clone and teammate uses the same project.\n */\nexport function pinProject(name: string, cwd: string = process.cwd()): string {\n if (!PIN_PATTERN.test(name)) {\n throw new Error(\"A pinned project ID uses letters, digits, '.', '_', or '-', starts with a letter or digit, and is at most 64 characters.\");\n }\n const dir = realpathSync(resolve(cwd));\n const base = git(dir, [\"rev-parse\", \"--show-toplevel\"]) ?? dir;\n const path = join(base, PIN_FILE);\n const existing = existsSync(path) ? (JSON.parse(readFileSync(path, \"utf8\")) as Record<string, unknown>) : {};\n writeFileSync(path, `${JSON.stringify({ ...existing, project: name }, null, 2)}\\n`);\n return path;\n}\n\n/**\n * Reduces a git remote URL to `host/path` without protocol, credentials,\n * port, or `.git` suffix, so https, ssh, and scp-style URLs of the same\n * repository match. Returns null for local paths and unparseable values.\n */\nexport function normalizeRemote(url: string): string | null {\n const value = url.trim();\n if (!value) return null;\n\n let host: string;\n let path: string;\n const scp = value.match(/^(?:[^@/]+@)?([^:/]+):(?!\\/)(.+)$/);\n if (/^[a-z][a-z0-9+.-]*:\\/\\//i.test(value)) {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return null;\n }\n if (parsed.protocol === \"file:\" || !parsed.hostname) return null;\n host = parsed.hostname;\n path = decodeURIComponent(parsed.pathname);\n } else if (scp) {\n host = scp[1];\n path = scp[2];\n } else {\n return null;\n }\n\n path = path.replace(/^\\/+|\\/+$/g, \"\").replace(/\\.git$/i, \"\");\n if (!path) return null;\n return `${host.toLowerCase()}/${path}`;\n}\n\nfunction readPin(base: string): string | null {\n const path = join(base, PIN_FILE);\n if (!existsSync(path)) return null;\n let project: unknown;\n try {\n project = (JSON.parse(readFileSync(path, \"utf8\")) as { project?: unknown }).project;\n } catch (error) {\n throw new Error(`${path} is not valid JSON: ${(error as Error).message}`);\n }\n if (project === undefined) return null;\n if (typeof project !== \"string\" || !PIN_PATTERN.test(project)) {\n throw new Error(`${path}: \"project\" must use letters, digits, '.', '_', or '-' and be at most 64 characters.`);\n }\n return project;\n}\n\n// The first-parent root: merging an unrelated history later does not change it.\nfunction firstCommit(root: string): string | null {\n const out = git(root, [\"rev-list\", \"--max-parents=0\", \"--first-parent\", \"HEAD\"]);\n return out ? out.split(\"\\n\").pop()!.trim() : null;\n}\n\nfunction gitRepoKey(root: string): string {\n const commonDir = git(root, [\"rev-parse\", \"--path-format=absolute\", \"--git-common-dir\"]);\n return commonDir ? dirname(realpathSync(commonDir)) : root;\n}\n\n// IDs a repository has before its first commit: its git directory, and the\n// working directory it was opened from.\nfunction transitionalIds(dir: string, root: string | null): string[] {\n const ids = new Set<string>();\n if (root) ids.add(identity(\"git\", gitRepoKey(root)).id);\n ids.add(identity(\"directory\", dir).id);\n return [...ids];\n}\n\nfunction identity(source: Exclude<ProjectSource, \"pin\">, key: string): { id: string; source: ProjectSource; key: string } {\n const id = createHash(\"sha256\").update(`${source}:${key}`).digest(\"hex\").slice(0, 16);\n return { id, source, key };\n}\n\nfunction git(cwd: string, args: string[]): string | null {\n try {\n const out = execFileSync(\"git\", [\"-C\", cwd, ...args], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n timeout: 5000,\n }).trim();\n return out || null;\n } catch {\n return null;\n }\n}\n","import type { MemStackConfig, StorageProvider, LLMProvider, EmbeddingProvider } from \"@memstack/core\";\nimport { readConfigFile } from \"./config-file.js\";\nimport type { MemStackConfigFile } from \"./config-file.js\";\nimport {\n InMemoryStorageAdapter,\n DiskStorageAdapter,\n MarkdownStorageAdapter,\n PostgresStorageAdapter,\n SQLiteStorageAdapter,\n RedisStorageAdapter,\n OpenAILLMAdapter,\n AnthropicLLMAdapter,\n OpenAIEmbeddingAdapter,\n} from \"@memstack/core\";\n\ntype Env = Record<string, string | undefined>;\n\n// Drivers are optional peers the user installs; only a missing module means \"install it\".\nfunction isMissingModule(error: unknown): boolean {\n const code = (error as NodeJS.ErrnoException | undefined)?.code;\n return code === \"ERR_MODULE_NOT_FOUND\" || code === \"MODULE_NOT_FOUND\";\n}\n\nfunction buildLLMAdapter(env: Env): LLMProvider {\n if (!env.ANTHROPIC_API_KEY && !env.OPENAI_API_KEY) {\n throw new Error(\"At least one of OPENAI_API_KEY or ANTHROPIC_API_KEY must be set\");\n }\n if (env.ANTHROPIC_API_KEY) {\n return new AnthropicLLMAdapter({ apiKey: env.ANTHROPIC_API_KEY, defaultModel: env.MEMSTACK_LLM_MODEL });\n }\n return new OpenAILLMAdapter({\n apiKey: env.OPENAI_API_KEY ?? \"\",\n baseURL: env.MEMSTACK_OPENAI_BASE_URL,\n defaultModel: env.MEMSTACK_LLM_MODEL,\n });\n}\n\nfunction buildEmbeddingAdapter(env: Env): EmbeddingProvider | undefined {\n if (env.MEMSTACK_OPENAI_BASE_URL) return undefined;\n if (env.OPENAI_API_KEY) {\n return new OpenAIEmbeddingAdapter({ apiKey: env.OPENAI_API_KEY });\n }\n return undefined;\n}\n\nasync function buildStorageAdapter(env: Env): Promise<StorageProvider> {\n const storage = env.MEMSTACK_STORAGE ?? \"memory\";\n\n switch (storage) {\n case \"memory\":\n return new InMemoryStorageAdapter();\n\n case \"markdown\":\n return new MarkdownStorageAdapter({\n dir: env.MEMSTACK_DIR ?? \"./memories\",\n });\n\n case \"disk\":\n return new DiskStorageAdapter({\n storageDir: env.MEMSTACK_DIR ?? \"./memstack-data\",\n });\n\n case \"postgres\":\n if (!env.DATABASE_URL) {\n throw new Error(\"postgres storage requires DATABASE_URL\");\n }\n return new PostgresStorageAdapter({\n connectionString: env.DATABASE_URL,\n });\n\n case \"sqlite\": {\n try {\n // @ts-expect-error optional peer dep\n const BetterSqlite3 = await import(\"better-sqlite3\");\n const db = new BetterSqlite3.default(\n env.SQLITE_PATH ?? \"./memstack.db\",\n );\n return new SQLiteStorageAdapter({ db: db as never });\n } catch (error) {\n if (!isMissingModule(error)) throw error;\n throw new Error(\n \"SQLite requires better-sqlite3. Install: npm install better-sqlite3@^11.10.0\",\n );\n }\n }\n\n case \"redis\": {\n try {\n const Redis = await import(\"ioredis\");\n const client = new Redis.default(\n env.REDIS_URL ?? \"redis://localhost:6379\",\n );\n return new RedisStorageAdapter({ redis: client as never });\n } catch (error) {\n if (!isMissingModule(error)) throw error;\n throw new Error(\n \"Redis requires ioredis. Install: npm install ioredis@^5.11.1\",\n );\n }\n }\n\n default:\n throw new Error(`Unknown MEMSTACK_STORAGE: \"${storage}\". Supported: memory, markdown, disk, postgres, sqlite, redis`);\n }\n}\n\nexport interface EnvConfigResult {\n config: MemStackConfig;\n /** From MEMSTACK_ACTOR, defaults to \"default\". Only meaningful for clients that scope work to one actor per process (e.g. the MCP server). */\n defaultActorId: string;\n}\n\n/**\n * Builds a MemStackConfig purely from environment variables. Shared by\n * @memstack/cli, @memstack/mcp, and @memstack/server so storage/LLM/embedding\n * wiring and env var behavior can't drift between the three entry points.\n */\nexport async function loadConfigFromEnv(): Promise<EnvConfigResult> {\n return buildConfig(process.env);\n}\n\n/**\n * Builds a MemStackConfig from `~/.memstack/config.json` overlaid with\n * environment variables. Used by harness entry points. Each section is taken\n * whole from one source: any LLM variable in the environment replaces the\n * file's `llm` section, and `MEMSTACK_STORAGE` replaces its `storage`\n * section, so a key from one provider is never sent to another's URL.\n */\nexport async function loadConfig(options: { configPath?: string } = {}): Promise<EnvConfigResult> {\n return buildConfig(mergeConfigFile(readConfigFile(options.configPath), process.env));\n}\n\n/** The environment with the config file's sections filled in where the environment has none. */\nexport function mergeConfigFile(file: MemStackConfigFile | undefined, env: Env): Env {\n const merged: Env = { ...env };\n const envHasLLM = LLM_ENV.some((key) => env[key] !== undefined);\n if (file?.llm && !envHasLLM) {\n if (file.llm.provider === \"anthropic\") merged.ANTHROPIC_API_KEY = file.llm.apiKey;\n else {\n merged.OPENAI_API_KEY = file.llm.apiKey;\n merged.MEMSTACK_OPENAI_BASE_URL = file.llm.baseURL;\n }\n merged.MEMSTACK_LLM_MODEL = file.llm.model;\n }\n if (file?.storage && env.MEMSTACK_STORAGE === undefined) {\n const { type, path, url } = file.storage;\n merged.MEMSTACK_STORAGE = type;\n if (type === \"sqlite\") merged.SQLITE_PATH = path;\n if (type === \"disk\" || type === \"markdown\") merged.MEMSTACK_DIR = path;\n if (type === \"postgres\") merged.DATABASE_URL = url;\n if (type === \"redis\") merged.REDIS_URL = url;\n }\n return merged;\n}\n\nconst LLM_ENV = [\"OPENAI_API_KEY\", \"ANTHROPIC_API_KEY\", \"MEMSTACK_OPENAI_BASE_URL\", \"MEMSTACK_LLM_MODEL\"];\n\nasync function buildConfig(env: Env): Promise<EnvConfigResult> {\n const llm = buildLLMAdapter(env);\n const embedding = buildEmbeddingAdapter(env);\n const storage = await buildStorageAdapter(env);\n const embedOnStore = env.MEMSTACK_EMBED_ON_STORE !== \"false\";\n const defaultActorId = env.MEMSTACK_ACTOR ?? \"default\";\n\n return {\n config: { llm, embedding, storage, defaults: { embedOnStore } },\n defaultActorId,\n };\n}\n\nexport { resolveProject, normalizeRemote, pinProject, PIN_FILE } from \"./project.js\";\nexport type { ProjectIdentity, ProjectSource } from \"./project.js\";\nexport {\n STORAGE_TYPES,\n memstackHome,\n configFilePath,\n readConfigFile,\n writeConfigFile,\n checkConfigPermissions,\n} from \"./config-file.js\";\nexport type { MemStackConfigFile, StorageType } from \"./config-file.js\";\n","import type { MemStackConfig } from \"@memstack/core\";\nimport { loadConfigFromEnv, loadConfig as loadConfigWithFile } from \"@memstack/config-env\";\n\nexport async function loadConfig(): Promise<{ config: MemStackConfig; defaultActorId: string }> {\n return loadConfigFromEnv();\n}\n\n/** Config for the harness profile: ~/.memstack/config.json overlaid with environment variables. */\nexport async function loadHarnessConfig(): Promise<{ config: MemStackConfig; defaultActorId: string }> {\n return loadConfigWithFile();\n}\n","import { readFileSync } from \"node:fs\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n ListPromptsRequestSchema,\n GetPromptRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { MemStack } from \"@memstack/core\";\nimport type { MemStackConfig, PruneStrategy, MemoryType, Memory, MemStackSnapshot, ProcessInput, MemoryStoreInput, MemoryRetrieveQuery, ContextOptions, SummarizeOptions } from \"@memstack/core\";\n\nconst pkg = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf-8\")) as { version: string };\n\nconst TOOLS = [\n {\n name: \"memory_process\",\n description:\n \"Store a memory with auto-enrichment (importance scoring, tag extraction, auto-summarization, auto-pruning). This is the primary method for recording interactions.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score (0.0-1.0). Auto-scored if omitted.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization. Auto-extracted if omitted.\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection, preference, decision, instruction). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_store\",\n description:\n \"Store a memory directly without enrichment. Use this when you already have importance/tags or want precise control.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score 0.0-1.0. Default: 0.5.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection, preference, decision, instruction). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_store_batch\",\n description:\n \"Store multiple memories in one call, directly without enrichment. Embeddings (if configured) are computed in a single batched call for efficiency.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n memories: {\n type: \"array\",\n description: \"Memories to store (at least 1).\",\n items: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"The memory content text\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n importance: { type: \"number\", description: \"Importance score 0.0-1.0. Default: 0.5.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Tags for categorization\" },\n memoryType: { type: \"string\", description: \"Memory type (interaction, summary, observation, fact, reflection, preference, decision, instruction). Default: interaction.\" },\n metadata: { type: \"object\", description: \"Additional metadata key-value pairs\" },\n },\n required: [\"content\"],\n },\n },\n },\n required: [\"memories\"],\n },\n },\n {\n name: \"memory_get\",\n description: \"Get a single memory by ID. Returns null if not found.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_retrieve\",\n description: \"Retrieve memories for an actor with optional filtering, semantic search, and date range constraints.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n query: { type: \"string\", description: \"Semantic search query (used with semantic/hybrid strategies)\" },\n strategy: {\n type: \"string\",\n enum: [\"recent\", \"important\", \"semantic\", \"hybrid\"],\n description: \"Retrieval strategy. Default: recent.\",\n },\n limit: { type: \"number\", description: \"Maximum number of memories to return\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Filter by tags (any match)\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Filter by memory types\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n createdAfter: { type: \"string\", description: \"ISO-8601 date. Only memories created after this time.\" },\n createdBefore: { type: \"string\", description: \"ISO-8601 date. Only memories created before this time.\" },\n },\n },\n },\n {\n name: \"memory_compile_context\",\n description:\n \"Compile memories into an LLM-ready system prompt (markdown formatted, token-budgeted, split into important and recent sections).\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n maxTokens: { type: \"number\", description: \"Maximum tokens for the compiled context. Default: 2000.\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Filter by memory types\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_summarize\",\n description:\n \"Summarize old memories into a single summary memory. Compresses N interactions into 1 summary via LLM.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n olderThan: { type: \"string\", description: \"ISO-8601 date. Only summarize memories older than this.\" },\n skipMostRecent: { type: \"number\", description: \"Skip the N most recent memories to preserve conversational freshness.\" },\n targetCount: { type: \"number\", description: \"Maximum number of memories to summarize\" },\n actorId: { type: \"string\", description: \"Actor ID. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_prune\",\n description:\n \"Prune (delete) memories matching the given strategy. Scoped to a single actor — defaults to the current session actor. Returns the pruned memory IDs and count. Handle with care.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\",\n enum: [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"compose\"],\n description: \"Prune strategy type. Note: 'custom' is not available via MCP because it requires a JS function.\",\n },\n actorId: { type: \"string\", description: \"Actor ID to scope pruning to. Defaults to the current session actor.\" },\n maxAge: { type: \"number\", description: \"Max age in seconds (for byAge). Memories older than this are removed.\" },\n minImportance: { type: \"number\", description: \"Minimum importance (for byImportance). Memories below this are removed.\" },\n maxPerActor: { type: \"number\", description: \"Maximum memories per actor (for byCount). Excess memories are removed.\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Memory types to prune (for byType).\" },\n },\n required: [\"type\"],\n },\n },\n {\n name: \"memory_purge_actor\",\n description: \"Delete ALL memories belonging to a specific actor. Irreversible.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n actorId: { type: \"string\", description: \"Actor ID to purge. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_merge\",\n description: \"Merge multiple memories into one. Uses the highest-importance memory as the base and appends content from the rest.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n ids: { type: \"array\", items: { type: \"string\" }, description: \"Memory IDs to merge (at least 2)\" },\n },\n required: [\"ids\"],\n },\n },\n {\n name: \"memory_stats\",\n description: \"Get memory statistics: total count, by type, by actor, average importance, and more.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {},\n },\n },\n {\n name: \"memory_delete\",\n description: \"Delete a single memory by ID.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID to delete\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_delete_many\",\n description: \"Delete multiple memories by ID in one call. Returns the number actually deleted.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n ids: { type: \"array\", items: { type: \"string\" }, description: \"Memory IDs to delete\" },\n },\n required: [\"ids\"],\n },\n },\n {\n name: \"memory_touch\",\n description: \"Bump a memory's recency (last-accessed timestamp) without changing its content, id, or createdAt.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n id: { type: \"string\", description: \"Memory ID to touch\" },\n },\n required: [\"id\"],\n },\n },\n {\n name: \"memory_export\",\n description: \"Export a snapshot of memories for backup or migration. Returns { version, memories, exportedAt }.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n actorId: { type: \"string\", description: \"Actor ID to export. Defaults to the current session actor.\" },\n },\n },\n },\n {\n name: \"memory_import\",\n description: \"Import memories from a snapshot previously produced by memory_export. Restores each memory as-is, including its original ID.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n memories: { type: \"array\", items: { type: \"object\" }, description: \"Memories to import, as produced by memory_export\" },\n },\n required: [\"memories\"],\n },\n },\n {\n name: \"memory_health\",\n description: \"Check the health of storage, LLM, and embedding connections.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {},\n },\n },\n {\n name: \"memory_dry_run_prune\",\n description:\n \"Preview what would be pruned by a given strategy WITHOUT actually deleting. Scoped to a single actor — defaults to the current session actor. Returns the memory IDs that would be removed.\",\n inputSchema: {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\",\n enum: [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"compose\"],\n description: \"Prune strategy type to preview. Note: 'custom' is not available via MCP because it requires a JS function.\",\n },\n actorId: { type: \"string\", description: \"Actor ID to scope pruning to. Defaults to the current session actor.\" },\n maxAge: { type: \"number\", description: \"Max age in seconds (for byAge)\" },\n minImportance: { type: \"number\", description: \"Minimum importance (for byImportance)\" },\n maxPerActor: { type: \"number\", description: \"Maximum memories per actor (for byCount)\" },\n memoryTypes: { type: \"array\", items: { type: \"string\" }, description: \"Memory types to evaluate (for byType)\" },\n },\n required: [\"type\"],\n },\n },\n];\n\ninterface MCPProcessArgs {\n content: string;\n actorId?: string;\n importance?: number;\n tags?: string[];\n memoryType?: string;\n metadata?: Record<string, unknown>;\n}\n\ninterface MCPStoreArgs {\n content: string;\n actorId?: string;\n importance?: number;\n tags?: string[];\n memoryType?: string;\n metadata?: Record<string, unknown>;\n}\n\ninterface MCPStoreBatchArgs {\n memories: MCPStoreArgs[];\n}\n\ninterface MCPGetArgs {\n id: string;\n}\n\ninterface MCPDeleteManyArgs {\n ids: string[];\n}\n\ninterface MCPTouchArgs {\n id: string;\n}\n\ninterface MCPExportArgs {\n actorId?: string;\n}\n\ninterface MCPImportArgs {\n memories: Memory[];\n}\n\ninterface MCPRetrieveArgs {\n actorId?: string;\n query?: string;\n strategy?: \"recent\" | \"important\" | \"semantic\" | \"hybrid\";\n limit?: number;\n tags?: string[];\n memoryTypes?: string[];\n createdAfter?: string;\n createdBefore?: string;\n}\n\ninterface MCPCompileContextArgs {\n actorId?: string;\n maxTokens?: number;\n memoryTypes?: string[];\n}\n\ninterface MCPSummarizeArgs {\n actorId?: string;\n olderThan?: string;\n skipMostRecent?: number;\n targetCount?: number;\n}\n\ninterface MCPPruneArgs {\n type: \"byAge\" | \"byImportance\" | \"byCount\" | \"byType\" | \"compose\";\n actorId?: string;\n maxAge?: number;\n minImportance?: number;\n maxPerActor?: number;\n memoryTypes?: string[];\n}\n\ninterface MCPPurgeArgs {\n actorId?: string;\n}\n\ninterface MCPMergeArgs {\n ids: string[];\n}\n\ninterface MCPDeleteArgs {\n id: string;\n}\n\nfunction buildPruneStrategy(args: MCPPruneArgs, defaultActorId: string): PruneStrategy {\n const VALID_TYPES = [\"byAge\", \"byImportance\", \"byCount\", \"byType\", \"custom\", \"compose\"];\n const type = args.type ?? \"byAge\";\n if (!VALID_TYPES.includes(type)) {\n throw new Error(`Invalid prune type: ${type}. Valid: ${VALID_TYPES.join(\", \")}`);\n }\n return {\n type: type as PruneStrategy[\"type\"],\n actorId: (args.actorId ?? defaultActorId).trim(),\n maxAge: args.maxAge,\n minImportance: args.minImportance,\n maxPerActor: args.maxPerActor,\n memoryTypes: args.memoryTypes as MemoryType[] | undefined,\n };\n}\n\nfunction sanitizeContent(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (content === null || content === undefined) return \"\";\n return String(content);\n}\n\nfunction sanitizeTags(tags: unknown): string[] | undefined {\n if (!Array.isArray(tags)) return undefined;\n const filtered = tags.filter((t): t is string => typeof t === \"string\" && t.trim().length > 0);\n return filtered.length > 0 ? filtered : undefined;\n}\n\nfunction clampImportance(importance: unknown): number | undefined {\n if (importance === undefined || importance === null) return undefined;\n const n = Number(importance);\n if (isNaN(n)) return undefined;\n return Math.max(0, Math.min(1, n));\n}\n\nexport function createServer({\n config,\n defaultActorId,\n ms: providedMs,\n}: {\n config: MemStackConfig;\n defaultActorId: string;\n /** Reuse an existing MemStack instance instead of constructing one from config. Used by HTTP mode to avoid reconnecting storage per request. */\n ms?: MemStack;\n}): Server {\n const ms = providedMs ?? new MemStack(config);\n const server = new Server(\n { name: \"memstack\", version: pkg.version },\n { capabilities: { tools: {}, resources: {}, prompts: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: TOOLS,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const args = (request.params.arguments ?? {}) as Record<string, unknown>;\n\n try {\n switch (request.params.name) {\n case \"memory_process\": {\n const a = args as unknown as MCPProcessArgs;\n const content = sanitizeContent(a.content);\n if (!content) throw new Error(\"content is required and must be a non-empty string\");\n const input: ProcessInput = {\n actorId: (a.actorId ?? defaultActorId).trim(),\n content,\n importance: clampImportance(a.importance),\n tags: sanitizeTags(a.tags),\n memoryType: a.memoryType as MemoryType | undefined,\n metadata: a.metadata,\n };\n const result = await ms.process(input);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_store\": {\n const a = args as unknown as MCPStoreArgs;\n const content = sanitizeContent(a.content);\n if (!content) throw new Error(\"content is required and must be a non-empty string\");\n const input: MemoryStoreInput = {\n actorId: (a.actorId ?? defaultActorId).trim(),\n content,\n importance: clampImportance(a.importance),\n tags: sanitizeTags(a.tags),\n memoryType: a.memoryType as MemoryType | undefined,\n metadata: a.metadata,\n };\n const result = await ms.memory.store(input);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_store_batch\": {\n const a = args as unknown as MCPStoreBatchArgs;\n const inputs: MemoryStoreInput[] = a.memories.map((m) => ({\n actorId: (m.actorId ?? defaultActorId).trim(),\n content: sanitizeContent(m.content),\n importance: clampImportance(m.importance),\n tags: sanitizeTags(m.tags),\n memoryType: m.memoryType as MemoryType | undefined,\n metadata: m.metadata,\n }));\n const result = await ms.memory.storeBatch(inputs);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_get\": {\n const a = args as unknown as MCPGetArgs;\n const result = await ms.memory.get(a.id);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_retrieve\": {\n const a = args as unknown as MCPRetrieveArgs;\n const query: MemoryRetrieveQuery = {\n actorId: a.actorId ?? defaultActorId,\n query: a.query,\n strategy: a.strategy,\n limit: a.limit,\n tags: a.tags,\n memoryTypes: a.memoryTypes as MemoryType[] | undefined,\n createdAfter: a.createdAfter ? new Date(a.createdAfter) : undefined,\n createdBefore: a.createdBefore ? new Date(a.createdBefore) : undefined,\n };\n const result = await ms.memory.retrieve(query);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_compile_context\": {\n const a = args as unknown as MCPCompileContextArgs;\n const opts: ContextOptions = {\n actorId: a.actorId ?? defaultActorId,\n maxTokens: a.maxTokens,\n memoryTypes: a.memoryTypes as MemoryType[] | undefined,\n };\n const result = await ms.memory.compileContext(opts);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_summarize\": {\n const a = args as unknown as MCPSummarizeArgs;\n const opts: SummarizeOptions = {\n actorId: a.actorId ?? defaultActorId,\n olderThan: a.olderThan ? new Date(a.olderThan) : undefined,\n skipMostRecent: a.skipMostRecent,\n targetCount: a.targetCount,\n };\n const result = await ms.memory.summarize(opts);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_prune\": {\n const strategy = buildPruneStrategy(args as unknown as MCPPruneArgs, defaultActorId);\n const result = await ms.memory.prune(strategy);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_purge_actor\": {\n const a = args as unknown as MCPPurgeArgs;\n const result = await ms.memory.purgeActor(a.actorId ?? defaultActorId);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_merge\": {\n const a = args as unknown as MCPMergeArgs;\n const result = await ms.memory.merge(a.ids);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_stats\": {\n const result = await ms.memory.stats();\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_delete\": {\n const a = args as unknown as MCPDeleteArgs;\n await ms.memory.delete(a.id);\n return {\n content: [\n { type: \"text\" as const, text: JSON.stringify({ deleted: true }, null, 2) },\n ],\n };\n }\n\n case \"memory_delete_many\": {\n const a = args as unknown as MCPDeleteManyArgs;\n const count = await ms.memory.deleteMany(a.ids);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ deleted: count }, null, 2) }],\n };\n }\n\n case \"memory_touch\": {\n const a = args as unknown as MCPTouchArgs;\n await ms.memory.touch(a.id);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ touched: true }, null, 2) }],\n };\n }\n\n case \"memory_export\": {\n const a = args as unknown as MCPExportArgs;\n const result = await ms.export(a.actorId ?? defaultActorId);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_import\": {\n const a = args as unknown as MCPImportArgs;\n if (!a.memories || !Array.isArray(a.memories) || a.memories.length === 0) {\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ imported: 0, message: \"No memories to import\" }, null, 2) }],\n isError: true,\n };\n }\n const snapshot: MemStackSnapshot = {\n version: 1,\n memories: a.memories,\n exportedAt: new Date().toISOString(),\n };\n await ms.import(snapshot);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify({ imported: a.memories.length }, null, 2) }],\n };\n }\n\n case \"memory_health\": {\n const result = await ms.health();\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n case \"memory_dry_run_prune\": {\n const strategy = buildPruneStrategy(args as unknown as MCPPruneArgs, defaultActorId);\n const result = await ms.memory.dryRunPrune(strategy);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n }\n\n default:\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify({ error: `Unknown tool: ${request.params.name}` }),\n },\n ],\n isError: true,\n };\n }\n } catch (err) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),\n },\n ],\n isError: true,\n };\n }\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n {\n uri: \"memory://{actorId}/context\",\n name: \"Actor Memory Context\",\n description: \"Compiled LLM-ready context for an actor\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"memory://{actorId}/stats\",\n name: \"Actor Memory Stats\",\n description: \"Diagnostic stats for actor memory\",\n mimeType: \"application/json\",\n },\n ],\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const uri = request.params.uri;\n\n try {\n const parsed = uri.match(/^memory:\\/\\/([^/]+)\\/(.+)$/);\n if (!parsed) {\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: `Invalid resource URI: ${uri}` }),\n },\n ],\n };\n }\n\n const [, resourceActorId, resource] = parsed;\n\n if (resource === \"context\") {\n const ctx = await ms.memory.compileContext({ actorId: resourceActorId });\n return {\n contents: [\n { uri, mimeType: \"text/markdown\", text: ctx.systemPrompt },\n ],\n };\n }\n\n if (resource === \"stats\") {\n const stats = await ms.memory.stats();\n const byActor = stats.byActor[resourceActorId];\n const result = byActor\n ? { actorId: resourceActorId, ...byActor, total: stats.total }\n : { actorId: resourceActorId, count: 0, total: stats.total };\n return {\n contents: [\n { uri, mimeType: \"application/json\", text: JSON.stringify(result, null, 2) },\n ],\n };\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: `Unknown resource: ${resource}` }),\n },\n ],\n };\n } catch (err) {\n return {\n contents: [\n {\n uri,\n mimeType: \"text/plain\",\n text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),\n },\n ],\n };\n }\n });\n\n server.setRequestHandler(ListPromptsRequestSchema, async () => ({\n prompts: [\n {\n name: \"memory_context\",\n description: \"Injects compiled memory context for the current actor\",\n arguments: [\n {\n name: \"actorId\",\n description: \"Actor ID (defaults to session actor)\",\n required: false,\n },\n ],\n },\n ],\n }));\n\n server.setRequestHandler(GetPromptRequestSchema, async (request) => {\n try {\n const promptActorId =\n request.params.arguments?.actorId ?? defaultActorId;\n const ctx = await ms.memory.compileContext({ actorId: promptActorId });\n return {\n messages: [\n {\n role: \"assistant\" as const,\n content: { type: \"text\" as const, text: ctx.systemPrompt },\n },\n ],\n };\n } catch (err) {\n return {\n messages: [\n {\n role: \"assistant\" as const,\n content: {\n type: \"text\" as const,\n text: `Error: ${err instanceof Error ? err.message : String(err)}`,\n },\n },\n ],\n };\n }\n });\n\n return server;\n}\n","// Harness MCP profile: five tools for agent harnesses such as\n// Claude Code and Codex, scoped to the project the harness was started in.\n// Tools take no actorId, so one project can never read or delete another's\n// memories, and bulk or destructive tools are not exposed.\nimport { readFileSync } from \"node:fs\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { CallToolRequestSchema, ListToolsRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport { z } from \"zod\";\nimport {\n GLOBAL_NAMESPACE,\n MemStackError,\n defaultRecallNamespaces,\n projectNamespace,\n} from \"@memstack/core\";\nimport type { HarnessMemory, Memory, MemoryType } from \"@memstack/core\";\n\nconst pkg = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf-8\")) as { version: string };\n\nconst KINDS = [\n \"fact\", \"preference\", \"decision\", \"instruction\", \"observation\",\n \"interaction\", \"summary\", \"reflection\",\n] as const satisfies readonly MemoryType[];\n\nexport const HARNESS_INSTRUCTIONS = [\n \"MemStack is this project's persistent memory, shared with other coding agents.\",\n \"When the user asks you to remember something, call memory_store. Do not write it into README, AGENTS.md, or other project files unless the user asks for a file change.\",\n \"Also call memory_store when you learn a durable fact, decision, preference, or rule.\",\n \"Call memory_retrieve at the start of a task and before decisions that depend on project history, conventions, or preferences.\",\n \"Never store secrets, credentials, or personal data.\",\n \"\",\n 'Store one self-contained statement per memory, e.g. \"This project uses Hono for the API\". Memories are project-scoped; use scope \"global\" only for preferences that apply to every project. memory_retrieve takes natural-language questions. Cite memory IDs when you rely on them, and delete memories that turn out to be wrong with memory_delete.',\n].join(\"\\n\");\n\nconst StoreArgs = z.object({\n content: z.string().trim().min(1).max(8000).describe(\"One self-contained statement to remember.\"),\n kind: z.enum(KINDS).default(\"fact\").describe(\"What kind of memory this is.\"),\n importance: z.number().min(0).max(1).optional().describe(\"0 to 1. Default 0.5; use 0.8+ for rules that must not be missed.\"),\n tags: z.array(z.string().trim().min(1).max(40)).max(10).optional().describe(\"Optional topic tags. MemStack adds its own.\"),\n scope: z.enum([\"project\", \"global\"]).default(\"project\").describe('\"global\" only for preferences that apply to every project.'),\n}).strict();\n\nconst RetrieveArgs = z.object({\n query: z.string().max(1000).optional().describe(\"Natural-language question or keywords. Omit to get the most important memories.\"),\n limit: z.number().int().min(1).max(25).default(10).describe(\"Maximum memories to return.\"),\n kinds: z.array(z.enum(KINDS)).optional().describe(\"Only return these kinds.\"),\n}).strict();\n\nconst IdArgs = z.object({ id: z.string().min(1).max(200) }).strict();\nconst NoArgs = z.object({}).strict();\n\nconst TOOLS = [\n {\n name: \"memory_store\",\n description: \"Save to project memory. Use this whenever the user asks you to remember something, instead of editing project files, and for durable facts, decisions, preferences, or rules. Later sessions and other agents can recall it.\",\n schema: StoreArgs,\n },\n {\n name: \"memory_retrieve\",\n description: \"Recall memories for this project (and global preferences) relevant to a question. Fast and local; call it freely.\",\n schema: RetrieveArgs,\n },\n { name: \"memory_get\", description: \"Get one memory by ID.\", schema: IdArgs },\n { name: \"memory_delete\", description: \"Delete a memory that is wrong or outdated, by ID.\", schema: IdArgs },\n { name: \"memory_stats\", description: \"Show the current project and how many memories it has.\", schema: NoArgs },\n] as const;\n\n/** Characters of memory content returned by one memory_retrieve call. */\nconst RECALL_MAX_CHARS = 8000;\n\nexport interface HarnessServerOptions {\n memory: HarnessMemory;\n projectId: string;\n /** Harness that launched the server, e.g. \"claude-code\". Falls back to the MCP client's name. */\n harness?: string;\n cwd?: string;\n}\n\nexport function createHarnessServer({ memory, projectId, harness, cwd }: HarnessServerOptions): Server {\n const server = new Server(\n { name: \"memstack\", version: pkg.version },\n { capabilities: { tools: {} }, instructions: HARNESS_INSTRUCTIONS },\n );\n const project = projectNamespace(projectId);\n const namespaces = defaultRecallNamespaces(projectId);\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: TOOLS.map(({ name, description, schema }) => ({\n name,\n description,\n inputSchema: z.toJSONSchema(schema, { io: \"input\" }) as { type: \"object\" },\n })),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const tool = TOOLS.find((t) => t.name === request.params.name);\n if (!tool) return failure(`Unknown tool: ${request.params.name}`);\n\n const parsed = tool.schema.safeParse(request.params.arguments ?? {});\n if (!parsed.success) {\n return failure(`Invalid arguments for ${tool.name}: ${z.prettifyError(parsed.error)}`);\n }\n\n try {\n switch (tool.name) {\n case \"memory_store\": {\n const args = parsed.data as z.output<typeof StoreArgs>;\n const stored = await memory.remember({\n namespace: args.scope === \"global\" ? GLOBAL_NAMESPACE : project,\n content: args.content,\n kind: args.kind,\n importance: args.importance,\n tags: args.tags,\n source: {\n harness: harness ?? server.getClientVersion()?.name ?? \"unknown\",\n project: projectId,\n cwd,\n },\n });\n return text(`Stored ${stored.id} (${args.scope}, ${stored.memoryType}). Tags: ${stored.tags.join(\", \") || \"none\"}.`);\n }\n\n case \"memory_retrieve\": {\n const args = parsed.data as z.output<typeof RetrieveArgs>;\n const { hits, fallback } = await memory.recall({\n namespaces,\n query: args.query,\n kinds: args.kinds,\n limit: args.limit,\n maxChars: RECALL_MAX_CHARS,\n });\n if (hits.length === 0) return text(\"No memories yet for this project.\");\n const header = fallback && args.query\n ? `Nothing matched \"${args.query}\". The most important memories instead:`\n : `${hits.length} ${hits.length === 1 ? \"memory\" : \"memories\"}:`;\n return text([header, ...hits.map(({ memory: m }) => formatMemory(m, projectId))].join(\"\\n\"));\n }\n\n case \"memory_get\": {\n const { id } = parsed.data as z.output<typeof IdArgs>;\n const found = await memory.get(id, namespaces);\n return found ? text(formatMemory(found, projectId, true)) : failure(`Memory not found in this project: ${id}`);\n }\n\n case \"memory_delete\": {\n const { id } = parsed.data as z.output<typeof IdArgs>;\n await memory.forget(id, namespaces);\n return text(`Deleted ${id}.`);\n }\n\n case \"memory_stats\": {\n const counts = await memory.stats(namespaces);\n return text(\n `Project ${projectId}${cwd ? ` (${cwd})` : \"\"}: ${counts[project] ?? 0} memories. Global: ${counts[GLOBAL_NAMESPACE] ?? 0}.`,\n );\n }\n }\n } catch (error) {\n if (error instanceof MemStackError && error.code === \"NOT_FOUND\") {\n return failure(`Memory not found in this project: ${(parsed.data as { id?: string }).id ?? \"\"}`);\n }\n return failure(error instanceof Error ? error.message : String(error));\n }\n });\n\n return server;\n}\n\nfunction formatMemory(m: Memory, projectId: string, detailed = false): string {\n const scope = m.actorId === GLOBAL_NAMESPACE ? \"global\" : \"project\";\n const source = (m.metadata?.source as { harness?: string } | undefined)?.harness;\n const meta = [m.memoryType, scope, source && `from ${source}`, m.createdAt.toISOString().slice(0, 10)].filter(Boolean);\n const line = `- [${m.id}] ${m.content} (${meta.join(\", \")})`;\n if (!detailed) return line;\n return `${line}\\nimportance: ${m.importance}\\ntags: ${m.tags.join(\", \") || \"none\"}\\nproject: ${scope === \"project\" ? projectId : \"all\"}`;\n}\n\nfunction text(message: string) {\n return { content: [{ type: \"text\" as const, text: message }] };\n}\n\nfunction failure(message: string) {\n return { content: [{ type: \"text\" as const, text: message }], isError: true };\n}\n","// Session-start hook: prints the project's most important\n// memories so a new Claude Code or Codex session starts knowing them, even\n// if the model never calls memory_retrieve. It makes no LLM call and never\n// blocks a session: on any error it prints nothing and exits 0.\nimport { HarnessMemory, InMemoryStorageAdapter, GLOBAL_NAMESPACE, defaultRecallNamespaces } from \"@memstack/core\";\nimport type { Memory } from \"@memstack/core\";\nimport { loadConfig, resolveProject } from \"@memstack/config-env\";\n\n/** Characters of memory text a hook prints, well under Claude Code's 10,000 and Codex's ~2,500-token limits. */\nexport const HOOK_MAX_CHARS = 6000;\nconst HOOK_LIMIT = 15;\n\nexport interface HookInput {\n cwd?: string;\n session_id?: string;\n source?: string;\n}\n\n/** The context a session starts with, or an empty string when the project has no memories. */\nexport async function sessionStartContext(input: HookInput, env: NodeJS.ProcessEnv = process.env): Promise<string> {\n const cwd = env.CLAUDE_PROJECT_DIR ?? input.cwd ?? process.cwd();\n const project = resolveProject(cwd);\n const { config } = await loadConfig();\n const storage = config.storage ?? new InMemoryStorageAdapter();\n try {\n const memory = new HarnessMemory({ storage, llm: config.llm, autoTags: false });\n await memory.adoptProjects(project.previousIds, project.id);\n const { hits } = await memory.recall({\n namespaces: defaultRecallNamespaces(project.id),\n limit: HOOK_LIMIT,\n maxChars: HOOK_MAX_CHARS,\n });\n if (hits.length === 0) return \"\";\n return [\n `MemStack project memory (project ${project.id}), most important first. Follow these unless the user says otherwise; use memory_retrieve for more and memory_store to save new facts.`,\n ...hits.map(({ memory: m }) => formatLine(m)),\n ].join(\"\\n\");\n } finally {\n await storage.close();\n }\n}\n\n/** Runs the hook: reads JSON input from stdin, prints plain-text context. Always exits 0. */\nexport async function runSessionStartHook(): Promise<void> {\n try {\n const input = parseInput(await readStdin());\n const context = await sessionStartContext(input);\n if (context) process.stdout.write(`${context}\\n`);\n } catch (error) {\n process.stderr.write(`memstack hook: ${error instanceof Error ? error.message : String(error)}\\n`);\n }\n}\n\nfunction formatLine(m: Memory): string {\n const scope = m.actorId === GLOBAL_NAMESPACE ? \"global\" : \"project\";\n return `- [${m.id}] ${m.content} (${m.memoryType}, ${scope})`;\n}\n\nfunction parseInput(raw: string): HookInput {\n if (!raw.trim()) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n return parsed && typeof parsed === \"object\" ? (parsed as HookInput) : {};\n } catch {\n return {};\n }\n}\n\n// Harnesses write the input and close stdin; don't wait forever if one doesn't.\nfunction readStdin(timeoutMs = 2000): Promise<string> {\n if (process.stdin.isTTY) return Promise.resolve(\"\");\n return new Promise((resolve) => {\n let data = \"\";\n const timer = setTimeout(() => resolve(data), timeoutMs);\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (chunk) => (data += chunk));\n process.stdin.on(\"end\", () => {\n clearTimeout(timer);\n resolve(data);\n });\n process.stdin.on(\"error\", () => {\n clearTimeout(timer);\n resolve(data);\n });\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memstack/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "MCP server for MemStack — AI agent memory via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -31,11 +31,13 @@
|
|
|
31
31
|
"mcpName": "io.github.isiomaC/memstack",
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
34
|
-
"
|
|
34
|
+
"zod": "^4.4.3",
|
|
35
|
+
"@memstack/core": "0.8.0"
|
|
35
36
|
},
|
|
36
37
|
"peerDependencies": {
|
|
37
38
|
"better-sqlite3": "^11.10.0",
|
|
38
|
-
"ioredis": "^5.11.1"
|
|
39
|
+
"ioredis": "^5.11.1",
|
|
40
|
+
"postgres": "^3.4.9"
|
|
39
41
|
},
|
|
40
42
|
"peerDependenciesMeta": {
|
|
41
43
|
"better-sqlite3": {
|
|
@@ -43,13 +45,16 @@
|
|
|
43
45
|
},
|
|
44
46
|
"ioredis": {
|
|
45
47
|
"optional": true
|
|
48
|
+
},
|
|
49
|
+
"postgres": {
|
|
50
|
+
"optional": true
|
|
46
51
|
}
|
|
47
52
|
},
|
|
48
53
|
"devDependencies": {
|
|
49
54
|
"tsup": "^8.0.0",
|
|
50
55
|
"typescript": "^5.7.0",
|
|
51
56
|
"vitest": "^1.0.0",
|
|
52
|
-
"@memstack/config-env": "0.
|
|
57
|
+
"@memstack/config-env": "0.8.0"
|
|
53
58
|
},
|
|
54
59
|
"keywords": [
|
|
55
60
|
"mcp",
|