@clear-capabilities/agentic-security-scanner 0.149.4 → 0.150.2

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 (96) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/bin/agentic-security.js +533 -2
  3. package/dist/1122.index.js +16 -16
  4. package/dist/1208.index.js +23 -0
  5. package/dist/1301.index.js +3 -3
  6. package/dist/1310.index.js +3161 -0
  7. package/dist/1379.index.js +3 -3
  8. package/dist/1444.index.js +3 -3
  9. package/dist/1660.index.js +1 -1
  10. package/dist/1700.index.js +5 -5
  11. package/dist/1905.index.js +107 -12
  12. package/dist/1920.index.js +10 -10
  13. package/dist/2238.index.js +4 -4
  14. package/dist/2271.index.js +3 -3
  15. package/dist/2432.index.js +8 -8
  16. package/dist/2659.index.js +1 -1
  17. package/dist/2826.index.js +2 -2
  18. package/dist/2830.index.js +3 -3
  19. package/dist/2923.index.js +1 -1
  20. package/dist/3001.index.js +4 -4
  21. package/dist/3117.index.js +4 -4
  22. package/dist/3180.index.js +9 -9
  23. package/dist/3276.index.js +1 -1
  24. package/dist/3415.index.js +1 -1
  25. package/dist/3499.index.js +1 -1
  26. package/dist/3518.index.js +4 -4
  27. package/dist/3736.index.js +7 -7
  28. package/dist/3839.index.js +4 -4
  29. package/dist/4113.index.js +441 -418
  30. package/dist/4265.index.js +4 -4
  31. package/dist/4384.index.js +8 -3
  32. package/dist/4399.index.js +292 -0
  33. package/dist/4547.index.js +2 -2
  34. package/dist/4863.index.js +6 -6
  35. package/dist/4970.index.js +2 -2
  36. package/dist/5051.index.js +15 -15
  37. package/dist/5144.index.js +4 -4
  38. package/dist/5333.index.js +8 -8
  39. package/dist/5343.index.js +2 -2
  40. package/dist/5350.index.js +6 -6
  41. package/dist/5561.index.js +1 -1
  42. package/dist/5637.index.js +10 -5
  43. package/dist/5724.index.js +21642 -0
  44. package/dist/5756.index.js +588 -0
  45. package/dist/5830.index.js +3 -3
  46. package/dist/6257.index.js +170 -0
  47. package/dist/6626.index.js +5 -5
  48. package/dist/6662.index.js +1 -1
  49. package/dist/6675.index.js +4 -4
  50. package/dist/6730.index.js +10 -10
  51. package/dist/6829.index.js +4 -4
  52. package/dist/6944.index.js +2 -2
  53. package/dist/6994.index.js +143 -0
  54. package/dist/7039.index.js +541 -0
  55. package/dist/7178.index.js +11 -6
  56. package/dist/7227.index.js +3 -3
  57. package/dist/7552.index.js +2 -2
  58. package/dist/7709.index.js +2 -2
  59. package/dist/7838.index.js +1037 -0
  60. package/dist/8218.index.js +4 -4
  61. package/dist/8476.index.js +4 -4
  62. package/dist/8513.index.js +8 -8
  63. package/dist/8520.index.js +1 -1
  64. package/dist/8752.index.js +4 -4
  65. package/dist/9207.index.js +2 -2
  66. package/dist/9220.index.js +5 -5
  67. package/dist/9390.index.js +6 -6
  68. package/dist/9503.index.js +2 -2
  69. package/dist/9560.index.js +3221 -0
  70. package/dist/957.index.js +127 -0
  71. package/dist/9801.index.js +1 -1
  72. package/dist/9824.index.js +5 -5
  73. package/dist/agentic-security.mjs +23 -23
  74. package/dist/agentic-security.mjs.sha256 +1 -1
  75. package/package.json +4 -3
  76. package/src/discovery/disprove.js +6 -1
  77. package/src/discovery/hunter.js +10 -1
  78. package/src/discovery/llm-invoke.js +77 -0
  79. package/src/egress/policy.js +11 -1
  80. package/src/egress/redact.js +1 -1
  81. package/src/engine.js +37 -1
  82. package/src/llm-validator/agent-loop.js +215 -0
  83. package/src/llm-validator/agent-tools.js +271 -0
  84. package/src/llm-validator/explain-proposal.js +106 -0
  85. package/src/llm-validator/fix-proposal.js +149 -0
  86. package/src/llm-validator/index.js +51 -3
  87. package/src/llm-validator/model-capabilities.js +269 -0
  88. package/src/llm-validator/model-probe.js +232 -0
  89. package/src/llm-validator/model-status.js +27 -0
  90. package/src/llm-validator/ollama-provider.js +382 -0
  91. package/src/llm-validator/oom-feedback.js +69 -0
  92. package/src/llm-validator/poc-proposal.js +122 -0
  93. package/src/llm-validator/providers.js +75 -0
  94. package/src/llm-validator/redact.js +177 -11
  95. package/src/report/index.js +33 -0
  96. package/src/sast/java-ast-folding.js +18 -2
