@panguard-ai/atr 1.5.6 → 1.6.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 (245) hide show
  1. package/package.json +2 -2
  2. package/dist/action-executor.d.ts +0 -44
  3. package/dist/action-executor.d.ts.map +0 -1
  4. package/dist/action-executor.js +0 -130
  5. package/dist/action-executor.js.map +0 -1
  6. package/dist/adapters/default-adapter.d.ts +0 -24
  7. package/dist/adapters/default-adapter.d.ts.map +0 -1
  8. package/dist/adapters/default-adapter.js +0 -51
  9. package/dist/adapters/default-adapter.js.map +0 -1
  10. package/dist/adapters/stdio-adapter.d.ts +0 -30
  11. package/dist/adapters/stdio-adapter.d.ts.map +0 -1
  12. package/dist/adapters/stdio-adapter.js +0 -128
  13. package/dist/adapters/stdio-adapter.js.map +0 -1
  14. package/dist/badge.d.ts +0 -42
  15. package/dist/badge.d.ts.map +0 -1
  16. package/dist/badge.js +0 -163
  17. package/dist/badge.js.map +0 -1
  18. package/dist/capability-extractor.d.ts +0 -35
  19. package/dist/capability-extractor.d.ts.map +0 -1
  20. package/dist/capability-extractor.js +0 -91
  21. package/dist/capability-extractor.js.map +0 -1
  22. package/dist/cli/scan-handler.d.ts +0 -21
  23. package/dist/cli/scan-handler.d.ts.map +0 -1
  24. package/dist/cli/scan-handler.js +0 -276
  25. package/dist/cli/scan-handler.js.map +0 -1
  26. package/dist/cli/tc-pipeline.d.ts +0 -18
  27. package/dist/cli/tc-pipeline.d.ts.map +0 -1
  28. package/dist/cli/tc-pipeline.js +0 -295
  29. package/dist/cli/tc-pipeline.js.map +0 -1
  30. package/dist/cli.d.ts +0 -12
  31. package/dist/cli.d.ts.map +0 -1
  32. package/dist/cli.js +0 -894
  33. package/dist/cli.js.map +0 -1
  34. package/dist/content-hash.d.ts +0 -7
  35. package/dist/content-hash.d.ts.map +0 -1
  36. package/dist/content-hash.js +0 -10
  37. package/dist/content-hash.js.map +0 -1
  38. package/dist/converters/elastic.d.ts +0 -36
  39. package/dist/converters/elastic.d.ts.map +0 -1
  40. package/dist/converters/elastic.js +0 -125
  41. package/dist/converters/elastic.js.map +0 -1
  42. package/dist/converters/generic-regex.d.ts +0 -37
  43. package/dist/converters/generic-regex.d.ts.map +0 -1
  44. package/dist/converters/generic-regex.js +0 -59
  45. package/dist/converters/generic-regex.js.map +0 -1
  46. package/dist/converters/index.d.ts +0 -32
  47. package/dist/converters/index.d.ts.map +0 -1
  48. package/dist/converters/index.js +0 -38
  49. package/dist/converters/index.js.map +0 -1
  50. package/dist/converters/sarif.d.ts +0 -18
  51. package/dist/converters/sarif.d.ts.map +0 -1
  52. package/dist/converters/sarif.js +0 -142
  53. package/dist/converters/sarif.js.map +0 -1
  54. package/dist/converters/splunk.d.ts +0 -19
  55. package/dist/converters/splunk.d.ts.map +0 -1
  56. package/dist/converters/splunk.js +0 -148
  57. package/dist/converters/splunk.js.map +0 -1
  58. package/dist/coverage-analyzer.d.ts +0 -43
  59. package/dist/coverage-analyzer.d.ts.map +0 -1
  60. package/dist/coverage-analyzer.js +0 -329
  61. package/dist/coverage-analyzer.js.map +0 -1
  62. package/dist/embedding/build-corpus.d.ts +0 -15
  63. package/dist/embedding/build-corpus.d.ts.map +0 -1
  64. package/dist/embedding/build-corpus.js +0 -105
  65. package/dist/embedding/build-corpus.js.map +0 -1
  66. package/dist/embedding/model-loader.d.ts +0 -41
  67. package/dist/embedding/model-loader.d.ts.map +0 -1
  68. package/dist/embedding/model-loader.js +0 -90
  69. package/dist/embedding/model-loader.js.map +0 -1
  70. package/dist/embedding/vector-store.d.ts +0 -41
  71. package/dist/embedding/vector-store.d.ts.map +0 -1
  72. package/dist/embedding/vector-store.js +0 -70
  73. package/dist/embedding/vector-store.js.map +0 -1
  74. package/dist/engine.d.ts +0 -222
  75. package/dist/engine.d.ts.map +0 -1
  76. package/dist/engine.js +0 -1185
  77. package/dist/engine.js.map +0 -1
  78. package/dist/eval/corpus.d.ts +0 -42
  79. package/dist/eval/corpus.d.ts.map +0 -1
  80. package/dist/eval/corpus.js +0 -427
  81. package/dist/eval/corpus.js.map +0 -1
  82. package/dist/eval/eval-harness.d.ts +0 -44
  83. package/dist/eval/eval-harness.d.ts.map +0 -1
  84. package/dist/eval/eval-harness.js +0 -296
  85. package/dist/eval/eval-harness.js.map +0 -1
  86. package/dist/eval/index.d.ts +0 -13
  87. package/dist/eval/index.d.ts.map +0 -1
  88. package/dist/eval/index.js +0 -9
  89. package/dist/eval/index.js.map +0 -1
  90. package/dist/eval/metrics.d.ts +0 -74
  91. package/dist/eval/metrics.d.ts.map +0 -1
  92. package/dist/eval/metrics.js +0 -108
  93. package/dist/eval/metrics.js.map +0 -1
  94. package/dist/eval/pint-corpus.d.ts +0 -34
  95. package/dist/eval/pint-corpus.d.ts.map +0 -1
  96. package/dist/eval/pint-corpus.js +0 -113
  97. package/dist/eval/pint-corpus.js.map +0 -1
  98. package/dist/eval/rule-corpus.d.ts +0 -9
  99. package/dist/eval/rule-corpus.d.ts.map +0 -1
  100. package/dist/eval/rule-corpus.js +0 -4780
  101. package/dist/eval/rule-corpus.js.map +0 -1
  102. package/dist/eval/rule-metrics.d.ts +0 -34
  103. package/dist/eval/rule-metrics.d.ts.map +0 -1
  104. package/dist/eval/rule-metrics.js +0 -92
  105. package/dist/eval/rule-metrics.js.map +0 -1
  106. package/dist/eval/run-eval.d.ts +0 -7
  107. package/dist/eval/run-eval.d.ts.map +0 -1
  108. package/dist/eval/run-eval.js +0 -11
  109. package/dist/eval/run-eval.js.map +0 -1
  110. package/dist/eval/run-pint-benchmark.d.ts +0 -18
  111. package/dist/eval/run-pint-benchmark.d.ts.map +0 -1
  112. package/dist/eval/run-pint-benchmark.js +0 -159
  113. package/dist/eval/run-pint-benchmark.js.map +0 -1
  114. package/dist/eval/skill-benchmark.d.ts +0 -66
  115. package/dist/eval/skill-benchmark.d.ts.map +0 -1
  116. package/dist/eval/skill-benchmark.js +0 -194
  117. package/dist/eval/skill-benchmark.js.map +0 -1
  118. package/dist/flywheel.d.ts +0 -54
  119. package/dist/flywheel.d.ts.map +0 -1
  120. package/dist/flywheel.js +0 -121
  121. package/dist/flywheel.js.map +0 -1
  122. package/dist/hook-handler.d.ts +0 -61
  123. package/dist/hook-handler.d.ts.map +0 -1
  124. package/dist/hook-handler.js +0 -178
  125. package/dist/hook-handler.js.map +0 -1
  126. package/dist/layer-integration.d.ts +0 -55
  127. package/dist/layer-integration.d.ts.map +0 -1
  128. package/dist/layer-integration.js +0 -187
  129. package/dist/layer-integration.js.map +0 -1
  130. package/dist/loader.d.ts +0 -18
  131. package/dist/loader.d.ts.map +0 -1
  132. package/dist/loader.js +0 -129
  133. package/dist/loader.js.map +0 -1
  134. package/dist/mcp-server.d.ts +0 -13
  135. package/dist/mcp-server.d.ts.map +0 -1
  136. package/dist/mcp-server.js +0 -246
  137. package/dist/mcp-server.js.map +0 -1
  138. package/dist/mcp-tools/coverage-gaps.d.ts +0 -13
  139. package/dist/mcp-tools/coverage-gaps.d.ts.map +0 -1
  140. package/dist/mcp-tools/coverage-gaps.js +0 -55
  141. package/dist/mcp-tools/coverage-gaps.js.map +0 -1
  142. package/dist/mcp-tools/list-rules.d.ts +0 -17
  143. package/dist/mcp-tools/list-rules.d.ts.map +0 -1
  144. package/dist/mcp-tools/list-rules.js +0 -45
  145. package/dist/mcp-tools/list-rules.js.map +0 -1
  146. package/dist/mcp-tools/scan-skill.d.ts +0 -17
  147. package/dist/mcp-tools/scan-skill.d.ts.map +0 -1
  148. package/dist/mcp-tools/scan-skill.js +0 -65
  149. package/dist/mcp-tools/scan-skill.js.map +0 -1
  150. package/dist/mcp-tools/scan.d.ts +0 -24
  151. package/dist/mcp-tools/scan.d.ts.map +0 -1
  152. package/dist/mcp-tools/scan.js +0 -94
  153. package/dist/mcp-tools/scan.js.map +0 -1
  154. package/dist/mcp-tools/submit-proposal.d.ts +0 -12
  155. package/dist/mcp-tools/submit-proposal.d.ts.map +0 -1
  156. package/dist/mcp-tools/submit-proposal.js +0 -103
  157. package/dist/mcp-tools/submit-proposal.js.map +0 -1
  158. package/dist/mcp-tools/threat-summary.d.ts +0 -12
  159. package/dist/mcp-tools/threat-summary.d.ts.map +0 -1
  160. package/dist/mcp-tools/threat-summary.js +0 -74
  161. package/dist/mcp-tools/threat-summary.js.map +0 -1
  162. package/dist/mcp-tools/validate.d.ts +0 -15
  163. package/dist/mcp-tools/validate.d.ts.map +0 -1
  164. package/dist/mcp-tools/validate.js +0 -51
  165. package/dist/mcp-tools/validate.js.map +0 -1
  166. package/dist/modules/embedding.d.ts +0 -71
  167. package/dist/modules/embedding.d.ts.map +0 -1
  168. package/dist/modules/embedding.js +0 -141
  169. package/dist/modules/embedding.js.map +0 -1
  170. package/dist/modules/index.d.ts +0 -144
  171. package/dist/modules/index.d.ts.map +0 -1
  172. package/dist/modules/index.js +0 -82
  173. package/dist/modules/index.js.map +0 -1
  174. package/dist/modules/semantic.d.ts +0 -106
  175. package/dist/modules/semantic.d.ts.map +0 -1
  176. package/dist/modules/semantic.js +0 -359
  177. package/dist/modules/semantic.js.map +0 -1
  178. package/dist/modules/session.d.ts +0 -70
  179. package/dist/modules/session.d.ts.map +0 -1
  180. package/dist/modules/session.js +0 -128
  181. package/dist/modules/session.js.map +0 -1
  182. package/dist/quality/adapters/atr.d.ts +0 -65
  183. package/dist/quality/adapters/atr.d.ts.map +0 -1
  184. package/dist/quality/adapters/atr.js +0 -154
  185. package/dist/quality/adapters/atr.js.map +0 -1
  186. package/dist/quality/adapters/index.d.ts +0 -10
  187. package/dist/quality/adapters/index.d.ts.map +0 -1
  188. package/dist/quality/adapters/index.js +0 -10
  189. package/dist/quality/adapters/index.js.map +0 -1
  190. package/dist/quality/compute-confidence.d.ts +0 -45
  191. package/dist/quality/compute-confidence.d.ts.map +0 -1
  192. package/dist/quality/compute-confidence.js +0 -133
  193. package/dist/quality/compute-confidence.js.map +0 -1
  194. package/dist/quality/index.d.ts +0 -36
  195. package/dist/quality/index.d.ts.map +0 -1
  196. package/dist/quality/index.js +0 -39
  197. package/dist/quality/index.js.map +0 -1
  198. package/dist/quality/quality-gate.d.ts +0 -86
  199. package/dist/quality/quality-gate.d.ts.map +0 -1
  200. package/dist/quality/quality-gate.js +0 -187
  201. package/dist/quality/quality-gate.js.map +0 -1
  202. package/dist/quality/types.d.ts +0 -129
  203. package/dist/quality/types.d.ts.map +0 -1
  204. package/dist/quality/types.js +0 -10
  205. package/dist/quality/types.js.map +0 -1
  206. package/dist/quality/validate-maturity.d.ts +0 -51
  207. package/dist/quality/validate-maturity.d.ts.map +0 -1
  208. package/dist/quality/validate-maturity.js +0 -134
  209. package/dist/quality/validate-maturity.js.map +0 -1
  210. package/dist/rule-scaffolder.d.ts +0 -53
  211. package/dist/rule-scaffolder.d.ts.map +0 -1
  212. package/dist/rule-scaffolder.js +0 -301
  213. package/dist/rule-scaffolder.js.map +0 -1
  214. package/dist/session-tracker.d.ts +0 -58
  215. package/dist/session-tracker.d.ts.map +0 -1
  216. package/dist/session-tracker.js +0 -176
  217. package/dist/session-tracker.js.map +0 -1
  218. package/dist/shadow-evaluator.d.ts +0 -48
  219. package/dist/shadow-evaluator.d.ts.map +0 -1
  220. package/dist/shadow-evaluator.js +0 -129
  221. package/dist/shadow-evaluator.js.map +0 -1
  222. package/dist/skill-fingerprint.d.ts +0 -85
  223. package/dist/skill-fingerprint.d.ts.map +0 -1
  224. package/dist/skill-fingerprint.js +0 -284
  225. package/dist/skill-fingerprint.js.map +0 -1
  226. package/dist/tc-reporter.d.ts +0 -50
  227. package/dist/tc-reporter.d.ts.map +0 -1
  228. package/dist/tc-reporter.js +0 -164
  229. package/dist/tc-reporter.js.map +0 -1
  230. package/dist/tier0-invariant.d.ts +0 -49
  231. package/dist/tier0-invariant.d.ts.map +0 -1
  232. package/dist/tier0-invariant.js +0 -185
  233. package/dist/tier0-invariant.js.map +0 -1
  234. package/dist/tier1-blacklist.d.ts +0 -48
  235. package/dist/tier1-blacklist.d.ts.map +0 -1
  236. package/dist/tier1-blacklist.js +0 -92
  237. package/dist/tier1-blacklist.js.map +0 -1
  238. package/dist/types.d.ts +0 -232
  239. package/dist/types.d.ts.map +0 -1
  240. package/dist/types.js +0 -6
  241. package/dist/types.js.map +0 -1
  242. package/dist/verdict.d.ts +0 -26
  243. package/dist/verdict.d.ts.map +0 -1
  244. package/dist/verdict.js +0 -127
  245. package/dist/verdict.js.map +0 -1
