@intutic/mcp-governance-proxy 2.4.0 → 2.5.1

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.
Files changed (43) hide show
  1. package/README.md +1 -1
  2. package/dist/agentTools.d.ts +15 -2
  3. package/dist/agentTools.d.ts.map +1 -1
  4. package/dist/agentTools.js +43 -1
  5. package/dist/agentTools.js.map +1 -1
  6. package/dist/chaos.d.ts +90 -0
  7. package/dist/chaos.d.ts.map +1 -0
  8. package/dist/chaos.js +174 -0
  9. package/dist/chaos.js.map +1 -0
  10. package/dist/config.d.ts +7 -5
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js.map +1 -1
  13. package/dist/daemon/policyCache.d.ts +5 -1
  14. package/dist/daemon/policyCache.d.ts.map +1 -1
  15. package/dist/daemon/policyCache.js +65 -27
  16. package/dist/daemon/policyCache.js.map +1 -1
  17. package/dist/index.js +15 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/interceptor.d.ts +12 -0
  20. package/dist/interceptor.d.ts.map +1 -1
  21. package/dist/interceptor.js +21 -6
  22. package/dist/interceptor.js.map +1 -1
  23. package/dist/policy.d.ts +16 -1
  24. package/dist/policy.d.ts.map +1 -1
  25. package/dist/policy.js +32 -5
  26. package/dist/policy.js.map +1 -1
  27. package/dist/proxy.d.ts +35 -3
  28. package/dist/proxy.d.ts.map +1 -1
  29. package/dist/proxy.js +135 -70
  30. package/dist/proxy.js.map +1 -1
  31. package/dist/refusals.d.ts +25 -0
  32. package/dist/refusals.d.ts.map +1 -1
  33. package/dist/refusals.js +50 -0
  34. package/dist/refusals.js.map +1 -1
  35. package/dist/remoteBridge.d.ts +2 -1
  36. package/dist/remoteBridge.d.ts.map +1 -1
  37. package/dist/remoteBridge.js +4 -3
  38. package/dist/remoteBridge.js.map +1 -1
  39. package/dist/tofu.d.ts +49 -1
  40. package/dist/tofu.d.ts.map +1 -1
  41. package/dist/tofu.js +54 -2
  42. package/dist/tofu.js.map +1 -1
  43. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE5D,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,GAI3B,MAAM,uBAAuB,CAAA;AAE9B,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAE5C,wGAAwG;AACxG,MAAM,aAAa,GAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AAclG;;;;;;;;;;;;;GAaG;AACH;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ;QACpC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAC/B,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC;QACtE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,kBAAkB,CAAC,CAC1F,CAAA;AACH,CAAC;AAyBD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACpE,aAAa,EAAE,OAAO;IACtB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;CAClB,CAAsB,CAAA;AAqBvB,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5F,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,aAAa,GAA6B,EAAE,CAAA;IAClD,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QACnD,CAAC;IACH,CAAC;IACD,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACnE,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrD,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,aAAa;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1G,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;QAC3B,KAAK,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,OAAO;QACL,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;KAClD,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,KAAK,CAAA;AAEvC,MAAM,OAAO,YAAY;IAmGJ;IACA;IACA;IACA;IACA;IAtGX,KAAK,GAAc,EAAE,CAAA;IAC7B;;;;;OAKG;IACK,WAAW,GAAa,EAAE,CAAA;IAClC,wFAAwF;IAChF,iBAAiB,GAAa,EAAE,CAAA;IACxC;;;;;;OAMG;IACK,YAAY,GAAa,EAAE,CAAA;IACnC,2EAA2E;IACnE,wBAAwB,GAA2B,EAAE,CAAA;IAC7D;;;;;;OAMG;IACK,cAAc,GAAa,EAAE,CAAA;IACrC;;;;;;;OAOG;IACK,eAAe,CAA8B;IACrD;;;;OAIG;IACK,WAAW,CAAwC;IAC3D;;;;;;;OAOG;IACK,gBAAgB,GAAuD,EAAE,CAAA;IACjF;;;;;OAKG;IACK,QAAQ,CAA+B;IACvC,SAAS,CAA0B;IAC3C;;;;OAIG;IACK,QAAQ,CAAqB;IAC7B,cAAc,CAA4B;IAClD,iGAAiG;IACzF,UAAU,GAAoB,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACrE;;;;;OAKG;IACK,YAAY,GAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC9D;;;;;OAKG;IACK,SAAS,CAAkC;IACnD;;;;;OAKG;IACK,MAAM,GAAG,KAAK,CAAA;IACtB,qFAAqF;IAC7E,YAAY,GAAyB,IAAI,CAAA;IACzC,oBAAoB,GAAG,CAAC,CAAA;IAChC,6GAA6G;IACrG,sBAAsB,GAAG,KAAK,CAAA;IAC9B,YAAY,GAA0B,IAAI,CAAA;IAElD,YACmB,eAAuB,EACvB,MAAc,EACd,WAAmB,EACnB,QAAgB,MAAM,EACtB,eAAuB,aAAa;QAJpC,oBAAe,GAAf,eAAe,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAiB;QACtB,iBAAY,GAAZ,YAAY,CAAwB;IACpD,CAAC;IAEJ;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAmC;QACvC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC7B,yCAAyC;YAC3C,CAAC,CAAC,CAAA;YACF,IAAI,MAAM;gBAAE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC5D,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACd,yCAAyC;QACzC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QAEzB,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,IAAI,MAAM;YAAE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,yCAAyC;IACzC,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,CAAC,YAAY,CAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAM;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,GAAG,yBAAyB;YAAE,OAAM;QAC9E,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,gFAAgF;IAChF,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,4EAA4E;IAC5E,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,yDAAyD;IACzD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,uEAAuE;IACvE,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,4DAA4D;IAC5D,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,6GAA6G;IAC7G,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,2FAA2F;IAC3F,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,0GAA0G;IAC1G,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,0CAA0C;IAC1C,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,oEAAoE;IACpE,gGAAgG;IAChG,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,6DAA6D;IAC7D,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,mEAAmE;IACnE,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,8DAA8D;IAC9D,2BAA2B;QACzB,OAAO,IAAI,CAAC,wBAAwB,CAAA;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED,yFAAyF;IACzF,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,8EAA8E;IAC9E,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED,uEAAuE;IAC/D,cAAc,CAAC,MAA+B;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACnE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAC3D,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,SAAS,GAAG,MAAM,CAAC,0BAA0B,CAAC,IAAI,MAAM,CAAC,6BAA6B,CAAC,CAAA;QAC7F,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAA;QAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAoC,CAAC,EAAE,CAAC;gBAC1E,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC9E,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACjD,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAClE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACxD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACvD,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACrE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACpD,IAAI,CAAC,eAAe;YAClB,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC5C,IAAI,CAAC,WAAW;YACd,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;QACxG,MAAM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACtD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAA2C,CAAC,EAAE,CAAC;gBACjF,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;oBAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9F,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAClE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAA;QACjI,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,eAAe,CAAC,KAAc;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI,EAAE,EAChG,oFAAoF,CACrF,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,QAAgB,EAAE,aAAqB;QAC/C,IAAI,OAAO,GAAmB,IAAI,CAAA;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAQ;YAC3G,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBACvC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;wBAAE,SAAQ;gBAC7C,CAAC;gBACD,OAAO,GAAG,IAAI,CAAA;gBACd,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;oBAAE,MAAK;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtC,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,mEAAmE;gBACnE,0EAA0E;gBAC1E,yEAAyE;gBACzE,uDAAuD;gBACvD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAwB,YAAY,EAAE;oBACzE,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAA;gBACF,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;oBACxC,qEAAqE;oBACrE,uEAAuE;oBACvE,mEAAmE;oBACnE,MAAM,QAAQ,GAAc,EAAE,CAAA;oBAC9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACnC,IAAI,SAAS,CAAC,SAAS,CAAC;4BAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACpD,CAAC;oBACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;oBACrB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;oBACnD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EACtE,uEAAuE,CACxE,CAAA;oBACH,CAAC;oBACD,mEAAmE;oBACnE,qEAAqE;oBACrE,iEAAiE;oBACjE,oEAAoE;oBACpE,oEAAoE;oBACpE,qEAAqE;oBACrE,+DAA+D;oBAC/D,kEAAkE;oBAClE,mEAAmE;oBACnE,iEAAiE;oBACjE,8DAA8D;oBAC9D,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,6DAA6D,CAAC,CAAA;wBAC/I,OAAM;oBACR,CAAC;oBACD,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAClD,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAA;oBACD,IAAI,CAAC,cAAc,CAAC,MAA4C,CAAC,CAAA;oBACjE,uEAAuE;oBACvE,mEAAmE;oBACnE,IAAI,MAAM,CAAC,WAAW;wBAAE,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAA;oBAC1F,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;wBACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;wBACtC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;oBACpC,CAAC;oBACD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAA;oBACrH,OAAM;gBACR,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CACN;oBACE,MAAM,EAAE,sBAAsB;oBAC9B,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACtD,EACD,oEAAoE,CACrE,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,iCAAiC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAA;QACtH,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,uCAAuC,CAAC,CAAA;QAErF,IAAI,IAAY,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,IAAI,GAAG,YAAY,eAAe,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC5G,MAAM,GAAG,CAAA;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA+C,CAAA;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACvD,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3B,8EAA8E;QAC9E,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,qBAAqB,CAAA;QAC7E,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;QAClC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAA;IAC1F,CAAC;CACF"}
