@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.
- package/dist/178.index.js +1 -1
- package/dist/384.index.js +1 -1
- package/dist/637.index.js +1 -1
- package/dist/838.index.js +1 -1
- package/dist/839.index.js +170 -0
- package/dist/985.index.js +51 -1
- package/dist/agentic-security.mjs +83 -83
- package/dist/agentic-security.mjs.sha256 +1 -1
- package/package.json +3 -3
- package/src/.agentic-security/findings.json +21283 -8189
- package/src/.agentic-security/last-scan.json +21283 -8189
- package/src/.agentic-security/last-scan.json.sig +1 -1
- package/src/.agentic-security/scan-history.json +512 -128
- package/src/.agentic-security/streak.json +3 -3
- package/src/engine.js +41 -0
- package/src/mcp/.agentic-security/findings.json +4 -4
- package/src/mcp/.agentic-security/last-scan.json +4 -4
- package/src/mcp/.agentic-security/last-scan.json.sig +1 -1
- package/src/mcp/.agentic-security/scan-history.json +188 -0
- package/src/mcp/.agentic-security/streak.json +5 -5
- package/src/mcp/tools.js +51 -1
- package/src/posture/.agentic-security/dpia.md +26 -0
- package/src/posture/.agentic-security/findings.json +17234 -4057
- package/src/posture/.agentic-security/last-scan.json +17234 -4057
- package/src/posture/.agentic-security/last-scan.json.sig +1 -1
- package/src/posture/.agentic-security/pqc-migration-plan.json +65 -0
- package/src/posture/.agentic-security/pqc-migration-plan.md +30 -0
- package/src/posture/.agentic-security/sbom-history/7d45b5e03804aac084b4a2b4dc8c6f10107d2005.json +6 -0
- package/src/posture/.agentic-security/scan-history.json +1942 -200
- package/src/posture/.agentic-security/streak.json +3 -3
- package/src/posture/.agentic-security/threat-model.json +2038 -0
- package/src/posture/.agentic-security/threat-model.md +73 -0
- package/src/posture/auditor-walkthrough.js +252 -0
- package/src/posture/claude-authorship.js +197 -0
- package/src/posture/compliance-frameworks/.agentic-security/findings.json +80 -0
- package/src/posture/compliance-frameworks/.agentic-security/last-scan.json +80 -0
- package/src/posture/compliance-frameworks/.agentic-security/last-scan.json.sig +1 -0
- package/src/posture/compliance-frameworks/.agentic-security/scan-history.json +90 -0
- package/src/posture/compliance-frameworks/.agentic-security/streak.json +22 -0
- package/src/posture/compliance-frameworks/ccpa.json +32 -0
- package/src/posture/compliance-frameworks/eu-ai-act.json +51 -0
- package/src/posture/compliance-frameworks/gdpr.json +45 -0
- package/src/posture/compliance-frameworks/hipaa-security-rule.json +56 -0
- package/src/posture/compliance-frameworks/nist-ai-600-1.json +51 -0
- package/src/posture/compliance-frameworks/nist-csf-2.json +73 -0
- package/src/posture/compliance-frameworks/owasp-asvs-5.json +79 -0
- package/src/posture/compliance-frameworks/owasp-llm-top-10.json +69 -0
- package/src/posture/cross-repo-memory.js +180 -0
- package/src/posture/dep-add-guard.js +197 -0
- package/src/posture/findings-memory.js +152 -0
- package/src/posture/fix-style-mirror.js +118 -0
- package/src/posture/git-history.js +141 -0
- package/src/posture/intent-context.js +175 -0
- package/src/posture/model-rescan.js +76 -0
- package/src/posture/pattern-propagation.js +39 -0
- package/src/posture/pr-augment.js +234 -0
- package/src/posture/risk-dollars.js +158 -0
- package/src/posture/router.js +4 -4
- package/src/posture/threat-model-grounding.js +169 -0
- package/src/posture/time-to-fix.js +129 -0
- package/src/posture/triage-memory.js +151 -0
- package/src/posture/triage.js +15 -1
- package/src/posture/watch-mode.js +171 -0
- package/src/posture/workflow-installer.js +231 -0
- package/src/report/.agentic-security/sbom-history/7d45b5e03804aac084b4a2b4dc8c6f10107d2005.json +6 -0
- package/src/report/.agentic-security/threat-model.json +7 -0
- package/src/report/.agentic-security/threat-model.md +22 -0
- 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-
|
|
4
|
-
"totalScans":
|
|
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":
|
|
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": "
|
|
3
|
-
"startedAt": "2026-05-
|
|
4
|
-
"durationMs":
|
|
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":
|
|
8420
|
+
"controlsDetected": 75
|
|
8421
8421
|
},
|
|
8422
8422
|
"threatModel": {
|
|
8423
8423
|
"summary": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"scanId": "
|
|
3
|
-
"startedAt": "2026-05-
|
|
4
|
-
"durationMs":
|
|
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":
|
|
8420
|
+
"controlsDetected": 75
|
|
8421
8421
|
},
|
|
8422
8422
|
"threatModel": {
|
|
8423
8423
|
"summary": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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-
|
|
4
|
-
"totalScans":
|
|
5
|
-
"daysCleanCritical":
|
|
6
|
-
"lastCleanDate": "2026-05-
|
|
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":
|
|
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)
|