@@ -2,7 +2,7 @@ export const id = 1379;
2
2
  export const ids = [1379];
3
3
  export const modules = {
4
4
 
5
- /***/ 1379:
5
+ /***/ 31379:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
 
@@ -322,9 +322,9 @@ function renderStageCell(cell, row) {
322
322
  }
323
323
 
324
324
  // EXTERNAL MODULE: ./src/dataflow/privacy-governance.js
325
- var privacy_governance = __webpack_require__(3308);
325
+ var privacy_governance = __webpack_require__(63308);
326
326
  // EXTERNAL MODULE: ./src/lineage/export-json.js
327
- var export_json = __webpack_require__(859);
327
+ var export_json = __webpack_require__(40859);
328
328
  ;// CONCATENATED MODULE: ./src/lineage/export-privacy.js
329
329
  // export-privacy.js — Milestone 4 deliverable #10 (DFG-020): graph-derived
330
330
  // DPIA/RoPA export, migrating off the Layer-2 taint engine's
@@ -2,15 +2,15 @@ export const id = 1444;
2
2
  export const ids = [1444];
3
3
  export const modules = {
4
4
 
5
- /***/ 1444:
5
+ /***/ 51444:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ sweepGitHistory: () => (/* binding */ sweepGitHistory)
10
10
  /* harmony export */ });
11
11
  /* unused harmony exports extractAddedLines, scanHistoryDiff */
12
- /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1421);
13
- /* harmony import */ var _util_git_hardening_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8844);
12
+ /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31421);
13
+ /* harmony import */ var _util_git_hardening_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78844);
14
14
  // R15 (PRD §5) — git-history secret sweep.
15
15
  //
16
16
  // A secret removed from HEAD but present in any past commit is still
@@ -2,7 +2,7 @@ export const id = 1660;
2
2
  export const ids = [1660];
3
3
  export const modules = {
4
4
 
5
- /***/ 1660:
5
+ /***/ 51660:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,17 +2,17 @@ export const id = 1700;
2
2
  export const ids = [1700];
3
3
  export const modules = {
4
4
 
5
- /***/ 1700:
5
+ /***/ 31700:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ validateOsvFunctionsExist: () => (/* binding */ validateOsvFunctionsExist)
10
10
  /* harmony export */ });
11
11
  /* unused harmony export extractPythonPackageFunctions */
12
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
13
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
14
- /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1421);
15
- /* harmony import */ var _ir_parser_py_cst_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(682);
12
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
13
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
14
+ /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31421);
15
+ /* harmony import */ var _ir_parser_py_cst_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40682);
16
16
  // Python package function extraction via the CST parser.
17
17
  //
18
18
  // Locates an installed Python package in site-packages or .venv,
@@ -2,7 +2,7 @@ export const id = 1905;
2
2
  export const ids = [1905,3499];
