@mneme-ai/core 2.19.79 → 2.19.80

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.
@@ -1 +1 @@
1
- {"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACxI,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,wEAAwE;AAExE,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACnE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACzE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAClH,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,sDAAsD;IACtD,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACnF,MAAM,CAAC,GAAG,kBAAkB,CAAC;gBAC3B,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,SAAS;gBACtB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB;YAC3E,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACpD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa;YACjE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB;YACvE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;YACzE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAW,oBAAoB;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACrD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,GAAG,kBAAkB,CAAC;gBAC3B,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAC1D,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,CAAC,GAAG,kBAAkB,CAAC;gBAC3B,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,kBAAkB,CAAC;gBAC3B,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,qEAAqE;YACrE,oEAAoE;YACpE,0CAA0C;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,kBAAkB,CAAC;gBAC3B,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,kEAAkE;YAClE,2CAA2C;YAC3C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC5C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC/C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wEAAwE;AAExE,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wEAAwE;AAExE,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,kBAAkB,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAC/G,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,GAAG;YAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wEAAwE;AAExE,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,yDAAyD;QACzD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,GAAG,EAAE;QAChG,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC,WAAW,CAAC;QACpD,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;QAC7E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;QACzE,MAAM,UAAU,GAAG,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;QAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QACpE,8DAA8D;QAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wEAAwE;AAExE,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,4BAA4B,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,4BAA4B,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,4BAA4B,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC/E,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -28,6 +28,12 @@ export interface UserscriptOptions {
28
28
  bridgeUrl?: string;
29
29
  /** Bearer token for the bridge (only used when bridgeUrl is set). */
30
30
  bridgeToken?: string;
31
+ /** v2.19.80 — Browser Polygraph mode. When true, the userscript ALSO
32
+ * hooks the AI response container (claude.ai / chatgpt / gemini /
33
+ * copilot / deepseek / qwen), splits new sentences as they stream in,
34
+ * POSTs each to the bridge's `/v1/polygraph/verify`, and renders a
35
+ * green/yellow/red dot inline. Requires `bridgeUrl` + `bridgeToken`. */
36
+ polygraph?: boolean;
31
37
  }