package/dist/verdict.js DELETED
@@ -1,127 +0,0 @@
1
- /**
2
- * Verdict computation from ATR rule matches.
3
- *
4
- * Pure functions that determine the outcome (allow/ask/deny)
5
- * based on severity, confidence, and auto-response thresholds.
6
- *
7
- * @module agent-threat-rules/verdict
8
- */
9
- /** Severity rank from most severe (0) to least severe (4) */
10
- export const SEVERITY_RANK = {
11
- critical: 0,
12
- high: 1,
13
- medium: 2,
14
- low: 3,
15
- informational: 4,
16
- };
17
- /**
18
- * Check whether auto-response is enabled for a matched rule.
19
- * The auto_response_threshold field on ATRResponse indicates the
20
- * minimum confidence level at which the action should be taken
21
- * automatically (without human approval).
22
- */
23
- export function isAutoResponseEnabled(match) {
24
- const threshold = match.rule.response.auto_response_threshold;
25
- if (!threshold)
26
- return false;
27
- const thresholdMap = {
28
- high: 0.9,
29
- medium: 0.7,
30
- low: 0.5,
31
- };
32
- const requiredConfidence = thresholdMap[threshold];
33
- if (requiredConfidence === undefined)
34
- return false;
35
- return match.confidence >= requiredConfidence;
36
- }
37
- /**
38
- * Determine the verdict outcome based on severity and confidence.
39
- *
40
- * Decision matrix:
41
- * - critical severity -> deny
42
- * - high severity, conf >= 0.8 -> deny
43
- * - high severity, conf < 0.8 -> ask
44
- * - medium severity, conf >= 0.6 -> ask
45
- * - everything else -> allow
46
- */
47
- function determineOutcome(severity, confidence) {
48
- if (severity === 'critical') {
49
- return 'deny';
50
- }
51
- if (severity === 'high') {
52
- return confidence >= 0.8 ? 'deny' : 'ask';
53
- }
54
- if (severity === 'medium' && confidence >= 0.6) {
55
- return 'ask';
56
- }
57
- return 'allow';
58
- }
59
- /**
60
- * Collect unique actions from all matched rules, preserving order
61
- * of first appearance.
62
- */
63
- function collectUniqueActions(matches) {
64
- const seen = new Set();
65
- const actions = [];
66
- for (const match of matches) {
67
- for (const action of match.rule.response.actions) {
68
- if (!seen.has(action)) {
69
- seen.add(action);
70
- actions.push(action);
71
- }
72
- }
73
- }
74
- return Object.freeze(actions);
75
- }
76
- /**
77
- * Build a human-readable reason string from the highest severity match.
78
- */
79
- function buildReason(highestMatch, outcome, matchCount) {
80
- if (!highestMatch) {
81
- return 'No rules matched.';
82
- }
83
- const { rule, confidence } = highestMatch;
84
- const pct = Math.round(confidence * 100);
85
- return (`${outcome.toUpperCase()}: ${rule.title} ` +
86
- `[${rule.severity}/${pct}% confidence] ` +
87
- `(${matchCount} rule${matchCount === 1 ? '' : 's'} matched)`);
88
- }
89
- /**
90
- * Compute a verdict from an array of ATR matches.
91
- *
92
- * This is a pure function -- no side effects, no mutation.
93
- * Returns a frozen ATRVerdict object.
94
- */
95
- export function computeVerdict(matches) {
96
- if (matches.length === 0) {
97
- return Object.freeze({
98
- outcome: 'allow',
99
- reason: 'No rules matched.',
100
- matchCount: 0,
101
- highestSeverity: null,
102
- highestConfidence: 0,
103
- actions: Object.freeze([]),
104
- matches: Object.freeze([]),
105
- timestamp: new Date().toISOString(),
106
- });
107
- }
108
- // Matches are already sorted by the engine (severity desc, confidence desc).
109
- // The first match has the highest severity.
110
- const highestMatch = matches[0];
111
- const highestSeverity = highestMatch.rule.severity;
112
- const highestConfidence = highestMatch.confidence;
113
- const outcome = determineOutcome(highestSeverity, highestConfidence);
114
- const actions = collectUniqueActions(matches);
115
- const reason = buildReason(highestMatch, outcome, matches.length);
116
- return Object.freeze({
117
- outcome,
118
- reason,
119
- matchCount: matches.length,
120
- highestSeverity,
121
- highestConfidence,
122
- actions,
123
- matches: Object.freeze([...matches]),
124
- timestamp: new Date().toISOString(),
125
- });
126
- }
127
- //# sourceMappingURL=verdict.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}