@clear-capabilities/agentic-security-scanner 0.80.0 → 0.86.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 (68) hide show
  1. package/dist/178.index.js +1 -1
  2. package/dist/384.index.js +1 -1
  3. package/dist/637.index.js +1 -1
  4. package/dist/838.index.js +1 -1
  5. package/dist/839.index.js +170 -0
  6. package/dist/985.index.js +51 -1
  7. package/dist/agentic-security.mjs +83 -83
  8. package/dist/agentic-security.mjs.sha256 +1 -1
  9. package/package.json +3 -3
  10. package/src/.agentic-security/findings.json +21283 -8189
  11. package/src/.agentic-security/last-scan.json +21283 -8189
  12. package/src/.agentic-security/last-scan.json.sig +1 -1
  13. package/src/.agentic-security/scan-history.json +512 -128
  14. package/src/.agentic-security/streak.json +3 -3
  15. package/src/engine.js +41 -0
  16. package/src/mcp/.agentic-security/findings.json +4 -4
  17. package/src/mcp/.agentic-security/last-scan.json +4 -4
  18. package/src/mcp/.agentic-security/last-scan.json.sig +1 -1
  19. package/src/mcp/.agentic-security/scan-history.json +188 -0
  20. package/src/mcp/.agentic-security/streak.json +5 -5
  21. package/src/mcp/tools.js +51 -1
  22. package/src/posture/.agentic-security/dpia.md +26 -0
  23. package/src/posture/.agentic-security/findings.json +17234 -4057
  24. package/src/posture/.agentic-security/last-scan.json +17234 -4057
  25. package/src/posture/.agentic-security/last-scan.json.sig +1 -1
  26. package/src/posture/.agentic-security/pqc-migration-plan.json +65 -0
  27. package/src/posture/.agentic-security/pqc-migration-plan.md +30 -0
  28. package/src/posture/.agentic-security/sbom-history/7d45b5e03804aac084b4a2b4dc8c6f10107d2005.json +6 -0
  29. package/src/posture/.agentic-security/scan-history.json +1942 -200
  30. package/src/posture/.agentic-security/streak.json +3 -3
  31. package/src/posture/.agentic-security/threat-model.json +2038 -0
  32. package/src/posture/.agentic-security/threat-model.md +73 -0
  33. package/src/posture/auditor-walkthrough.js +252 -0
  34. package/src/posture/claude-authorship.js +197 -0
  35. package/src/posture/compliance-frameworks/.agentic-security/findings.json +80 -0
  36. package/src/posture/compliance-frameworks/.agentic-security/last-scan.json +80 -0
  37. package/src/posture/compliance-frameworks/.agentic-security/last-scan.json.sig +1 -0
  38. package/src/posture/compliance-frameworks/.agentic-security/scan-history.json +90 -0
  39. package/src/posture/compliance-frameworks/.agentic-security/streak.json +22 -0
  40. package/src/posture/compliance-frameworks/ccpa.json +32 -0
  41. package/src/posture/compliance-frameworks/eu-ai-act.json +51 -0
  42. package/src/posture/compliance-frameworks/gdpr.json +45 -0
  43. package/src/posture/compliance-frameworks/hipaa-security-rule.json +56 -0
  44. package/src/posture/compliance-frameworks/nist-ai-600-1.json +51 -0
  45. package/src/posture/compliance-frameworks/nist-csf-2.json +73 -0
  46. package/src/posture/compliance-frameworks/owasp-asvs-5.json +79 -0
  47. package/src/posture/compliance-frameworks/owasp-llm-top-10.json +69 -0
  48. package/src/posture/cross-repo-memory.js +180 -0
  49. package/src/posture/dep-add-guard.js +197 -0
  50. package/src/posture/findings-memory.js +152 -0
  51. package/src/posture/fix-style-mirror.js +118 -0
  52. package/src/posture/git-history.js +141 -0
  53. package/src/posture/intent-context.js +175 -0
  54. package/src/posture/model-rescan.js +76 -0
  55. package/src/posture/pattern-propagation.js +39 -0
  56. package/src/posture/pr-augment.js +234 -0
  57. package/src/posture/risk-dollars.js +158 -0
  58. package/src/posture/router.js +4 -4
  59. package/src/posture/threat-model-grounding.js +169 -0
  60. package/src/posture/time-to-fix.js +129 -0
  61. package/src/posture/triage-memory.js +151 -0
  62. package/src/posture/triage.js +15 -1
  63. package/src/posture/watch-mode.js +171 -0
  64. package/src/posture/workflow-installer.js +231 -0
  65. package/src/report/.agentic-security/sbom-history/7d45b5e03804aac084b4a2b4dc8c6f10107d2005.json +6 -0
  66. package/src/report/.agentic-security/threat-model.json +7 -0
  67. package/src/report/.agentic-security/threat-model.md +22 -0
  68. package/src/report/index.js +1 -1
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "firstScanDate": "2026-05-28T17:41:23.688Z",
3
- "lastScanDate": "2026-05-29T16:40:09.988Z",
4
- "totalScans": 48,
3
+ "lastScanDate": "2026-05-29T22:33:27.822Z",
4
+ "totalScans": 58,
5
5
  "daysCleanCritical": 0,
