mcp-recon 0.2.2

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 (95) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +271 -0
  3. package/dist/bin/recon.d.ts +18 -0
  4. package/dist/bin/recon.d.ts.map +1 -0
  5. package/dist/bin/recon.js +361 -0
  6. package/dist/bin/recon.js.map +1 -0
  7. package/dist/caveats/index.d.ts +46 -0
  8. package/dist/caveats/index.d.ts.map +1 -0
  9. package/dist/caveats/index.js +186 -0
  10. package/dist/caveats/index.js.map +1 -0
  11. package/dist/caveats/render.d.ts +25 -0
  12. package/dist/caveats/render.d.ts.map +1 -0
  13. package/dist/caveats/render.js +100 -0
  14. package/dist/caveats/render.js.map +1 -0
  15. package/dist/caveats/types.d.ts +94 -0
  16. package/dist/caveats/types.d.ts.map +1 -0
  17. package/dist/caveats/types.js +17 -0
  18. package/dist/caveats/types.js.map +1 -0
  19. package/dist/classify/caveat.d.ts +29 -0
  20. package/dist/classify/caveat.d.ts.map +1 -0
  21. package/dist/classify/caveat.js +103 -0
  22. package/dist/classify/caveat.js.map +1 -0
  23. package/dist/classify/index.d.ts +21 -0
  24. package/dist/classify/index.d.ts.map +1 -0
  25. package/dist/classify/index.js +186 -0
  26. package/dist/classify/index.js.map +1 -0
  27. package/dist/classify/rules.d.ts +62 -0
  28. package/dist/classify/rules.d.ts.map +1 -0
  29. package/dist/classify/rules.js +219 -0
  30. package/dist/classify/rules.js.map +1 -0
  31. package/dist/classify/types.d.ts +45 -0
  32. package/dist/classify/types.d.ts.map +1 -0
  33. package/dist/classify/types.js +9 -0
  34. package/dist/classify/types.js.map +1 -0
  35. package/dist/enumerate.d.ts +79 -0
  36. package/dist/enumerate.d.ts.map +1 -0
  37. package/dist/enumerate.js +62 -0
  38. package/dist/enumerate.js.map +1 -0
  39. package/dist/fuzz/axes/boundary.d.ts +17 -0
  40. package/dist/fuzz/axes/boundary.d.ts.map +1 -0
  41. package/dist/fuzz/axes/boundary.js +143 -0
  42. package/dist/fuzz/axes/boundary.js.map +1 -0
  43. package/dist/fuzz/axes/encoding.d.ts +17 -0
  44. package/dist/fuzz/axes/encoding.d.ts.map +1 -0
  45. package/dist/fuzz/axes/encoding.js +59 -0
  46. package/dist/fuzz/axes/encoding.js.map +1 -0
  47. package/dist/fuzz/axes/path-traversal.d.ts +17 -0
  48. package/dist/fuzz/axes/path-traversal.d.ts.map +1 -0
  49. package/dist/fuzz/axes/path-traversal.js +56 -0
  50. package/dist/fuzz/axes/path-traversal.js.map +1 -0
  51. package/dist/fuzz/axes/schema-violation.d.ts +18 -0
  52. package/dist/fuzz/axes/schema-violation.d.ts.map +1 -0
  53. package/dist/fuzz/axes/schema-violation.js +74 -0
  54. package/dist/fuzz/axes/schema-violation.js.map +1 -0
  55. package/dist/fuzz/axes/type-confusion.d.ts +17 -0
  56. package/dist/fuzz/axes/type-confusion.d.ts.map +1 -0
  57. package/dist/fuzz/axes/type-confusion.js +67 -0
  58. package/dist/fuzz/axes/type-confusion.js.map +1 -0
  59. package/dist/fuzz/axes/url-hostility.d.ts +17 -0
  60. package/dist/fuzz/axes/url-hostility.d.ts.map +1 -0
  61. package/dist/fuzz/axes/url-hostility.js +61 -0
  62. package/dist/fuzz/axes/url-hostility.js.map +1 -0
  63. package/dist/fuzz/index.d.ts +41 -0
  64. package/dist/fuzz/index.d.ts.map +1 -0
  65. package/dist/fuzz/index.js +147 -0
  66. package/dist/fuzz/index.js.map +1 -0
  67. package/dist/fuzz/prng.d.ts +26 -0
  68. package/dist/fuzz/prng.d.ts.map +1 -0
  69. package/dist/fuzz/prng.js +52 -0
  70. package/dist/fuzz/prng.js.map +1 -0
  71. package/dist/fuzz/schema.d.ts +46 -0
  72. package/dist/fuzz/schema.d.ts.map +1 -0
  73. package/dist/fuzz/schema.js +84 -0
  74. package/dist/fuzz/schema.js.map +1 -0
  75. package/dist/fuzz/types.d.ts +53 -0
  76. package/dist/fuzz/types.d.ts.map +1 -0
  77. package/dist/fuzz/types.js +11 -0
  78. package/dist/fuzz/types.js.map +1 -0
  79. package/dist/index.d.ts +25 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +25 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/report/index.d.ts +25 -0
  84. package/dist/report/index.d.ts.map +1 -0
  85. package/dist/report/index.js +133 -0
  86. package/dist/report/index.js.map +1 -0
  87. package/dist/scan/index.d.ts +52 -0
  88. package/dist/scan/index.d.ts.map +1 -0
  89. package/dist/scan/index.js +81 -0
  90. package/dist/scan/index.js.map +1 -0
  91. package/dist/transport.d.ts +43 -0
  92. package/dist/transport.d.ts.map +1 -0
  93. package/dist/transport.js +74 -0
  94. package/dist/transport.js.map +1 -0
  95. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon.js","sourceRoot":"","sources":["../../src/bin/recon.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,IAAI,EACJ,UAAU,EACV,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,IAAI,GACL,MAAM,aAAa,CAAC;AAOrB,SAAS,KAAK;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,uDAAuD;QACvD,EAAE;QACF,QAAQ;QACR,qCAAqC;QACrC,wDAAwD;QACxD,4DAA4D;QAC5D,gFAAgF;QAChF,6GAA6G;QAC7G,oEAAoE;QACpE,sFAAsF;QACtF,EAAE;QACF,oBAAoB;QACpB,iEAAiE;QACjE,+DAA+D;QAC/D,EAAE;QACF,WAAW;QACX,iFAAiF;QACjF,wFAAwF;QACxF,2DAA2D;QAC3D,mEAAmE;QACnE,6HAA6H;QAC7H,sIAAsI;QACtI,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,KAAK,EAAE,CAAC;IACV,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,GAAG,MAAM,CAAC,CAAC;YAC/D,KAAK,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,OAAO,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,SAAS,CAAC,KAAK,CAAC,MAAM,eAAe,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,gBAAgB,IAAI,CAC5G,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc;IACnC,4EAA4E;IAC5E,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAwB,CAAC;IAC7B,IAAI,IAAwB,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACjE,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC/D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,OAAO,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,SAAS,CAAC,KAAK,CAAC,MAAM,kBAAkB,MAAM,IAAI,GAAG,UAAU,IAAI,IAAI,SAAS,QAAQ,CAC/G,CAAC;QACF,MAAM,IAAI,GAA+B,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/C,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,UAAU,eAAe,OAAO,mBAAmB,UAAU,kBAAkB,YAAY,IAAI,CAC9G,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAc;IACjC,IAAI,aAAiC,CAAC;IACtC,IAAI,QAA4B,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,aAAa,GAAG,GAAG,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,GAAG,IAAI,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAgB,aAAa,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAc,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,MAAM,CAAC,eAAe,CAAC,MAAM,yBAAyB,MAAM,CAAC,aAAa,KAAK,CACzG,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,aAAiC,CAAC;IACtC,IAAI,kBAAsC,CAAC;IAC3C,IAAI,QAA4B,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,aAAa,GAAG,GAAG,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,kBAAkB,GAAG,GAAG,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,GAAG,IAAI,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,IAAI,CAAC,aAAa,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF,CACvF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAgB,aAAa,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,QAAQ,CAAwB,kBAAkB,CAAC,CAAC;IAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oDAAoD,cAAc,CAAC,MAAM,gBAAgB,qBAAqB,KAAK,CACpH,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAc,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CACzF,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAI,QAAgB;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,IAAI,kBAAsC,CAAC;IAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7C,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBACvF,OAAO,CAAC,CAAC;YACX,CAAC;YACD,oEAAoE;YACpE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,kBAAkB,GAAG,GAAG,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,GAAG,IAAI,CAAC,CAAC;YACxE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAwB,kBAAkB,CAAC,CAAC;IAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,cAAc,CAAC,MAAM,gBAAgB,qBAAqB,KAAK,CACrH,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,MAAM,CAAC,OAAO,CAAC,OAAO,sBAAsB,cAAc,IAAI,CAC3I,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc;IACnC,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAA0B,CAAC;IAC/B,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAwB,CAAC;IAC7B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACjE,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC/D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBACpF,OAAO,CAAC,CAAC;YACX,CAAC;YACD,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,WAAW,GACf,QAAQ,CAAC,MAAM,KAAK,SAAS;QAC7B,QAAQ,CAAC,cAAc,KAAK,SAAS;QACrC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC;IAEhC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,OAAO,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAA+B;YACvC,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CACnC,CAAC,MAAM,CAAC;QAET,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,WAAW,QAAQ,+BAA+B,CAC9F,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,OAAO,mBAAmB,UAAU,kBAAkB,YAAY,IAAI,CAC/F,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,aAAa,iBAAiB,MAAM,KAAK,CAAC,CAAC;QACpF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * `caveats` — turn a classification into a v0.1 caveats document.
