@panguard-ai/atr 1.4.3 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/dist/action-executor.d.ts +44 -0
  2. package/dist/action-executor.d.ts.map +1 -0
  3. package/dist/action-executor.js +130 -0
  4. package/dist/action-executor.js.map +1 -0
  5. package/dist/adapters/default-adapter.d.ts +24 -0
  6. package/dist/adapters/default-adapter.d.ts.map +1 -0
  7. package/dist/adapters/default-adapter.js +51 -0
  8. package/dist/adapters/default-adapter.js.map +1 -0
  9. package/dist/adapters/stdio-adapter.d.ts +30 -0
  10. package/dist/adapters/stdio-adapter.d.ts.map +1 -0
  11. package/dist/adapters/stdio-adapter.js +128 -0
  12. package/dist/adapters/stdio-adapter.js.map +1 -0
  13. package/dist/badge.d.ts +42 -0
  14. package/dist/badge.d.ts.map +1 -0
  15. package/dist/badge.js +163 -0
  16. package/dist/badge.js.map +1 -0
  17. package/dist/capability-extractor.d.ts +35 -0
  18. package/dist/capability-extractor.d.ts.map +1 -0
  19. package/dist/capability-extractor.js +91 -0
  20. package/dist/capability-extractor.js.map +1 -0
  21. package/dist/cli/scan-handler.d.ts +21 -0
  22. package/dist/cli/scan-handler.d.ts.map +1 -0
  23. package/dist/cli/scan-handler.js +276 -0
  24. package/dist/cli/scan-handler.js.map +1 -0
  25. package/dist/cli/tc-pipeline.d.ts +18 -0
  26. package/dist/cli/tc-pipeline.d.ts.map +1 -0
  27. package/dist/cli/tc-pipeline.js +295 -0
  28. package/dist/cli/tc-pipeline.js.map +1 -0
  29. package/dist/cli.d.ts +12 -0
  30. package/dist/cli.d.ts.map +1 -0
  31. package/dist/cli.js +894 -0
  32. package/dist/cli.js.map +1 -0
  33. package/dist/content-hash.d.ts +7 -0
  34. package/dist/content-hash.d.ts.map +1 -0
  35. package/dist/content-hash.js +10 -0
  36. package/dist/content-hash.js.map +1 -0
  37. package/dist/converters/elastic.d.ts +36 -0
  38. package/dist/converters/elastic.d.ts.map +1 -0
  39. package/dist/converters/elastic.js +125 -0
  40. package/dist/converters/elastic.js.map +1 -0
  41. package/dist/converters/generic-regex.d.ts +37 -0
  42. package/dist/converters/generic-regex.d.ts.map +1 -0
  43. package/dist/converters/generic-regex.js +59 -0
  44. package/dist/converters/generic-regex.js.map +1 -0
  45. package/dist/converters/index.d.ts +32 -0
  46. package/dist/converters/index.d.ts.map +1 -0
  47. package/dist/converters/index.js +38 -0
  48. package/dist/converters/index.js.map +1 -0
  49. package/dist/converters/sarif.d.ts +18 -0
  50. package/dist/converters/sarif.d.ts.map +1 -0
  51. package/dist/converters/sarif.js +142 -0
  52. package/dist/converters/sarif.js.map +1 -0
  53. package/dist/converters/splunk.d.ts +19 -0
  54. package/dist/converters/splunk.d.ts.map +1 -0
  55. package/dist/converters/splunk.js +148 -0
  56. package/dist/converters/splunk.js.map +1 -0
  57. package/dist/coverage-analyzer.d.ts +43 -0
  58. package/dist/coverage-analyzer.d.ts.map +1 -0
  59. package/dist/coverage-analyzer.js +329 -0
  60. package/dist/coverage-analyzer.js.map +1 -0
  61. package/dist/embedding/build-corpus.d.ts +15 -0
  62. package/dist/embedding/build-corpus.d.ts.map +1 -0
  63. package/dist/embedding/build-corpus.js +105 -0
  64. package/dist/embedding/build-corpus.js.map +1 -0
  65. package/dist/embedding/model-loader.d.ts +41 -0
  66. package/dist/embedding/model-loader.d.ts.map +1 -0
  67. package/dist/embedding/model-loader.js +90 -0
  68. package/dist/embedding/model-loader.js.map +1 -0
  69. package/dist/embedding/vector-store.d.ts +41 -0
  70. package/dist/embedding/vector-store.d.ts.map +1 -0
  71. package/dist/embedding/vector-store.js +70 -0
  72. package/dist/embedding/vector-store.js.map +1 -0
  73. package/dist/engine.d.ts +222 -0
  74. package/dist/engine.d.ts.map +1 -0
  75. package/dist/engine.js +1185 -0
  76. package/dist/engine.js.map +1 -0
  77. package/dist/eval/corpus.d.ts +42 -0
  78. package/dist/eval/corpus.d.ts.map +1 -0
  79. package/dist/eval/corpus.js +427 -0
  80. package/dist/eval/corpus.js.map +1 -0
  81. package/dist/eval/eval-harness.d.ts +44 -0
  82. package/dist/eval/eval-harness.d.ts.map +1 -0
  83. package/dist/eval/eval-harness.js +296 -0
  84. package/dist/eval/eval-harness.js.map +1 -0
  85. package/dist/eval/index.d.ts +13 -0
  86. package/dist/eval/index.d.ts.map +1 -0
  87. package/dist/eval/index.js +9 -0
  88. package/dist/eval/index.js.map +1 -0
  89. package/dist/eval/metrics.d.ts +74 -0
  90. package/dist/eval/metrics.d.ts.map +1 -0
  91. package/dist/eval/metrics.js +108 -0
  92. package/dist/eval/metrics.js.map +1 -0
  93. package/dist/eval/pint-corpus.d.ts +34 -0
  94. package/dist/eval/pint-corpus.d.ts.map +1 -0
  95. package/dist/eval/pint-corpus.js +113 -0
  96. package/dist/eval/pint-corpus.js.map +1 -0
  97. package/dist/eval/rule-corpus.d.ts +9 -0
  98. package/dist/eval/rule-corpus.d.ts.map +1 -0
  99. package/dist/eval/rule-corpus.js +4780 -0
  100. package/dist/eval/rule-corpus.js.map +1 -0
  101. package/dist/eval/rule-metrics.d.ts +34 -0
  102. package/dist/eval/rule-metrics.d.ts.map +1 -0
  103. package/dist/eval/rule-metrics.js +92 -0
  104. package/dist/eval/rule-metrics.js.map +1 -0
  105. package/dist/eval/run-eval.d.ts +7 -0
  106. package/dist/eval/run-eval.d.ts.map +1 -0
  107. package/dist/eval/run-eval.js +11 -0
  108. package/dist/eval/run-eval.js.map +1 -0
  109. package/dist/eval/run-pint-benchmark.d.ts +18 -0
  110. package/dist/eval/run-pint-benchmark.d.ts.map +1 -0
  111. package/dist/eval/run-pint-benchmark.js +159 -0
  112. package/dist/eval/run-pint-benchmark.js.map +1 -0
  113. package/dist/eval/skill-benchmark.d.ts +66 -0
  114. package/dist/eval/skill-benchmark.d.ts.map +1 -0
  115. package/dist/eval/skill-benchmark.js +194 -0
  116. package/dist/eval/skill-benchmark.js.map +1 -0
  117. package/dist/flywheel.d.ts +54 -0
  118. package/dist/flywheel.d.ts.map +1 -0
  119. package/dist/flywheel.js +121 -0
  120. package/dist/flywheel.js.map +1 -0
  121. package/dist/hook-handler.d.ts +61 -0
  122. package/dist/hook-handler.d.ts.map +1 -0
  123. package/dist/hook-handler.js +178 -0
  124. package/dist/hook-handler.js.map +1 -0
  125. package/dist/index.d.ts +8 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/{src/index.ts → dist/index.js} +1 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/layer-integration.d.ts +55 -0
  130. package/dist/layer-integration.d.ts.map +1 -0
  131. package/dist/layer-integration.js +187 -0
  132. package/dist/layer-integration.js.map +1 -0
  133. package/dist/loader.d.ts +18 -0
  134. package/dist/loader.d.ts.map +1 -0
  135. package/dist/loader.js +129 -0
  136. package/dist/loader.js.map +1 -0
  137. package/dist/mcp-server.d.ts +13 -0
  138. package/dist/mcp-server.d.ts.map +1 -0
  139. package/dist/mcp-server.js +246 -0
  140. package/dist/mcp-server.js.map +1 -0
  141. package/dist/mcp-tools/coverage-gaps.d.ts +13 -0
  142. package/dist/mcp-tools/coverage-gaps.d.ts.map +1 -0
  143. package/dist/mcp-tools/coverage-gaps.js +55 -0
  144. package/dist/mcp-tools/coverage-gaps.js.map +1 -0
  145. package/dist/mcp-tools/list-rules.d.ts +17 -0
  146. package/dist/mcp-tools/list-rules.d.ts.map +1 -0
  147. package/dist/mcp-tools/list-rules.js +45 -0
  148. package/dist/mcp-tools/list-rules.js.map +1 -0
  149. package/dist/mcp-tools/scan-skill.d.ts +17 -0
  150. package/dist/mcp-tools/scan-skill.d.ts.map +1 -0
  151. package/dist/mcp-tools/scan-skill.js +65 -0
  152. package/dist/mcp-tools/scan-skill.js.map +1 -0
  153. package/dist/mcp-tools/scan.d.ts +24 -0
  154. package/dist/mcp-tools/scan.d.ts.map +1 -0
  155. package/dist/mcp-tools/scan.js +94 -0
  156. package/dist/mcp-tools/scan.js.map +1 -0
  157. package/dist/mcp-tools/submit-proposal.d.ts +12 -0
  158. package/dist/mcp-tools/submit-proposal.d.ts.map +1 -0
  159. package/dist/mcp-tools/submit-proposal.js +103 -0
  160. package/dist/mcp-tools/submit-proposal.js.map +1 -0
  161. package/dist/mcp-tools/threat-summary.d.ts +12 -0
  162. package/dist/mcp-tools/threat-summary.d.ts.map +1 -0
  163. package/dist/mcp-tools/threat-summary.js +74 -0
  164. package/dist/mcp-tools/threat-summary.js.map +1 -0
  165. package/dist/mcp-tools/validate.d.ts +15 -0
  166. package/dist/mcp-tools/validate.d.ts.map +1 -0
  167. package/dist/mcp-tools/validate.js +51 -0
  168. package/dist/mcp-tools/validate.js.map +1 -0
  169. package/dist/modules/embedding.d.ts +71 -0
  170. package/dist/modules/embedding.d.ts.map +1 -0
  171. package/dist/modules/embedding.js +141 -0
  172. package/dist/modules/embedding.js.map +1 -0
  173. package/dist/modules/index.d.ts +144 -0
  174. package/dist/modules/index.d.ts.map +1 -0
  175. package/dist/modules/index.js +82 -0
  176. package/dist/modules/index.js.map +1 -0
  177. package/dist/modules/semantic.d.ts +106 -0
  178. package/dist/modules/semantic.d.ts.map +1 -0
  179. package/dist/modules/semantic.js +359 -0
  180. package/dist/modules/semantic.js.map +1 -0
  181. package/dist/modules/session.d.ts +70 -0
  182. package/dist/modules/session.d.ts.map +1 -0
  183. package/dist/modules/session.js +128 -0
  184. package/dist/modules/session.js.map +1 -0
  185. package/dist/quality/adapters/atr.d.ts +65 -0
  186. package/dist/quality/adapters/atr.d.ts.map +1 -0
  187. package/dist/quality/adapters/atr.js +154 -0
  188. package/dist/quality/adapters/atr.js.map +1 -0
  189. package/dist/quality/adapters/index.d.ts +10 -0
  190. package/dist/quality/adapters/index.d.ts.map +1 -0
  191. package/dist/quality/adapters/index.js +10 -0
  192. package/dist/quality/adapters/index.js.map +1 -0
  193. package/dist/quality/compute-confidence.d.ts +45 -0
  194. package/dist/quality/compute-confidence.d.ts.map +1 -0
  195. package/dist/quality/compute-confidence.js +133 -0
  196. package/dist/quality/compute-confidence.js.map +1 -0
  197. package/dist/quality/index.d.ts +36 -0
  198. package/dist/quality/index.d.ts.map +1 -0
  199. package/dist/quality/index.js +39 -0
  200. package/dist/quality/index.js.map +1 -0
  201. package/dist/quality/quality-gate.d.ts +86 -0
  202. package/dist/quality/quality-gate.d.ts.map +1 -0
  203. package/dist/quality/quality-gate.js +187 -0
  204. package/dist/quality/quality-gate.js.map +1 -0
  205. package/dist/quality/types.d.ts +129 -0
  206. package/dist/quality/types.d.ts.map +1 -0
  207. package/dist/quality/types.js +10 -0
  208. package/dist/quality/types.js.map +1 -0
  209. package/dist/quality/validate-maturity.d.ts +51 -0
  210. package/dist/quality/validate-maturity.d.ts.map +1 -0
  211. package/dist/quality/validate-maturity.js +134 -0
  212. package/dist/quality/validate-maturity.js.map +1 -0
  213. package/dist/quality.d.ts +8 -0
  214. package/dist/quality.d.ts.map +1 -0
  215. package/dist/quality.js +8 -0
  216. package/dist/quality.js.map +1 -0
  217. package/dist/rule-scaffolder.d.ts +53 -0
  218. package/dist/rule-scaffolder.d.ts.map +1 -0
  219. package/dist/rule-scaffolder.js +301 -0
  220. package/dist/rule-scaffolder.js.map +1 -0
  221. package/dist/session-tracker.d.ts +58 -0
  222. package/dist/session-tracker.d.ts.map +1 -0
  223. package/dist/session-tracker.js +176 -0
  224. package/dist/session-tracker.js.map +1 -0
  225. package/dist/shadow-evaluator.d.ts +48 -0
  226. package/dist/shadow-evaluator.d.ts.map +1 -0
  227. package/dist/shadow-evaluator.js +129 -0
  228. package/dist/shadow-evaluator.js.map +1 -0
  229. package/dist/skill-fingerprint.d.ts +85 -0
  230. package/dist/skill-fingerprint.d.ts.map +1 -0
  231. package/dist/skill-fingerprint.js +284 -0
  232. package/dist/skill-fingerprint.js.map +1 -0
  233. package/dist/tc-reporter.d.ts +50 -0
  234. package/dist/tc-reporter.d.ts.map +1 -0
  235. package/dist/tc-reporter.js +164 -0
  236. package/dist/tc-reporter.js.map +1 -0
  237. package/dist/tier0-invariant.d.ts +49 -0
  238. package/dist/tier0-invariant.d.ts.map +1 -0
  239. package/dist/tier0-invariant.js +185 -0
  240. package/dist/tier0-invariant.js.map +1 -0
  241. package/dist/tier1-blacklist.d.ts +48 -0
  242. package/dist/tier1-blacklist.d.ts.map +1 -0
  243. package/dist/tier1-blacklist.js +92 -0
  244. package/dist/tier1-blacklist.js.map +1 -0
  245. package/dist/types.d.ts +232 -0
  246. package/dist/types.d.ts.map +1 -0
  247. package/dist/types.js +6 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/verdict.d.ts +26 -0
  250. package/dist/verdict.d.ts.map +1 -0
  251. package/dist/verdict.js +127 -0
  252. package/dist/verdict.js.map +1 -0
  253. package/package.json +16 -4
  254. package/.github/ISSUE_TEMPLATE/evasion-report.yml +0 -75
  255. package/.github/ISSUE_TEMPLATE/false-positive.yml +0 -31
  256. package/.github/ISSUE_TEMPLATE/mirofish-prediction.yml +0 -128
  257. package/.github/ISSUE_TEMPLATE/new-rule.yml +0 -37
  258. package/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  259. package/.github/workflows/rule-quality.yml +0 -203
  260. package/.github/workflows/validate.yml +0 -42
  261. package/CHANGELOG.md +0 -30
  262. package/CONTRIBUTING.md +0 -168
  263. package/CONTRIBUTORS.md +0 -28
  264. package/COVERAGE.md +0 -135
  265. package/LIMITATIONS.md +0 -154
  266. package/SECURITY.md +0 -48
  267. package/THREAT-MODEL.md +0 -243
  268. package/docs/contribution-paths.md +0 -202
  269. package/docs/mirofish-prediction-guide.md +0 -304
  270. package/docs/quick-start.md +0 -245
  271. package/docs/rule-writing-guide.md +0 -647
  272. package/docs/schema-spec.md +0 -594
  273. package/examples/how-to-write-a-rule.md +0 -251
  274. package/tsconfig.json +0 -17
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Tier 0: Invariant Enforcement
3
+ *
4
+ * Hard boundaries that enforce what a skill is ALLOWED to do,
5
+ * regardless of what its description says or how it phrases requests.
6
+ *
7
+ * This is NOT pattern matching. It is permission checking.
8
+ * A skill declares capabilities in its manifest. Any action outside
9
+ * the manifest is immediately denied with severity=critical.
10
+ *
11
+ * Inspired by Tesla's AEB (Automatic Emergency Braking):
12
+ * it doesn't care what the neural network thinks -- it enforces physics.
13
+ *
14
+ * @module agent-threat-rules/tier0-invariant
15
+ */
16
+ import { extractCapabilities } from './capability-extractor.js';
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+ /** Simple glob match: supports * (any chars) and ** (any path segments) */
21
+ function simpleGlobMatch(value, pattern) {
22
+ if (pattern === '*' || pattern === '**')
23
+ return true;
24
+ if (pattern === value)
25
+ return true;
26
+ // Convert glob to regex: * → [^/]*, ** → .*, escape rest
27
+ const regexStr = pattern
28
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
29
+ .replace(/\*\*/g, '<<GLOBSTAR>>')
30
+ .replace(/\*/g, '[^/]*')
31
+ .replace(/<<GLOBSTAR>>/g, '.*');
32
+ try {
33
+ return new RegExp(`^${regexStr}$`).test(value);
34
+ }
35
+ catch {
36
+ return value.startsWith(pattern.replace(/\*/g, ''));
37
+ }
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Invariant Checker
41
+ // ---------------------------------------------------------------------------
42
+ export class InvariantChecker {
43
+ manifests;
44
+ constructor(manifests) {
45
+ const map = new Map();
46
+ if (Array.isArray(manifests)) {
47
+ for (const m of manifests) {
48
+ map.set(m.skillId, m);
49
+ }
50
+ }
51
+ else {
52
+ manifests.forEach((v, k) => map.set(k, v));
53
+ }
54
+ this.manifests = map;
55
+ }
56
+ /**
57
+ * Check an event against the skill's manifest.
58
+ * Returns empty array if no violations (or no manifest for the skill).
59
+ */
60
+ check(event) {
61
+ const skillId = this.resolveSkillId(event);
62
+ if (!skillId)
63
+ return [];
64
+ const manifest = this.manifests.get(skillId);
65
+ if (!manifest)
66
+ return []; // No manifest = fail-open (unmanifested skills are not checked)
67
+ const allText = [
68
+ event.content ?? '',
69
+ event.fields?.tool_args ?? '',
70
+ event.fields?.tool_response ?? '',
71
+ ].join(' ');
72
+ const caps = extractCapabilities(allText);
73
+ const violations = [];
74
+ // Check filesystem paths
75
+ if (manifest.allowedPaths && caps.filesystemPaths.length > 0) {
76
+ for (const path of caps.filesystemPaths) {
77
+ const allowed = manifest.allowedPaths.some((pattern) => simpleGlobMatch(path, pattern));
78
+ if (!allowed) {
79
+ violations.push({
80
+ skillId,
81
+ violationType: 'path_scope',
82
+ description: `Skill "${skillId}" accessed path "${path}" outside allowed scope`,
83
+ observedValue: path,
84
+ allowedValues: manifest.allowedPaths,
85
+ });
86
+ }
87
+ }
88
+ }
89
+ // Check network hosts
90
+ if (manifest.allowedHosts && caps.networkTargets.length > 0) {
91
+ for (const host of caps.networkTargets) {
92
+ const allowed = manifest.allowedHosts.some((pattern) => host === pattern || host.endsWith('.' + pattern) || pattern === '*');
93
+ if (!allowed) {
94
+ violations.push({
95
+ skillId,
96
+ violationType: 'host_scope',
97
+ description: `Skill "${skillId}" contacted host "${host}" outside allowed scope`,
98
+ observedValue: host,
99
+ allowedValues: manifest.allowedHosts,
100
+ });
101
+ }
102
+ }
103
+ }
104
+ // Check environment variables
105
+ if (manifest.allowedEnvVars && caps.envAccesses.length > 0) {
106
+ for (const envVar of caps.envAccesses) {
107
+ const allowed = manifest.allowedEnvVars.some((pattern) => envVar === pattern || (pattern.endsWith('*') && envVar.startsWith(pattern.slice(0, -1))));
108
+ if (!allowed) {
109
+ violations.push({
110
+ skillId,
111
+ violationType: 'env_scope',
112
+ description: `Skill "${skillId}" accessed env var "${envVar}" outside allowed scope`,
113
+ observedValue: envVar,
114
+ allowedValues: manifest.allowedEnvVars,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ // Check command execution
120
+ if (manifest.allowedCommands && caps.processExecs.length > 0) {
121
+ for (const cmd of caps.processExecs) {
122
+ const allowed = manifest.allowedCommands.some((pattern) => cmd === pattern || cmd.startsWith(pattern + ' '));
123
+ if (!allowed) {
124
+ violations.push({
125
+ skillId,
126
+ violationType: 'command_scope',
127
+ description: `Skill "${skillId}" executed command "${cmd}" outside allowed scope`,
128
+ observedValue: cmd,
129
+ allowedValues: manifest.allowedCommands,
130
+ });
131
+ }
132
+ }
133
+ }
134
+ // Check config modification
135
+ if (manifest.allowConfigModification === false && caps.configModifications) {
136
+ violations.push({
137
+ skillId,
138
+ violationType: 'config_modification',
139
+ description: `Skill "${skillId}" attempted to modify agent configuration files`,
140
+ observedValue: 'config file access detected',
141
+ allowedValues: ['none'],
142
+ });
143
+ }
144
+ return violations;
145
+ }
146
+ /** Build a synthetic ATRMatch from an invariant violation */
147
+ buildDenyMatch(violation) {
148
+ const syntheticRule = {
149
+ title: `Invariant Violation: ${violation.violationType}`,
150
+ id: `tier0-invariant-${violation.violationType}`,
151
+ status: 'stable',
152
+ description: violation.description,
153
+ author: 'atr-engine/tier0',
154
+ date: new Date().toISOString().slice(0, 10),
155
+ severity: 'critical',
156
+ tags: {
157
+ category: 'privilege-escalation',
158
+ subcategory: violation.violationType,
159
+ confidence: 'high',
160
+ },
161
+ agent_source: { type: 'skill_permission' },
162
+ detection: { conditions: [], condition: 'tier0-invariant' },
163
+ response: {
164
+ actions: ['block_input', 'alert', 'snapshot'],
165
+ message_template: violation.description,
166
+ },
167
+ };
168
+ return {
169
+ rule: syntheticRule,
170
+ matchedConditions: [violation.violationType],
171
+ matchedPatterns: [`${violation.observedValue} not in [${violation.allowedValues.join(', ')}]`],
172
+ confidence: 1.0,
173
+ timestamp: new Date().toISOString(),
174
+ scan_context: 'native',
175
+ };
176
+ }
177
+ /** Resolve skill ID from event metadata */
178
+ resolveSkillId(event) {
179
+ const fromMetadata = event.metadata?.skillId;
180
+ if (typeof fromMetadata === 'string')
181
+ return fromMetadata;
182
+ return event.fields?.skill_id ?? event.fields?.tool_name ?? undefined;
183
+ }
184
+ }
185
+ //# sourceMappingURL=tier0-invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier0-invariant.js","sourceRoot":"","sources":["../src/tier0-invariant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Tier 1: Blacklist Provider
3
+ *
4
+ * Hash/name-based lookup for known-bad skills.
5
+ * O(1) lookup, zero false positives, zero latency.
6
+ *
7
+ * Sources: Threat Cloud skill_blacklist, CVE advisories, community reports.
8
+ *
9
+ * @module agent-threat-rules/tier1-blacklist
10
+ */
11
+ import type { ATRMatch, ATRSeverity } from './types.js';
12
+ export interface BlacklistEntry {
13
+ readonly skillHash: string;
14
+ readonly skillName: string;
15
+ readonly reason: string;
16
+ readonly reportCount: number;
17
+ readonly severity: ATRSeverity;
18
+ }
19
+ export interface BlacklistProvider {
20
+ /** Check if a skill is blacklisted. Returns entry if found. */
21
+ lookup(skillId: string): BlacklistEntry | undefined;
22
+ /** Refresh the blacklist from source */
23
+ refresh(): Promise<void>;
24
+ /** Total blacklist size */
25
+ size(): number;
26
+ }
27
+ export declare class InMemoryBlacklist implements BlacklistProvider {
28
+ private byHash;
29
+ private byName;
30
+ constructor(entries?: readonly BlacklistEntry[]);
31
+ lookup(skillId: string): BlacklistEntry | undefined;
32
+ refresh(): Promise<void>;
33
+ size(): number;
34
+ /** Replace all entries (immutable update) */
35
+ withEntries(entries: readonly BlacklistEntry[]): InMemoryBlacklist;
36
+ }
37
+ /** Build a synthetic ATRMatch from a blacklist hit */
38
+ export declare function buildBlacklistMatch(entry: BlacklistEntry): ATRMatch;
39
+ /**
40
+ * Resolve skill identifier from event for blacklist lookup.
41
+ * Prioritizes package-level identifiers (hash, package name) over
42
+ * tool function names, since blacklists store package names.
43
+ */
44
+ export declare function resolveSkillId(event: {
45
+ fields?: Record<string, string>;
46
+ metadata?: Record<string, unknown>;
47
+ }): string | undefined;
48
+ //# sourceMappingURL=tier1-blacklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier1-blacklist.d.ts","sourceRoot":"","sources":["../src/tier1-blacklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAMjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,wCAAwC;IACxC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,2BAA2B;IAC3B,IAAI,IAAI,MAAM,CAAC;CAChB;AAMD,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,MAAM,CAA8B;gBAEhC,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE;IAW/C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAK7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,IAAI,IAAI,MAAM;IAId,6CAA6C;IAC7C,WAAW,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,iBAAiB;CAGnE;AAMD,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,CA8BnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAYjI"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Tier 1: Blacklist Provider
3
+ *
4
+ * Hash/name-based lookup for known-bad skills.
5
+ * O(1) lookup, zero false positives, zero latency.
6
+ *
7
+ * Sources: Threat Cloud skill_blacklist, CVE advisories, community reports.
8
+ *
9
+ * @module agent-threat-rules/tier1-blacklist
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // In-Memory Implementation
13
+ // ---------------------------------------------------------------------------
14
+ export class InMemoryBlacklist {
15
+ byHash;
16
+ byName;
17
+ constructor(entries) {
18
+ this.byHash = new Map();
19
+ this.byName = new Map();
20
+ if (entries) {
21
+ for (const entry of entries) {
22
+ this.byHash.set(entry.skillHash, entry);
23
+ this.byName.set(entry.skillName.toLowerCase(), entry);
24
+ }
25
+ }
26
+ }
27
+ lookup(skillId) {
28
+ // Try hash lookup first, then name lookup
29
+ return this.byHash.get(skillId) ?? this.byName.get(skillId.toLowerCase());
30
+ }
31
+ async refresh() {
32
+ // No-op for static blacklist. Override for TC-backed implementations.
33
+ }
34
+ size() {
35
+ return this.byHash.size;
36
+ }
37
+ /** Replace all entries (immutable update) */
38
+ withEntries(entries) {
39
+ return new InMemoryBlacklist(entries);
40
+ }
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Match Builder
44
+ // ---------------------------------------------------------------------------
45
+ /** Build a synthetic ATRMatch from a blacklist hit */
46
+ export function buildBlacklistMatch(entry) {
47
+ const syntheticRule = {
48
+ title: `Blacklisted Skill: ${entry.skillName}`,
49
+ id: `tier1-blacklist-${entry.skillHash.slice(0, 8)}`,
50
+ status: 'stable',
51
+ description: `Skill "${entry.skillName}" is on the community blacklist. ${entry.reason}. Reported by ${entry.reportCount} users.`,
52
+ author: 'atr-engine/tier1-blacklist',
53
+ date: new Date().toISOString().slice(0, 10),
54
+ severity: entry.severity,
55
+ tags: {
56
+ category: 'skill-compromise',
57
+ subcategory: 'blacklisted',
58
+ confidence: 'high',
59
+ },
60
+ agent_source: { type: 'skill_lifecycle' },
61
+ detection: { conditions: [], condition: 'tier1-blacklist-match' },
62
+ response: {
63
+ actions: ['block_tool', 'alert'],
64
+ message_template: `Blocked: "${entry.skillName}" is a known malicious skill (${entry.reportCount} community reports)`,
65
+ },
66
+ };
67
+ return {
68
+ rule: syntheticRule,
69
+ matchedConditions: ['blacklist_hash', 'blacklist_name'],
70
+ matchedPatterns: [`hash:${entry.skillHash}`, `name:${entry.skillName}`],
71
+ confidence: 1.0,
72
+ timestamp: new Date().toISOString(),
73
+ scan_context: 'native',
74
+ };
75
+ }
76
+ /**
77
+ * Resolve skill identifier from event for blacklist lookup.
78
+ * Prioritizes package-level identifiers (hash, package name) over
79
+ * tool function names, since blacklists store package names.
80
+ */
81
+ export function resolveSkillId(event) {
82
+ return (event.metadata?.skillHash ??
83
+ event.metadata?.packageName ??
84
+ event.metadata?.skillId ??
85
+ event.fields?.skill_hash ??
86
+ event.fields?.package_name ??
87
+ event.fields?.skill_name ??
88
+ event.fields?.skill_id ??
89
+ event.fields?.tool_name ??
90
+ undefined);
91
+ }
92
+ //# sourceMappingURL=tier1-blacklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier1-blacklist.js","sourceRoot":"","sources":["../src/tier1-blacklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * ATR (Agent Threat Rules) type definitions
3
+ * @module agent-threat-rules/types
4
+ */
5
+ export type ATRStatus = 'draft' | 'experimental' | 'stable' | 'deprecated';
6
+ export type ATRSeverity = 'critical' | 'high' | 'medium' | 'low' | 'informational';
7
+ export type ATRCategory = 'prompt-injection' | 'tool-poisoning' | 'context-exfiltration' | 'agent-manipulation' | 'privilege-escalation' | 'excessive-autonomy' | 'data-poisoning' | 'model-abuse' | 'skill-compromise';
8
+ export type ATRConfidence = 'high' | 'medium' | 'low';
9
+ export type ATRSourceType = 'llm_io' | 'tool_call' | 'mcp_exchange' | 'agent_behavior' | 'multi_agent_comm' | 'context_window' | 'memory_access' | 'skill_lifecycle' | 'skill_permission' | 'skill_chain';
10
+ export type ATRMatchType = 'contains' | 'regex' | 'exact' | 'starts_with';
11
+ export type ATROperator = 'gt' | 'lt' | 'eq' | 'gte' | 'lte' | 'deviation_from_baseline';
12
+ export type ATRAction = 'block_input' | 'block_output' | 'block_tool' | 'quarantine_session' | 'reset_context' | 'alert' | 'snapshot' | 'escalate' | 'reduce_permissions' | 'kill_agent';
13
+ export interface ATRReferences {
14
+ owasp_llm?: string[];
15
+ owasp_agentic?: string[];
16
+ mitre_atlas?: string[];
17
+ mitre_attack?: string[];
18
+ cve?: string[];
19
+ }
20
+ export type ATRScanTarget = 'mcp' | 'skill' | 'both' | 'runtime';
21
+ export interface ATRTags {
22
+ category: ATRCategory;
23
+ subcategory?: string;
24
+ confidence?: ATRConfidence;
25
+ scan_target?: ATRScanTarget;
26
+ }
27
+ export interface ATRAgentSource {
28
+ type: ATRSourceType;
29
+ framework?: string[];
30
+ provider?: string[];
31
+ }
32
+ export interface ATRPatternCondition {
33
+ field: string;
34
+ patterns: string[];
35
+ match_type: ATRMatchType;
36
+ case_sensitive?: boolean;
37
+ }
38
+ export interface ATRBehavioralCondition {
39
+ metric: string;
40
+ operator: ATROperator;
41
+ threshold: number;
42
+ window?: string;
43
+ }
44
+ export interface ATRSequenceStep {
45
+ field?: string;
46
+ patterns?: string[];
47
+ match_type?: ATRMatchType;
48
+ metric?: string;
49
+ operator?: ATROperator;
50
+ threshold?: number;
51
+ }
52
+ export interface ATRSequenceCondition {
53
+ ordered: boolean;
54
+ within: string;
55
+ steps: ATRSequenceStep[];
56
+ }
57
+ /** Array-format condition: {field, operator, value} used by most rules */
58
+ export interface ATRArrayCondition {
59
+ field: string;
60
+ operator: string;
61
+ value: string;
62
+ description?: string;
63
+ }
64
+ /** Named-map conditions or array conditions */
65
+ export type ATRConditions = ATRArrayCondition[] | Record<string, ATRPatternCondition | ATRBehavioralCondition | ATRSequenceCondition>;
66
+ export interface ATRDetection {
67
+ conditions: ATRConditions;
68
+ /** "any" = OR across all conditions, "all" = AND. For named format: boolean expression string. */
69
+ condition: string;
70
+ false_positives?: string[];
71
+ }
72
+ export interface ATRResponse {
73
+ actions: ATRAction[];
74
+ auto_response_threshold?: string;
75
+ message_template?: string;
76
+ }
77
+ export interface ATRTestCase {
78
+ input?: string;
79
+ tool_response?: string;
80
+ agent_output?: string;
81
+ tool_name?: string;
82
+ tool_args?: string;
83
+ expected: 'trigger' | 'no_trigger' | 'triggered' | 'not_triggered';
84
+ }
85
+ export interface ATRTestCases {
86
+ true_positives: ATRTestCase[];
87
+ true_negatives: ATRTestCase[];
88
+ }
89
+ export interface ATRRule {
90
+ title: string;
91
+ id: string;
92
+ rule_version?: number;
93
+ status: ATRStatus;
94
+ description: string;
95
+ author: string;
96
+ date: string;
97
+ modified?: string;
98
+ schema_version?: string;
99
+ detection_tier?: string;
100
+ maturity?: string;
101
+ severity: ATRSeverity;
102
+ references?: ATRReferences;
103
+ tags: ATRTags;
104
+ agent_source: ATRAgentSource;
105
+ detection: ATRDetection;
106
+ response: ATRResponse;
107
+ test_cases?: ATRTestCases;
108
+ /** Evasion tests documenting known bypass techniques */
109
+ evasion_tests?: ATREvasionTest[];
110
+ /** Numeric confidence score (0-100), computed from precision + wild validation + evasion docs */
111
+ confidence?: number;
112
+ /** Date of last wild scan validation (YYYY/MM/DD format) */
113
+ wild_validated?: string;
114
+ /** Number of real-world samples tested in wild scan */
115
+ wild_samples?: number;
116
+ /** False positive rate measured on wild scan data (0.0 - 100.0) */
117
+ wild_fp_rate?: number;
118
+ /** Reason for deprecation (required when status is 'deprecated') */
119
+ deprecated_reason?: string;
120
+ /** ID of replacement rule (when status is 'deprecated') */
121
+ replaced_by?: string;
122
+ }
123
+ export interface ATREvasionTest {
124
+ input: string;
125
+ expected: 'triggered' | 'not_triggered';
126
+ bypass_technique: string;
127
+ notes?: string;
128
+ }
129
+ /** Event types that the ATR engine can evaluate */
130
+ export type AgentEventType = 'llm_input' | 'llm_output' | 'tool_call' | 'tool_response' | 'agent_behavior' | 'multi_agent_message' | 'mcp_exchange';
131
+ /** An agent event to evaluate against ATR rules */
132
+ export interface AgentEvent {
133
+ type: AgentEventType;
134
+ timestamp: string;
135
+ /** The text content to analyze */
136
+ content: string;
137
+ /** Specific field values for pattern matching */
138
+ fields?: Record<string, string>;
139
+ /** Behavioral metrics for threshold-based detection */
140
+ metrics?: Record<string, number>;
141
+ /** Session identifier for correlation */
142
+ sessionId?: string;
143
+ /** Source agent identifier */
144
+ agentId?: string;
145
+ /** Additional metadata */
146
+ metadata?: Record<string, unknown>;
147
+ /** Scan context: when 'skill', all rules fire regardless of agent_source.type,
148
+ * with cross-context confidence downweighting for MCP-only rules. */
149
+ scanContext?: 'mcp' | 'skill';
150
+ }
151
+ /** Result when an ATR rule matches an event */
152
+ export type ScanContextType = 'native' | 'cross-context';
153
+ export interface ATRMatch {
154
+ rule: ATRRule;
155
+ matchedConditions: string[];
156
+ matchedPatterns: string[];
157
+ confidence: number;
158
+ timestamp: string;
159
+ /** Whether this match is native (rule designed for this scan path) or cross-context
160
+ * (e.g., MCP rule firing on SKILL.md content with confidence downweight). */
161
+ scan_context: ScanContextType;
162
+ }
163
+ /** Verdict outcome from evaluating matched rules */
164
+ export type VerdictOutcome = 'allow' | 'ask' | 'deny';
165
+ /** Verdict returned after evaluating an event against all rules */
166
+ export interface ATRVerdict {
167
+ readonly outcome: VerdictOutcome;
168
+ readonly reason: string;
169
+ readonly matchCount: number;
170
+ readonly highestSeverity: ATRSeverity | null;
171
+ readonly highestConfidence: number;
172
+ readonly actions: readonly ATRAction[];
173
+ readonly matches: readonly ATRMatch[];
174
+ readonly timestamp: string;
175
+ }
176
+ /** Result of executing a single action */
177
+ export interface ActionResult {
178
+ readonly action: ATRAction;
179
+ readonly success: boolean;
180
+ readonly message: string;
181
+ readonly timestamp: string;
182
+ }
183
+ /** Context provided to platform adapters when executing actions */
184
+ export interface ExecutionContext {
185
+ readonly event: AgentEvent;
186
+ readonly matches: readonly ATRMatch[];
187
+ readonly verdict: ATRVerdict;
188
+ readonly sessionId?: string;
189
+ readonly metadata?: Readonly<Record<string, unknown>>;
190
+ }
191
+ /** Platform-specific adapter for executing ATR actions */
192
+ export interface PlatformAdapter {
193
+ readonly name: string;
194
+ blockInput(ctx: ExecutionContext): Promise<ActionResult>;
195
+ blockOutput(ctx: ExecutionContext): Promise<ActionResult>;
196
+ blockTool(ctx: ExecutionContext): Promise<ActionResult>;
197
+ quarantineSession(ctx: ExecutionContext): Promise<ActionResult>;
198
+ resetContext(ctx: ExecutionContext): Promise<ActionResult>;
199
+ alert(ctx: ExecutionContext): Promise<ActionResult>;
200
+ snapshot(ctx: ExecutionContext): Promise<ActionResult>;
201
+ escalate(ctx: ExecutionContext): Promise<ActionResult>;
202
+ reducePermissions(ctx: ExecutionContext): Promise<ActionResult>;
203
+ killAgent(ctx: ExecutionContext): Promise<ActionResult>;
204
+ }
205
+ /** Hook input from Claude Code / agent host */
206
+ export interface HookInput {
207
+ readonly hook: 'PreToolUse' | 'PostToolUse';
208
+ readonly tool_name: string;
209
+ readonly tool_input: Readonly<Record<string, unknown>>;
210
+ readonly session_id?: string;
211
+ readonly timestamp?: string;
212
+ }
213
+ /** Hook output to Claude Code / agent host */
214
+ export interface HookOutput {
215
+ readonly decision: VerdictOutcome;
216
+ readonly reason?: string;
217
+ readonly message?: string;
218
+ readonly matched_rules?: readonly string[];
219
+ }
220
+ /** Scan type: MCP runtime event scan vs SKILL.md static file scan */
221
+ export type ScanType = 'mcp' | 'skill';
222
+ /** Unified scan result produced by both evaluate() and scanSkill() paths */
223
+ export interface ScanResult {
224
+ readonly scan_type: ScanType;
225
+ readonly content_hash: string;
226
+ readonly input_file?: string;
227
+ readonly timestamp: string;
228
+ readonly rules_loaded: number;
229
+ readonly matches: readonly ATRMatch[];
230
+ readonly threat_count: number;
231
+ }
232
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;AAEnF,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,gBAAgB,GAChB,aAAa,GACb,kBAAkB,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,yBAAyB,CAAC;AAEzF,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,oBAAoB,GACpB,eAAe,GACf,OAAO,GACP,UAAU,GACV,UAAU,GACV,oBAAoB,GACpB,YAAY,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GACrB,iBAAiB,EAAE,GACnB,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,oBAAoB,CAAC,CAAC;AAExF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,aAAa,CAAC;IAC1B,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,CAAC;CACpE;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,cAAc,CAAC;IAC7B,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,wDAAwD;IACxD,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,GAAG,eAAe,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,YAAY,GACZ,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,cAAc,CAAC;AAEnB,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;0EACsE;IACtE,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;CAC/B;AAED,+CAA+C;AAC/C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;kFAC8E;IAC9E,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtD,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACzD,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACzD;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvC,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ATR (Agent Threat Rules) type definitions
3
+ * @module agent-threat-rules/types
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,26 @@
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
+ import type { ATRMatch, ATRSeverity, ATRVerdict } from './types.js';
10
+ /** Severity rank from most severe (0) to least severe (4) */
11
+ export declare const SEVERITY_RANK: Readonly<Record<ATRSeverity, number>>;
12
+ /**
13
+ * Check whether auto-response is enabled for a matched rule.
14
+ * The auto_response_threshold field on ATRResponse indicates the
15
+ * minimum confidence level at which the action should be taken
16
+ * automatically (without human approval).
17
+ */
18
+ export declare function isAutoResponseEnabled(match: ATRMatch): boolean;
19
+ /**
20
+ * Compute a verdict from an array of ATR matches.
21
+ *
22
+ * This is a pure function -- no side effects, no mutation.
23
+ * Returns a frozen ATRVerdict object.
24
+ */
25
+ export declare function computeVerdict(matches: readonly ATRMatch[]): ATRVerdict;
26
+ //# sourceMappingURL=verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EAEX,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAM/D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,GACd,OAAO,CAcT;AAwED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,UAAU,CAkCZ"}