6
6
  "lastCleanDate": null,
7
7
  "lastCriticalDate": "2026-05-29",
8
8
  "hasEverHadCritical": true,
9
9
  "bestDaysCleanCritical": 0,
10
10
  "totalFindingsAtFirstScan": 432,
11
- "totalFindingsAtLastScan": 524,
11
+ "totalFindingsAtLastScan": 584,
12
12
  "totalFixesInferred": 0,
13
13
  "lastGrade": "C",
14
14
  "bestGrade": "C",
package/src/engine.js CHANGED
@@ -159,6 +159,13 @@ import { buildMigrationPlan as buildPqcPlan, persistMigrationPlan as persistPqcP
159
159
  import { analyzeLicenseGraph, loadLicenseGraphPolicy } from './posture/license-graph.js';
160
160
  import { generateAttributions, persistAttributions } from './posture/license-attributions.js';
161
161
  import { annotateAttackTaxonomy, summarizeTaxonomy } from './posture/attack-taxonomy.js';
162
+ import { suppressByPastDecisions } from './posture/triage-memory.js';
163
+ import { suppressByIntent } from './posture/intent-context.js';
164
+ import { annotateGitHistory } from './posture/git-history.js';
165
+ import { applyThreatModel } from './posture/threat-model-grounding.js';
166
+ import { annotateCrossRepoSignals } from './posture/pattern-propagation.js';
167
+ import { annotateRiskDollars } from './posture/risk-dollars.js';
168
+ import { annotateTimeToFix } from './posture/time-to-fix.js';
162
169
  import { annotateTypeNarrowing } from './posture/type-narrowing.js';
163
170
  import { annotateWhyFired } from './posture/why-fired.js';
164
171
  import { scanSpecificationDrift } from './posture/specification-mining.js';
@@ -7736,6 +7743,40 @@ async function runFullScan({fileContents={}, depFileContents={}, scanRoot=null},
7736
7743
  if (process.env.AGENTIC_SECURITY_NO_ATTACK_TAX !== '1') {
7737
7744
  _runAnnotator("annotateAttackTaxonomy", () => { annotateAttackTaxonomy(finalFindings); });
7738
7745
  }
7746
+ // Triage memory — demote findings whose (family, dir) bucket was
7747
+ // previously marked wont-fix or false-positive in this project.
7748
+ if (process.env.AGENTIC_SECURITY_NO_TRIAGE_MEMORY !== '1') {
7749
+ _runAnnotator("suppressByPastDecisions", () => { suppressByPastDecisions(scanRoot, finalFindings); });
7750
+ }
7751
+ // Intent-aware FP suppression — demote findings on files marked as
7752
+ // intentionally vulnerable (sandbox/CTF/tutorial/example/etc.).
7753
+ if (process.env.AGENTIC_SECURITY_NO_INTENT_CTX !== '1') {
7754
+ _runAnnotator("suppressByIntent", () => { suppressByIntent(scanRoot, finalFindings); });
7755
+ }
7756
+ // Git history — stamp each finding with introducedBy / introducedIn /
7757
+ // originatingPrompt by running `git blame` on the finding's line.
7758
+ if (process.env.AGENTIC_SECURITY_NO_GIT_HISTORY !== '1') {
7759
+ _runAnnotator("annotateGitHistory", () => { annotateGitHistory(scanRoot, finalFindings); });
7760
+ }
7761
+ // Threat-model grounding — bump severity on crown-jewels, demote
7762
+ // out-of-scope, tag compliance regimes, stamp attacker profile.
7763
+ if (process.env.AGENTIC_SECURITY_NO_THREAT_MODEL_GROUNDING !== '1') {
7764
+ _runAnnotator("applyThreatModel", () => { applyThreatModel(scanRoot, finalFindings); });
7765
+ }
7766
+ // Cross-repo pattern propagation — surface sibling-repo fixes and
7767
+ // triage decisions for the same family from this developer's history.
7768
+ if (process.env.AGENTIC_SECURITY_NO_CROSS_REPO !== '1') {
7769
+ _runAnnotator("annotateCrossRepoSignals", () => { annotateCrossRepoSignals(scanRoot, finalFindings); });
7770
+ }
7771
+ // Risk-in-dollars — combine EPSS + crown-jewel + reachability into an
7772
+ // expected-value-of-exploitation USD figure per finding.
7773
+ if (process.env.AGENTIC_SECURITY_NO_RISK_DOLLARS !== '1') {
7774
+ _runAnnotator("annotateRiskDollars", () => { annotateRiskDollars(scanRoot, finalFindings); });
7775
+ }
7776
+ // Time-to-fix — estimate engineering hours per finding.
7777
+ if (process.env.AGENTIC_SECURITY_NO_TIME_TO_FIX !== '1') {
7778
+ _runAnnotator("annotateTimeToFix", () => { annotateTimeToFix(scanRoot, finalFindings); });
7779
+ }
7739
7780
  }
7740
7781
  // v3 next-gen: crown-jewel mapping (FR-PROD-5) — score each file/finding by
7741
7782
  // business impact. Must run before persona prioritization (which uses it).
@@ -1,7 +1,7 @@
1
1
  {
2
- "scanId": "8b572c4d-add7-4731-b9bb-f9e1f46ae535",
3
- "startedAt": "2026-05-28T18:13:59.832Z",
4
- "durationMs": 216,
2
+ "scanId": "47925823-e41f-4a38-acec-1c5dfb77f44d",
3
+ "startedAt": "2026-05-29T20:35:23.218Z",
4
+ "durationMs": 217,
5
5
  "scanned": {
6
6
  "files": 6,
7
7
  "lines": 0
@@ -8417,7 +8417,7 @@
8417
8417
  "_v3": {
8418
8418
  "counterfactual": {
8419
8419
  "spofControls": [],
8420
- "controlsDetected": 73
8420
+ "controlsDetected": 75
8421
8421
  },
8422
8422
  "threatModel": {
8423
8423
  "summary": {
@@ -1,7 +1,7 @@
1
1
  {
2
- "scanId": "8b572c4d-add7-4731-b9bb-f9e1f46ae535",
3
- "startedAt": "2026-05-28T18:13:59.832Z",
4
- "durationMs": 216,
2
+ "scanId": "47925823-e41f-4a38-acec-1c5dfb77f44d",
3
+ "startedAt": "2026-05-29T20:35:23.218Z",
4
+ "durationMs": 217,
5
5
  "scanned": {
6
6
  "files": 6,
7
7
  "lines": 0
@@ -8417,7 +8417,7 @@
8417
8417
  "_v3": {
8418
8418
  "counterfactual": {
8419
8419
  "spofControls": [],
8420
- "controlsDetected": 73
8420
+ "controlsDetected": 75
8421
8421
  },
8422
8422
  "threatModel": {
8423
8423
  "summary": {
@@ -1 +1 @@
1
- 45066aa2e5bc1eff0060249590f9b659f87ee1b5bf259c508d585c75d5be346a
1
+ 7bb61d3bece7b47b3d112df139e09a5a95a0c51828999fa1734804ee3f7b6efc
@@ -139,5 +139,193 @@
139
139
  "toctou-fs:tools.js:753",
140
140
  "toctou-fs:tools.js:835"
141
141
  ]
142
+ },
143
+ {
144
+ "timestamp": "2026-05-29T20:12:38.328Z",
145
+ "label": "scan",
146
+ "total": 35,
147
+ "critical": 0,
148
+ "high": 0,
149
+ "medium": 35,
150
+ "low": 0,
151
+ "kev": 0,
152
+ "ids": [
153
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
154
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
155
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
156
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
157
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
158
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
159
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
160
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
161
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
162
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
163
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
164
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
165
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
166
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
167
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
168
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
169
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
170
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
171
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
172
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
173
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
174
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
175
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
176
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
177
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
178
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
179
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
180
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
181
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
182
+ "toctou-fs:audit.js:127",
183
+ "toctou-fs:audit.js:52",
184
+ "toctou-fs:tools.js:196",
185
+ "toctou-fs:tools.js:320",
186
+ "toctou-fs:tools.js:753",
187
+ "toctou-fs:tools.js:835"
188
+ ]
189
+ },
190
+ {
191
+ "timestamp": "2026-05-29T20:12:45.655Z",
192
+ "label": "scan",
193
+ "total": 35,
194
+ "critical": 0,
195
+ "high": 0,
196
+ "medium": 35,
197
+ "low": 0,
198
+ "kev": 0,
199
+ "ids": [
200
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
201
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
202
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
203
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
204
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
205
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
206
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
207
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
208
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
209
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
210
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
211
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
212
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
213
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
214
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
215
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
216
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
217
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
218
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
219
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
220
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
221
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
222
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
223
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
224
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
225
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
226
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
227
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
228
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
229
+ "toctou-fs:audit.js:127",
230
+ "toctou-fs:audit.js:52",
231
+ "toctou-fs:tools.js:196",
232
+ "toctou-fs:tools.js:320",
233
+ "toctou-fs:tools.js:753",
234
+ "toctou-fs:tools.js:835"
235
+ ]
236
+ },
237
+ {
238
+ "timestamp": "2026-05-29T20:35:14.131Z",
239
+ "label": "scan",
240
+ "total": 35,
241
+ "critical": 0,
242
+ "high": 0,
243
+ "medium": 35,
244
+ "low": 0,
245
+ "kev": 0,
246
+ "ids": [
247
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
248
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
249
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
250
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
251
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
252
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
253
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
254
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
255
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
256
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
257
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
258
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
259
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
260
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
261
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
262
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
263
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
264
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
265
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
266
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
267
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
268
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
269
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
270
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
271
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
272
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
273
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
274
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
275
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
276
+ "toctou-fs:audit.js:127",
277
+ "toctou-fs:audit.js:52",
278
+ "toctou-fs:tools.js:196",
279
+ "toctou-fs:tools.js:320",
280
+ "toctou-fs:tools.js:753",
281
+ "toctou-fs:tools.js:835"
282
+ ]
283
+ },
284
+ {
285
+ "timestamp": "2026-05-29T20:35:23.436Z",
286
+ "label": "scan",
287
+ "total": 35,
288
+ "critical": 0,
289
+ "high": 0,
290
+ "medium": 35,
291
+ "low": 0,
292
+ "kev": 0,
293
+ "ids": [
294
+ "struct:audit.js:102:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
295
+ "struct:audit.js:113:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
296
+ "struct:audit.js:127:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
297
+ "struct:audit.js:128:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
298
+ "struct:audit.js:52:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
299
+ "struct:audit.js:54:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
300
+ "struct:audit.js:88:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
301
+ "struct:server.js:32:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
302
+ "struct:server.js:49:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
303
+ "struct:tools.js:159:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
304
+ "struct:tools.js:163:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
305
+ "struct:tools.js:167:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
306
+ "struct:tools.js:196:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
307
+ "struct:tools.js:211:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
308
+ "struct:tools.js:226:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
309
+ "struct:tools.js:227:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
310
+ "struct:tools.js:281:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
311
+ "struct:tools.js:320:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
312
+ "struct:tools.js:328:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
313
+ "struct:tools.js:535:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
314
+ "struct:tools.js:671:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
315
+ "struct:tools.js:746:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
316
+ "struct:tools.js:748:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
317
+ "struct:tools.js:753:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
318
+ "struct:tools.js:756:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
319
+ "struct:tools.js:835:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
320
+ "struct:tools.js:844:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
321
+ "struct:tools.js:873:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
322
+ "struct:tools.js:875:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
323
+ "toctou-fs:audit.js:127",
324
+ "toctou-fs:audit.js:52",
325
+ "toctou-fs:tools.js:196",
326
+ "toctou-fs:tools.js:320",
327
+ "toctou-fs:tools.js:753",
328
+ "toctou-fs:tools.js:835"
329
+ ]
142
330
  }
143
331
  ]
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "firstScanDate": "2026-05-28T17:48:43.176Z",
3
- "lastScanDate": "2026-05-28T18:14:00.070Z",
4
- "totalScans": 3,
5
- "daysCleanCritical": 1,
6
- "lastCleanDate": "2026-05-28",
3
+ "lastScanDate": "2026-05-29T20:35:23.458Z",
4
+ "totalScans": 7,
5
+ "daysCleanCritical": 2,
6
+ "lastCleanDate": "2026-05-29",
7
7
  "lastCriticalDate": null,
8
8
  "hasEverHadCritical": false,
9
- "bestDaysCleanCritical": 1,
9
+ "bestDaysCleanCritical": 2,
10
10
  "totalFindingsAtFirstScan": 40,
11
11
  "totalFindingsAtLastScan": 40,
12
12
  "totalFixesInferred": 0,
package/src/mcp/tools.js CHANGED
@@ -946,6 +946,56 @@ export const read_agents_memory = {
946
946
  },
947
947
  };
948
948
 
949
+ // ─── query_triage_memory ───────────────────────────────────────────────────
950
+ // Natural-language Q&A over past triage decisions (wont-fix / false-positive
951
+ // markings + reasons). Backed by .agentic-security/triage-memory.jsonl, which
952
+ // is auto-populated by triage.transition(). Returns at most 10 most-relevant
953
+ // past decisions.
954
+
955
+ export const query_triage_memory = {
956
+ name: 'query_triage_memory',
957
+ description: 'Search past triage decisions (wont-fix / false-positive) by natural-language query. Returns up to 10 most-relevant past decisions with their reasons. Use when you see a new finding and want to know "did we already decide on something like this?" — answers in seconds without re-reading the full AGENTS.md narrative.',
958
+ inputSchema: {
959
+ type: 'object',
960
+ additionalProperties: false,
961
+ properties: {
962
+ query: { type: 'string', description: 'Free-text terms to match against past reasons / vuln text / file paths / family names.' },
963
+ },
964
+ },
965
+ async handler({ query }, ctx) {
966
+ const { queryMemory } = await import('../posture/triage-memory.js');
967
+ const results = queryMemory(ctx.sessionRoot, query || '');
968
+ return {
969
+ _meta: META,
970
+ count: results.length,
971
+ results,
972
+ };
973
+ },
974
+ };
975
+
976
+ // ─── query_findings_memory ─────────────────────────────────────────────────
977
+ // Natural-language Q&A across the scanner's accumulated institutional
978
+ // memory: current findings + past triage decisions + scan history +
979
+ // AGENTS.md narrative. Use to answer "have we seen something like this
980
+ // before?" without reading multiple files.
981
+
982
+ export const query_findings_memory = {
983
+ name: 'query_findings_memory',
984
+ description: 'Search the scanner accumulated memory (current scan findings + past wont-fix/false-positive decisions + scan history + AGENTS.md narrative) by natural-language terms. Returns top-10 results scored by term-match count and ranked finding > triage > history > AGENTS.md.',
985
+ inputSchema: {
986
+ type: 'object',
987
+ additionalProperties: false,
988
+ properties: {
989
+ query: { type: 'string', description: 'Natural-language search terms (2+ chars each).' },
990
+ },
991
+ required: ['query'],
992
+ },
993
+ async handler({ query }, ctx) {
994
+ const { queryFindingsMemory } = await import('../posture/findings-memory.js');
995
+ return { _meta: META, ...queryFindingsMemory(ctx.sessionRoot, query || '') };
996
+ },
997
+ };
998
+
949
999
  // ─── lookup_cve ────────────────────────────────────────────────────────────
950
1000
  // LangChain harness-anatomy #8: bridge the knowledge-cutoff gap by exposing
951
1001
  // the local OSV / KEV / EPSS cache as a structured tool. Read-only — never
@@ -1041,4 +1091,4 @@ export const apply_sca_upgrade = {
1041
1091
  },
1042
1092
  };
1043
1093
 
1044
- export const ALL_TOOLS = [scan_diff, query_taint, explain_finding, apply_fix, verify_fix, synthesize_fix, find_rule_module, append_scratchpad, read_scratchpad, append_agents_memory, read_agents_memory, lookup_cve, synthesize_sca_upgrade, apply_sca_upgrade];
1094
+ export const ALL_TOOLS = [scan_diff, query_taint, explain_finding, apply_fix, verify_fix, synthesize_fix, find_rule_module, append_scratchpad, read_scratchpad, append_agents_memory, read_agents_memory, lookup_cve, synthesize_sca_upgrade, apply_sca_upgrade, query_triage_memory, query_findings_memory];
@@ -0,0 +1,26 @@
1
+ # Data Protection Impact Assessment (DPIA)
2
+
3
+ Generated by agentic-security scanner on 2026-05-30.
4
+
5
+ This is an automated DPIA scaffold derived from static analysis.
6
+ It must be reviewed and completed by a privacy officer before use.
7
+
8
+ ## Data classes identified
9
+
10
+ ## Privacy-related findings
11
+
12
+ | Severity | File:Line | Class → Sink | Description |
13
+ |---|---|---|---|
14
+
15
+ ## Regulatory framework mapping
16
+
17
+ - **GDPR Art. 35** — DPIA required when processing is likely to result in high risk to data subjects.
18
+ - **CCPA §1798.130** — Notice + access rights for collected personal information.
19
+
20
+ ## Reviewer checklist
21
+
22
+ - [ ] Confirm each PII field's collection has a documented lawful basis
23
+ - [ ] Confirm retention period for each class is documented
24
+ - [ ] Confirm DSAR (data subject access request) workflow exists
25
+ - [ ] Confirm encryption at rest + in transit for each class
26
+ - [ ] Confirm logging of PII access for audit (where applicable)