devarmor 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +140 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +13 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/modules/agent-residue.d.ts +11 -0
  12. package/dist/modules/agent-residue.d.ts.map +1 -0
  13. package/dist/modules/agent-residue.js +283 -0
  14. package/dist/modules/agent-residue.js.map +1 -0
  15. package/dist/modules/mcp-auditor.d.ts +12 -0
  16. package/dist/modules/mcp-auditor.d.ts.map +1 -0
  17. package/dist/modules/mcp-auditor.js +290 -0
  18. package/dist/modules/mcp-auditor.js.map +1 -0
  19. package/dist/modules/posture-checker.d.ts +11 -0
  20. package/dist/modules/posture-checker.d.ts.map +1 -0
  21. package/dist/modules/posture-checker.js +315 -0
  22. package/dist/modules/posture-checker.js.map +1 -0
  23. package/dist/modules/secret-scanner.d.ts +11 -0
  24. package/dist/modules/secret-scanner.d.ts.map +1 -0
  25. package/dist/modules/secret-scanner.js +321 -0
  26. package/dist/modules/secret-scanner.js.map +1 -0
  27. package/dist/modules/skill-scanner.d.ts +12 -0
  28. package/dist/modules/skill-scanner.d.ts.map +1 -0
  29. package/dist/modules/skill-scanner.js +294 -0
  30. package/dist/modules/skill-scanner.js.map +1 -0
  31. package/dist/report/html.d.ts +6 -0
  32. package/dist/report/html.d.ts.map +1 -0
  33. package/dist/report/html.js +116 -0
  34. package/dist/report/html.js.map +1 -0
  35. package/dist/report/json.d.ts +9 -0
  36. package/dist/report/json.d.ts.map +1 -0
  37. package/dist/report/json.js +69 -0
  38. package/dist/report/json.js.map +1 -0
  39. package/dist/report/terminal.d.ts +6 -0
  40. package/dist/report/terminal.d.ts.map +1 -0
  41. package/dist/report/terminal.js +162 -0
  42. package/dist/report/terminal.js.map +1 -0
  43. package/dist/scanner.d.ts +9 -0
  44. package/dist/scanner.d.ts.map +1 -0
  45. package/dist/scanner.js +145 -0
  46. package/dist/scanner.js.map +1 -0
  47. package/dist/types.d.ts +91 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +17 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/modules/skill-scanner.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,sDAAsD;AACtD,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/D,uCAAyB;AACzB,2CAA6B;AAC7B,oCAMkB;AAElB,2DAA2D;AAC3D,MAAM,UAAU,GAAG;IACjB,gBAAgB;IAChB,gBAAgB;CACjB,CAAC;AAEF,iCAAiC;AACjC,MAAM,yBAAyB,GAAuC;IACpE,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,8BAA8B,EAAE;IACtF,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,+BAA+B,EAAE;IAC3E,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACxE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC3D,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAC7D,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,uBAAuB,EAAE;IAC7E,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,4BAA4B,EAAE;IAC3E,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,wBAAwB,EAAE;CACvE,CAAC;AAEF,kCAAkC;AAClC,MAAM,mBAAmB,GAAuC;IAC9D,EAAE,KAAK,EAAE,2EAA2E,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC1H,EAAE,KAAK,EAAE,gEAAgE,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACrH,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACtD,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACxD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC5D,EAAE,KAAK,EAAE,qDAAqD,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC7F,EAAE,KAAK,EAAE,oEAAoE,EAAE,KAAK,EAAE,8BAA8B,EAAE;IACtH,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,wBAAwB,EAAE;CACjF,CAAC;AAEF,sDAAsD;AACtD,MAAM,wBAAwB,GAAuC;IACnE,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACpE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,EAAE;IACxD,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC9D,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC/D,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC1D,EAAE,KAAK,EAAE,iCAAiC,EAAE,KAAK,EAAE,kBAAkB,EAAE;IACvE,EAAE,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACrE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACxD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACzD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,qBAAqB,EAAE;CACvD,CAAC;AAEF,qDAAqD;AACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CACvD,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAElC,iDAAiD;AACjD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAChD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;CAC5C,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBAChD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAAe,EAAE,QAAgB,EAAE,UAAkB;IAClF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,+EAA+E;IAC/E,MAAM,eAAe,GAAG,UAAU,CAAC;IACnC,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,wDAAwD;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAEhD,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,UAA4B;gBACpC,QAAQ,EAAE,gBAAQ,CAAC,IAAI;gBACvB,KAAK,EAAE,sCAAsC;gBAC7C,WAAW,EAAE,+FAA+F;gBAC5G,QAAQ;gBACR,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,wEAAwE;aACtF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe,EAAE,QAAgB,EAAE,UAAkB;IAChF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,4EAA4E;IAC5E,MAAM,aAAa,GAAG,oEAAoE,CAAC;IAC3F,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAEhD,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,UAA4B;YACpC,QAAQ,EAAE,gBAAQ,CAAC,IAAI;YACvB,KAAK,EAAE,iCAAiC;YACxC,WAAW,EAAE,oEAAoE;YACjF,QAAQ;YACR,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;YAC3C,WAAW,EAAE,6DAA6D;SAC3E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAa,YAAY;IACvB,IAAI,GAAG,cAAuB,CAAC;IAC/B,KAAK,GAAG,mBAAmB,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAE3C,mCAAmC;YACnC,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,QAAQ,EAAE,gBAAQ,CAAC,IAAI;gBACvB,KAAK,EAAE,2BAA2B,QAAQ,EAAE;gBAC5C,WAAW,EAAE,wCAAwC,YAAY,oCAAoC;gBACrG,QAAQ,EAAE,YAAY;gBACtB,WAAW,EAAE,6DAA6D;aAC3E,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC9C,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC;YAElC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC7B,IAAI,OAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,wBAAwB;gBACpC,CAAC;gBAED,kCAAkC;gBAClC,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,CAAC;oBAChD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;oBAE5B,IAAI,KAA6B,CAAC;oBAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBAEhD,QAAQ,CAAC,IAAI,CAAC;4BACZ,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,QAAQ,EAAE,gBAAQ,CAAC,QAAQ;4BAC3B,KAAK,EAAE,sBAAsB,OAAO,CAAC,KAAK,EAAE;4BAC5C,WAAW,EAAE,4EAA4E;4BACzF,QAAQ;4BACR,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;4BAClB,WAAW,EAAE,8EAA8E;yBAC5F,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,mCAAmC;gBACnC,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;oBAC1C,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;oBAE5B,IAAI,KAA6B,CAAC;oBAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBAEhD,QAAQ,CAAC,IAAI,CAAC;4BACZ,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,QAAQ,EAAE,gBAAQ,CAAC,QAAQ;4BAC3B,KAAK,EAAE,4BAA4B,OAAO,CAAC,KAAK,EAAE;4BAClD,WAAW,EAAE,gFAAgF;4BAC7F,QAAQ;4BACR,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;4BACnC,WAAW,EAAE,mEAAmE;yBACjF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,+CAA+C;gBAC/C,KAAK,MAAM,OAAO,IAAI,wBAAwB,EAAE,CAAC;oBAC/C,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;oBAE5B,IAAI,KAA6B,CAAC;oBAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBAEhD,QAAQ,CAAC,IAAI,CAAC;4BACZ,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,QAAQ,EAAE,gBAAQ,CAAC,IAAI;4BACvB,KAAK,EAAE,0BAA0B,OAAO,CAAC,KAAK,EAAE;4BAChD,WAAW,EAAE,gEAAgE;4BAC7E,QAAQ;4BACR,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;4BAClB,WAAW,EAAE,yEAAyE;yBACvF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,kEAAkE;gBAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEtE,qDAAqD;gBACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,YAAY,EAAE,iBAAiB;YAC/B,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AArHD,oCAqHC"}