32
38
  export interface UserscriptArtifact {
33
39
  /** Full .user.js file content. User saves this and Tampermonkey
@@ -1 +1 @@
1
- {"version":3,"file":"userscript_generator.d.ts","sourceRoot":"","sources":["../../src/permeate/userscript_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB;;qEAEiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC;2BACuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,CAuJ9E"}
1
+ {"version":3,"file":"userscript_generator.d.ts","sourceRoot":"","sources":["../../src/permeate/userscript_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB;;qEAEiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;6EAIyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC;2BACuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,CAub9E"}
@@ -161,11 +161,298 @@ async function fetchSoulFromBridge() {
161
161
  console.log('[Mneme] Soul injector ready -- site=' + SITE);
162
162
  })();
163
163
  `.trim();
164
- const content = `${header}\n\n${bridgeBlock}${body}\n`;
164
+ // v2.19.80 BROWSER POLYGRAPH block. Black-sheep design:
165
+ // 1. SENSOR — MutationObserver on the AI's response container per
166
+ // vendor. As text streams in, we extract candidate sentences and
167
+ // POST each to the bridge.
168
+ // 2. NERVOUS TRUNK — uses GM_xmlhttpRequest so cross-origin /
169
+ // mixed-content / localhost requests work on every site without
170
+ // CORS gymnastics. Token embedded once at generation time.
171
+ // 3. SKIN — green/yellow/red `●` injected before each sentence with a
172
+ // hover-tooltip carrying the evidence one-liner.
173
+ // 4. EKG — a small floating vital-signs SVG in the bottom-right.
174
+ // Real-time waveform pulses with the polygraph; spikes red on a
175
+ // refuted dot, green on a confirmed dot. Looks like a heart monitor.
176
+ // Click to expand into a session readout panel.
177
+ // 5. RESILIENCE — if the bridge is unreachable, every dot stays grey;
178
+ // the EKG corner shows a "● bridge sleeping" hint. Never throws.
179
+ const polygraphBlock = opts.polygraph && opts.bridgeUrl
180
+ ? `
181
+ // ── BROWSER POLYGRAPH (v2.19.80) ───────────────────────────────────
182
+ // Verifies each sentence of every AI response in real time via the local
183
+ // Mneme HTTP bridge. Renders green/yellow/red dots inline + a floating
184
+ // EKG vital-signs indicator. Never throws — bridge offline = grey dots.
185
+ (function polygraph() {
186
+ 'use strict';
187
+ const POLYGRAPH_BRIDGE = ${JSON.stringify(opts.bridgeUrl)};
188
+ const POLYGRAPH_TOKEN = ${JSON.stringify(opts.bridgeToken ?? "")};
189
+
190
+ // Per-vendor response container selectors. Try each — first match wins.
191
+ // Fallbacks are intentionally loose so a vendor UI shuffle doesn't
192
+ // silently disable the polygraph.
193
+ const RESPONSE_SELECTORS = {
194
+ 'chatgpt': ['[data-message-author-role="assistant"] .markdown', '[data-message-author-role="assistant"]', '.markdown.prose'],
195
+ 'gemini': ['message-content', '.model-response-text', '.markdown.markdown-main-panel'],
196
+ 'claude-ai': ['[data-testid*="message"]:not([data-testid*="user"])', '.font-claude-message', '[class*="ProseMirror"]:not([contenteditable="true"])'],
197
+ 'copilot': ['[data-content="ai-message-text"]', '.ai-message-text'],
198
+ 'deepseek': ['.ds-markdown', '[class*="message-content"]:not([class*="user"])'],
199
+ 'qwen': ['.message-content[role="assistant"]', '.ai-message'],
200
+ 'unknown': ['.markdown', 'main article', 'main'],
201
+ };
202
+
203
+ function vendorSite() {
204
+ const h = location.hostname;
205
+ if (h.includes('chatgpt.com') || h.includes('openai.com')) return 'chatgpt';
206
+ if (h.includes('gemini.google.com') || h.includes('aistudio.google.com')) return 'gemini';
207
+ if (h.includes('claude.ai')) return 'claude-ai';
208
+ if (h.includes('copilot.microsoft.com')) return 'copilot';
209
+ if (h.includes('deepseek.com')) return 'deepseek';
210
+ if (h.includes('qwenlm.ai')) return 'qwen';
211
+ return 'unknown';
212
+ }
213
+ const SITE = vendorSite();
214
+ const SELECTORS = RESPONSE_SELECTORS[SITE] || RESPONSE_SELECTORS.unknown;
215
+
216
+ // ── Sentence extraction (matches packages/core/src/polygraph/index.ts) ──
217
+ function splitSentences(text) {
218
+ if (!text) return [];
219
+ // Strip code blocks — we don't polygraph code (yet).
220
+ const noCode = text.replace(/\\\`\\\`\\\`[\\s\\S]*?\\\`\\\`\\\`/g, ' ');
221
+ // Force newline after CJK / Thai terminators so they split without
222
+ // needing trailing whitespace (matches core/polygraph/index.ts).
223
+ const normalised = noCode.replace(/([。ฯ])/g, '$1\\n');
224
+ return normalised
225
+ .split(/(?<=[.!?])\\s+|\\n+/m)
226
+ .map(s => s.trim())
227
+ .filter(s => s.length > 0);
228
+ }
229
+ function worthVerifying(s) {
230
+ if (s.length < 12) return false;
231
+ if (/^(let me|i think|i believe|in my opinion|maybe|perhaps|i'm not sure|actually,|so,)/i.test(s)) return false;
232
+ const tail = s.split(/\\s+/).slice(1).join(' ');
233
+ // Leading-only boundary for digit regex — \\b fails between digit + letter
234
+ // (e.g. "250ms"); keep the leading boundary, drop the trailing one.
235
+ return /\\b\\d+/.test(s)
236
+ || /\\bv?\\d+\\.\\d+/.test(s)
237
+ || /\\b[a-zA-Z_][\\w]*\\.[a-zA-Z_][\\w]*/.test(s)
238
+ || /\\b[a-z]+[A-Z][\\w]*/.test(s)
239
+ || /\\b[A-Z][a-z]{2,}/.test(tail)
240
+ || /\\\`[^\\\`]{2,}\\\`|\\"[^\\"]{3,}\\"/.test(s);
241
+ }
242
+
243
+ // ── Bridge call (privileged GM fetch — no CORS gymnastics) ──
244
+ const verifyCache = new Map(); // sentence → verdict (in-session memo)
245
+ function verifyOne(sentence) {
246
+ if (verifyCache.has(sentence)) return Promise.resolve(verifyCache.get(sentence));
247
+ return new Promise((resolve) => {
248
+ try {
249
+ GM_xmlhttpRequest({
250
+ method: 'POST',
251
+ url: POLYGRAPH_BRIDGE + '/v1/polygraph/verify',
252
+ headers: {
253
+ 'Content-Type': 'application/json',
254
+ 'Authorization': 'Bearer ' + POLYGRAPH_TOKEN,
255
+ },
256
+ data: JSON.stringify({ sentence, vendor: SITE }),
257
+ timeout: 4000,
258
+ onload: (r) => {
259
+ try {
260
+ const v = JSON.parse(r.responseText);
261
+ verifyCache.set(sentence, v);
262
+ resolve(v);
263
+ } catch { resolve({ verdict: 'unknown', color: 'grey', confidence: 0, oneLine: 'parse-error' }); }
264
+ },
265
+ onerror: () => resolve({ verdict: 'unknown', color: 'grey', confidence: 0, oneLine: 'bridge offline' }),
266
+ ontimeout: () => resolve({ verdict: 'unknown', color: 'grey', confidence: 0, oneLine: 'bridge timeout' }),
267
+ });
268
+ } catch { resolve({ verdict: 'unknown', color: 'grey', confidence: 0, oneLine: 'GM_xhr unavailable' }); }
269
+ });
270
+ }
271
+
272
+ // ── EKG: vital-signs indicator (black-sheep flagship) ──
273
+ // SVG canvas in bottom-right. Renders a polygraph-style waveform that
274
+ // pulses with each verdict — green spike for confirmed, red for refuted.
275
+ let ekgEl = null, ekgPath = null, ekgPoints = [], ekgVerdicts = [];
276
+ function ekgInit() {
277
+ if (document.getElementById('mneme-polygraph-ekg')) return;
278
+ const root = document.createElement('div');
279
+ root.id = 'mneme-polygraph-ekg';
280
+ root.style.cssText = 'position:fixed;bottom:14px;right:14px;z-index:99998;width:200px;height:56px;background:rgba(10,10,14,0.92);border:1px solid #f38020;border-radius:10px;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#9ba1a6;font-size:10px;line-height:1.2;box-shadow:0 6px 20px rgba(0,0,0,0.4);cursor:pointer;user-select:none;';
281
+ root.title = 'Mneme Polygraph — live truth-check on AI response. Click to expand.';
282
+ const label = document.createElement('div');
283
+ label.id = 'mneme-polygraph-ekg-label';
284
+ label.style.cssText = 'display:flex;justify-content:space-between;align-items:center;color:#f7d34c;font-weight:600;letter-spacing:0.04em;';
285
+ label.innerHTML = '<span>● MNEME POLYGRAPH</span><span id="mneme-polygraph-tally" style="color:#9ba1a6;font-weight:400">0/0</span>';
286
+ const svgNS = 'http://www.w3.org/2000/svg';
287
+ const svg = document.createElementNS(svgNS, 'svg');
288
+ svg.setAttribute('viewBox', '0 0 200 30');
289
+ svg.setAttribute('width', '184');
290
+ svg.setAttribute('height', '30');
291
+ svg.style.cssText = 'display:block;margin-top:2px;';
292
+ const path = document.createElementNS(svgNS, 'path');
293
+ path.setAttribute('fill', 'none');
294
+ path.setAttribute('stroke', '#f38020');
295
+ path.setAttribute('stroke-width', '1.2');
296
+ path.setAttribute('stroke-linejoin', 'round');
297
+ svg.appendChild(path);
298
+ root.appendChild(label);
299
+ root.appendChild(svg);
300
+ document.body.appendChild(root);
301
+ ekgEl = root; ekgPath = path;
302
+ // Seed flatline so the SVG isn't empty.
303
+ for (let x = 0; x < 200; x += 4) ekgPoints.push({ x, y: 15 });
304
+ ekgRedraw();
305
+ // Background tick — drift the line left so the polygraph FEELS alive
306
+ // even when no new verdicts arrive.
307
+ setInterval(() => {
308
+ ekgPoints = ekgPoints.map(p => ({ x: p.x - 1, y: p.y })).filter(p => p.x >= 0);
309
+ if (ekgPoints.length === 0 || ekgPoints[ekgPoints.length - 1].x < 196) {
310
+ ekgPoints.push({ x: 200, y: 15 });
311
+ }
312
+ ekgRedraw();
313
+ }, 250);
314
+ // Expand to receipt panel on click.
315
+ root.addEventListener('click', ekgExpand);
316
+ }
317
+ function ekgRedraw() {
318
+ if (!ekgPath || ekgPoints.length === 0) return;
319
+ const d = ekgPoints.map((p, i) => (i === 0 ? 'M' : 'L') + p.x.toFixed(1) + ',' + p.y.toFixed(1)).join(' ');
320
+ ekgPath.setAttribute('d', d);
321
+ }
322
+ function ekgPulse(color) {
323
+ if (!ekgPath) return;
324
+ // A polygraph spike: down-up-down across 3 fresh points.
325
+ const baseX = ekgPoints.length > 0 ? ekgPoints[ekgPoints.length - 1].x + 2 : 200;
326
+ const spike = color === 'red' ? -10 : color === 'green' ? 10 : color === 'yellow' ? 4 : 0;
327
+ ekgPoints.push({ x: baseX, y: 15 });
328
+ ekgPoints.push({ x: baseX + 2, y: 15 - spike });
329
+ ekgPoints.push({ x: baseX + 4, y: 15 + spike / 2 });
330
+ ekgPoints.push({ x: baseX + 6, y: 15 });
331
+ // Flash stroke colour briefly.
332
+ const flash = color === 'red' ? '#ff5b5b' : color === 'green' ? '#3fb950' : color === 'yellow' ? '#f7d34c' : '#6e7681';
333
+ ekgPath.setAttribute('stroke', flash);
334
+ setTimeout(() => { if (ekgPath) ekgPath.setAttribute('stroke', '#f38020'); }, 600);
335
+ ekgRedraw();
336
+ }
337
+ function ekgTally(confirmed, refuted, total) {
338
+ const el = document.getElementById('mneme-polygraph-tally');
339
+ if (el) el.textContent = confirmed + '✓ ' + refuted + '✗ / ' + total;
340
+ }
341
+ function ekgExpand() {
342
+ const existing = document.getElementById('mneme-polygraph-panel');
343
+ if (existing) { existing.remove(); return; }
344
+ const panel = document.createElement('div');
345
+ panel.id = 'mneme-polygraph-panel';
346
+ panel.style.cssText = 'position:fixed;bottom:80px;right:14px;z-index:99999;width:380px;max-height:60vh;overflow:auto;background:#0a0a0e;border:1px solid #f38020;border-radius:10px;padding:14px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#e6e6e6;font-size:11px;line-height:1.5;box-shadow:0 10px 40px rgba(0,0,0,0.6);';
347
+ let html = '<div style="display:flex;justify-content:space-between;margin-bottom:10px"><strong style="color:#f7d34c">🔴 MNEME POLYGRAPH — session readout</strong><span style="cursor:pointer;color:#9ba1a6" id="mneme-polygraph-close">✕</span></div>';
348
+ if (ekgVerdicts.length === 0) {
349
+ html += '<div style="color:#9ba1a6">No sentences scored yet. Ask the AI a factual question — polygraph dots will appear inline.</div>';
350
+ } else {
351
+ for (const v of ekgVerdicts.slice(-50).reverse()) {
352
+ const dotColor = v.color === 'green' ? '#3fb950' : v.color === 'red' ? '#ff5b5b' : v.color === 'yellow' ? '#f7d34c' : '#6e7681';
353
+ html += '<div style="padding:6px 0;border-bottom:1px solid #1a1a22"><span style="color:' + dotColor + ';font-size:14px">●</span> <span style="color:#9ba1a6">' + (v.color || 'grey').toUpperCase() + '</span> · ' + (v.oneLine || '') + '<br><span style="color:#666;font-size:10px">' + (v.sentence || '').slice(0, 140) + '</span></div>';
354
+ }
355
+ }
356
+ panel.innerHTML = html;
357
+ document.body.appendChild(panel);
358
+ const closeBtn = document.getElementById('mneme-polygraph-close');
359
+ if (closeBtn) closeBtn.onclick = (e) => { e.stopPropagation(); panel.remove(); };
360
+ panel.addEventListener('click', (e) => e.stopPropagation());
361
+ }
362
+
363
+ // ── DOT injection ──
364
+ function dotEl(verdict) {
365
+ const dot = document.createElement('span');
366
+ dot.className = 'mneme-polygraph-dot';
367
+ const color = verdict.color === 'green' ? '#3fb950' : verdict.color === 'red' ? '#ff5b5b' : verdict.color === 'yellow' ? '#f7d34c' : '#6e7681';
368
+ dot.style.cssText = 'display:inline-block;width:8px;height:8px;border-radius:50%;background:' + color + ';margin-right:6px;vertical-align:middle;box-shadow:0 0 6px ' + color + ';';
369
+ dot.title = '[Mneme] ' + (verdict.oneLine || verdict.verdict || 'unknown');
370
+ return dot;
371
+ }
372
+
373
+ // Mark each text node's sentences with a leading dot. Use a dataset
374
+ // flag to avoid re-decorating the same node as the response streams.
375
+ const verdictTally = { confirmed: 0, refuted: 0, total: 0 };
376
+ function decorateContainer(node) {
377
+ if (!node || node.dataset && node.dataset.mnemePolygraphed) return;
378
+ // Find LEAF text-bearing elements (<p>, <li>, <pre>, headings).
379
+ const candidates = node.querySelectorAll ? node.querySelectorAll('p, li, h1, h2, h3, h4, blockquote') : [];
380
+ candidates.forEach((el) => {
381
+ if (el.dataset.mnemePolygraphed === 'done') return;
382
+ const text = el.textContent || '';
383
+ const sentences = splitSentences(text);
384
+ if (sentences.length === 0) return;
385
+ // Mark in-progress so a concurrent observer tick doesn't re-enter.
386
+ el.dataset.mnemePolygraphed = 'pending';
387
+ // For now we only verify the FIRST sentence of each <p> block —
388
+ // sentence-level highlighting inside a <p> requires text-node walk
389
+ // which can fight with the vendor's streaming render. First-sentence
390
+ // verification + receipt panel for the rest is a reasonable v1.
391
+ const first = sentences.find(worthVerifying);
392
+ if (!first) { el.dataset.mnemePolygraphed = 'skip'; return; }
393
+ verifyOne(first).then((verdict) => {
394
+ if (!verdict) return;
395
+ verdictTally.total++;
396
+ if (verdict.color === 'green') verdictTally.confirmed++;
397
+ if (verdict.color === 'red') verdictTally.refuted++;
398
+ ekgVerdicts.push({ ...verdict, sentence: first });
399
+ ekgPulse(verdict.color);
400
+ ekgTally(verdictTally.confirmed, verdictTally.refuted, verdictTally.total);
401
+ try {
402
+ // Insert dot before the first text node (safer than prepending
403
+ // HTML which would mangle React refs).
404
+ if (!el.querySelector('.mneme-polygraph-dot')) {
405
+ el.insertBefore(dotEl(verdict), el.firstChild);
406
+ }
407
+ } catch {}
408
+ el.dataset.mnemePolygraphed = 'done';
409
+ });
410
+ });
411
+ }
412
+
413
+ function findResponseContainers() {
414
+ const out = [];
415
+ for (const sel of SELECTORS) {
416
+ try {
417
+ const found = document.querySelectorAll(sel);
418
+ found.forEach((n) => out.push(n));
419
+ if (found.length > 0) break;
420
+ } catch {}
421
+ }
422
+ return out;
423
+ }
424
+
425
+ let debounceTimer = null;
426
+ function onMutation() {
427
+ if (debounceTimer) clearTimeout(debounceTimer);
428
+ debounceTimer = setTimeout(() => {
429
+ const containers = findResponseContainers();
430
+ containers.forEach(decorateContainer);
431
+ }, 350);
432
+ }
433
+
434
+ function bootPolygraph() {
435
+ ekgInit();
436
+ const obs = new MutationObserver(onMutation);
437
+ obs.observe(document.body, { childList: true, subtree: true, characterData: true });
438
+ onMutation();
439
+ console.log('[Mneme] Polygraph armed — site=' + SITE + ' · bridge=' + POLYGRAPH_BRIDGE);
440
+ }
441
+ // Defer to document-idle so the AI page's initial DOM is settled.
442
+ if (document.readyState === 'complete' || document.readyState === 'interactive') bootPolygraph();
443
+ else window.addEventListener('DOMContentLoaded', bootPolygraph);
444
+ })();
445
+ `
446
+ : "";
447
+ const content = `${header}\n\n${bridgeBlock}${body}\n${polygraphBlock}`;
165
448
  return {
166
449
  content,
167
- filename: `mneme-soul-injector-${opts.mnemeVersion}.user.js`,
168
- installNote: `Install: (1) Add the Tampermonkey/Violentmonkey extension to your browser. (2) Click the .user.js file -- Tampermonkey will prompt to install. (3) Open ChatGPT/Gemini/Claude.ai -- the 💉 button appears top-right. (4) Copy a Mneme soul prompt, click the button, soul is injected into the chat.`,
450
+ filename: opts.polygraph
451
+ ? `mneme-polygraph-${opts.mnemeVersion}.user.js`
452
+ : `mneme-soul-injector-${opts.mnemeVersion}.user.js`,
453
+ installNote: opts.polygraph
454
+ ? `Install: (1) Add the Tampermonkey/Violentmonkey extension to your browser. (2) Run \`mneme polygraph install\` to start the bridge + emit this userscript. (3) Click the .user.js file — Tampermonkey will prompt to install. (4) Open ChatGPT / Claude.ai / Gemini / Copilot / DeepSeek / Qwen — green/yellow/red dots appear next to every AI sentence and the EKG indicator pulses bottom-right.`
455
+ : `Install: (1) Add the Tampermonkey/Violentmonkey extension to your browser. (2) Click the .user.js file -- Tampermonkey will prompt to install. (3) Open ChatGPT/Gemini/Claude.ai -- the 💉 button appears top-right. (4) Copy a Mneme soul prompt, click the button, soul is injected into the chat.`,
169
456
  };
170
457
  }