3
3
  export const modules = {
4
4
 
5
- /***/ 4286:
5
+ /***/ 11905:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
 
@@ -14,7 +14,7 @@ __webpack_require__.d(__webpack_exports__, {
14
14
  // UNUSED EXPORTS: makeBudget, makeTaintProbe
15
15
 
16
16
  // EXTERNAL MODULE: external "node:crypto"
17
- var external_node_crypto_ = __webpack_require__(7598);
17
+ var external_node_crypto_ = __webpack_require__(77598);
18
18
  ;// CONCATENATED MODULE: ./src/discovery/partition.js
19
19
  //
20
20
  // Split the codebase into disjoint focus areas so parallel hunters cannot
@@ -110,9 +110,13 @@ function partitionCallGraph(callGraph, opts = {}) {
110
110
  }
111
111
 
112
112
  // EXTERNAL MODULE: ./src/discovery/lenses.js
113
- var discovery_lenses = __webpack_require__(3499);
113
+ var discovery_lenses = __webpack_require__(33499);
114
114
  // EXTERNAL MODULE: ./src/egress/policy.js
115
- var policy = __webpack_require__(5712);
115
+ var policy = __webpack_require__(45712);
116
+ // EXTERNAL MODULE: ./src/llm-validator/providers.js
117
+ var providers = __webpack_require__(38947);
118
+ // EXTERNAL MODULE: ./src/llm-validator/ollama-provider.js
119
+ var ollama_provider = __webpack_require__(23837);
116
120
  ;// CONCATENATED MODULE: ./src/discovery/llm-invoke.js
117
121
  //
118
122
  // Shared LLM endpoint caller. Both the hunter and the refutation panel need
@@ -123,10 +127,65 @@ var policy = __webpack_require__(5712);
123
127
 
124
128
 
125
129
 
130
+
131
+
126
132
  const DEFAULT_TIMEOUT_MS = 60000;
127
133
 
134
+ // agentic-security-ollama-offline-prd.md §32 — hunt is one of the highest-
135
+ // value initial Ollama use cases, and this is the single injected caller both
136
+ // hunter.js and disprove.js already share (per this directory's CLAUDE.md:
137
+ // "no other module may talk to an LLM directly"). Rather than give hunt its
138
+ // own separate provider-resolution copy, `defaultLlmInvoke` now checks
139
+ // `resolveProvider()` FIRST — but only when the caller hasn't already pinned
140
+ // a literal `opts.endpoint` (the multi-endpoint consensus path in this same
141
+ // file does exactly that, one resolved URL per voter, predating the provider
142
+ // abstraction; that path must keep POSTing `{prompt}` to that literal URL
143
+ // exactly as before, so it deliberately skips provider resolution).
144
+ //
145
+ // BACKWARD COMPATIBILITY: for every existing deployment that sets
146
+ // AGENTIC_SECURITY_LLM_ENDPOINT with no PRESET, resolveProvider() resolves
147
+ // that to `provider: 'byo'`, not `'ollama'` — so this function falls straight
148
+ // through to the untouched raw-fetch path below, byte-identical to before.
149
+ // Only `PRESET=ollama` takes the new branch. `'hunt'` is passed as the role
150
+ // deliberately: it is not a member of providers.js's ROLES set, so
151
+ // `resolveProvider` never picks up a role-specific override
152
+ // (AGENTIC_SECURITY_LLM_MODEL_VALIDATE etc.) that was never meant to apply
153
+ // to a hunt call — only the global AGENTIC_SECURITY_LLM_PRESET/_MODEL.
128
154
  async function defaultLlmInvoke(prompt, opts = {}) {
129
155
  const timeoutMs = Number.isFinite(opts.timeoutMs) ? opts.timeoutMs : DEFAULT_TIMEOUT_MS;
156
+
157
+ if (!opts.endpoint) {
158
+ const resolved = (0,providers.resolveProvider)({ role: opts.role || 'hunt' });
159
+ // A REFUSAL (a preset was explicitly configured and declined — e.g. a
160
+ // non-loopback Ollama host, or `local`'s own non-loopback refusal) must
161
+ // propagate here, not silently fall through to the legacy raw-endpoint
162
+ // path below. Falling through would mean a refused `ollama`/`local`
163
+ // config could still reach a network call via a leftover
164
+ // AGENTIC_SECURITY_LLM_ENDPOINT — exactly the bypass PRD §23.2 exists to
165
+ // prevent. `resolved.reason` is non-null ONLY for a genuine refusal;
166
+ // "nothing configured" always carries `reason: null` (providers.js).
167
+ if (!resolved.ok && resolved.reason) throw new Error(resolved.reason);
168
+ if (resolved.ok && resolved.config.provider === 'ollama') {
169
+ const oc = resolved.config.ollama;
170
+ const r = await (0,ollama_provider/* callOllamaChat */.L5)({
171
+ host: resolved.config.endpoint,
172
+ model: resolved.config.model,
173
+ messages: [{ role: 'user', content: prompt }],
174
+ keepAlive: oc?.keepAlive,
175
+ timeouts: oc
176
+ ? { connectTimeoutMs: oc.connectTimeoutMs, requestTimeoutMs: oc.requestTimeoutMs }
177
+ : { connectTimeoutMs: 3000, requestTimeoutMs: timeoutMs },
178
+ });
179
+ // PRD §23.4: never fall back to a cloud provider on failure — throwing
180
+ // here is exactly what the pre-existing raw-fetch path already does on
181
+ // a non-2xx/network error, and both hunter.js and disprove.js already
182
+ // treat a thrown/rejected llmInvoke as "this voter did not answer",
183
+ // never as "try something else".
184
+ if (!r.ok) throw new Error(`ollama ${r.code}: ${r.reason || 'request failed'}`);
185
+ return r.result.text;
186
+ }
187
+ }
188
+
130
189
  // The URL is the operator's own configured endpoint, read from an environment
131
190
  // variable they set. Reaching it is this module's entire purpose; no
132
191
  // request-controlled input exists anywhere on this path, and an operator who
@@ -275,6 +334,28 @@ function resolveLlmInvokeWithDecision(opts = {}) {
275
334
  return { invoke, decision, decisions };
276
335
  }
277
336
 
337
+ // ollama-offline-prd.md §32: PRESET=ollama is a configured provider even
338
+ // when no raw AGENTIC_SECURITY_LLM_ENDPOINT is set — resolve it the exact
339
+ // same way llm-validator/index.js's endpointConfig() does, so hunt gets
340
+ // the SAME egress-evaluated-before-any-call treatment every other
341
+ // configured provider already gets here (this function's whole reason to
342
+ // exist, per the block comment above). Checked BEFORE the legacy
343
+ // raw-endpoint fallback below, matching providers.js's own precedence
344
+ // (ollama/local checked before a bare BYO endpoint).
345
+ const resolved = (0,providers.resolveProvider)({ role: opts.role || 'hunt' });
346
+ if (!resolved.ok && resolved.reason) {
347
+ // A REFUSAL (non-loopback ollama/local, explicitly configured and
348
+ // declined) is itself a policy decision — same shape as an egress
349
+ // denial below, so callers' existing "read .reason when invoke is
350
+ // null" handling covers it without a new branch on their side.
351
+ return { invoke: null, decision: { allowed: false, reason: resolved.reason } };
352
+ }
353
+ if (resolved.ok && resolved.config.provider === 'ollama') {
354
+ const decision = (0,policy/* evaluateEgress */.nn)({ scanRoot: opts.scanRoot, purpose: opts.purpose || 'discovery', endpoint: resolved.config.endpoint, provider: 'ollama' });
355
+ if (!decision.allowed) return { invoke: null, decision };
356
+ return { invoke: (prompt) => defaultLlmInvoke(prompt, { timeoutMs: opts.timeoutMs, role: opts.role }), decision };
357
+ }
358
+
278
359
  const endpoint = process.env.AGENTIC_SECURITY_LLM_ENDPOINT;
279
360
  if (!endpoint) return { invoke: null, decision: null };
280
361
 
@@ -369,7 +450,16 @@ async function runHunter(focusArea, lens, ctx = {}, opts = {}) {
369
450
  const transcript = [];
370
451
  const lensKey = lens?.key || 'unknown';
371
452
  const base = { focusAreaId: focusArea.id, lens: lensKey, transcript };
372
- const { invoke: llmInvoke, decision: egressDecision } = resolveLlmInvokeWithDecision({ ...opts, purpose: 'discovery-hunter' });
453
+ // ollama-offline-prd.md §32 "permit each refutation-panel member to be a
454
+ // separately configured local model" extends naturally to the hunter's own
455
+ // lenses: the `business-logic` lens is exactly the PRD's `logic` role
456
+ // ("cross-file business-logic reasoning"), so it alone routes through
457
+ // role='logic' (honoring AGENTIC_SECURITY_LLM_MODEL_LOGIC) while every
458
+ // other lens keeps the existing role='hunt' default — a caller-supplied
459
+ // `opts.role` still wins over both, same precedence resolveProvider
460
+ // already documents.
461
+ const role = opts.role || (lensKey === 'business-logic' ? 'logic' : 'hunt');
462
+ const { invoke: llmInvoke, decision: egressDecision } = resolveLlmInvokeWithDecision({ ...opts, role, purpose: 'discovery-hunter' });
373
463
 
374
464
  if (typeof llmInvoke !== 'function') {
375
465
  // FR-601: distinguish "policy denied a configured endpoint" from "nothing
@@ -520,7 +610,12 @@ async function disproveCandidate(candidate, opts = {}) {
520
610
  // missing endpoint always has, so it falls straight into this module's own
521
611
  // pre-existing rule — "silence never refutes" — with zero votes cast and no
522
612
  // prompt ever built for a denied endpoint.
523
- const { invoke: llmInvoke, decision: egressDecision } = resolveLlmInvokeWithDecision({ ...opts, purpose: 'discovery-disprove' });
613
+ // ollama-offline-prd.md §32 the refutation panel is the PRD's `verify`
614
+ // role ("adversarial verification"): route it through role='verify' by
615
+ // default so AGENTIC_SECURITY_LLM_MODEL_VERIFY applies, same precedence
616
+ // (a caller-supplied opts.role still wins) hunter.js's lens routing uses.
617
+ const role = opts.role || 'verify';
618
+ const { invoke: llmInvoke, decision: egressDecision } = resolveLlmInvokeWithDecision({ ...opts, role, purpose: 'discovery-disprove' });
524
619
 
525
620
  const votes = [];
526
621
  if (typeof llmInvoke === 'function') {
@@ -548,7 +643,7 @@ async function disprovePanel(candidates, opts = {}) {
548
643
  }
549
644
 
550
645
  // EXTERNAL MODULE: ./src/posture/stable-id.js
551
- var stable_id = __webpack_require__(838);
646
+ var stable_id = __webpack_require__(90838);
552
647
  ;// CONCATENATED MODULE: ./src/discovery/judge.js
553
648
  //
554
649
  // Turn surviving candidates into findings, then decide which are actually new.
@@ -649,11 +744,11 @@ function judgeCandidates(candidates, priorScan, triageFeedback) {
649
744
  }
650
745
 
651
746
  // EXTERNAL MODULE: external "node:fs"
652
- var external_node_fs_ = __webpack_require__(3024);
747
+ var external_node_fs_ = __webpack_require__(73024);
653
748
  // EXTERNAL MODULE: external "node:path"
654
- var external_node_path_ = __webpack_require__(6760);
749
+ var external_node_path_ = __webpack_require__(76760);
655
750
  // EXTERNAL MODULE: ./src/posture/state-dir.js
656
- var state_dir = __webpack_require__(1174);
751
+ var state_dir = __webpack_require__(31174);
657
752
  ;// CONCATENATED MODULE: ./src/discovery/memory.js
658
753
  // Cross-run discovery memory — PRD Phase 3 / C4.
659
754
  //
@@ -866,7 +961,7 @@ function makeTaintProbe(perFileIR, callGraph) {
866
961
 
867
962
  async function runDeepAnalysisSafe(perFileIR, callGraph) {
868
963
  try {
869
- const { runDeepAnalysis } = await Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 2555));
964
+ const { runDeepAnalysis } = await Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 72555));
870
965
  return runDeepAnalysis(perFileIR, callGraph, {});
871
966
  } catch {
872
967
  return null;
@@ -1155,7 +1250,7 @@ async function runDiscovery(ctx = {}, opts = {}) {
1155
1250
 
1156
1251
  /***/ }),
1157
1252
 
1158
- /***/ 3499:
1253
+ /***/ 33499:
1159
1254
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
1160
1255
 
1161
1256
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,7 +2,7 @@ export const id = 1920;
2
2
  export const ids = [1920,2238];
3
3
  export const modules = {
4
4
 
5
- /***/ 2238:
5
+ /***/ 32238:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -12,9 +12,9 @@ export const modules = {
12
12
  /* harmony export */ sU: () => (/* binding */ loadFixAttempts)
13
13
  /* harmony export */ });
14
14
  /* unused harmony exports FIX_STAGES, bucketOf, summarizeFixDurations, _internals, summarizeFixAxes, renderFixAxes */
15
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
16
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
17
- /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1174);
15
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
16
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
17
+ /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31174);
18
18
  // Time-to-validated-fix (R5, the reporting half).
19
19
  //
20
20
  // `verifyFix` already RUNS the stages and `test-runner.js` already times the
@@ -292,7 +292,7 @@ function renderFixAxes(sum) {
292
292
 
293
293
  /***/ }),
294
294
 
295
- /***/ 1920:
295
+ /***/ 61920:
296
296
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
297
297
 
298
298
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -300,11 +300,11 @@ function renderFixAxes(sum) {
300
300
  /* harmony export */ renderProductionFeedbackSummary: () => (/* binding */ renderProductionFeedbackSummary)
301
301
  /* harmony export */ });
302
302
  /* unused harmony exports CATEGORIES, collectFeedbackEvents, summarizeFeedbackTrend, _internals */
303
- /* harmony import */ var _suppressions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9277);
304
- /* harmony import */ var _triage_memory_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1905);
305
- /* harmony import */ var _sca_policy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(123);
306
- /* harmony import */ var _fix_history_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4407);
307
- /* harmony import */ var _fix_metrics_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2238);
303
+ /* harmony import */ var _suppressions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89277);
304
+ /* harmony import */ var _triage_memory_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21905);
305
+ /* harmony import */ var _sca_policy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(30123);
306
+ /* harmony import */ var _fix_history_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(84407);
307
+ /* harmony import */ var _fix_metrics_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32238);
308
308
  // FR-907 (assurance-hardening PRD): "Add longitudinal production feedback