@@ -0,0 +1,6 @@
1
+ import { ScanReport } from '../types';
2
+ /**
3
+ * Generates an HTML report.
4
+ */
5
+ export declare function generateHtmlReport(report: ScanReport, outputPath: string): void;
6
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA0E/E"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateHtmlReport = generateHtmlReport;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Generates an HTML report.
41
+ */
42
+ function generateHtmlReport(report, outputPath) {
43
+ const html = `<!DOCTYPE html>
44
+ <html lang="en">
45
+ <head>
46
+ <meta charset="UTF-8">
47
+ <title>DevArmor Security Report</title>
48
+ <style>
49
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; padding: 20px; background-color: #f9fafb; color: #111827; }
50
+ h1 { color: #111827; }
51
+ .summary { display: flex; gap: 20px; margin-bottom: 30px; }
52
+ .card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); flex: 1; }
53
+ .metric { font-size: 2rem; font-weight: bold; }
54
+ .critical { color: #dc2626; }
55
+ .high { color: #ea580c; }
56
+ .medium { color: #ca8a04; }
57
+ .low { color: #2563eb; }
58
+ .info { color: #4b5563; }
59
+ .module-section { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); margin-bottom: 20px; }
60
+ table { width: 100%; border-collapse: collapse; margin-top: 10px; }
61
+ th, td { text-align: left; padding: 12px; border-bottom: 1px solid #e5e7eb; }
62
+ th { background-color: #f3f4f6; }
63
+ </style>
64
+ </head>
65
+ <body>
66
+ <h1>DevArmor Security Scan Report</h1>
67
+ <p><strong>Path Scanned:</strong> ${report.scanPath}</p>
68
+ <p><strong>Date:</strong> ${new Date(report.timestamp).toLocaleString()}</p>
69
+
70
+ <div class="summary">
71
+ <div class="card">
72
+ <h3>Total Findings</h3>
73
+ <div class="metric">${report.summary.totalFindings}</div>
74
+ </div>
75
+ <div class="card">
76
+ <h3>Critical</h3>
77
+ <div class="metric critical">${report.summary.critical}</div>
78
+ </div>
79
+ <div class="card">
80
+ <h3>High</h3>
81
+ <div class="metric high">${report.summary.high}</div>
82
+ </div>
83
+ </div>
84
+
85
+ <h2>Module Results</h2>
86
+ ${report.modules.map(mod => `
87
+ <div class="module-section">
88
+ <h3>${mod.label}</h3>
89
+ <p>Duration: ${mod.durationMs}ms | Items Scanned: ${mod.itemsScanned}</p>
90
+ ${mod.findings.length > 0 ? `
91
+ <table>
92
+ <thead>
93
+ <tr>
94
+ <th>Severity</th>
95
+ <th>Title</th>
96
+ <th>File</th>
97
+ </tr>
98
+ </thead>
99
+ <tbody>
100
+ ${mod.findings.map(f => `
101
+ <tr>
102
+ <td class="${f.severity.toLowerCase()}">${f.severity}</td>
103
+ <td>${f.title}</td>
104
+ <td>${f.filePath || 'N/A'}${f.line ? `:${f.line}` : ''}</td>
105
+ </tr>
106
+ `).join('')}
107
+ </tbody>
108
+ </table>
109
+ ` : '<p>No issues found.</p>'}
110
+ </div>
111
+ `).join('')}
112
+ </body>
113
+ </html>`;
114
+ fs.writeFileSync(path.resolve(outputPath), html, 'utf-8');
115
+ }
116
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,gDA0EC;AAhFD,uCAAyB;AACzB,2CAA6B;AAE7B;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAkB,EAAE,UAAkB;IACvE,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;sCAwBuB,MAAM,CAAC,QAAQ;8BACvB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;;;;;4BAK7C,MAAM,CAAC,OAAO,CAAC,aAAa;;;;qCAInB,MAAM,CAAC,OAAO,CAAC,QAAQ;;;;iCAI3B,MAAM,CAAC,OAAO,CAAC,IAAI;;;;;IAKhD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;YAElB,GAAG,CAAC,KAAK;qBACA,GAAG,CAAC,UAAU,uBAAuB,GAAG,CAAC,YAAY;QAClE,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;cAUpB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;;6BAEP,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ;sBAC9C,CAAC,CAAC,KAAK;sBACP,CAAC,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;aAEzD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;OAGhB,CAAC,CAAC,CAAC,yBAAyB;;GAEhC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;QAEL,CAAC;IAEP,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ScanReport } from '../types';
2
+ /**
3
+ * Renders the scan report as JSON.
4
+ *
5
+ * - Prints the full JSON to stdout.
6
+ * - Saves a copy to `devarmor-report.json` in the current directory.
7
+ */
8
+ export declare function renderJsonReport(report: ScanReport): Promise<void>;
9
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/report/json.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQtC;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // DevArmor — JSON Report Generator
4
+ // Outputs scan results as formatted JSON to stdout and file.
5
+ // ============================================================
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.renderJsonReport = renderJsonReport;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ /** Dynamic import helper for ESM-only chalk. */
44
+ async function getChalk() { return (await Promise.resolve().then(() => __importStar(require('chalk')))).default; }
45
+ /** Output filename for the JSON report. */
46
+ const REPORT_FILENAME = 'devarmor-report.json';
47
+ /**
48
+ * Renders the scan report as JSON.
49
+ *
50
+ * - Prints the full JSON to stdout.
51
+ * - Saves a copy to `devarmor-report.json` in the current directory.
52
+ */
53
+ async function renderJsonReport(report) {
54
+ const chalk = await getChalk();
55
+ const json = JSON.stringify(report, null, 2);
56
+ // Print to stdout
57
+ console.log(json);
58
+ // Save to file
59
+ const outPath = path.resolve(process.cwd(), REPORT_FILENAME);
60
+ try {
61
+ fs.writeFileSync(outPath, json, 'utf-8');
62
+ console.log(chalk.dim(`\nšŸ“ Report saved to ${outPath}\n`));
63
+ }
64
+ catch (err) {
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ console.error(chalk.red(`\n⚠ Failed to save report: ${msg}\n`));
67
+ }
68
+ }
69
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/report/json.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,6DAA6D;AAC7D,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkB/D,4CAkBC;AAlCD,uCAAyB;AACzB,2CAA6B;AAG7B,gDAAgD;AAChD,KAAK,UAAU,QAAQ,KAAK,OAAO,CAAC,wDAAa,OAAO,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAErE,2CAA2C;AAC3C,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAE/C;;;;;GAKG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAAkB;IACvD,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7C,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,eAAe;IACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAC/C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,GAAG,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ScanReport } from '../types';
2
+ /**
3
+ * Renders a full terminal report for a completed scan.
4
+ */
5
+ export declare function renderTerminalReport(report: ScanReport): Promise<void>;
6
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/report/terminal.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAyB,MAAM,UAAU,CAAC;AAkC7D;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiH5E"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // DevArmor — Terminal Report Generator
4
+ // Rich colored output with box-drawing characters.
5
+ // ============================================================
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.renderTerminalReport = renderTerminalReport;
41
+ const types_1 = require("../types");
42
+ /** Dynamic import helper for ESM-only chalk. */
43
+ async function getChalk() { return (await Promise.resolve().then(() => __importStar(require('chalk')))).default; }
44
+ /** Severity display order — most critical first. */
45
+ const SEVERITY_ORDER = [
46
+ types_1.Severity.CRITICAL,
47
+ types_1.Severity.HIGH,
48
+ types_1.Severity.MEDIUM,
49
+ types_1.Severity.LOW,
50
+ types_1.Severity.INFO,
51
+ ];
52
+ /**
53
+ * Returns a colored severity badge string.
54
+ */
55
+ function severityBadge(chalk, severity) {
56
+ switch (severity) {
57
+ case types_1.Severity.CRITICAL:
58
+ return chalk.bgRed.white.bold(` ${severity} `);
59
+ case types_1.Severity.HIGH:
60
+ return chalk.bgRedBright.white.bold(` ${severity} `);
61
+ case types_1.Severity.MEDIUM:
62
+ return chalk.bgYellow.black.bold(` ${severity} `);
63
+ case types_1.Severity.LOW:
64
+ return chalk.bgBlue.white(` ${severity} `);
65
+ case types_1.Severity.INFO:
66
+ return chalk.bgGray.white(` ${severity} `);
67
+ default:
68
+ return chalk.dim(severity);
69
+ }
70
+ }
71
+ /**
72
+ * Renders a full terminal report for a completed scan.
73
+ */
74
+ async function renderTerminalReport(report) {
75
+ const chalk = await getChalk();
76
+ const line = chalk.dim('─'.repeat(60));
77
+ const doubleLine = chalk.dim('═'.repeat(60));
78
+ // ── Header ──
79
+ console.log('\n' + doubleLine);
80
+ console.log(chalk.bold.cyan(' šŸ“‹ DevArmor Scan Report'));
81
+ console.log(doubleLine);
82
+ console.log(chalk.dim(' Timestamp: ') + chalk.white(report.timestamp));
83
+ console.log(chalk.dim(' Scan Path: ') + chalk.white(report.scanPath));
84
+ console.log(chalk.dim(' Duration: ') + chalk.white(`${report.totalDurationMs}ms`));
85
+ console.log(chalk.dim(' Version: ') + chalk.white(report.version));
86
+ // ── Module Results ──
87
+ console.log('\n' + line);
88
+ console.log(chalk.bold(' Module Results'));
89
+ console.log(line);
90
+ for (const mod of report.modules) {
91
+ const icon = mod.success
92
+ ? (mod.findings.length > 0 ? chalk.yellow('⚠') : chalk.green('āœ”'))
93
+ : chalk.red('āœ—');
94
+ const status = mod.success
95
+ ? chalk.green('passed')
96
+ : chalk.red('failed');
97
+ const findingStr = mod.findings.length > 0
98
+ ? chalk.yellow(` (${mod.findings.length} finding${mod.findings.length !== 1 ? 's' : ''})`)
99
+ : chalk.dim(' (clean)');
100
+ console.log(` ${icon} ${chalk.bold(mod.label)} ${status}${findingStr}` +
101
+ chalk.dim(` ${mod.itemsScanned} items ${mod.durationMs}ms`));
102
+ if (mod.error) {
103
+ console.log(chalk.red(` └─ Error: ${mod.error}`));
104
+ }
105
+ }
106
+ // ── Findings by Severity ──
107
+ const allFindings = report.modules.flatMap((m) => m.findings);
108
+ if (allFindings.length > 0) {
109
+ console.log('\n' + line);
110
+ console.log(chalk.bold(' Findings'));
111
+ console.log(line);
112
+ for (const severity of SEVERITY_ORDER) {
113
+ const findings = allFindings.filter((f) => f.severity === severity);
114
+ if (findings.length === 0)
115
+ continue;
116
+ console.log(`\n ${severityBadge(chalk, severity)} ${chalk.bold(`${findings.length} finding${findings.length !== 1 ? 's' : ''}`)}`);
117
+ console.log(chalk.dim(' ' + '┄'.repeat(50)));
118
+ for (let i = 0; i < findings.length; i++) {
119
+ const f = findings[i];
120
+ const isLast = i === findings.length - 1;
121
+ const prefix = isLast ? ' └─' : ' ā”œā”€';
122
+ const indent = isLast ? ' ' : ' │ ';
123
+ console.log(`${chalk.dim(prefix)} ${chalk.bold(f.title)}`);
124
+ if (f.filePath) {
125
+ const location = f.line ? `${f.filePath}:${f.line}` : f.filePath;
126
+ console.log(`${chalk.dim(indent)} ${chalk.dim('File:')} ${chalk.cyan(location)}`);
127
+ }
128
+ if (f.evidence) {
129
+ console.log(`${chalk.dim(indent)} ${chalk.dim('Evidence:')} ${chalk.yellow(f.evidence)}`);
130
+ }
131
+ if (f.remediation) {
132
+ console.log(`${chalk.dim(indent)} ${chalk.dim('Fix:')} ${chalk.green(f.remediation)}`);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ // ── Final Summary ──
138
+ console.log('\n' + doubleLine);
139
+ console.log(chalk.bold(' šŸ“Š Summary'));
140
+ console.log(doubleLine);
141
+ if (report.summary.totalFindings === 0) {
142
+ console.log(chalk.green.bold('\n āœ” No security findings — workstation is clean!\n'));
143
+ }
144
+ else {
145
+ console.log(`\n Total: ${chalk.bold(String(report.summary.totalFindings))} finding${report.summary.totalFindings !== 1 ? 's' : ''}\n`);
146
+ const counts = [
147
+ ['CRITICAL', report.summary.critical, (s) => chalk.bgRed.white.bold(` ${s} `)],
148
+ ['HIGH', report.summary.high, (s) => chalk.red.bold(s)],
149
+ ['MEDIUM', report.summary.medium, (s) => chalk.yellow.bold(s)],
150
+ ['LOW', report.summary.low, (s) => chalk.blue(s)],
151
+ ['INFO', report.summary.info, (s) => chalk.dim(s)],
152
+ ];
153
+ for (const [label, count, colorFn] of counts) {
154
+ if (count > 0) {
155
+ const bar = chalk.dim('ā–ˆ'.repeat(Math.min(count, 30)));
156
+ console.log(` ${colorFn(label.padEnd(9))} ${chalk.bold(String(count).padStart(3))} ${bar}`);
157
+ }
158
+ }
159
+ console.log('');
160
+ }
161
+ }
162
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/report/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ScanOptions, ScanReport } from './types';
2
+ /**
3
+ * Runs the DevArmor scan pipeline.
4
+ *
5
+ * Modules execute sequentially for cleaner terminal output.
6
+ * Each module gets an ora spinner to show progress.
7
+ */
8
+ export declare function runScan(options: ScanOptions): Promise<ScanReport>;
9
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,UAAU,EAIX,MAAM,SAAS,CAAC;AAoBjB;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAgGvE"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // DevArmor — Scanner Orchestrator
4
+ // Runs all scan modules and aggregates results into a report.
5
+ // ============================================================
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.runScan = runScan;
41
+ const path = __importStar(require("path"));
42
+ const types_1 = require("./types");
43
+ const secret_scanner_1 = require("./modules/secret-scanner");
44
+ const agent_residue_1 = require("./modules/agent-residue");
45
+ const mcp_auditor_1 = require("./modules/mcp-auditor");
46
+ const skill_scanner_1 = require("./modules/skill-scanner");
47
+ const posture_checker_1 = require("./modules/posture-checker");
48
+ /** Dynamic import helpers for ESM-only packages. */
49
+ async function getChalk() { return (await Promise.resolve().then(() => __importStar(require('chalk')))).default; }
50
+ async function getOra() { return (await Promise.resolve().then(() => __importStar(require('ora')))).default; }
51
+ /** All available scanner modules in execution order. */
52
+ const ALL_MODULES = [
53
+ new secret_scanner_1.SecretScanner(),
54
+ new agent_residue_1.AgentResidueScanner(),
55
+ new mcp_auditor_1.MCPAuditor(),
56
+ new skill_scanner_1.SkillScanner(),
57
+ new posture_checker_1.PostureChecker(),
58
+ ];
59
+ /**
60
+ * Runs the DevArmor scan pipeline.
61
+ *
62
+ * Modules execute sequentially for cleaner terminal output.
63
+ * Each module gets an ora spinner to show progress.
64
+ */
65
+ async function runScan(options) {
66
+ const chalk = await getChalk();
67
+ const ora = await getOra();
68
+ const startTime = Date.now();
69
+ const resolvedPath = path.resolve(options.path);
70
+ console.log(chalk.cyan('\nšŸ” Scanning: ') + chalk.white(resolvedPath) + '\n');
71
+ // Filter to requested modules (empty = all)
72
+ const modulesToRun = options.modules.length > 0
73
+ ? ALL_MODULES.filter((m) => options.modules.includes(m.name))
74
+ : ALL_MODULES;
75
+ const results = [];
76
+ // Run each module sequentially
77
+ for (const mod of modulesToRun) {
78
+ const spinner = ora({
79
+ text: `Running ${mod.label}...`,
80
+ color: 'cyan',
81
+ }).start();
82
+ try {
83
+ const result = await mod.scan({ ...options, path: resolvedPath });
84
+ results.push(result);
85
+ const findingCount = result.findings.length;
86
+ const icon = findingCount > 0 ? '⚠' : 'āœ”';
87
+ const color = findingCount > 0 ? chalk.yellow : chalk.green;
88
+ spinner.succeed(color(`${mod.label} ${icon} ${findingCount} finding${findingCount !== 1 ? 's' : ''} (${result.durationMs}ms)`));
89
+ }
90
+ catch (err) {
91
+ const errorMsg = err instanceof Error ? err.message : String(err);
92
+ results.push({
93
+ module: mod.name,
94
+ label: mod.label,
95
+ success: false,
96
+ durationMs: Date.now() - startTime,
97
+ itemsScanned: 0,
98
+ findings: [],
99
+ error: errorMsg,
100
+ });
101
+ spinner.fail(chalk.red(`${mod.label} āœ— Error: ${errorMsg}`));
102
+ }
103
+ }
104
+ // Aggregate summary counts
105
+ const allFindings = results.flatMap((r) => r.findings);
106
+ const summary = {
107
+ totalFindings: allFindings.length,
108
+ critical: allFindings.filter((f) => f.severity === types_1.Severity.CRITICAL).length,
109
+ high: allFindings.filter((f) => f.severity === types_1.Severity.HIGH).length,
110
+ medium: allFindings.filter((f) => f.severity === types_1.Severity.MEDIUM).length,
111
+ low: allFindings.filter((f) => f.severity === types_1.Severity.LOW).length,
112
+ info: allFindings.filter((f) => f.severity === types_1.Severity.INFO).length,
113
+ };
114
+ const totalDurationMs = Date.now() - startTime;
115
+ // Print quick summary
116
+ console.log(chalk.dim('\n' + '─'.repeat(50)));
117
+ console.log(chalk.bold('\nšŸ“Š Scan Complete ') +
118
+ chalk.dim(`(${totalDurationMs}ms)\n`));
119
+ if (summary.totalFindings === 0) {
120
+ console.log(chalk.green.bold(' āœ” No findings — workstation looks clean!\n'));
121
+ }
122
+ else {
123
+ const parts = [];
124
+ if (summary.critical > 0)
125
+ parts.push(chalk.bgRed.white.bold(` ${summary.critical} CRITICAL `));
126
+ if (summary.high > 0)
127
+ parts.push(chalk.red.bold(`${summary.high} HIGH`));
128
+ if (summary.medium > 0)
129
+ parts.push(chalk.yellow.bold(`${summary.medium} MEDIUM`));
130
+ if (summary.low > 0)
131
+ parts.push(chalk.blue(`${summary.low} LOW`));
132
+ if (summary.info > 0)
133
+ parts.push(chalk.dim(`${summary.info} INFO`));
134
+ console.log(` ${summary.totalFindings} finding${summary.totalFindings !== 1 ? 's' : ''}: ${parts.join(chalk.dim(' │ '))}\n`);
135
+ }
136
+ return {
137
+ timestamp: new Date(startTime).toISOString(),
138
+ scanPath: resolvedPath,
139
+ version: '1.0.0',
140
+ totalDurationMs,
141
+ modules: results,
142
+ summary,
143
+ };
144
+ }
145
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}