171
458
  //# sourceMappingURL=userscript_generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userscript_generator.js","sourceRoot":"","sources":["../../src/permeate/userscript_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAuBH,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,MAAM,MAAM,GAAG;QACb,mBAAmB;QACnB,sCAAsC;QACtC,4DAA4D;QAC5D,oBAAoB,IAAI,CAAC,YAAY,EAAE;QACvC,8IAA8I;QAC9I,wBAAwB;QACxB,wCAAwC;QACxC,2GAA2G;QAC3G,4CAA4C;QAC5C,8CAA8C;QAC9C,gDAAgD;QAChD,sCAAsC;QACtC,kDAAkD;QAClD,8CAA8C;QAC9C,2CAA2C;QAC3C,kCAAkC;QAClC,oCAAoC;QACpC,gCAAgC;QAChC,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS;QAChC,CAAC,CAAC;;qBAEe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;uBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;;;;;;;;;;;;CAY5D;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGd,CAAC,IAAI,EAAE,CAAC;IAEP,MAAM,OAAO,GAAG,GAAG,MAAM,OAAO,WAAW,GAAG,IAAI,IAAI,CAAC;IACvD,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,uBAAuB,IAAI,CAAC,YAAY,UAAU;QAC5D,WAAW,EAAE,sSAAsS;KACpT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"userscript_generator.js","sourceRoot":"","sources":["../../src/permeate/userscript_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA6BH,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,MAAM,MAAM,GAAG;QACb,mBAAmB;QACnB,sCAAsC;QACtC,4DAA4D;QAC5D,oBAAoB,IAAI,CAAC,YAAY,EAAE;QACvC,8IAA8I;QAC9I,wBAAwB;QACxB,wCAAwC;QACxC,2GAA2G;QAC3G,4CAA4C;QAC5C,8CAA8C;QAC9C,gDAAgD;QAChD,sCAAsC;QACtC,kDAAkD;QAClD,8CAA8C;QAC9C,2CAA2C;QAC3C,kCAAkC;QAClC,oCAAoC;QACpC,gCAAgC;QAChC,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS;QAChC,CAAC,CAAC;;qBAEe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;uBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;;;;;;;;;;;;CAY5D;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGd,CAAC,IAAI,EAAE,CAAC;IAEP,0DAA0D;IAC1D,oEAAoE;IACpE,sEAAsE;IACtE,gCAAgC;IAChC,gEAAgE;IAChE,qEAAqE;IACrE,gEAAgE;IAChE,wEAAwE;IACxE,sDAAsD;IACtD,mEAAmE;IACnE,qEAAqE;IACrE,0EAA0E;IAC1E,qDAAqD;IACrD,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;QACrD,CAAC,CAAC;;;;;;;6BAOuB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;6BAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiQlE;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,OAAO,GAAG,GAAG,MAAM,OAAO,WAAW,GAAG,IAAI,KAAK,cAAc,EAAE,CAAC;IACxE,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,IAAI,CAAC,SAAS;YACtB,CAAC,CAAC,mBAAmB,IAAI,CAAC,YAAY,UAAU;YAChD,CAAC,CAAC,uBAAuB,IAAI,CAAC,YAAY,UAAU;QACtD,WAAW,EAAE,IAAI,CAAC,SAAS;YACzB,CAAC,CAAC,qYAAqY;YACvY,CAAC,CAAC,sSAAsS;KAC3S,CAAC;AACJ,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * v2.19.80 — BROWSER POLYGRAPH ENGINE.