309
309
  // measurement | Metrics separate user suppression, accepted risk, invalid
310
310
  // finding, fixed finding, and verification outcome."
@@ -2,7 +2,7 @@ export const id = 2238;
2
2
  export const ids = [2238];
3
3
  export const modules = {
4
4
 
5
- /***/ 2238:
5
+ /***/ 32238:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -12,9 +12,9 @@ export const modules = {
12
12
  /* harmony export */ sU: () => (/* binding */ loadFixAttempts)
13
13
  /* harmony export */ });
14
14
  /* unused harmony exports FIX_STAGES, bucketOf, summarizeFixDurations, _internals, summarizeFixAxes, renderFixAxes */
15
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
16
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
17
- /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1174);
15
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
16
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
17
+ /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31174);
18
18
  // Time-to-validated-fix (R5, the reporting half).
19
19
  //
20
20
  // `verifyFix` already RUNS the stages and `test-runner.js` already times the
@@ -2,7 +2,7 @@ export const id = 2271;
2
2
  export const ids = [2271];
3
3
  export const modules = {
4
4
 
5
- /***/ 2271:
5
+ /***/ 22271:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -12,8 +12,8 @@ export const modules = {
12
12
  /* harmony export */ signProvenanceEvidenceBundle: () => (/* binding */ signProvenanceEvidenceBundle),
13
13
  /* harmony export */ verifyProvenanceEvidenceBundle: () => (/* binding */ verifyProvenanceEvidenceBundle)
14
14
  /* harmony export */ });