package/dist/proxy.d.ts CHANGED
@@ -32,8 +32,10 @@ import { ToolCallInterceptor } from './interceptor.js';
32
32
  import { type InjectionSource } from './injection.js';
33
33
  import { type AnomalyFinding } from './anomaly/index.js';
34
34
  import { SessionState } from './session.js';
35
+ import { type ToolDefinition } from './tofu.js';
35
36
  import { type CallerIdentity } from './identity.js';
36
37
  import { type McpToolDefinition } from '@intutic/shared-types';
38
+ import type { ChaosInjector } from './chaos.js';
37
39
  /**
38
40
  * Who a per-member MCP budget counts when the control plane has not named the
39
41
  * member behind this proxy's key: the key's prefix, else the OS user. Callers
@@ -44,6 +46,17 @@ export declare function fallbackBudgetCaller(identity: CallerIdentity): string;
44
46
  export interface PendingRequest {
45
47
  method: 'tools/call' | 'tools/list' | 'resources/read';
46
48
  toolName?: string;
49
+ /** A chaos `inject.tool_result` chosen for this call: appended to the server's result (chaos.ts). */
50
+ inject?: {
51
+ payload: string;
52
+ call: number;
53
+ };
54
+ }
55
+ /** What `handleHarnessLine` needs to inject faults when a chaos plan is loaded (chaos.ts). */
56
+ export interface ChaosHooks {
57
+ injector: ChaosInjector;
58
+ /** Hand a synthesized upstream line to the response path, as if the server had sent it. */
59
+ respond: (line: string) => void;
47
60
  }
