agent-recall-core 3.4.35 → 3.4.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -8
- package/dist/index.js.map +1 -1
- package/dist/prompts/consolidation-prompt.d.ts +1 -1
- package/dist/prompts/consolidation-prompt.d.ts.map +1 -1
- package/dist/prompts/consolidation-prompt.js +1 -1
- package/dist/storage/ab-experiment.d.ts +184 -0
- package/dist/storage/ab-experiment.d.ts.map +1 -0
- package/dist/storage/ab-experiment.js +294 -0
- package/dist/storage/ab-experiment.js.map +1 -0
- package/dist/storage/classification.d.ts +7 -3
- package/dist/storage/classification.d.ts.map +1 -1
- package/dist/storage/classification.js +13 -9
- package/dist/storage/classification.js.map +1 -1
- package/dist/storage/corrections.d.ts +84 -2
- package/dist/storage/corrections.d.ts.map +1 -1
- package/dist/storage/corrections.js +183 -2
- package/dist/storage/corrections.js.map +1 -1
- package/dist/supabase/config.d.ts +18 -0
- package/dist/supabase/config.d.ts.map +1 -1
- package/dist/supabase/config.js +6 -0
- package/dist/supabase/config.js.map +1 -1
- package/dist/supabase/sync.d.ts +1 -1
- package/dist/supabase/sync.d.ts.map +1 -1
- package/dist/supabase/sync.js +55 -0
- package/dist/supabase/sync.js.map +1 -1
- package/dist/tools-logic/check-action.d.ts.map +1 -1
- package/dist/tools-logic/check-action.js +30 -1
- package/dist/tools-logic/check-action.js.map +1 -1
- package/dist/tools-logic/local-archive-backend.d.ts +33 -0
- package/dist/tools-logic/local-archive-backend.d.ts.map +1 -0
- package/dist/tools-logic/local-archive-backend.js +124 -0
- package/dist/tools-logic/local-archive-backend.js.map +1 -0
- package/dist/tools-logic/memory-backend.d.ts +74 -0
- package/dist/tools-logic/memory-backend.d.ts.map +1 -0
- package/dist/tools-logic/memory-backend.js +172 -0
- package/dist/tools-logic/memory-backend.js.map +1 -0
- package/dist/tools-logic/prior-builder.d.ts.map +1 -1
- package/dist/tools-logic/prior-builder.js +34 -1
- package/dist/tools-logic/prior-builder.js.map +1 -1
- package/dist/tools-logic/recognition-builder.d.ts +8 -2
- package/dist/tools-logic/recognition-builder.d.ts.map +1 -1
- package/dist/tools-logic/recognition-builder.js +1 -1
- package/dist/tools-logic/recognition-builder.js.map +1 -1
- package/dist/tools-logic/session-end-reflect.js +1 -1
- package/dist/tools-logic/session-end-reflect.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts +9 -0
- package/dist/tools-logic/session-end.d.ts.map +1 -1
- package/dist/tools-logic/session-end.js +109 -52
- package/dist/tools-logic/session-end.js.map +1 -1
- package/dist/tools-logic/session-start-lite.d.ts.map +1 -1
- package/dist/tools-logic/session-start-lite.js +1 -2
- package/dist/tools-logic/session-start-lite.js.map +1 -1
- package/dist/tools-logic/session-start.d.ts +37 -4
- package/dist/tools-logic/session-start.d.ts.map +1 -1
- package/dist/tools-logic/session-start.js +305 -81
- package/dist/tools-logic/session-start.js.map +1 -1
- package/dist/tools-logic/smart-remember.js +8 -9
- package/dist/tools-logic/smart-remember.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/vector/embedding.d.ts +8 -0
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +9 -1
- package/dist/vector/embedding.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-action.js","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAyB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"check-action.js","sourceRoot":"","sources":["../../src/tools-logic/check-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAyB,MAAM,6BAA6B,CAAC;AAChI,OAAO,EAAE,oBAAoB,EAAqB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAmD5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAC9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAC7E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC7E,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ;IAC/E,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAC/E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAC7E,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAC1E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;IAC9E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;IAC7E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAC5E,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;CAClF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,IAAI,GAAG,CACZ,CAAC;SACE,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAc,EAAE,CAAc;IACpD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,EAAE;YAClB,oBAAoB,EAAE,EAAE;YACxB,iBAAiB,EAAE,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,UAAU;SACpB,CAAC;IACJ,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEtC,+DAA+D;IAC/D,MAAM,WAAW,GAAgB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,iBAAiB,GAAsB,EAAE,CAAC;IAChD,8EAA8E;IAC9E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC3D,MAAM,WAAW,GAAuB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACjC,iBAAiB,CAAC,IAAI,CAAC;gBACrB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,cAAc,EAAE,OAAO;aACxB,CAAC,CAAC;YACH,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,cAAc,GAAmB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC;gBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC;gBACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,WAAW;gBACnC,cAAc,EAAE,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9E,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/C,8EAA8E;IAC9E,wEAAwE;IACxE,+EAA+E;IAC/E,gFAAgF;IAChF,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,CAAC,GAAqB,EAAW,EAAE;QAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;QACxB,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC,aAAa,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAA2B,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAEjF,mDAAmD;IACnD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAa,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,kFAAkF;QAClF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,sFAAsF,OAAO,EAAE,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,iFAAiF;IACjF,4EAA4E;IAC5E,2CAA2C;IAC3C,qFAAqF;IACrF,kFAAkF;IAClF,4EAA4E;IAC5E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtC,iEAAiE;gBACjE,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;oBAAE,SAAS;gBACxD,aAAa,CAAC;oBACZ,aAAa,EAAE,CAAC,CAAC,EAAE;oBACnB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,WAAW;oBACjB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,kCAAkC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBAC5G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,MAAM;QACN,cAAc,EAAE,QAAQ;QACxB,oBAAoB,EAAE,cAAc;QACpC,iBAAiB,EAAE,WAAW;QAC9B,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MemoryBackend, RetainResult } from "./memory-backend.js";
|
|
2
|
+
import type { CorrectionExport } from "./export-corrections.js";
|
|
3
|
+
/**
|
|
4
|
+
* Date string for today (YYYY-MM-DD) in the LOCAL timezone — injectable in
|
|
5
|
+
* tests via the fn arg.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: uses local time, not UTC, so the archive file matches the operator's
|
|
8
|
+
* calendar day. toISOString() returns UTC and would produce the wrong date for
|
|
9
|
+
* operators running past midnight UTC in a positive-offset timezone.
|
|
10
|
+
*/
|
|
11
|
+
export declare function todayDateString(): string;
|
|
12
|
+
/**
|
|
13
|
+
* LocalArchiveMemoryBackend — writes scrubbed CorrectionExport arrays to
|
|
14
|
+
* <root>/exports/local-archive/YYYY-MM-DD.json.
|
|
15
|
+
*
|
|
16
|
+
* CONTRACT:
|
|
17
|
+
* - Assumes records are already scrubbed (exportCorrections() upstream).
|
|
18
|
+
* - Idempotent: re-running with the same IDs does not duplicate entries.
|
|
19
|
+
* - Never throws into session flow — errors map to rejected entries.
|
|
20
|
+
*/
|
|
21
|
+
export declare class LocalArchiveMemoryBackend implements MemoryBackend {
|
|
22
|
+
/** Override in tests via the constructor to pin the date. */
|
|
23
|
+
private readonly _dateFn;
|
|
24
|
+
constructor(opts?: {
|
|
25
|
+
dateFn?: () => string;
|
|
26
|
+
});
|
|
27
|
+
name(): string;
|
|
28
|
+
available(): Promise<boolean>;
|
|
29
|
+
retain(records: CorrectionExport[]): Promise<RetainResult>;
|
|
30
|
+
/** Absolute path of the archive directory for this backend. */
|
|
31
|
+
private _archiveDir;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=local-archive-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-archive-backend.d.ts","sourceRoot":"","sources":["../../src/tools-logic/local-archive-backend.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,aAAa;IAC7D,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAIhD,IAAI,IAAI,MAAM;IAIR,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAY7B,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAyDhE,+DAA+D;IAC/D,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// packages/core/src/tools-logic/local-archive-backend.ts
|
|
2
|
+
//
|
|
3
|
+
// LocalArchiveMemoryBackend — the reference MemoryBackend implementation.
|
|
4
|
+
//
|
|
5
|
+
// Purpose (two roles):
|
|
6
|
+
// 1. TESTING: round-trip verification of the retain() contract without
|
|
7
|
+
// a live third-party service.
|
|
8
|
+
// 2. ADAPTER TEMPLATE: fork this file to build a real backend adapter.
|
|
9
|
+
// Replace the JSON write with a client.retain() call; keep the
|
|
10
|
+
// scrub-upstream assumption and the RetainResult shape unchanged.
|
|
11
|
+
//
|
|
12
|
+
// Storage layout:
|
|
13
|
+
// <root>/exports/<backend-name>/YYYY-MM-DD.json
|
|
14
|
+
//
|
|
15
|
+
// Each daily file is an array of CorrectionExport objects. A second call on
|
|
16
|
+
// the same day appends (unique by id — the seam is idempotent; a repeated
|
|
17
|
+
// `ar corrections export --to-backend` run on the same set does not create
|
|
18
|
+
// duplicate entries).
|
|
19
|
+
import * as fs from "node:fs";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import { getRoot } from "../types.js";
|
|
22
|
+
/** Human-readable name surfaced in CLI output and log lines. */
|
|
23
|
+
const BACKEND_NAME = "local-archive";
|
|
24
|
+
/**
|
|
25
|
+
* Date string for today (YYYY-MM-DD) in the LOCAL timezone — injectable in
|
|
26
|
+
* tests via the fn arg.
|
|
27
|
+
*
|
|
28
|
+
* NOTE: uses local time, not UTC, so the archive file matches the operator's
|
|
29
|
+
* calendar day. toISOString() returns UTC and would produce the wrong date for
|
|
30
|
+
* operators running past midnight UTC in a positive-offset timezone.
|
|
31
|
+
*/
|
|
32
|
+
export function todayDateString() {
|
|
33
|
+
const d = new Date();
|
|
34
|
+
const y = d.getFullYear();
|
|
35
|
+
const m = String(d.getMonth() + 1).padStart(2, "0");
|
|
36
|
+
const day = String(d.getDate()).padStart(2, "0");
|
|
37
|
+
return `${y}-${m}-${day}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* LocalArchiveMemoryBackend — writes scrubbed CorrectionExport arrays to
|
|
41
|
+
* <root>/exports/local-archive/YYYY-MM-DD.json.
|
|
42
|
+
*
|
|
43
|
+
* CONTRACT:
|
|
44
|
+
* - Assumes records are already scrubbed (exportCorrections() upstream).
|
|
45
|
+
* - Idempotent: re-running with the same IDs does not duplicate entries.
|
|
46
|
+
* - Never throws into session flow — errors map to rejected entries.
|
|
47
|
+
*/
|
|
48
|
+
export class LocalArchiveMemoryBackend {
|
|
49
|
+
/** Override in tests via the constructor to pin the date. */
|
|
50
|
+
_dateFn;
|
|
51
|
+
constructor(opts = {}) {
|
|
52
|
+
this._dateFn = opts.dateFn ?? todayDateString;
|
|
53
|
+
}
|
|
54
|
+
name() {
|
|
55
|
+
return BACKEND_NAME;
|
|
56
|
+
}
|
|
57
|
+
async available() {
|
|
58
|
+
// Always available — only needs a writable filesystem, same guarantee
|
|
59
|
+
// as the rest of the local store.
|
|
60
|
+
try {
|
|
61
|
+
const dir = this._archiveDir();
|
|
62
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async retain(records) {
|
|
70
|
+
const accepted = [];
|
|
71
|
+
const rejected = [];
|
|
72
|
+
if (records.length === 0) {
|
|
73
|
+
return { accepted, rejected };
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const dir = this._archiveDir();
|
|
77
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
78
|
+
const file = path.join(dir, `${this._dateFn()}.json`);
|
|
79
|
+
// Load existing entries (idempotency — deduplicate by id).
|
|
80
|
+
let existing = [];
|
|
81
|
+
try {
|
|
82
|
+
if (fs.existsSync(file)) {
|
|
83
|
+
const raw = fs.readFileSync(file, "utf-8");
|
|
84
|
+
const parsed = JSON.parse(raw);
|
|
85
|
+
if (Array.isArray(parsed)) {
|
|
86
|
+
existing = parsed;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Malformed file — start fresh. A corrupt archive must not block new writes.
|
|
92
|
+
existing = [];
|
|
93
|
+
}
|
|
94
|
+
const existingIds = new Set(existing.map((e) => e.id));
|
|
95
|
+
const toWrite = [...existing];
|
|
96
|
+
for (const record of records) {
|
|
97
|
+
if (existingIds.has(record.id)) {
|
|
98
|
+
// Already present — idempotent accept (not a rejection).
|
|
99
|
+
accepted.push(record.id);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
toWrite.push(record);
|
|
103
|
+
existingIds.add(record.id);
|
|
104
|
+
accepted.push(record.id);
|
|
105
|
+
}
|
|
106
|
+
fs.writeFileSync(file, JSON.stringify(toWrite, null, 2), "utf-8");
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
// A filesystem failure rejects ALL records in this batch.
|
|
110
|
+
const reason = `write failed: ${String(err)}`;
|
|
111
|
+
for (const r of records) {
|
|
112
|
+
if (!accepted.includes(r.id)) {
|
|
113
|
+
rejected.push({ id: r.id, reason });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { accepted, rejected };
|
|
118
|
+
}
|
|
119
|
+
/** Absolute path of the archive directory for this backend. */
|
|
120
|
+
_archiveDir() {
|
|
121
|
+
return path.join(getRoot(), "exports", BACKEND_NAME);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=local-archive-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-archive-backend.js","sourceRoot":"","sources":["../../src/tools-logic/local-archive-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { CorrectionExport } from "./export-corrections.js";
|
|
2
|
+
/**
|
|
3
|
+
* RetainResult — structured response from a backend's retain() call.
|
|
4
|
+
* Mirrors the Hindsight `retain()` response shape so the local-archive
|
|
5
|
+
* reference backend and any third-party adapter speak the same dialect.
|
|
6
|
+
*/
|
|
7
|
+
export interface RetainResult {
|
|
8
|
+
/** IDs successfully written to the backend. */
|
|
9
|
+
accepted: string[];
|
|
10
|
+
/** IDs the backend refused, each with a machine-readable reason. */
|
|
11
|
+
rejected: {
|
|
12
|
+
id: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* MemoryBackend — write seam for external belief stores.
|
|
18
|
+
*
|
|
19
|
+
* CONTRACT:
|
|
20
|
+
* - retain() receives a CorrectionExport[] that has ALREADY been scrubbed by
|
|
21
|
+
* exportCorrections(). The backend may assume every string field is clean.
|
|
22
|
+
* Backends MUST NOT re-implement the scrub — that is a recipe for drift.
|
|
23
|
+
* - records MUST come from exportCorrections(); the type system cannot
|
|
24
|
+
* enforce this — which is exactly why the core barrel deliberately does
|
|
25
|
+
* NOT export concrete backends (only this interface + the factory). The
|
|
26
|
+
* sole supported path to a backend instance is getMemoryBackend(), and the
|
|
27
|
+
* sole supported record source is exportCorrections().
|
|
28
|
+
* - available() must never throw. Return false if the backend is misconfigured.
|
|
29
|
+
* - name() returns a stable human-readable label for logging.
|
|
30
|
+
* - Backend failure must be surfaced as a rejected entry or a thrown error that
|
|
31
|
+
* the CLI catches and prints as a warning — never as a process crash.
|
|
32
|
+
*/
|
|
33
|
+
export interface MemoryBackend {
|
|
34
|
+
retain(records: CorrectionExport[]): Promise<RetainResult>;
|
|
35
|
+
available(): Promise<boolean>;
|
|
36
|
+
name(): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* DisabledMemoryBackend — returned when AR_MEMORY_BACKEND is unset.
|
|
40
|
+
* available() is false so callers can gate on it cleanly.
|
|
41
|
+
*/
|
|
42
|
+
export declare class DisabledMemoryBackend implements MemoryBackend {
|
|
43
|
+
name(): string;
|
|
44
|
+
available(): Promise<boolean>;
|
|
45
|
+
retain(_records: CorrectionExport[]): Promise<RetainResult>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the configured MemoryBackend.
|
|
49
|
+
*
|
|
50
|
+
* Selection order:
|
|
51
|
+
* 1. AR_MEMORY_BACKEND=local-archive → LocalArchiveMemoryBackend (built-in)
|
|
52
|
+
* 2. AR_MEMORY_BACKEND=<module> → dynamic import of that module
|
|
53
|
+
* 3. (unset | "none" | "disabled") → DisabledMemoryBackend
|
|
54
|
+
*
|
|
55
|
+
* Case handling: built-in keywords (none/disabled/local-archive) match
|
|
56
|
+
* case-insensitively — pure operator convenience, nothing is imported.
|
|
57
|
+
* A third-party module specifier is used VERBATIM (npm names are
|
|
58
|
+
* case-sensitive on registry lookup and lowercase-only for new packages);
|
|
59
|
+
* uppercase input is rejected by SAFE_MODULE_RE with a clear message rather
|
|
60
|
+
* than silently normalized to a different package name.
|
|
61
|
+
*
|
|
62
|
+
* Dynamic import contract: the module must export a default class satisfying
|
|
63
|
+
* MemoryBackend. If the import fails, the specifier is invalid, a Node builtin,
|
|
64
|
+
* or the backend reports unavailable, the factory logs a warning to stderr and
|
|
65
|
+
* falls back to DisabledMemoryBackend — it NEVER crashes the session flow.
|
|
66
|
+
*
|
|
67
|
+
* @agent_instruction Returns DisabledMemoryBackend when no backend is configured.
|
|
68
|
+
* Check (await backend.available()) before calling retain(). If false, surface
|
|
69
|
+
* a clear "no backend configured" error to the operator.
|
|
70
|
+
*/
|
|
71
|
+
export declare function getMemoryBackend(): Promise<MemoryBackend>;
|
|
72
|
+
/** Reset the cached backend instance (for testing). */
|
|
73
|
+
export declare function resetMemoryBackend(): void;
|
|
74
|
+
//# sourceMappingURL=memory-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-backend.d.ts","sourceRoot":"","sources":["../../src/tools-logic/memory-backend.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oEAAoE;IACpE,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,IAAI,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,IAAI,IAAI,MAAM;IAIR,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CASlE;AAmCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CA+E/D;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// packages/core/src/tools-logic/memory-backend.ts
|
|
2
|
+
//
|
|
3
|
+
// MemoryBackend — symmetric WRITE seam for the RecallBackend READ abstraction.
|
|
4
|
+
//
|
|
5
|
+
// Design contract:
|
|
6
|
+
// - Records are ALWAYS the scrubbed CorrectionExport projection. The seam
|
|
7
|
+
// consumes exportCorrections() output (which runs fail-closed scrubForExport
|
|
8
|
+
// on every free-text field). Raw CorrectionRecord is NEVER passed through —
|
|
9
|
+
// the scrub guarantee is upstream by construction. Assert: callers must call
|
|
10
|
+
// exportCorrections() first; they MUST NOT build CorrectionExport manually
|
|
11
|
+
// and bypass the scrub.
|
|
12
|
+
// - Backend failure is a warning, not a session error. The seam is an explicit
|
|
13
|
+
// invocation path (ar corrections export --to-backend) — it never runs
|
|
14
|
+
// automatically on session_end in this version.
|
|
15
|
+
// - Zero-cloud default: the factory returns a DisabledMemoryBackend unless
|
|
16
|
+
// AR_MEMORY_BACKEND is set. No env var = no egress, unchanged.
|
|
17
|
+
//
|
|
18
|
+
// Environment selection (mirrors getRecallBackend()):
|
|
19
|
+
// AR_MEMORY_BACKEND=local-archive → LocalArchiveMemoryBackend (reference)
|
|
20
|
+
// AR_MEMORY_BACKEND=<npm-module> → dynamic import of third-party adapter
|
|
21
|
+
// (unset / "none" / "disabled") → DisabledMemoryBackend
|
|
22
|
+
//
|
|
23
|
+
// Third-party adapters (e.g. a future hindsight-adapter package) must export a
|
|
24
|
+
// default class that satisfies MemoryBackend via dynamic import.
|
|
25
|
+
import { builtinModules } from "node:module";
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Disabled (default / zero-cloud) backend
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* DisabledMemoryBackend — returned when AR_MEMORY_BACKEND is unset.
|
|
31
|
+
* available() is false so callers can gate on it cleanly.
|
|
32
|
+
*/
|
|
33
|
+
export class DisabledMemoryBackend {
|
|
34
|
+
name() {
|
|
35
|
+
return "disabled";
|
|
36
|
+
}
|
|
37
|
+
async available() {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
async retain(_records) {
|
|
41
|
+
return {
|
|
42
|
+
accepted: [],
|
|
43
|
+
rejected: _records.map((r) => ({
|
|
44
|
+
id: r.id,
|
|
45
|
+
reason: "no backend configured (AR_MEMORY_BACKEND not set)",
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Factory
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
/** Cached backend instance. Reset via resetMemoryBackend() in tests. */
|
|
54
|
+
let _cachedBackend = null;
|
|
55
|
+
/**
|
|
56
|
+
* Allowlist for third-party module specifiers: bare npm package names only.
|
|
57
|
+
* - unscoped: [a-z0-9][a-z0-9._-]*
|
|
58
|
+
* - scoped: @[a-z0-9][a-z0-9._-]* / [a-z0-9][a-z0-9._-]*
|
|
59
|
+
* LOWERCASE ONLY — npm forbids uppercase in new package names, and we do NOT
|
|
60
|
+
* case-normalize the value before import: silently lowercasing "MyAdapter" to
|
|
61
|
+
* "myadapter" would import a DIFFERENT package than the operator named (a
|
|
62
|
+
* squat-redirect hazard). Uppercase input is rejected with a clear message.
|
|
63
|
+
* No path separators, no "..", no leading dots — a crafted value cannot reach
|
|
64
|
+
* import() as a file path.
|
|
65
|
+
*/
|
|
66
|
+
const SAFE_MODULE_RE = /^(@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/;
|
|
67
|
+
/**
|
|
68
|
+
* Denylist: Node builtin modules must never be import()ed as backends.
|
|
69
|
+
* They would fail the Ctor typecheck anyway (fail-safe), but the gate rejects
|
|
70
|
+
* them up front with a clear message instead of a confusing typecheck error.
|
|
71
|
+
* Explicit floor list + runtime builtinModules union for completeness across
|
|
72
|
+
* Node versions.
|
|
73
|
+
*/
|
|
74
|
+
const BUILTIN_DENYLIST = new Set([
|
|
75
|
+
"fs", "path", "os", "http", "https", "child_process", "net",
|
|
76
|
+
"crypto", "module", "process", "vm", "worker_threads",
|
|
77
|
+
...(Array.isArray(builtinModules) ? builtinModules : []),
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Get the configured MemoryBackend.
|
|
81
|
+
*
|
|
82
|
+
* Selection order:
|
|
83
|
+
* 1. AR_MEMORY_BACKEND=local-archive → LocalArchiveMemoryBackend (built-in)
|
|
84
|
+
* 2. AR_MEMORY_BACKEND=<module> → dynamic import of that module
|
|
85
|
+
* 3. (unset | "none" | "disabled") → DisabledMemoryBackend
|
|
86
|
+
*
|
|
87
|
+
* Case handling: built-in keywords (none/disabled/local-archive) match
|
|
88
|
+
* case-insensitively — pure operator convenience, nothing is imported.
|
|
89
|
+
* A third-party module specifier is used VERBATIM (npm names are
|
|
90
|
+
* case-sensitive on registry lookup and lowercase-only for new packages);
|
|
91
|
+
* uppercase input is rejected by SAFE_MODULE_RE with a clear message rather
|
|
92
|
+
* than silently normalized to a different package name.
|
|
93
|
+
*
|
|
94
|
+
* Dynamic import contract: the module must export a default class satisfying
|
|
95
|
+
* MemoryBackend. If the import fails, the specifier is invalid, a Node builtin,
|
|
96
|
+
* or the backend reports unavailable, the factory logs a warning to stderr and
|
|
97
|
+
* falls back to DisabledMemoryBackend — it NEVER crashes the session flow.
|
|
98
|
+
*
|
|
99
|
+
* @agent_instruction Returns DisabledMemoryBackend when no backend is configured.
|
|
100
|
+
* Check (await backend.available()) before calling retain(). If false, surface
|
|
101
|
+
* a clear "no backend configured" error to the operator.
|
|
102
|
+
*/
|
|
103
|
+
export async function getMemoryBackend() {
|
|
104
|
+
if (_cachedBackend)
|
|
105
|
+
return _cachedBackend;
|
|
106
|
+
const rawSpec = (process.env.AR_MEMORY_BACKEND ?? "").trim();
|
|
107
|
+
// Keywords only — the verbatim rawSpec is what reaches import() below.
|
|
108
|
+
const keyword = rawSpec.toLowerCase();
|
|
109
|
+
if (!keyword || keyword === "none" || keyword === "disabled") {
|
|
110
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
111
|
+
return _cachedBackend;
|
|
112
|
+
}
|
|
113
|
+
if (keyword === "local-archive") {
|
|
114
|
+
try {
|
|
115
|
+
const mod = await import("./local-archive-backend.js");
|
|
116
|
+
_cachedBackend = new mod.LocalArchiveMemoryBackend();
|
|
117
|
+
return _cachedBackend;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
process.stderr.write(`[agent-recall] memory-backend: failed to load local-archive backend: ${String(err)}\n`);
|
|
121
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
122
|
+
return _cachedBackend;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Third-party module path — dynamic import.
|
|
126
|
+
// SECURITY: AR_MEMORY_BACKEND is operator-controlled env input; treat as
|
|
127
|
+
// untrusted. Gate 1: allowlist shape (bare/scoped npm package name, verbatim).
|
|
128
|
+
if (!SAFE_MODULE_RE.test(rawSpec)) {
|
|
129
|
+
process.stderr.write(`[agent-recall] memory-backend: AR_MEMORY_BACKEND="${rawSpec}" is not a valid npm package name — ` +
|
|
130
|
+
`only lowercase bare package names (e.g. "ar-mem0-adapter") or scoped packages (@org/pkg) are accepted. ` +
|
|
131
|
+
`Path specifiers and uppercase are not allowed. Falling back to disabled.\n`);
|
|
132
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
133
|
+
return _cachedBackend;
|
|
134
|
+
}
|
|
135
|
+
// Gate 2: Node builtins are never valid backends — reject before import().
|
|
136
|
+
if (BUILTIN_DENYLIST.has(rawSpec) || rawSpec.startsWith("node:")) {
|
|
137
|
+
process.stderr.write(`[agent-recall] memory-backend: AR_MEMORY_BACKEND="${rawSpec}" is a Node builtin module, ` +
|
|
138
|
+
`not a memory backend — refusing to load it. Falling back to disabled.\n`);
|
|
139
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
140
|
+
return _cachedBackend;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
144
|
+
const mod = await import(rawSpec);
|
|
145
|
+
// The module must export a default class or a named MemoryBackend class.
|
|
146
|
+
const Ctor = mod.default ?? mod.MemoryBackend;
|
|
147
|
+
if (typeof Ctor !== "function") {
|
|
148
|
+
throw new TypeError(`module "${rawSpec}" does not export a default class or MemoryBackend — got ${typeof Ctor}`);
|
|
149
|
+
}
|
|
150
|
+
const backend = new Ctor();
|
|
151
|
+
if (!(await backend.available())) {
|
|
152
|
+
// Contract: a loaded-but-unavailable backend falls back to Disabled.
|
|
153
|
+
// Caching and returning the unavailable instance would silently swallow
|
|
154
|
+
// all rejections for any caller that skips the available() check.
|
|
155
|
+
process.stderr.write(`[agent-recall] memory-backend: "${rawSpec}" loaded but reported unavailable — falling back to disabled\n`);
|
|
156
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
157
|
+
return _cachedBackend;
|
|
158
|
+
}
|
|
159
|
+
_cachedBackend = backend;
|
|
160
|
+
return backend;
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
process.stderr.write(`[agent-recall] memory-backend: failed to load "${rawSpec}": ${String(err)} — falling back to disabled\n`);
|
|
164
|
+
_cachedBackend = new DisabledMemoryBackend();
|
|
165
|
+
return _cachedBackend;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Reset the cached backend instance (for testing). */
|
|
169
|
+
export function resetMemoryBackend() {
|
|
170
|
+
_cachedBackend = null;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=memory-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../../src/tools-logic/memory-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prior-builder.d.ts","sourceRoot":"","sources":["../../src/tools-logic/prior-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"prior-builder.d.ts","sourceRoot":"","sources":["../../src/tools-logic/prior-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAiCD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,EAAE,CA0CV"}
|
|
@@ -16,6 +16,31 @@ import { tokenize, overlap } from "./check-action.js";
|
|
|
16
16
|
const MIN_OVERLAP = 2;
|
|
17
17
|
/** Max priors emitted (kept tiny — these sit above the fact list). */
|
|
18
18
|
const MAX_PRIORS = 2;
|
|
19
|
+
/**
|
|
20
|
+
* Domain-noise tokens for blind-spot matching (FIX 2).
|
|
21
|
+
*
|
|
22
|
+
* These are high-frequency dev-context words that survive the generic English
|
|
23
|
+
* stop-word filter but are not discriminating enough to count as signal for a
|
|
24
|
+
* blind-spot prior. A blind spot like "… blocked on competitor API keys" should
|
|
25
|
+
* NOT fire just because a prompt asks "check the API keys configuration" — the
|
|
26
|
+
* co-occurrence of `api`+`keys` is too common in any engineering session.
|
|
27
|
+
*
|
|
28
|
+
* CORRECTION priors are NOT filtered through this set — corrections are ground-
|
|
29
|
+
* truth rules with specific rule text (longer, more distinctive). Only blind
|
|
30
|
+
* spots (derived tendency summaries) use the extended filter.
|
|
31
|
+
*
|
|
32
|
+
* Rationale for each token:
|
|
33
|
+
* api, keys, key — appear in nearly every auth/integration prompt
|
|
34
|
+
* product, projects, project — appear whenever discussing roadmap or work items
|
|
35
|
+
* build, test, run, code, file, use, check — ubiquitous dev verbs/nouns
|
|
36
|
+
* data, info, user, users — too generic to discriminate any tendency
|
|
37
|
+
*/
|
|
38
|
+
const BLIND_SPOT_DOMAIN_NOISE = new Set([
|
|
39
|
+
"api", "key", "keys",
|
|
40
|
+
"product", "project", "projects",
|
|
41
|
+
"build", "test", "run", "code", "file", "files", "use", "check",
|
|
42
|
+
"data", "info", "user", "users",
|
|
43
|
+
]);
|
|
19
44
|
/**
|
|
20
45
|
* Build the early-prior lines for a prompt.
|
|
21
46
|
* Corrections fire a hard "resembles a past correction" instinct; blind-spots
|
|
@@ -41,13 +66,21 @@ export function buildPriors(prompt, corrections, blindSpots) {
|
|
|
41
66
|
}
|
|
42
67
|
}
|
|
43
68
|
// 2. Blind-spot priors (softer — derived tendency, not a hard rule).
|
|
69
|
+
// Domain-noise filter: blind spots are broad tendency summaries, so their
|
|
70
|
+
// token set often includes generic dev terms (api, keys, projects...) that
|
|
71
|
+
// co-occur in unrelated prompts. Strip BLIND_SPOT_DOMAIN_NOISE from both
|
|
72
|
+
// sides before counting overlap — the MIN_OVERLAP=2 gate must be met by
|
|
73
|
+
// genuinely discriminating content tokens only.
|
|
44
74
|
for (const bs of blindSpots ?? []) {
|
|
45
75
|
if (out.length >= MAX_PRIORS)
|
|
46
76
|
break;
|
|
47
77
|
if (!bs || !bs.trim())
|
|
48
78
|
continue;
|
|
49
79
|
const bsTokens = tokenize(bs);
|
|
50
|
-
|
|
80
|
+
// Build noise-filtered token sets for the overlap test
|
|
81
|
+
const filteredBsTokens = new Set([...bsTokens].filter((t) => !BLIND_SPOT_DOMAIN_NOISE.has(t)));
|
|
82
|
+
const filteredPromptTokens = new Set([...promptTokens].filter((t) => !BLIND_SPOT_DOMAIN_NOISE.has(t)));
|
|
83
|
+
const matched = overlap(filteredPromptTokens, filteredBsTokens);
|
|
51
84
|
if (matched.length >= MIN_OVERLAP) {
|
|
52
85
|
out.push(`⚠ [AgentRecall] Watch a known tendency — ${bs.trim()}.`);
|
|
53
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prior-builder.js","sourceRoot":"","sources":["../../src/tools-logic/prior-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAUtD,6EAA6E;AAC7E,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,sEAAsE;AACtE,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,WAA8B,EAC9B,UAAoB;IAEpB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAE1C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAExC,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,IAAI,UAAU;YAAE,MAAM;QACpC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,SAAS;QAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CACN,0DAA0D,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,4BAA4B,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,KAAK,MAAM,EAAE,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,IAAI,UAAU;YAAE,MAAM;QACpC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,SAAS;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"prior-builder.js","sourceRoot":"","sources":["../../src/tools-logic/prior-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,7 +88,13 @@ export interface RecognitionPayload {
|
|
|
88
88
|
who: RecognitionWho;
|
|
89
89
|
can_do: RecognitionCapabilities;
|
|
90
90
|
project: RecognitionProject;
|
|
91
|
-
|
|
91
|
+
/**
|
|
92
|
+
* ABSENT-WHEN-EMPTY: buildRecognition always populates this, but
|
|
93
|
+
* session_start DROPS the field when `tendencies` is empty — the caveat
|
|
94
|
+
* string alone carries no actionable content and wastes payload bytes.
|
|
95
|
+
* Consumers must treat a missing `person` as "no tendencies known".
|
|
96
|
+
*/
|
|
97
|
+
person?: RecognitionPerson;
|
|
92
98
|
}
|
|
93
99
|
export interface BuildRecognitionOptions {
|
|
94
100
|
/** Cap on skills surfaced (default 8). */
|
|
@@ -105,7 +111,7 @@ export interface BuildRecognitionOptions {
|
|
|
105
111
|
* leave-one-out eval measured the blind-spots profile at 0/13 predictive on real
|
|
106
112
|
* corrections, so it is surfaced for orientation only — never as validated truth.
|
|
107
113
|
*/
|
|
108
|
-
export declare const PERSON_LOW_CONFIDENCE_CAVEAT = "low-confidence:
|
|
114
|
+
export declare const PERSON_LOW_CONFIDENCE_CAVEAT = "low-confidence: 0/13 predictive (Loop 3) \u2014 not validated, orientation only.";
|
|
109
115
|
/**
|
|
110
116
|
* Assemble the real-time recognition payload for a project from LOCAL stores
|
|
111
117
|
* only. Synchronous, deterministic, zero-network. Caller must have already
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognition-builder.d.ts","sourceRoot":"","sources":["../../src/tools-logic/recognition-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAeH,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjF;;;;OAIG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,4DAA4D;IAC5D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wEAAwE;IACxE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClE;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,UAAU,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"recognition-builder.d.ts","sourceRoot":"","sources":["../../src/tools-logic/recognition-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAeH,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjF;;;;OAIG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,4DAA4D;IAC5D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wEAAwE;IACxE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClE;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,UAAU,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,qFACsC,CAAC;AAiPhF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,uBAA4B,GAAG,kBAAkB,CAYxG"}
|
|
@@ -37,7 +37,7 @@ import { isJournalFile } from "../helpers/journal-filter.js";
|
|
|
37
37
|
* leave-one-out eval measured the blind-spots profile at 0/13 predictive on real
|
|
38
38
|
* corrections, so it is surfaced for orientation only — never as validated truth.
|
|
39
39
|
*/
|
|
40
|
-
export const PERSON_LOW_CONFIDENCE_CAVEAT = "low-confidence:
|
|
40
|
+
export const PERSON_LOW_CONFIDENCE_CAVEAT = "low-confidence: 0/13 predictive (Loop 3) — not validated, orientation only.";
|
|
41
41
|
/**
|
|
42
42
|
* Trajectory-classification: a `## Next` line containing any of these reads as
|
|
43
43
|
* actionable work the human can pick up now ("needs-you"). Mirrors project-board's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognition-builder.js","sourceRoot":"","sources":["../../src/tools-logic/recognition-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"recognition-builder.js","sourceRoot":"","sources":["../../src/tools-logic/recognition-builder.ts"],"names":[],"mappings":"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"}
|