15
- /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7598);
16
- /* harmony import */ var _evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8317);
15
+ /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77598);
16
+ /* harmony import */ var _evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(98317);
17
17
  // Signed provenance evidence bundles (Finding Provenance PRD, M4 §4.1).
18
18
  //
19
19
  // Sibling to posture/evidence-bundle.js, not a generalization of it — that
@@ -2,7 +2,7 @@ export const id = 2432;
2
2
  export const ids = [2432,5561];
3
3
  export const modules = {
4
4
 
5
- /***/ 5561:
5
+ /***/ 75561:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -433,7 +433,7 @@ function evaluateVerificationEvidence(diff, requiredEvidenceFlowIds) {
433
433
 
434
434
  /***/ }),
435
435
 
436
- /***/ 2432:
436
+ /***/ 52432:
437
437
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
438
438
 
439
439
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -443,12 +443,12 @@ function evaluateVerificationEvidence(diff, requiredEvidenceFlowIds) {
443
443
  /* harmony export */ ledgerPaths: () => (/* binding */ ledgerPaths),
444
444
  /* harmony export */ readLedgerEvents: () => (/* binding */ readLedgerEvents)
445
445
  /* harmony export */ });
446
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
447
- /* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1455);
448
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6760);
449
- /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7598);
450
- /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1174);
451
- /* harmony import */ var _lineage_remediation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5561);
446
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
447
+ /* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(51455);
448
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(76760);
449
+ /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(77598);
450
+ /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31174);
451
+ /* harmony import */ var _lineage_remediation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75561);
452
452
  // remediation-ledger.js — M5 deliverable #6 (Blast-Radius: Remediation