3
+ *
4
+ * Each tool's `recommended_caveat` from the classifier is an
5
+ * AND-joined natural-language predicate string with placeholder
6
+ * tokens (`<your-caller-id>`, `<your-sandbox-prefix>`,
7
+ * `<your-cap-expiry>`). This module:
8
+ *
9
+ * 1. Splits each recommended_caveat on `AND` into individual
10
+ * capnagent DSL predicates (one per `Issuer.caveat(...)` call).
11
+ * 2. Strips trailing `// comment` and preserves it on the plan.
12
+ * 3. Substitutes operator-supplied bindings into the placeholders.
13
+ * Missing bindings leave placeholders literal AND flag the plan.
14
+ * 4. Computes a `flagged` decision per plan with structured reasons.
15
+ * 5. Appends per-tool overrides if supplied.
16
+ *
17
+ * The output JSON is the **importable artifact** that bridges
18
+ * mcp-recon → capnagent without requiring operators to copy-paste
19
+ * caveat strings by hand. capnagent's issuer can iterate over each
20
+ * plan's `caveats[]` array directly:
21
+ *
22
+ * for (const c of plan.caveats) builder = builder.caveat(c);
23
+ *
24
+ * Methodology notes:
25
+ *
26
+ * - Flag rules are deliberately narrow. Over-flagging trains
27
+ * operators to ignore flags. The four reasons in `FlagReason`
28
+ * cover the structural gaps that reliably indicate a config
29
+ * error; everything softer is left to operator review.
30
+ * - Bindings are optional by design. Running `caveats` with no
31
+ * bindings produces a "review pass" — every plan is flagged,
32
+ * but the operator can scan the output and see exactly which
33
+ * tools need which bindings before committing values.
34
+ */
35
+ import type { ClassificationResults } from "../classify/types.js";
36
+ import { type CaveatBindings, type CaveatsResults } from "./types.js";
37
+ /**
38
+ * Build a v0.1 caveats document from a classification.
39
+ *
40
+ * @param classification - the document emitted by `mcp-recon classify`
41
+ * @param bindings - operator-supplied placeholder values + per-tool overrides
42
+ */
43
+ export declare function planCaveats(classification: ClassificationResults, bindings: CaveatBindings): CaveatsResults;
44
+ export { CAVEATS_SCHEMA } from "./types.js";
45
+ export type { CaveatBindings, CaveatPlan, CaveatsResults, FlagReason, } from "./types.js";
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/caveats/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAepB;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,cAAc,EAAE,qBAAqB,EACrC,QAAQ,EAAE,cAAc,GACvB,cAAc,CAkBhB;AAuID,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * `caveats` — turn a classification into a v0.1 caveats document.
3
+ *
4
+ * Each tool's `recommended_caveat` from the classifier is an
5
+ * AND-joined natural-language predicate string with placeholder
6
+ * tokens (`<your-caller-id>`, `<your-sandbox-prefix>`,
7
+ * `<your-cap-expiry>`). This module:
8
+ *
9
+ * 1. Splits each recommended_caveat on `AND` into individual
10
+ * capnagent DSL predicates (one per `Issuer.caveat(...)` call).
11
+ * 2. Strips trailing `// comment` and preserves it on the plan.
12
+ * 3. Substitutes operator-supplied bindings into the placeholders.
13
+ * Missing bindings leave placeholders literal AND flag the plan.
14
+ * 4. Computes a `flagged` decision per plan with structured reasons.
15
+ * 5. Appends per-tool overrides if supplied.
16
+ *
17
+ * The output JSON is the **importable artifact** that bridges
18
+ * mcp-recon → capnagent without requiring operators to copy-paste
19
+ * caveat strings by hand. capnagent's issuer can iterate over each
20
+ * plan's `caveats[]` array directly:
21
+ *
22
+ * for (const c of plan.caveats) builder = builder.caveat(c);
23
+ *
24
+ * Methodology notes:
25
+ *
26
+ * - Flag rules are deliberately narrow. Over-flagging trains
27
+ * operators to ignore flags. The four reasons in `FlagReason`
28
+ * cover the structural gaps that reliably indicate a config
29
+ * error; everything softer is left to operator review.
30
+ * - Bindings are optional by design. Running `caveats` with no
31
+ * bindings produces a "review pass" — every plan is flagged,
32
+ * but the operator can scan the output and see exactly which
33
+ * tools need which bindings before committing values.
34
+ */
35
+ import { CAVEATS_SCHEMA, } from "./types.js";
36
+ /** Confidence threshold below which classifications are flagged. */
37
+ const LOW_CONFIDENCE_THRESHOLD = 0.5;
38
+ const COMMENT_SPLIT = /\s*\/\/\s*/;
39
+ const PLACEHOLDER_REMAINING = /<your-[a-z-]+>/i;
40
+ const ARG_CONSTRAINT = /\barg\./i;
41
+ const PLACEHOLDER_PATTERNS = {
42
+ caller: /<your-caller-id>/g,
43
+ sandbox: /<your-sandbox-prefix>/g,
44
+ expiry: /<your-cap-expiry>/g,
45
+ };
46
+ /**
47
+ * Build a v0.1 caveats document from a classification.
48
+ *
49
+ * @param classification - the document emitted by `mcp-recon classify`
50
+ * @param bindings - operator-supplied placeholder values + per-tool overrides
51
+ */
52
+ export function planCaveats(classification, bindings) {
53
+ const plans = classification.classifications.map((entry) => planOne(entry, bindings));
54
+ const ready = plans.filter((p) => !p.flagged).length;
55
+ const flagged = plans.length - ready;
56
+ return {
57
+ schema: CAVEATS_SCHEMA,
58
+ scanned_at: new Date().toISOString(),
59
+ server: classification.server,
60
+ bindings,
61
+ plans,
62
+ summary: {
63
+ total: plans.length,
64
+ ready,
65
+ flagged,
66
+ },
67
+ };
68
+ }
69
+ function planOne(entry, bindings) {
70
+ const { caveats: rawCaveats, comment } = parseRecommendedCaveat(entry.recommended_caveat);
71
+ const substituted = rawCaveats.map((c) => substitute(c, bindings));
72
+ const overrides = bindings.per_tool_overrides?.[entry.tool] ?? [];
73
+ const all_caveats = [...substituted, ...overrides];
74
+ const flag_reasons = [];
75
+ if (entry.data_class === "unknown") {
76
+ flag_reasons.push("classification_unknown");
77
+ }
78
+ if (entry.confidence < LOW_CONFIDENCE_THRESHOLD) {
79
+ flag_reasons.push("low_confidence");
80
+ }
81
+ if (entry.confused_deputy_candidate && !hasArgConstraint(all_caveats)) {
82
+ flag_reasons.push("cdc_without_arg_constraint");
83
+ }
84
+ if (all_caveats.some((c) => PLACEHOLDER_REMAINING.test(c))) {
85
+ flag_reasons.push("unsubstituted_placeholder");
86
+ }
87
+ const purpose = purposeFromEntry(entry);
88
+ return {
89
+ tool: entry.tool,
90
+ data_class: entry.data_class,
91
+ authority_level: entry.authority_level,
92
+ confused_deputy_candidate: entry.confused_deputy_candidate,
93
+ purpose,
94
+ caveats: all_caveats,
95
+ flagged: flag_reasons.length > 0,
96
+ flag_reasons,
97
+ ...(comment !== undefined ? { comment } : {}),
98
+ };
99
+ }
100
+ function parseRecommendedCaveat(raw) {
101
+ const parts = raw.split(COMMENT_SPLIT);
102
+ const predicates_raw = parts[0] ?? "";
103
+ const comment = parts[1]?.trim();
104
+ const caveats = splitOnUnquotedAnd(predicates_raw)
105
+ .map((s) => s.trim())
106
+ .filter((s) => s.length > 0);
107
+ return comment ? { caveats, comment } : { caveats };
108
+ }
109
+ /**
110
+ * Split on ` AND ` only when not inside a double-quoted string literal.
111
+ *
112
+ * The naive `string.split(/\s+AND\s+/i)` mis-splits when a tool name
113
+ * (or other string-literal value) contains the word `AND` — e.g.
114
+ *
115
+ * tool == "foo AND bar" AND caller == "x"
116
+ *
117
+ * would split into three fragments and break the tool predicate.
118
+ * Tool names propagate from the upstream MCP server, so a malicious
119
+ * server can synthesise this. This walker tracks an `inQuotes` flag
120
+ * and only treats ` AND ` as a separator when outside quotes.
121
+ *
122
+ * Pinned by `caveats.adversarial.test.ts` — cases 1 and 2.
123
+ */
124
+ function splitOnUnquotedAnd(input) {
125
+ const out = [];
126
+ let buf = "";
127
+ let inQuotes = false;
128
+ let i = 0;
129
+ while (i < input.length) {
130
+ const ch = input[i];
131
+ if (ch === '"') {
132
+ inQuotes = !inQuotes;
133
+ buf += ch;
134
+ i++;
135
+ continue;
136
+ }
137
+ if (!inQuotes &&
138
+ /\s/.test(ch ?? "") &&
139
+ input.slice(i).match(/^\s+AND\s+/i)) {
140
+ const m = input.slice(i).match(/^\s+AND\s+/i);
141
+ out.push(buf);
142
+ buf = "";
143
+ i += m[0].length;
144
+ continue;
145
+ }
146
+ buf += ch;
147
+ i++;
148
+ }
149
+ out.push(buf);
150
+ return out;
151
+ }
152
+ /**
153
+ * Substitute placeholders. Important: mcp-recon's recommended_caveat
154
+ * already wraps placeholder tokens in surrounding quotes where they
155
+ * need to be string-literal-shaped:
156
+ *
157
+ * caller == "<your-caller-id>"
158
+ * arg.path starts_with "<your-sandbox-prefix>/"
159
+ * now <= @<your-cap-expiry>
160
+ *
161
+ * So we substitute the RAW value; the surrounding quotes from the
162
+ * source preserve the string-literal shape. Adding JSON.stringify()
163
+ * here would double-quote the result.
164
+ */
165
+ function substitute(caveat, bindings) {
166
+ let out = caveat;
167
+ if (bindings.caller !== undefined) {
168
+ out = out.replaceAll(PLACEHOLDER_PATTERNS.caller, bindings.caller);
169
+ }
170
+ if (bindings.sandbox_prefix !== undefined) {
171
+ out = out.replaceAll(PLACEHOLDER_PATTERNS.sandbox, bindings.sandbox_prefix);
172
+ }
173
+ if (bindings.expiry !== undefined) {
174
+ out = out.replaceAll(PLACEHOLDER_PATTERNS.expiry, bindings.expiry);
175
+ }
176
+ return out;
177
+ }
178
+ function hasArgConstraint(caveats) {
179
+ return caveats.some((c) => ARG_CONSTRAINT.test(c));
180
+ }
181
+ function purposeFromEntry(entry) {
182
+ const tag = entry.confused_deputy_candidate ? "cdc" : entry.authority_level;
183
+ return `${entry.data_class}.${tag}.${entry.tool}`;
184
+ }
185
+ export { CAVEATS_SCHEMA } from "./types.js";
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/caveats/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Markdown renderer for the v0.1 caveats document.
3
+ *
4
+ * Where `report.renderMarkdown` turns an inventory + classification
5
+ * into a security-reviewer threat profile, this module turns a
6
+ * caveats document into an **operator-facing issuance plan**:
7
+ *
8
+ * 1. Heading + generated-at + server identity
9
+ * 2. Bindings block — caller / sandbox prefix / expiry, with an
10
+ * explicit `<unbound>` marker for any binding the operator
11
+ * didn't supply (so the review pass is loud about gaps).
12
+ * 3. Summary stats (total / ready / flagged)
13
+ * 4. ⚠ Flagged plans — each with classification, flag-reason
14
+ * bullets, the caveats in a fenced code block, and the
15
+ * preserved `// comment` if present.
16
+ * 5. Plans ready to issue — same shape minus flag reasons.
17
+ *
18
+ * Sections without entries are omitted entirely so a 100%-ready run
19
+ * doesn't print an empty "Flagged" heading and a 100%-flagged dry
20
+ * run doesn't print an empty "Ready" heading.
21
+ */
22
+ import type { CaveatsResults } from "./types.js";
23
+ /** Render a Markdown issuance plan. Pure function — no I/O. */
24
+ export declare function renderCaveatsMarkdown(results: CaveatsResults): string;
25
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/caveats/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAmDrE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Markdown renderer for the v0.1 caveats document.
3
+ *
4
+ * Where `report.renderMarkdown` turns an inventory + classification
5
+ * into a security-reviewer threat profile, this module turns a
6
+ * caveats document into an **operator-facing issuance plan**:
7
+ *
8
+ * 1. Heading + generated-at + server identity
9
+ * 2. Bindings block — caller / sandbox prefix / expiry, with an
10
+ * explicit `<unbound>` marker for any binding the operator
11
+ * didn't supply (so the review pass is loud about gaps).
12
+ * 3. Summary stats (total / ready / flagged)
13
+ * 4. ⚠ Flagged plans — each with classification, flag-reason
14
+ * bullets, the caveats in a fenced code block, and the
15
+ * preserved `// comment` if present.
16
+ * 5. Plans ready to issue — same shape minus flag reasons.
17
+ *
18
+ * Sections without entries are omitted entirely so a 100%-ready run
19
+ * doesn't print an empty "Flagged" heading and a 100%-flagged dry
20
+ * run doesn't print an empty "Ready" heading.
21
+ */
22
+ /** Render a Markdown issuance plan. Pure function — no I/O. */
23
+ export function renderCaveatsMarkdown(results) {
24
+ const out = [];
25
+ const serverLabel = `${results.server.name ?? "(unnamed server)"} v${results.server.version ?? "?"}`;
26
+ out.push("# capnagent issuance plan");
27
+ out.push("");
28
+ out.push(`> Generated by [mcp-recon](https://github.com/euanmcrosson-dotcom/mcp-recon) at ${results.scanned_at}.`);
29
+ out.push(`> Source server: **${serverLabel}**`);
30
+ out.push("");
31
+ // Bindings block — shows operator inputs verbatim, with explicit
32
+ // `<unbound>` for any missing field (matching the JSON document's
33
+ // "review pass" semantics).
34
+ out.push("## Bindings");
35
+ out.push("");
36
+ out.push(`- **caller:** ${formatBinding(results.bindings.caller)}`);
37
+ out.push(`- **sandbox_prefix:** ${formatBinding(results.bindings.sandbox_prefix)}`);
38
+ out.push(`- **expiry:** ${formatBinding(results.bindings.expiry)}`);
39
+ out.push("");
40
+ // Summary
41
+ out.push("## Summary");
42
+ out.push("");
43
+ out.push(`- **Total plans:** ${results.summary.total}`);
44
+ out.push(`- **Ready to issue:** ${results.summary.ready}`);
45
+ out.push(`- **Flagged for review:** ${results.summary.flagged}`);
46
+ out.push("");
47
+ const flaggedPlans = results.plans.filter((p) => p.flagged);
48
+ const readyPlans = results.plans.filter((p) => !p.flagged);
49
+ if (flaggedPlans.length > 0) {
50
+ out.push("## ⚠ Flagged plans (review before issuing)");
51
+ out.push("");
52
+ for (const plan of flaggedPlans) {
53
+ out.push(...renderPlan(plan, /* showFlagReasons */ true));
54
+ out.push("");
55
+ }
56
+ }
57
+ if (readyPlans.length > 0) {
58
+ out.push("## Plans ready to issue");
59
+ out.push("");
60
+ for (const plan of readyPlans) {
61
+ out.push(...renderPlan(plan, /* showFlagReasons */ false));
62
+ out.push("");
63
+ }
64
+ }
65
+ return out.join("\n");
66
+ }
67
+ function renderPlan(plan, showFlagReasons) {
68
+ const out = [];
69
+ const cdc = plan.confused_deputy_candidate ? " · ⚠️ confused-deputy candidate" : "";
70
+ out.push(`### ${plan.tool}`);
71
+ out.push("");
72
+ out.push(`**Class:** \`${plan.data_class}\` · **Authority:** \`${plan.authority_level}\`${cdc}`);
73
+ out.push("");
74
+ out.push(`**Purpose:** \`${plan.purpose}\``);
75
+ if (showFlagReasons && plan.flag_reasons.length > 0) {
76
+ out.push("");
77
+ out.push(`**Flag reasons:**`);
78
+ out.push("");
79
+ for (const reason of plan.flag_reasons) {
80
+ out.push(`- \`${reason}\``);
81
+ }
82
+ }
83
+ out.push("");
84
+ out.push(`**Caveats:**`);
85
+ out.push("");
86
+ out.push("```");
87
+ for (const c of plan.caveats) {
88
+ out.push(c);
89
+ }
90
+ out.push("```");
91
+ if (plan.comment !== undefined) {
92
+ out.push("");
93
+ out.push(`**Comment:** ${plan.comment}`);
94
+ }
95
+ return out;
96
+ }
97
+ function formatBinding(value) {
98
+ return value === undefined ? "`<unbound>`" : `\`${value}\``;
99
+ }
100
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/caveats/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Wire-format types for the v0.1 caveats document.
3
+ *
4
+ * Schema tag: `mcp-recon/v0.1/caveats`. The caveats document is the
5
+ * **importable artifact** that closes the bridge to capnagent: a
6
+ * structured JSON document of capnagent-ready caveat plans, with
7
+ * placeholder substitution applied (or flagged for review when
8
+ * substitutions are missing).
9
+ *
10
+ * This is downstream of `mcp-recon/v0.1/classification` — every plan
11
+ * traces back to one classification entry. The `recommended_caveat`
12
+ * string in classifications is human-readable; the plans here are
13
+ * machine-readable and feed into a capnagent issuer directly.
14
+ */
15
+ import type { AuthorityLevel, DataClass } from "../classify/types.js";
16
+ /** Schema-version tag for caveats documents. */
17
+ export declare const CAVEATS_SCHEMA: "mcp-recon/v0.1/caveats";
18
+ /**
19
+ * Operator-supplied bindings for placeholder tokens in the
20
+ * classifier's `recommended_caveat` strings. Any binding may be
21
+ * omitted; omitted bindings leave their placeholders unsubstituted
22
+ * AND flag the plan for review. This lets operators run
23
+ * `mcp-recon caveats classification.json` without bindings to see
24
+ * exactly what they need to bind before issuance.
25
+ */
26
+ export interface CaveatBindings {
27
+ /** Substitutes `<your-caller-id>`. */
28
+ caller?: string;
29
+ /** Substitutes `<your-sandbox-prefix>`. */
30
+ sandbox_prefix?: string;
31
+ /** Substitutes `<your-cap-expiry>`. ISO-8601 string. */
32
+ expiry?: string;
33
+ /**
34
+ * Optional per-tool caveat overrides. Each entry's caveats are
35
+ * appended after the substituted ones — useful for tightening
36
+ * confused-deputy candidates the classifier didn't constrain.
37
+ */
38
+ per_tool_overrides?: Record<string, string[]>;
39
+ }
40
+ /** Why a plan was flagged (zero or more reasons). */
41
+ export type FlagReason =
42
+ /** Classifier returned `unknown` for this tool — operator must classify by hand. */
43
+ "classification_unknown"
44
+ /** Classifier confidence < 0.5 — review before trusting. */
45
+ | "low_confidence"
46
+ /** Tool is a confused-deputy candidate but no `arg.*` constraint after substitution. */
47
+ | "cdc_without_arg_constraint"
48
+ /** A `<your-...>` placeholder remains in at least one caveat. */
49
+ | "unsubstituted_placeholder";
50
+ /** One issuance plan per classified tool. */
51
+ export interface CaveatPlan {
52
+ /** Tool name from the classification. */
53
+ tool: string;
54
+ /** Pass-through from classification. */
55
+ data_class: DataClass;
56
+ /** Pass-through from classification. */
57
+ authority_level: AuthorityLevel;
58
+ /** Pass-through from classification. */
59
+ confused_deputy_candidate: boolean;
60
+ /** Operator-readable purpose string for the issuer. */
61
+ purpose: string;
62
+ /** Caveats to apply to the issuer, one DSL predicate per array entry. */
63
+ caveats: string[];
64
+ /** True if the plan needs review before issuance. */
65
+ flagged: boolean;
66
+ /** Specific flag reasons, when flagged. */
67
+ flag_reasons: FlagReason[];
68
+ /**
69
+ * Free-form trailing comment from the classifier's
70
+ * `recommended_caveat` (e.g. "READ filesystem; bound the sandbox
71
+ * prefix tightly"). Preserved for operator review.
72
+ */
73
+ comment?: string;
74
+ }
75
+ /** Top-level caveats document. */
76
+ export interface CaveatsResults {
77
+ schema: typeof CAVEATS_SCHEMA;
78
+ scanned_at: string;
79
+ server: {
80
+ name?: string;
81
+ version?: string;
82
+ };
83
+ bindings: CaveatBindings;
84
+ plans: CaveatPlan[];
85
+ summary: {
86
+ /** Total plans (one per classified tool). */
87
+ total: number;
88
+ /** Plans with `flagged === false` — directly issuable. */
89
+ ready: number;
90
+ /** Plans with `flagged === true` — review required. */
91
+ flagged: number;
92
+ };
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/caveats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtE,gDAAgD;AAChD,eAAO,MAAM,cAAc,EAAG,wBAAiC,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/C;AAED,qDAAqD;AACrD,MAAM,MAAM,UAAU;AACpB,oFAAoF;AAClF,wBAAwB;AAC1B,4DAA4D;GAC1D,gBAAgB;AAClB,wFAAwF;GACtF,4BAA4B;AAC9B,iEAAiE;GAC/D,2BAA2B,CAAC;AAEhC,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,SAAS,CAAC;IACtB,wCAAwC;IACxC,eAAe,EAAE,cAAc,CAAC;IAChC,wCAAwC;IACxC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,cAAc,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE;QACP,6CAA6C;QAC7C,KAAK,EAAE,MAAM,CAAC;QACd,0DAA0D;QAC1D,KAAK,EAAE,MAAM,CAAC;QACd,uDAAuD;QACvD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wire-format types for the v0.1 caveats document.
3
+ *
4
+ * Schema tag: `mcp-recon/v0.1/caveats`. The caveats document is the
5
+ * **importable artifact** that closes the bridge to capnagent: a
6
+ * structured JSON document of capnagent-ready caveat plans, with
7
+ * placeholder substitution applied (or flagged for review when
8
+ * substitutions are missing).
9
+ *
10
+ * This is downstream of `mcp-recon/v0.1/classification` — every plan
11
+ * traces back to one classification entry. The `recommended_caveat`
12
+ * string in classifications is human-readable; the plans here are
13
+ * machine-readable and feed into a capnagent issuer directly.
14
+ */
15
+ /** Schema-version tag for caveats documents. */
16
+ export const CAVEATS_SCHEMA = "mcp-recon/v0.1/caveats";
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/caveats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,gDAAgD;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAiC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Caveat synthesizer — the bridge from mcp-recon to capnagent.
3
+ *
4
+ * For each classified tool, generate a copy-pasteable capnagent
5
+ * caveat string that bounds the tool's authority to the smallest
6
+ * surface that preserves utility. The caveat is always a *suggestion*;
7
+ * the operator should review and tighten further to fit their
8
+ * deployment.
9
+ *
10
+ * Convention: every suggestion is a single DSL predicate that can be
11
+ * passed to `Issuer.issue(...).caveat(...)` or `cap.attenuate(...)`.
12
+ * The caveat language is documented in capnagent's
13
+ * `caveat_dsl.rs`.
14
+ */
15
+ import type { ToolFacts } from "../fuzz/schema.js";
16
+ import type { AuthorityLevel, DataClass } from "./types.js";
17
+ export interface CaveatInput {
18
+ tool: string;
19
+ data_class: DataClass;
20
+ authority_level: AuthorityLevel;
21
+ facts: ToolFacts;
22
+ }
23
+ /**
24
+ * Suggest a capnagent caveat for the given classification + facts.
25
+ * The suggestion places `<placeholder>` markers where the operator
26
+ * must substitute deployment-specific values.
27
+ */
28
+ export declare function synthesizeCaveat(input: CaveatInput): string;
29
+ //# sourceMappingURL=caveat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caveat.d.ts","sourceRoot":"","sources":["../../src/classify/caveat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,CAAC;IACtB,eAAe,EAAE,cAAc,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkC3D"}