3
+ *
4
+ * Closes the gap from IDEA #1 (AI POLYGRAPH): the web demo at #polygraph
5
+ * is interactive but until now Mneme had no way to verify a sentence
6
+ * streaming out of claude.ai / chatgpt.com / gemini.google.com /
7
+ * copilot.microsoft.com in real time.
8
+ *
9
+ * Two halves:
10
+ * 1. `verifyBrowserSentence()` — server-side: takes a single AI-uttered
11
+ * sentence, decides whether it has enough "specific-entity" signal
12
+ * to be worth running through ACGV, then runs it and normalises
13
+ * the verdict into a wire-shape the browser can render as a dot.
14
+ * 2. `extractVerifiableSentences()` — sentence chunker the userscript
15
+ * uses on the streaming response. Filters fillers / short / opinion
16
+ * strings so the bridge isn't pinged on every "Let me think...".
17
+ *
18
+ * Composes with: SQUADRON ACGV (truth check engine), HTTP BRIDGE
19
+ * (transport), PERMEATE USERSCRIPT (renderer), AI POLYGRAPH dashboard
20
+ * view (canonical demo).
21
+ *
22
+ * Design rules (LOAD-BEARING — do not erode):
23
+ * - NEVER throw. The polygraph runs in the user's eye-line; a 500 surfaces
24
+ * as a broken dot in their AI chat. On any error → `unknown / grey`.
25
+ * - Default to YELLOW for anything ambiguous. RED only when ACGV gives
26
+ * an actual refutation. The polygraph errs toward "I don't know" rather
27
+ * than crying wolf — false-positive REDs would teach the user to
28
+ * distrust the polygraph itself.
29
+ * - Server-side latency budget: <300ms per sentence (fast path uses
30
+ * propositional ACGV, never z3, to stay snappy under streaming load).
31
+ */
32
+ /** Wire-format verdict returned to the browser userscript. Kept tiny on
33
+ * purpose — the userscript renders this next to a single sentence and
34
+ * cannot afford deep nesting. */
35
+ export interface BrowserPolygraphVerdict {
36
+ verdict: "trustworthy" | "mixed" | "refuted" | "impossible" | "unknown";
37
+ color: "green" | "yellow" | "red" | "grey";
38
+ confidence: number;
39
+ oneLine: string;
40
+ nextAction?: string;
41
+ latencyMs: number;
42
+ engine: string;
43
+ }
44
+ /** Quick heuristic: does the sentence carry "specific entities" worth
45
+ * running through ACGV? If not, we save a round-trip and return grey.
46
+ *
47
+ * WHY: a polite filler like "Let me think about that" has no extractable
48
+ * facts. ACGV would correctly mark it MIXED and waste ~30ms. We pre-filter
49
+ * to keep streaming render-rate snappy. */
50
+ export declare function looksWorthVerifying(sentence: string): boolean;
51
+ /** Split an AI response into candidate sentences. Handles English `.!?`,
52
+ * Japanese/Chinese `。`, Thai `ฯ` end-mark, and Markdown bullets / line
53
+ * breaks. Returns ALL sentences (filter happens in `looksWorthVerifying`). */
54
+ export declare function extractVerifiableSentences(responseText: string): string[];
55
+ /** The core server-side verifier. Composed of: looksWorthVerifying →
56
+ * runACGV → friendlify → colorize. Wrapped in try/catch so a single
57
+ * failure can't crash the bridge. */
58
+ export declare function verifyBrowserSentence(input: {
59
+ sentence: string;
60
+ context?: string;
61
+ vendor?: string;
62
+ repoRoot: string;
63
+ }): Promise<BrowserPolygraphVerdict>;
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/polygraph/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH;;kCAEkC;AAClC,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IACxE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAuBD;;;;;4CAK4C;AAC5C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB7D;AAED;;+EAE+E;AAC/E,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBzE;AAED;;sCAEsC;AACtC,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAkDnC"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * v2.19.80 — BROWSER POLYGRAPH ENGINE.
3
+ *
4
+ * Closes the gap from IDEA #1 (AI POLYGRAPH): the web demo at #polygraph
5
+ * is interactive but until now Mneme had no way to verify a sentence
6
+ * streaming out of claude.ai / chatgpt.com / gemini.google.com /
7
+ * copilot.microsoft.com in real time.
8
+ *
9
+ * Two halves:
10
+ * 1. `verifyBrowserSentence()` — server-side: takes a single AI-uttered
11
+ * sentence, decides whether it has enough "specific-entity" signal
12
+ * to be worth running through ACGV, then runs it and normalises
13
+ * the verdict into a wire-shape the browser can render as a dot.
14
+ * 2. `extractVerifiableSentences()` — sentence chunker the userscript
15
+ * uses on the streaming response. Filters fillers / short / opinion
16
+ * strings so the bridge isn't pinged on every "Let me think...".
17
+ *
18
+ * Composes with: SQUADRON ACGV (truth check engine), HTTP BRIDGE
19
+ * (transport), PERMEATE USERSCRIPT (renderer), AI POLYGRAPH dashboard
20
+ * view (canonical demo).
21
+ *
22
+ * Design rules (LOAD-BEARING — do not erode):
23
+ * - NEVER throw. The polygraph runs in the user's eye-line; a 500 surfaces
24
+ * as a broken dot in their AI chat. On any error → `unknown / grey`.
25
+ * - Default to YELLOW for anything ambiguous. RED only when ACGV gives
26
+ * an actual refutation. The polygraph errs toward "I don't know" rather
27
+ * than crying wolf — false-positive REDs would teach the user to
28
+ * distrust the polygraph itself.
29
+ * - Server-side latency budget: <300ms per sentence (fast path uses
30
+ * propositional ACGV, never z3, to stay snappy under streaming load).
31
+ */
32
+ import { runACGV } from "../squadron/acgv.js";
33
+ /** Map ACGV's internal verdict family to the friendlier 5-state used by
34
+ * the browser. Mirrors the mapping in `mneme.truth.check` MCP tool. */
35
+ function toFriendlyVerdict(acgv) {
36
+ switch (acgv) {
37
+ case "FUSION": return "trustworthy";
38
+ case "LIMBO": return "mixed";
39
+ case "PASSTHROUGH": return "mixed";
40
+ case "BLACK_HOLE": return "refuted";
41
+ case "IMPOSSIBLE_REFUTE": return "impossible";
42
+ case "AUTO_REFUTE": return "impossible";
43
+ default: return "mixed";
44
+ }
45
+ }
46
+ function toColor(v) {
47
+ if (v === "trustworthy")
48
+ return "green";
49
+ if (v === "refuted" || v === "impossible")
50
+ return "red";
51
+ if (v === "unknown")
52
+ return "grey";
53
+ return "yellow"; // mixed → caution
54
+ }
55
+ /** Quick heuristic: does the sentence carry "specific entities" worth
56
+ * running through ACGV? If not, we save a round-trip and return grey.
57
+ *
58
+ * WHY: a polite filler like "Let me think about that" has no extractable
59
+ * facts. ACGV would correctly mark it MIXED and waste ~30ms. We pre-filter
60
+ * to keep streaming render-rate snappy. */
61
+ export function looksWorthVerifying(sentence) {
62
+ const s = sentence.trim();
63
+ if (s.length < 12)
64
+ return false; // too short to carry a claim
65
+ if (/^(let me|i think|i believe|in my opinion|maybe|perhaps|i'm not sure|actually,|so,)/i.test(s))
66
+ return false;
67
+ // At least ONE of: a digit, a version-like token, a file/symbol with dots,
68
+ // a proper-noun (capitalised word that isn't sentence-initial), a CamelCase
69
+ // identifier, a percentage, or a quoted code/value.
70
+ // NOTE: do NOT close `\b\d+...` with a trailing `\b` — `\b` does not exist
71
+ // between `\d` and `\w` (e.g. `250ms`), so the boundary check breaks valid
72
+ // numeric-claim sentences. Leading boundary is enough.
73
+ const digitOrPct = /\b\d+(\.\d+)?/.test(s);
74
+ const versionish = /\bv?\d+\.\d+(\.\d+)?/.test(s);
75
+ const dottedSymbol = /\b[a-zA-Z_][\w]*\.[a-zA-Z_][\w]*/.test(s);
76
+ const camelCase = /\b[a-z]+[A-Z][\w]*/.test(s);
77
+ // Strip the very first word before checking proper nouns (avoid sentence-initial caps).
78
+ const tail = s.split(/\s+/).slice(1).join(" ");
79
+ const properNoun = /\b[A-Z][a-z]{2,}/.test(tail);
80
+ const codeQuote = /`[^`]{2,}`|"[^"]{3,}"/.test(s);
81
+ return digitOrPct || versionish || dottedSymbol || camelCase || properNoun || codeQuote;
82
+ }
83
+ /** Split an AI response into candidate sentences. Handles English `.!?`,
84
+ * Japanese/Chinese `。`, Thai `ฯ` end-mark, and Markdown bullets / line
85
+ * breaks. Returns ALL sentences (filter happens in `looksWorthVerifying`). */
86
+ export function extractVerifiableSentences(responseText) {
87
+ if (!responseText)
88
+ return [];
89
+ // Strip code blocks — we don't polygraph code (yet). Replace with placeholder
90
+ // so adjacent sentences aren't accidentally merged.
91
+ const noCode = responseText.replace(/```[\s\S]*?```/g, " ¶CODE¶ ");
92
+ // CJK + Thai terminators don't always carry trailing whitespace
93
+ // (`これはテストです。次の文。` is two sentences with no space). Force a
94
+ // newline after every CJK/Thai end-mark so the split regex below can
95
+ // rely on whitespace.
96
+ const normalised = noCode.replace(/([。ฯ])/g, "$1\n");
97
+ // Split on common sentence terminators (English + normalised CJK/Thai).
98
+ const raw = normalised
99
+ .split(/(?<=[.!?])\s+|\n+|^\s*[-*]\s+/m)
100
+ .map((s) => s.trim())
101
+ .filter((s) => s.length > 0 && s !== "¶CODE¶");
102
+ return raw;
103
+ }
104
+ /** The core server-side verifier. Composed of: looksWorthVerifying →
105
+ * runACGV → friendlify → colorize. Wrapped in try/catch so a single
106
+ * failure can't crash the bridge. */
107
+ export async function verifyBrowserSentence(input) {
108
+ const t0 = Date.now();
109
+ const sentence = input.sentence.trim();
110
+ if (!sentence) {
111
+ return { verdict: "unknown", color: "grey", confidence: 0, oneLine: "empty sentence", latencyMs: 0, engine: "noop" };
112
+ }
113
+ if (!looksWorthVerifying(sentence)) {
114
+ return {
115
+ verdict: "unknown", color: "grey", confidence: 0,
116
+ oneLine: "no specific entities to verify",
117
+ latencyMs: Date.now() - t0, engine: "prefilter",
118
+ };
119
+ }
120
+ try {
121
+ // Always use propositional engine in the browser path: z3 spawns a
122
+ // worker + can take 1-3s. The browser polygraph is per-sentence on a
123
+ // streaming response; we MUST stay under ~300ms.
124
+ const result = runACGV({ claim: sentence, repoRoot: input.repoRoot });
125
+ const friendly = toFriendlyVerdict(result.verdict);
126
+ const color = toColor(friendly);
127
+ // One-line summary that's safe to show in a tooltip. ACGV's `nextAction`
128
+ // can be terse; surface the verdict name + confidence so the user can
129
+ // see WHY at a glance.
130
+ const oneLine = friendly === "trustworthy"
131
+ ? `verified · ${result.verdict.toLowerCase()} (${Math.round(result.confidence * 100)}%)`
132
+ : friendly === "refuted" || friendly === "impossible"
133
+ ? `refuted · ${result.verdict.toLowerCase()} (${Math.round(result.confidence * 100)}%)`
134
+ : `mixed evidence · need a more specific entity`;
135
+ return {
136
+ verdict: friendly,
137
+ color,
138
+ confidence: result.confidence,
139
+ oneLine,
140
+ nextAction: friendly === "refuted" || friendly === "impossible"
141
+ ? "Do not rely on this sentence — re-prompt for a specific source."
142
+ : friendly === "trustworthy"
143
+ ? "Safe to rely on."
144
+ : "Ask the AI to cite a specific file / function / version.",
145
+ latencyMs: Date.now() - t0,
146
+ engine: "propositional",
147
+ };
148
+ }
149
+ catch (e) {
150
+ // Defensive: ACGV throwing is unexpected but we MUST not bubble the
151
+ // error to the browser. Surface a grey dot.
152
+ return {
153
+ verdict: "unknown", color: "grey", confidence: 0,
154
+ oneLine: `polygraph error · ${e.message || "unknown"}`,
155
+ latencyMs: Date.now() - t0, engine: "error",
156
+ };
157
+ }
158
+ }
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/polygraph/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * v2.19.80 — Browser Polygraph deep tests.
3
+ *
4
+ * Pins the load-bearing invariants of the per-sentence polygraph engine:
5
+ * - never throws (NEVER 500 a sentence — the user sees the dot)
6
+ * - prefilter discards fillers / short / no-entity sentences as `unknown/grey`
7
+ * - real claims with specific entities produce a verdict in <300ms
8
+ * - empty input → grey unknown
9
+ * - sentence extractor correctly splits English / Thai / CJK terminators
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=polygraph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygraph.test.d.ts","sourceRoot":"","sources":["../../src/polygraph/polygraph.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}