453
453
  // Command Center, FR-507 + AC-31), Task 2 of the sub-project: the IMPURE
454
454
  // half. `../lineage/remediation.js` (Task 1) ships the pure RemediationItem
@@ -2,7 +2,7 @@ export const id = 2659;
2
2
  export const ids = [2659];
3
3
  export const modules = {
4
4
 
5
- /***/ 2659:
5
+ /***/ 42659:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,14 +2,14 @@ export const id = 2826;
2
2
  export const ids = [2826];
3
3
  export const modules = {
4
4
 
5
- /***/ 2826:
5
+ /***/ 32826:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ renderPrComment: () => (/* binding */ renderPrComment)
10
10
  /* harmony export */ });
11
11
  /* unused harmony export _internal */
12
- /* harmony import */ var _util_untrusted_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7097);
12
+ /* harmony import */ var _util_untrusted_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17097);
13
13
  // Advisor-tone PR comment renderer (v0.72).
14
14
  //
15
15
  // Replaces the typical "12 findings detected, see SARIF" wall of text
@@ -10,9 +10,9 @@ export const modules = {
10
10
  /* harmony export */ summarizeHarnessPresence: () => (/* binding */ summarizeHarnessPresence)
11
11
  /* harmony export */ });
12
12
  /* unused harmony export HARNESS_DIRS */