48
61
  /** The outcome of inspecting one server→harness line. */
49
62
  export interface ServerLineOutcome {
@@ -71,6 +84,13 @@ export interface ServerLineOutcome {
71
84
  * `toolsListTools`; the registry gets these.
72
85
  */
73
86
  toolsListUpstream?: McpToolDefinition[];
87
+ /**
88
+ * The upstream server's own `{name, description, inputSchema}` per tool,
89
+ * untruncated, before curation hid any or an override rewrote a
90
+ * description — what TOFU pins (tofu.ts), so an owner's own curation change
91
+ * never reads as the server's. Set alongside `toolsListTools`.
92
+ */
93
+ toolsListPinned?: ToolDefinition[];
74
94
  /** The JSON-RPC id of the `tools/list` response, needed to build a block
75
95
  * frame in the caller if TOFU refuses it. Set alongside `toolsListTools`. */
76
96
  toolsListMsgId?: string | number | null;
@@ -143,7 +163,9 @@ export interface ServerLineOutcome {
143
163
  * also the counter to a poisoned upstream description — the pin detects the
144
164
  * change; the override controls what the agent actually reads.
145
165
  */
146
- export declare function processServerLine(raw: string, pending: Map<string | number, PendingRequest>, allowedTools: readonly string[], overrides: Readonly<Record<string, string>>, injectionAction?: 'warn' | 'block', injectionPatterns?: readonly string[], disabledTools?: readonly string[]): ServerLineOutcome;
166
+ export declare function processServerLine(raw: string, pending: Map<string | number, PendingRequest>, allowedTools: readonly string[], overrides: Readonly<Record<string, string>>, injectionAction?: 'warn' | 'block', injectionPatterns?: readonly string[], disabledTools?: readonly string[],
167
+ /** The workspace is OPAQUE: a withheld result does not say which pattern withheld it. */
168
+ opaque?: boolean): ServerLineOutcome;
147
169
  /**
148
170
  * Handle one harness→upstream line — shared, byte-for-byte, between stdio
149
171
  * proxy mode (`McpGovernanceProxy.runProxy`, below) and the remote HTTP/SSE
@@ -161,9 +183,11 @@ export declare function processServerLine(raw: string, pending: Map<string | num
161
183
  * so `remoteBridge.ts` can call it without needing a `McpGovernanceProxy`
162
184
  * instance shaped for the stdio child-process lifecycle it doesn't have.
163
185
  */
164
- export declare function handleHarnessLine(line: string, pending: Map<string | number, PendingRequest>, interceptor: ToolCallInterceptor, forward: (line: string) => void, session?: SessionState): void;
186
+ export declare function handleHarnessLine(line: string, pending: Map<string | number, PendingRequest>, interceptor: ToolCallInterceptor, forward: (line: string) => void, session?: SessionState, chaos?: ChaosHooks): void;
165
187
  export declare class McpGovernanceProxy {
166
188
  private readonly config;
189
+ /** The loaded chaos plan's injector; null (no plan) leaves every path as it is. */
190
+ private readonly chaos;
167
191
  private readonly policy;
168
192
  private readonly emitter;
169
193
  private readonly interceptor;
@@ -198,7 +222,9 @@ export declare class McpGovernanceProxy {
198
222
  /** Reports this proxy's server to the registry; absent for the standalone `intutic` entry, which fronts none. */
199
223
  private readonly registryObserver;
200
224
  private realServer;
201
- constructor(config: ProxyConfig);
225
+ constructor(config: ProxyConfig,
226
+ /** The loaded chaos plan's injector; null (no plan) leaves every path as it is. */
227
+ chaos?: ChaosInjector | null);
202
228
  /**
203
229
  * The tools/call decision engine — exposed so `remoteBridge.ts` can drive
204
230
  * `handleHarnessLine` (the exported free function above) against the SAME
@@ -213,6 +239,12 @@ export declare class McpGovernanceProxy {
213
239
  * `handleHarnessLine` records into are never two different objects.
214
240
  */
215
241
  getSessionState(): SessionState;
242
+ /**
243
+ * The chaos hooks for `handleHarnessLine`, bound to this proxy's response
244
+ * path and `pending` map; undefined without a plan. Shared by stdio mode
245
+ * and `remoteBridge.ts` for the same reason `getInterceptor` is.
246
+ */
247
+ chaosHooks(pending: Map<string | number, PendingRequest>): ChaosHooks | undefined;
216
248
  /**
217
249
  * Start the policy client's background refresh timer. Exposed alongside
218
250
  * `stopPolicy` so `remoteBridge.ts` can drive the same policy lifecycle
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
package/dist/proxy.js CHANGED
@@ -32,8 +32,9 @@ import * as node_readline from 'node:readline';
32
32
  import { createStderrLogger as createLogger } from './stderrLog.js';
33
33
  import { PolicyClient } from './policy.js';
34
34
  import { GovernanceEmitter, detectionFinding } from './emitter.js';
35
- import { ToolCallInterceptor } from './interceptor.js';
36
- import { LIST_INCIDENTS_ARGS, budgetRemaining, describeFailure, holdStatus, incidentListPath, readControlPlane, registryStatus, } from './agentTools.js';
35
+ import { ToolCallInterceptor, holdReason } from './interceptor.js';
36
+ import { LIST_INCIDENTS_ARGS, budgetRemaining, describeFailure, governanceStatus, sopListPath, holdStatus, incidentListPath, readControlPlane, registryStatus, } from './agentTools.js';
37
+ import { isOpaqueRefusal, opaqueRefusalData } from './refusals.js';
37
38
  import { redactText as redactMcpText, setWorkspacePii } from './dlp.js';
38
39
  import { scanText, injectionSeverity, setDynamicInjectionPatterns } from './injection.js';
39
40
  import { toolPoisoning, dlpEscalation } from './anomaly/index.js';
@@ -43,11 +44,11 @@ import { GuardedValkey } from './guardedValkey.js';
43
44
  import { McpBudgetEnforcer, ValkeyBudgetStore } from './budget.js';
44
45
  import { WasmRunner } from './wasm/runner.js';
45
46
  import { CloudRuleSet, fetchRuleBinaryFrom, refusalDetail } from './wasm/cloudRules.js';
46
- import { checkTofu, decideTofuAction } from './tofu.js';
47
+ import { checkTofu, decideTofuAction, tofuReport } from './tofu.js';
47
48
  import { RegistryObserver } from './registryObserver.js';
48
49
  import { ApprovalHolds } from './approvalHold.js';
49
50
  import { callerIdentity } from './identity.js';
50
- import { normalizeToolDefinition } from '@intutic/shared-types';
51
+ import { OPAQUE_REFUSAL_MESSAGE, normalizeToolDefinition } from '@intutic/shared-types';
51
52
  import { PACKAGE_VERSION } from './version.js';
52
53
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
53
54
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
@@ -55,20 +56,40 @@ import { z } from 'zod';
55
56
  import { watchWasmDir } from './wasm/watch.js';
56
57
  const log = createLogger('mcp-governance-proxy');
57
58
  /**
58
- * Build a JSON-RPC 2.0 error response for a blocked tool call. `data` names
59
- * the refusal for a client that reads it programmatically (refusals.ts).
59
+ * A refusal frame, the one place that decides what the agent is told. In an
60
+ * OPAQUE workspace (`opaque`) a refusal on workspace policy
61
+ * (`isOpaqueRefusal`) is sent as `opaqueMessage`, built around
62
+ * `OPAQUE_REFUSAL_MESSAGE`, with `opaqueRefusalData`: the same JSON-RPC code
63
+ * and `error.data.code`, no rule. Otherwise `message` and `data`, exactly as
64
+ * before the mode existed. Only the frame changes; logs and emitted events
65
+ * keep the full reason.
60
66
  */
61
- function buildBlockResponse(id, reason, data) {
67
+ function refusalResponse(id, data, opaque, message, opaqueMessage) {
68
+ const hide = opaque && isOpaqueRefusal(data);
62
69
  return {
63
70
  jsonrpc: '2.0',
64
71
  id,
65
72
  error: {
66
73
  code: -32603, // Internal error (closest standard code to "blocked")
67
- message: `[Intutic Governance] Tool call blocked: ${reason}`,
68
- data,
74
+ message: hide ? opaqueMessage : message,
75
+ data: hide ? opaqueRefusalData(data) : data,
69
76
  },
70
77
  };
71
78
  }
79
+ const BLOCKED = '[Intutic Governance] Tool call blocked: ';
80
+ /**
81
+ * A withheld result in an OPAQUE workspace: not which pattern, but still that
82
+ * the call already ran, so the agent does not run it again expecting output.
83
+ */
84
+ const RESULT_WITHHELD_OPAQUE = `[Intutic Governance] Result withheld: ${OPAQUE_REFUSAL_MESSAGE} The tool call already ran; ` +
85
+ `its output was not delivered.`;
86
+ /**
87
+ * Build a JSON-RPC 2.0 error response for a blocked tool call. `data` names
88
+ * the refusal for a client that reads it programmatically (refusals.ts).
89
+ */
90
+ function buildBlockResponse(id, reason, data, opaque) {
91
+ return refusalResponse(id, data, opaque, BLOCKED + reason, BLOCKED + OPAQUE_REFUSAL_MESSAGE);
92
+ }
72
93
  /** The `error.data` of a block decision: its code, rule id and detail. */
73
94
  function blockData(decision) {
74
95
  return { code: decision.code, ruleId: decision.ruleId, ...decision.detail };
@@ -79,16 +100,10 @@ function blockData(decision) {
79
100
  * the hold id in `data` for a client that reads it programmatically — empty
80
101
  * when the hold could not be recorded, so there is nothing to approve yet.
81
102
  */
82
- function buildHoldResponse(id, reason, holdId, ruleId) {
83
- return {
84
- jsonrpc: '2.0',
85
- id,
86
- error: {
87
- code: -32603,
88
- message: `[Intutic Governance] Tool call ${reason}`,
89
- data: { code: 'HELD', ruleId, status: 'pending_approval', holdId },
90
- },
91
- };
103
+ function buildHoldResponse(id, reason, holdId, ruleId, opaque) {
104
+ return refusalResponse(id, { code: 'HELD', ruleId, status: 'pending_approval', holdId }, opaque, `[Intutic Governance] Tool call ${reason}`,
105
+ // An OPAQUE workspace's hold names the hold, not the rule.
106
+ `[Intutic Governance] Tool call ${holdReason(OPAQUE_REFUSAL_MESSAGE, holdId)}`);
92
107
  }
93
108
  /**
94
109
  * Who a per-member MCP budget counts when the control plane has not named the
@@ -135,7 +150,9 @@ function writeFrame(frame) {
135
150
  * also the counter to a poisoned upstream description — the pin detects the
136
151
  * change; the override controls what the agent actually reads.
137
152
  */
138
- export function processServerLine(raw, pending, allowedTools, overrides, injectionAction = 'warn', injectionPatterns = [], disabledTools = []) {
153
+ export function processServerLine(raw, pending, allowedTools, overrides, injectionAction = 'warn', injectionPatterns = [], disabledTools = [],
154
+ /** The workspace is OPAQUE: a withheld result does not say which pattern withheld it. */
155
+ opaque = false) {
139
156
  // Workspace-supplied injection patterns, on top of the floor.
140
157
  // Idempotent when the list has not changed, so this is cheap per line.
141
158
  setDynamicInjectionPatterns(injectionPatterns);
@@ -178,17 +195,9 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
178
195
  resultText = redacted;
179
196
  }
180
197
  catch {
181
- const withheld = {
182
- jsonrpc: '2.0',
183
- id: msg.id,
184
- error: {
185
- code: -32603,
186
- message: `[Intutic Governance] Result withheld: it contained sensitive data ` +
187
- `whose redaction did not survive re-parsing. The tool ran; its output ` +
188
- `was not delivered. (${findings.map((f) => f.description).join('; ')})`,
189
- data: { code: 'RESULT_WITHHELD_DLP', ruleId: `dlp.${findings[0]?.pattern ?? 'output'}` },
190
- },
191
- };
198
+ const withheld = refusalResponse(msg.id, { code: 'RESULT_WITHHELD_DLP', ruleId: `dlp.${findings[0]?.pattern ?? 'output'}` }, opaque, `[Intutic Governance] Result withheld: it contained sensitive data ` +
199
+ `whose redaction did not survive re-parsing. The tool ran; its output ` +
200
+ `was not delivered. (${findings.map((f) => f.description).join('; ')})`, RESULT_WITHHELD_OPAQUE);
192
201
  return { line: JSON.stringify(withheld), redactedTool, redactions };
193
202
  }
194
203
  }
@@ -205,17 +214,9 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
205
214
  // Response-side block never claims the CALL was refused — it
206
215
  // already ran. Only the delivered output is withheld, worded the
207
216
  // same way the DLP reparse-withheld frame above is.
208
- const withheldInjection = {
209
- jsonrpc: '2.0',
210
- id: msg.id,
211
- error: {
212
- code: -32603,
213
- message: `[Intutic Governance] Result withheld: it triggered prompt-injection ` +
214
- `pattern(s) (${injectionPatterns.join(', ')}). The tool call already ran; ` +
215
- `its output was not delivered.`,
216
- data: { code: 'RESULT_WITHHELD_INJECTION', ruleId: 'injection.tool_result' },
217
- },
218
- };
217
+ const withheldInjection = refusalResponse(msg.id, { code: 'RESULT_WITHHELD_INJECTION', ruleId: 'injection.tool_result' }, opaque, `[Intutic Governance] Result withheld: it triggered prompt-injection ` +
218
+ `pattern(s) (${injectionPatterns.join(', ')}). The tool call already ran; ` +
219
+ `its output was not delivered.`, RESULT_WITHHELD_OPAQUE);
219
220
  return {
220
221
  line: JSON.stringify(withheldInjection),
221
222
  redactedTool,
@@ -249,6 +250,11 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
249
250
  let hidden = 0;
250
251
  let overridden = 0;
251
252
  // Copied before the overrides below rewrite descriptions in place.
253
+ const pinned = tools.map((t) => ({
254
+ name: t?.['name'],
255
+ description: t?.['description'],
256
+ inputSchema: t?.['inputSchema'],
257
+ }));
252
258
  const upstream = tools
253
259
  .map(normalizeToolDefinition)
254
260
  .filter((t) => t !== null);
@@ -298,14 +304,15 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
298
304
  .filter((t) => typeof t['name'] === 'string')
299
305
  .map((t) => ({ name: t['name'], description: typeof t['description'] === 'string' ? t['description'] : undefined })));
300
306
  // toolsListTools/toolsListMsgId are set on EVERY tools/list response,
301
- // curated or not — TOFU pinning (tofu.ts) needs the full post-curation
302
- // tool set regardless of whether allowlist filtering or description
303
- // overrides touched it this time.
307
+ // curated or not — the session cache and TOFU pinning (tofu.ts, over
308
+ // `toolsListPinned`) need them whether or not allowlist filtering or
309
+ // description overrides touched the list this time.
304
310
  if (hidden === 0 && overridden === 0) {
305
311
  return {
306
312
  line: raw,
307
313
  toolsListTools: kept,
308
314
  toolsListUpstream: upstream,
315
+ toolsListPinned: pinned,
309
316
  toolsListMsgId: msg.id,
310
317
  injectionFindings,
311
318
  toolPoisoning: toolPoisoningFinding ?? undefined,
@@ -317,6 +324,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
317
324
  curated: { hidden, overridden },
318
325
  toolsListTools: kept,
319
326
  toolsListUpstream: upstream,
327
+ toolsListPinned: pinned,
320
328
  toolsListMsgId: msg.id,
321
329
  injectionFindings,
322
330
  toolPoisoning: toolPoisoningFinding ?? undefined,
@@ -341,7 +349,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
341
349
  * so `remoteBridge.ts` can call it without needing a `McpGovernanceProxy`
342
350
  * instance shaped for the stdio child-process lifecycle it doesn't have.
343
351
  */
344
- export function handleHarnessLine(line, pending, interceptor, forward, session) {
352
+ export function handleHarnessLine(line, pending, interceptor, forward, session, chaos) {
345
353
  const trimmed = line.trim();
346
354
  if (!trimmed)
347
355
  return;
@@ -371,10 +379,14 @@ export function handleHarnessLine(line, pending, interceptor, forward, session)
371
379
  interceptor.decide(toolName, toolInput).then((decision) => {
372
380
  if (decision.action === 'block') {
373
381
  log.warn({ action: 'tool_blocked', toolName, reason: decision.reason }, 'Tool call blocked by governance proxy');
374
- writeFrame(buildBlockResponse(msg.id, decision.reason, blockData(decision)));
382
+ // Recorded before the answer goes out, as on the allowed path: a
383
+ // reader that acts on the answer must find the event already written.
384
+ chaos?.injector.emit({ type: 'tool_call', tool: toolName, ok: false });
385
+ writeFrame(buildBlockResponse(msg.id, decision.reason, blockData(decision), interceptor.opaque));
375
386
  }
376
387
  else if (decision.action === 'hold') {
377
- writeFrame(buildHoldResponse(msg.id, decision.reason, decision.holdId, decision.ruleId));
388
+ chaos?.injector.emit({ type: 'tool_call', tool: toolName, ok: false });
389
+ writeFrame(buildHoldResponse(msg.id, decision.reason, decision.holdId, decision.ruleId, interceptor.opaque));
378
390
  }
379
391
  else {
380
392
  // Allow: the response now needs inspecting on the way back —
@@ -389,6 +401,19 @@ export function handleHarnessLine(line, pending, interceptor, forward, session)
389
401
  // tool_diversity_collapse, or an agent could be penalized for calls
390
402
  // that never ran.
391
403
  session?.recordCall(toolName);
404
+ // Chaos faults stand in for the upstream server, so they are
405
+ // considered only here, after governance allowed the call, and
406
+ // their results go back through the response path like a real one.
407
+ if (chaos && decision.action === 'allow' && msg.id !== null && msg.id !== undefined) {
408
+ const fault = chaos.injector.onAllowedCall(toolName, () => writeFrame({ jsonrpc: '2.0', method: 'notifications/tools/list_changed' }));
409
+ if (fault?.kind === 'respond') {
410
+ chaos.respond(JSON.stringify({ jsonrpc: '2.0', id: msg.id, result: fault.result }));
411
+ return;
412
+ }
413
+ if (fault?.kind === 'append') {
414
+ pending.set(msg.id, { method: 'tools/call', toolName, inject: { payload: fault.payload, call: fault.call } });
415
+ }
416
+ }
392
417
  forward(line);
393
418
  }
394
419
  }).catch((err) => {
@@ -404,6 +429,7 @@ export function handleHarnessLine(line, pending, interceptor, forward, session)
404
429
  }
405
430
  export class McpGovernanceProxy {
406
431
  config;
432
+ chaos;
407
433
  policy;
408
434
  emitter;
409
435
  interceptor;
@@ -438,8 +464,11 @@ export class McpGovernanceProxy {
438
464
  /** Reports this proxy's server to the registry; absent for the standalone `intutic` entry, which fronts none. */
439
465
  registryObserver;
440
466
  realServer = null;
441
- constructor(config) {
467
+ constructor(config,
468
+ /** The loaded chaos plan's injector; null (no plan) leaves every path as it is. */
469
+ chaos = null) {
442
470
  this.config = config;
471
+ this.chaos = chaos;
443
472
  this.policy = new PolicyClient(config.controlPlaneUrl, config.apiKey, config.workspaceId, config.policyTtlMs, config.mcpProxyMode);
444
473
  const identity = callerIdentity(config.apiKey, config.serverName, config.sessionScope);
445
474
  this.emitter = new GovernanceEmitter(config.controlPlaneUrl, config.apiKey, config.eventsFilePath, config.workspaceId, config.mcpProxyMode, identity);
@@ -482,6 +511,17 @@ export class McpGovernanceProxy {
482
511
  getSessionState() {
483
512
  return this.session;
484
513
  }
514
+ /**
515
+ * The chaos hooks for `handleHarnessLine`, bound to this proxy's response
516
+ * path and `pending` map; undefined without a plan. Shared by stdio mode
517
+ * and `remoteBridge.ts` for the same reason `getInterceptor` is.
518
+ */
519
+ chaosHooks(pending) {
520
+ const injector = this.chaos;
521
+ if (!injector)
522
+ return undefined;
523
+ return { injector, respond: (line) => void this.handleServerLine(line, pending) };
524
+ }
485
525
  /**
486
526
  * Start the policy client's background refresh timer. Exposed alongside
487
527
  * `stopPolicy` so `remoteBridge.ts` can drive the same policy lifecycle
@@ -545,25 +585,15 @@ export class McpGovernanceProxy {
545
585
  const workspaceId = this.config.workspaceId;
546
586
  const callControlPlane = (path) => readControlPlane(cpUrl, apiKey, workspaceId, path);
547
587
  // Tool: intutic_governance_status
548
- server.tool('intutic_governance_status', 'Returns the current governance status and health of the Intutic control plane for this workspace.', {}, async () => {
549
- const health = await callControlPlane('/healthz');
550
- const status = health.ok
551
- ? { connected: true, controlPlane: cpUrl, workspaceId, ...health.data }
552
- : {
553
- connected: false,
554
- controlPlane: cpUrl,
555
- workspaceId,
556
- error: health.reason === 'forbidden'
557
- ? 'Control plane rejected this API key'
558
- : 'Control plane unreachable',
559
- };
588
+ server.tool('intutic_governance_status', 'Returns whether the Intutic control plane is reachable and accepts this API key, for this workspace.', {}, async () => {
589
+ const status = await governanceStatus(cpUrl, apiKey, workspaceId);
560
590
  return {
561
591
  content: [{ type: 'text', text: JSON.stringify(status, null, 2) }],
562
592
  };
563
593
  });
564
594
  // Tool: intutic_list_sops
565
- server.tool('intutic_list_sops', 'Lists Standard Operating Procedures (SOPs) active in this workspace.', { limit: z.number().int().min(1).max(50).default(10).describe('Number of SOPs to return (1–50)') }, async ({ limit }) => {
566
- const result = await callControlPlane(`/api/v1/sops?workspaceId=${workspaceId}&limit=${limit}`);
595
+ server.tool('intutic_list_sops', 'Lists the Standard Operating Procedures (SOPs) in force in this workspace: the VALIDATED ones.', { limit: z.number().int().min(1).max(50).default(10).describe('Number of SOPs to return (1–50)') }, async ({ limit }) => {
596
+ const result = await callControlPlane(sopListPath(workspaceId, limit));
567
597
  const text = result.ok
568
598
  ? JSON.stringify(result.data, null, 2)
569
599
  : describeFailure(result, 'list SOPs');
@@ -666,7 +696,15 @@ export class McpGovernanceProxy {
666
696
  // Results are redacted with the workspace's PII detector actions too —
667
697
  // a resources/read answer can arrive before any tools/call set them.
668
698
  setWorkspacePii(this.policy.getPiiDetectors());
669
- const outcome = processServerLine(rawLine, pending, this.policy.getAllowedTools(), this.policy.getToolDescriptionOverrides(), injectionAction, this.policy.getInjectionPatterns(), this.policy.getRegistry()?.disabledTools[this.config.serverName] ?? []);
699
+ // A chaos plan's response-side faults rewrite the upstream line first,
700
+ // so every check below inspects the faulted response.
701
+ let chaosToolCall;
702
+ if (this.chaos) {
703
+ const faulted = this.chaos.faultServerLine(rawLine, pending);
704
+ rawLine = faulted.line;
705
+ chaosToolCall = faulted.toolCall;
706
+ }
707
+ const outcome = processServerLine(rawLine, pending, this.policy.getAllowedTools(), this.policy.getToolDescriptionOverrides(), injectionAction, this.policy.getInjectionPatterns(), this.policy.getRegistry()?.disabledTools[this.config.serverName] ?? [], this.policy.isOpaque());
670
708
  if (outcome.injectionFindings) {
671
709
  for (const finding of outcome.injectionFindings) {
672
710
  const severity = injectionSeverity(finding.patterns, finding.source);
@@ -696,6 +734,8 @@ export class McpGovernanceProxy {
696
734
  }
697
735
  }
698
736
  }
737
+ if (chaosToolCall !== undefined)
738
+ this.chaos?.recordToolCall(chaosToolCall, outcome.line);
699
739
  if (outcome.redactedTool) {
700
740
  log.warn({
701
741
  action: 'result_redacted',
@@ -742,7 +782,9 @@ export class McpGovernanceProxy {
742
782
  const serverName = this.config.serverName;
743
783
  let tofu;
744
784
  try {
745
- tofu = await checkTofu(this.config.workspaceId, serverName, outcome.toolsListTools);
785
+ // Pinned over the server's own definitions; the curated list is read
786
+ // only to migrate a pin taken over it by an earlier version.
787
+ tofu = await checkTofu(this.config.workspaceId, serverName, outcome.toolsListPinned ?? outcome.toolsListTools, outcome.toolsListTools);
746
788
  }
747
789
  catch (err) {
748
790
  // Pin storage I/O failed (disk full, permissions, ~/.intutic
@@ -753,7 +795,7 @@ export class McpGovernanceProxy {
753
795
  if (!this.interceptor.failOpen) {
754
796
  writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, `TOFU pin check for MCP server "${serverName}" failed (could not read/write ` +
755
797
  `~/.intutic/mcp-pins/). Blocked by workspace policy (fail-closed mode). ` +
756
- `Contact your administrator or update mcpProxyFailBehavior to open.`, { code: 'TOFU_UNAVAILABLE', ruleId: 'mcpProxyFailBehavior' }));
798
+ `Contact your administrator or update mcpProxyFailBehavior to open.`, { code: 'TOFU_UNAVAILABLE', ruleId: 'mcpProxyFailBehavior' }, this.interceptor.opaque));
757
799
  return;
758
800
  }
759
801
  process.stdout.write(outcome.line + '\n');
@@ -764,7 +806,7 @@ export class McpGovernanceProxy {
764
806
  // the mismatch even in fail-open mode, where `action.block` is false.
765
807
  // 'skipped' (no tools declared) deliberately leaves the session's
766
808
  // cached flag untouched; see SessionState.setToolContractChanged's doc.
767
- if (tofu.status === 'first_contact' || tofu.status === 'match') {
809
+ if (tofu.status === 'first_contact' || tofu.status === 'match' || tofu.status === 'repinned') {
768
810
  this.session.setToolContractChanged(false);
769
811
  }
770
812
  else if (tofu.status === 'mismatch') {
@@ -773,6 +815,27 @@ export class McpGovernanceProxy {
773
815
  if (tofu.status === 'first_contact') {
774
816
  log.info({ action: 'tofu_first_contact', serverName, fingerprint: tofu.fingerprint }, 'MCP server tool definitions pinned on first contact');
775
817
  }
818
+ else if (tofu.status === 'repinned') {
819
+ const fields = {
820
+ action: 'tofu_repinned',
821
+ serverName,
822
+ previousFingerprint: tofu.previousFingerprint,
823
+ fingerprint: tofu.fingerprint,
824
+ verified: tofu.verified,
825
+ };
826
+ if (tofu.verified) {
827
+ log.info(fields, 'MCP server pin moved to the upstream definitions; the old pin still matched');
828
+ }
829
+ else {
830
+ log.warn(fields, 'MCP server pin moved to the upstream definitions; the old pin, taken over the curated list, no longer ' +
831
+ 'matched it, and cannot tell a curation change from a server change');
832
+ }
833
+ // Visible, never blocking: a LOW finding with both fingerprints when
834
+ // the old pin did not match; nothing when it did.
835
+ const report = tofuReport(tofu, serverName, false);
836
+ if (report)
837
+ this.emitter.emit('mcp_server_definition_changed', serverName, undefined, report.reason, report.finding);
838
+ }
776
839
  else if (tofu.status === 'mismatch') {
777
840
  const action = decideTofuAction(tofu, serverName, this.interceptor.failOpen);
778
841
  const reason = action.reason ?? 'MCP server tool definitions changed since first pinned.';
@@ -783,9 +846,10 @@ export class McpGovernanceProxy {
783
846
  fingerprint: tofu.fingerprint,
784
847
  blocked: action.block,
785
848
  }, reason);
786
- this.emitter.emit('mcp_server_definition_changed', serverName, undefined, reason);
849
+ const report = tofuReport(tofu, serverName, action.block, reason);
850
+ this.emitter.emit('mcp_server_definition_changed', serverName, undefined, reason, report?.finding);
787
851
  if (action.block) {
788
- writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, reason, { code: 'TOOL_DEFINITIONS_CHANGED', ruleId: `tofu.${serverName}` }));
852
+ writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, reason, { code: 'TOOL_DEFINITIONS_CHANGED', ruleId: `tofu.${serverName}` }, this.interceptor.opaque));
789
853
  return;
790
854
  }
791
855
  }
@@ -840,10 +904,11 @@ export class McpGovernanceProxy {
840
904
  // remoteBridge.ts's remote bridge mode — only `forward` differs: here it
841
905
  // writes to the spawned child process's stdin.
842
906
  const rl = node_readline.createInterface({ input: process.stdin, terminal: false });
907
+ const chaosHooks = this.chaosHooks(pending);
843
908
  rl.on('line', (line) => {
844
909
  handleHarnessLine(line, pending, this.interceptor, (l) => {
845
910
  realServer.stdin.write(l + '\n');
846
- }, this.session);
911
+ }, this.session, chaosHooks);
847
912
  });
848
913
  rl.on('close', () => {
849
914
  log.info({ action: 'stdin_closed' }, 'Harness stdin closed — shutting down');