13
- /* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1455);
14
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
15
- /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8161);
13
+ /* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51455);
14
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
15
+ /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(48161);
16
16
  // Multi-harness configuration discovery.
17
17
  //
18
18
  // Finds every agent-harness configuration directory the user has, both at
@@ -2,7 +2,7 @@ export const id = 2923;
2
2
  export const ids = [2923];
3
3
  export const modules = {
4
4
 
5
- /***/ 2923:
5
+ /***/ 12923:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,7 +2,7 @@ export const id = 3001;
2
2
  export const ids = [3001];
3
3
  export const modules = {
4
4
 
5
- /***/ 3001:
5
+ /***/ 53001:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -12,9 +12,9 @@ export const modules = {
12
12
  /* harmony export */ renderCalibrationReportSummary: () => (/* binding */ renderCalibrationReportSummary)
13
13
  /* harmony export */ });
14
14
  /* unused harmony exports CALIBRATION_FEEDBACK_FILE, loadCalibrationFeedback, _internals */
15
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
16
- /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7598);
17
- /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1174);
15
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
16
+ /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(77598);
17
+ /* harmony import */ var _state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31174);
18
18
  // FR-806 (assurance-hardening PRD): "Validate model calibration against
19
19
  // accepted and realized incidents where customers opt in | Calibration
20
20
  // reports are aggregated and privacy-preserving."
@@ -2,7 +2,7 @@ export const id = 3117;
2
2
  export const ids = [3117];
3
3
  export const modules = {
4
4
 
5
- /***/ 3117:
5
+ /***/ 93117:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -10,9 +10,9 @@ export const modules = {
10
10
  /* harmony export */ renderBadge: () => (/* binding */ renderBadge)
11
11
  /* harmony export */ });
12
12
  /* unused harmony exports badgeFromScanRoot, renderSvg, _internal */
13
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
14
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
15
- /* harmony import */ var _posture_state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1174);
13
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
14
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
15
+ /* harmony import */ var _posture_state_dir_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31174);
16
16
  // Live SVG badge generator (v0.72).
17
17
  //
18
18
  // Every repo can drop a badge in its README pulling from the latest scan:
@@ -2,7 +2,7 @@ export const id = 3180;
2
2
  export const ids = [3180];
3
3
  export const modules = {
4
4
 
5
- /***/ 3180:
5
+ /***/ 73180:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
 
@@ -12,11 +12,11 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  });
13
13
 
14
14
  // EXTERNAL MODULE: external "node:fs"
15
- var external_node_fs_ = __webpack_require__(3024);
15
+ var external_node_fs_ = __webpack_require__(73024);
16
16
  // EXTERNAL MODULE: external "node:path"
17
- var external_node_path_ = __webpack_require__(6760);
17
+ var external_node_path_ = __webpack_require__(76760);
18
18
  // EXTERNAL MODULE: external "node:url"
19
- var external_node_url_ = __webpack_require__(3136);
19
+ var external_node_url_ = __webpack_require__(73136);
20
20
  ;// CONCATENATED MODULE: ./scripts/bundle-frontend.mjs
21
21
  // bundle-frontend.mjs — Milestone 4, sub-project Self-contained HTML
22
22
  // report. A minimal, hand-rolled ES-module bundler, deliberately NOT a
@@ -196,9 +196,9 @@ function bundleFrontendModules(entryAbsPath) {
196
196
  }
197
197
 
198
198
  // EXTERNAL MODULE: ./src/lineage/export-json.js
199
- var export_json = __webpack_require__(859);
199
+ var export_json = __webpack_require__(40859);
200
200
  // EXTERNAL MODULE: ./src/shared/frontend-root.js
201
- var frontend_root = __webpack_require__(1185);
201
+ var frontend_root = __webpack_require__(61185);
202
202
  ;// CONCATENATED MODULE: ./scripts/generate-html-report.mjs
203
203
  // generate-html-report.mjs — Milestone 4, sub-project Self-contained
204
204
  // HTML report. Assembles ONE offline-safe HTML document: inline CSS,
@@ -312,14 +312,14 @@ ${bundledJs}
312
312
 
313
313
  /***/ }),
314
314
 
315
- /***/ 1185:
315
+ /***/ 61185:
316
316
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
317
317
 
318
318
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
319
319
  /* harmony export */ D: () => (/* binding */ resolveFrontendRoot)
320
320
  /* harmony export */ });
321
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3024);
322
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6760);
321
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73024);
322
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76760);
323
323
  // frontend-root.js — locates the Data Flow Explorer's `frontend/` assets
324
324
  // (index.html/src/styles) regardless of whether this code is running:
325
325
  // - unbundled, straight out of scanner/src/ or scanner/scripts/ (dev/test —
@@ -2,7 +2,7 @@ export const id = 3276;
2
2
  export const ids = [3276];
3
3
  export const modules = {
4
4
 
5
- /***/ 3276:
5
+ /***/ 63276:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,7 +2,7 @@ export const id = 3415;
2
2
  export const ids = [3415];
3
3
  export const modules = {
4
4
 
5
- /***/ 3415:
5
+ /***/ 13415:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,7 +2,7 @@ export const id = 3499;
2
2
  export const ids = [3499];
3
3
  export const modules = {
4
4
 
5
- /***/ 3499:
5
+ /***/ 33499:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
@@ -2,16 +2,16 @@ export const id = 3518;
2
2
  export const ids = [3518];
3
3
  export const modules = {
4
4
 
5
- /***/ 3518:
5
+ /***/ 83518:
6
6
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
7
 
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ computeGraphDiff: () => (/* binding */ computeGraphDiff)
10
10
  /* harmony export */ });
11
11
  /* unused harmony exports WATCHED_FLOW_FIELDS, validateGraphDiff */
12
- /* harmony import */ var _graph_snapshot_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(373);
13
- /* harmony import */ var _ids_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5034);
14
- /* harmony import */ var _dataflow_privacy_governance_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3308);
12
+ /* harmony import */ var _graph_snapshot_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30373);
13
+ /* harmony import */ var _ids_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45034);
14
+ /* harmony import */ var _dataflow_privacy_governance_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63308);
15
15
  // graph-diff.js — M4 deliverable #9 (FR-503 §14, DFG-022), sub-project
16
16
  // 8b, Task 1: the GraphDiff extension contract + computeGraphDiff + honest
17
17
  // change-cause classification.