@zivis/mcp 0.1.0-alpha.21 → 0.1.0-alpha.22

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 (175) hide show
  1. package/dist/pattern-pack/index.d.ts +133 -0
  2. package/dist/pattern-pack/index.js +212 -0
  3. package/dist/pattern-pack/index.js.map +1 -0
  4. package/dist/pattern-packs/zivis-public-0.1.0/capsules/agents/privilege-separation.yaml +228 -0
  5. package/dist/pattern-packs/zivis-public-0.1.0/capsules/prompting/self-consistency-no-isolation.yaml +240 -0
  6. package/dist/pattern-packs/zivis-public-0.1.0/capsules/security/late-org-filter.yaml +270 -0
  7. package/dist/pattern-packs/zivis-public-0.1.0/manifest.json +68 -0
  8. package/dist/pattern-packs/zivis-public-0.1.0/prompts/agents/privilege-separation/identify.md +54 -0
  9. package/dist/pattern-packs/zivis-public-0.1.0/prompts/prompting/self-consistency-no-isolation/identify.md +60 -0
  10. package/dist/pattern-packs/zivis-public-0.1.0/prompts/security/late-org-filter/identify.md +78 -0
  11. package/dist/prompts/index.d.ts +1 -1
  12. package/dist/prompts/index.js +1 -7
  13. package/dist/prompts/index.js.map +1 -1
  14. package/dist/server.js +26 -166
  15. package/dist/server.js.map +1 -1
  16. package/dist/tools/enterprise/get-threat-model-artifact.d.ts +30 -0
  17. package/dist/tools/enterprise/get-threat-model-artifact.js +80 -0
  18. package/dist/tools/enterprise/get-threat-model-artifact.js.map +1 -0
  19. package/dist/tools/enterprise/get-threat-model.d.ts +1 -1
  20. package/dist/tools/enterprise/get-threat-model.js +59 -11
  21. package/dist/tools/enterprise/get-threat-model.js.map +1 -1
  22. package/dist/tools/enterprise/list-threat-model-artifacts.d.ts +67 -0
  23. package/dist/tools/enterprise/list-threat-model-artifacts.js +121 -0
  24. package/dist/tools/enterprise/list-threat-model-artifacts.js.map +1 -0
  25. package/dist/tools/enterprise/manage-data-asset.d.ts +1 -1
  26. package/dist/tools/enterprise/manage-data-flow.d.ts +1 -1
  27. package/dist/tools/enterprise/manage-test-case.d.ts +1 -1
  28. package/dist/tools/inspect.d.ts +31 -0
  29. package/dist/tools/inspect.js +100 -0
  30. package/dist/tools/inspect.js.map +1 -0
  31. package/dist/tools/manage-application.d.ts +1 -1
  32. package/dist/tools/security-review.js +67 -50
  33. package/dist/tools/security-review.js.map +1 -1
  34. package/dist/tools/threat-get-capsule.d.ts +25 -0
  35. package/dist/tools/threat-get-capsule.js +64 -0
  36. package/dist/tools/threat-get-capsule.js.map +1 -0
  37. package/dist/tools/threat-get-inference-prompt.d.ts +32 -0
  38. package/dist/tools/threat-get-inference-prompt.js +91 -0
  39. package/dist/tools/threat-get-inference-prompt.js.map +1 -0
  40. package/dist/tools/threat-list-relevant-capsules.d.ts +30 -0
  41. package/dist/tools/threat-list-relevant-capsules.js +176 -0
  42. package/dist/tools/threat-list-relevant-capsules.js.map +1 -0
  43. package/package.json +10 -3
  44. package/dist/prompts/prep-for-launch.d.ts +0 -9
  45. package/dist/prompts/prep-for-launch.js +0 -62
  46. package/dist/prompts/prep-for-launch.js.map +0 -1
  47. package/dist/prompts/secure-my-app.d.ts +0 -9
  48. package/dist/prompts/secure-my-app.js +0 -70
  49. package/dist/prompts/secure-my-app.js.map +0 -1
  50. package/dist/prompts/weekly-check.d.ts +0 -9
  51. package/dist/prompts/weekly-check.js +0 -48
  52. package/dist/prompts/weekly-check.js.map +0 -1
  53. package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
  54. package/dist/tools/enterprise/capture-evidence.js +0 -72
  55. package/dist/tools/enterprise/capture-evidence.js.map +0 -1
  56. package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
  57. package/dist/tools/enterprise/create-report-ticket.js +0 -44
  58. package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
  59. package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
  60. package/dist/tools/enterprise/end-pentest-session.js +0 -42
  61. package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
  62. package/dist/tools/enterprise/generate-report.d.ts +0 -55
  63. package/dist/tools/enterprise/generate-report.js +0 -111
  64. package/dist/tools/enterprise/generate-report.js.map +0 -1
  65. package/dist/tools/enterprise/get-campaign.d.ts +0 -27
  66. package/dist/tools/enterprise/get-campaign.js +0 -31
  67. package/dist/tools/enterprise/get-campaign.js.map +0 -1
  68. package/dist/tools/enterprise/get-report-status.d.ts +0 -27
  69. package/dist/tools/enterprise/get-report-status.js +0 -38
  70. package/dist/tools/enterprise/get-report-status.js.map +0 -1
  71. package/dist/tools/enterprise/list-agents.d.ts +0 -42
  72. package/dist/tools/enterprise/list-agents.js +0 -95
  73. package/dist/tools/enterprise/list-agents.js.map +0 -1
  74. package/dist/tools/enterprise/list-campaigns.d.ts +0 -37
  75. package/dist/tools/enterprise/list-campaigns.js +0 -60
  76. package/dist/tools/enterprise/list-campaigns.js.map +0 -1
  77. package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
  78. package/dist/tools/enterprise/list-report-issues.js +0 -50
  79. package/dist/tools/enterprise/list-report-issues.js.map +0 -1
  80. package/dist/tools/enterprise/manage-campaign-agent-instance.d.ts +0 -42
  81. package/dist/tools/enterprise/manage-campaign-agent-instance.js +0 -68
  82. package/dist/tools/enterprise/manage-campaign-agent-instance.js.map +0 -1
  83. package/dist/tools/enterprise/manage-campaign-target.d.ts +0 -44
  84. package/dist/tools/enterprise/manage-campaign-target.js +0 -70
  85. package/dist/tools/enterprise/manage-campaign-target.js.map +0 -1
  86. package/dist/tools/enterprise/manage-campaign.d.ts +0 -62
  87. package/dist/tools/enterprise/manage-campaign.js +0 -114
  88. package/dist/tools/enterprise/manage-campaign.js.map +0 -1
  89. package/dist/tools/enterprise/manage-finding.d.ts +0 -69
  90. package/dist/tools/enterprise/manage-finding.js +0 -106
  91. package/dist/tools/enterprise/manage-finding.js.map +0 -1
  92. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
  93. package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
  94. package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
  95. package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
  96. package/dist/tools/enterprise/publish-report-version.js +0 -75
  97. package/dist/tools/enterprise/publish-report-version.js.map +0 -1
  98. package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
  99. package/dist/tools/enterprise/publish-test-to-library.js +0 -40
  100. package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
  101. package/dist/tools/enterprise/record-test-result.d.ts +0 -67
  102. package/dist/tools/enterprise/record-test-result.js +0 -75
  103. package/dist/tools/enterprise/record-test-result.js.map +0 -1
  104. package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
  105. package/dist/tools/enterprise/start-pentest-session.js +0 -50
  106. package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
  107. package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
  108. package/dist/tools/enterprise/sync-report-section.js +0 -79
  109. package/dist/tools/enterprise/sync-report-section.js.map +0 -1
  110. package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
  111. package/dist/tools/enterprise/update-report-issue.js +0 -69
  112. package/dist/tools/enterprise/update-report-issue.js.map +0 -1
  113. package/dist/tools/get-agent-test-results.d.ts +0 -41
  114. package/dist/tools/get-agent-test-results.js +0 -86
  115. package/dist/tools/get-agent-test-results.js.map +0 -1
  116. package/dist/tools/get-application-auth-config.d.ts +0 -27
  117. package/dist/tools/get-application-auth-config.js +0 -44
  118. package/dist/tools/get-application-auth-config.js.map +0 -1
  119. package/dist/tools/get-artifact-content.d.ts +0 -29
  120. package/dist/tools/get-artifact-content.js +0 -86
  121. package/dist/tools/get-artifact-content.js.map +0 -1
  122. package/dist/tools/get-finding-details.d.ts +0 -22
  123. package/dist/tools/get-finding-details.js +0 -61
  124. package/dist/tools/get-finding-details.js.map +0 -1
  125. package/dist/tools/get-findings.d.ts +0 -51
  126. package/dist/tools/get-findings.js +0 -124
  127. package/dist/tools/get-findings.js.map +0 -1
  128. package/dist/tools/get-recon-scan.d.ts +0 -27
  129. package/dist/tools/get-recon-scan.js +0 -46
  130. package/dist/tools/get-recon-scan.js.map +0 -1
  131. package/dist/tools/get-scan-output.d.ts +0 -27
  132. package/dist/tools/get-scan-output.js +0 -64
  133. package/dist/tools/get-scan-output.js.map +0 -1
  134. package/dist/tools/get-scenario-details.d.ts +0 -27
  135. package/dist/tools/get-scenario-details.js +0 -46
  136. package/dist/tools/get-scenario-details.js.map +0 -1
  137. package/dist/tools/get-test-case-results.d.ts +0 -37
  138. package/dist/tools/get-test-case-results.js +0 -66
  139. package/dist/tools/get-test-case-results.js.map +0 -1
  140. package/dist/tools/get-test-details.d.ts +0 -29
  141. package/dist/tools/get-test-details.js +0 -49
  142. package/dist/tools/get-test-details.js.map +0 -1
  143. package/dist/tools/list-agent-test-cases.d.ts +0 -41
  144. package/dist/tools/list-agent-test-cases.js +0 -73
  145. package/dist/tools/list-agent-test-cases.js.map +0 -1
  146. package/dist/tools/list-recon-scans.d.ts +0 -36
  147. package/dist/tools/list-recon-scans.js +0 -74
  148. package/dist/tools/list-recon-scans.js.map +0 -1
  149. package/dist/tools/list-scan-artifacts.d.ts +0 -41
  150. package/dist/tools/list-scan-artifacts.js +0 -63
  151. package/dist/tools/list-scan-artifacts.js.map +0 -1
  152. package/dist/tools/list-scans.d.ts +0 -38
  153. package/dist/tools/list-scans.js +0 -125
  154. package/dist/tools/list-scans.js.map +0 -1
  155. package/dist/tools/list-test-library.d.ts +0 -44
  156. package/dist/tools/list-test-library.js +0 -83
  157. package/dist/tools/list-test-library.js.map +0 -1
  158. package/dist/tools/list-test-scenarios.d.ts +0 -25
  159. package/dist/tools/list-test-scenarios.js +0 -94
  160. package/dist/tools/list-test-scenarios.js.map +0 -1
  161. package/dist/tools/local-scan.d.ts +0 -40
  162. package/dist/tools/local-scan.js +0 -261
  163. package/dist/tools/local-scan.js.map +0 -1
  164. package/dist/tools/run-test-scenario.d.ts +0 -37
  165. package/dist/tools/run-test-scenario.js +0 -70
  166. package/dist/tools/run-test-scenario.js.map +0 -1
  167. package/dist/tools/scan-pr.d.ts +0 -27
  168. package/dist/tools/scan-pr.js +0 -51
  169. package/dist/tools/scan-pr.js.map +0 -1
  170. package/dist/tools/setup-red-team-target.d.ts +0 -73
  171. package/dist/tools/setup-red-team-target.js +0 -461
  172. package/dist/tools/setup-red-team-target.js.map +0 -1
  173. package/dist/tools/triage-finding.d.ts +0 -41
  174. package/dist/tools/triage-finding.js +0 -125
  175. package/dist/tools/triage-finding.js.map +0 -1
@@ -138,61 +138,78 @@ export function createSecurityReviewHandler(apiClient, config) {
138
138
  errors.push(`Open findings: ${err instanceof Error ? err.message : "failed"}`);
139
139
  }
140
140
  }
141
- // ── 3. Threat model: security controls ──
142
- if (shouldInclude("controls") && threat_model_id) {
141
+ // ── 3 & 4. Threat model: security controls + attack scenarios ──
142
+ // Sub-entities (controls, scenarios, actors, components, etc.) live on the
143
+ // latest ThreatModelVersion, not on the root threat model. Fetch once and
144
+ // reuse for both sections.
145
+ if ((shouldInclude("controls") || shouldInclude("attack_scenarios")) && threat_model_id) {
146
+ let tm = null;
143
147
  try {
144
- const tm = await apiClient.get(`/api/threat-models/${threat_model_id}?include=all`);
145
- const controls = tm.securityControls || [];
146
- const notImplemented = controls.filter((c) => c.status === "not_implemented");
147
- const partial = controls.filter((c) => c.status === "partial");
148
- const implemented = controls.filter((c) => c.status === "implemented");
149
- context.securityControls = {
150
- _instruction: "Verify that code implements these expected security controls. Flag missing or weak implementations.",
151
- summary: {
152
- implemented: implemented.length,
153
- partial: partial.length,
154
- notImplemented: notImplemented.length,
155
- },
156
- gapControls: [...notImplemented, ...partial].map((c) => ({
157
- name: c.name,
158
- type: c.controlType,
159
- status: c.status,
160
- description: c.description,
161
- effectiveness: c.effectivenessRating,
162
- })),
163
- implementedControls: implemented.map((c) => ({
164
- name: c.name,
165
- type: c.controlType,
166
- description: c.description,
167
- })),
168
- };
148
+ tm = await apiClient.get(`/api/threat-models/${threat_model_id}?include=all`);
169
149
  }
170
150
  catch (err) {
171
- errors.push(`Security controls: ${err instanceof Error ? err.message : "failed"}`);
151
+ errors.push(`Threat model fetch: ${err instanceof Error ? err.message : "failed"}`);
172
152
  }
173
- }
174
- // ── 4. Threat model: attack scenarios ──
175
- if (shouldInclude("attack_scenarios") && threat_model_id) {
176
- try {
177
- const tm = await apiClient.get(`/api/threat-models/${threat_model_id}?include=all`);
178
- const scenarios = tm.attackScenarios || [];
179
- const minSeverity = SEVERITY_ORDER[severity_threshold] || 2;
180
- const filtered = scenarios.filter((s) => (SEVERITY_ORDER[s.severity] || 1) >= minSeverity);
181
- context.attackScenarios = {
182
- _instruction: "Review code for susceptibility to these known attack vectors. Check that mitigations are in place.",
183
- count: filtered.length,
184
- scenarios: filtered.map((s) => ({
185
- name: s.name,
186
- strideCategory: s.strideCategory,
187
- severity: s.severity,
188
- likelihood: s.likelihood,
189
- attackVector: s.attackVector,
190
- description: s.description,
191
- })),
192
- };
153
+ const versions = Array.isArray(tm?.versions) ? tm.versions : [];
154
+ const latestVersion = versions[0] || {};
155
+ if (tm && shouldInclude("controls")) {
156
+ try {
157
+ const controls = Array.isArray(latestVersion.securityControls)
158
+ ? latestVersion.securityControls
159
+ : [];
160
+ const notImplemented = controls.filter((c) => c.status === "not_implemented");
161
+ const partial = controls.filter((c) => c.status === "partial");
162
+ const implemented = controls.filter((c) => c.status === "implemented");
163
+ context.securityControls = {
164
+ _instruction: "Verify that code implements these expected security controls. Flag missing or weak implementations.",
165
+ summary: {
166
+ implemented: implemented.length,
167
+ partial: partial.length,
168
+ notImplemented: notImplemented.length,
169
+ },
170
+ gapControls: [...notImplemented, ...partial].map((c) => ({
171
+ name: c.name,
172
+ type: c.controlType,
173
+ status: c.status,
174
+ description: c.description,
175
+ effectiveness: c.effectivenessRating,
176
+ })),
177
+ implementedControls: implemented.map((c) => ({
178
+ name: c.name,
179
+ type: c.controlType,
180
+ description: c.description,
181
+ })),
182
+ };
183
+ }
184
+ catch (err) {
185
+ errors.push(`Security controls: ${err instanceof Error ? err.message : "failed"}`);
186
+ }
193
187
  }
194
- catch (err) {
195
- errors.push(`Attack scenarios: ${err instanceof Error ? err.message : "failed"}`);
188
+ if (tm && shouldInclude("attack_scenarios")) {
189
+ try {
190
+ const scenarios = Array.isArray(latestVersion.attackScenarios)
191
+ ? latestVersion.attackScenarios
192
+ : [];
193
+ const minSeverity = SEVERITY_ORDER[severity_threshold] || 2;
194
+ const filtered = scenarios.filter((s) => (SEVERITY_ORDER[s.severity] || 1) >= minSeverity);
195
+ context.attackScenarios = {
196
+ _instruction: "Review code for susceptibility to these known attack vectors. Check that mitigations are in place.",
197
+ count: filtered.length,
198
+ scenarios: filtered.map((s) => ({
199
+ displayId: s.displayId,
200
+ title: s.title,
201
+ strideCategory: s.strideCategory,
202
+ severity: s.severity,
203
+ likelihood: s.likelihood,
204
+ riskScore: s.riskScore,
205
+ status: s.status,
206
+ narrative: s.narrative,
207
+ })),
208
+ };
209
+ }
210
+ catch (err) {
211
+ errors.push(`Attack scenarios: ${err instanceof Error ? err.message : "failed"}`);
212
+ }
196
213
  }
197
214
  }
198
215
  // ── 5. Dependency trust scores ──
@@ -1 +1 @@
1
- {"version":3,"file":"security-review.js","sourceRoot":"","sources":["../../src/tools/security-review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security-review.js","sourceRoot":"","sources":["../../src/tools/security-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * zivis_threat_get_capsule — return the full capsule for a pattern id.
3
+ *
4
+ * After the LLM has surfaced relevant capsules via zivis_threat_list_relevant_capsules,
5
+ * this tool returns the full capsule JSON: safe_summary, threats with STRIDE,
6
+ * risk_hints, architectural_signals, repair_contract, related_patterns, and the
7
+ * model_task_prompt_ref pointing to the inference prompt template.
8
+ *
9
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
10
+ */
11
+ import { z } from "zod";
12
+ export declare const THREAT_GET_CAPSULE_NAME = "zivis_threat_get_capsule";
13
+ export declare const THREAT_GET_CAPSULE_DESCRIPTION = "Return the full capsule for a single threat-model pattern.\n\nUse after zivis_threat_list_relevant_capsules has surfaced an id the user wants to dig into. The capsule includes:\n- safe_summary, detect_when, risk_hints, architectural_signals \u2014 for explaining the pattern in threat-model language\n- threats[] with STRIDE categories and remediations \u2014 for grounding the conversation in component/flow/boundary terms\n- repair_contract.allowed / forbidden \u2014 what refactors are safe\n- related_patterns \u2014 adjacent ids in the library\n- model_task_prompt_ref \u2014 pass to zivis_threat_get_inference_prompt to get the prompt the host LLM should run for a deeper check\n\nCapsule data is read from the local pack (~/Library/Caches/zivis/pattern-packs/) with SHA256 integrity verification on every read.";
14
+ export declare const THREAT_GET_CAPSULE_SCHEMA: {
15
+ capsule_id: z.ZodString;
16
+ };
17
+ export declare function createThreatGetCapsuleHandler(): (params: {
18
+ capsule_id: string;
19
+ }) => Promise<{
20
+ content: Array<{
21
+ type: "text";
22
+ text: string;
23
+ }>;
24
+ isError?: boolean;
25
+ }>;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * zivis_threat_get_capsule — return the full capsule for a pattern id.
3
+ *
4
+ * After the LLM has surfaced relevant capsules via zivis_threat_list_relevant_capsules,
5
+ * this tool returns the full capsule JSON: safe_summary, threats with STRIDE,
6
+ * risk_hints, architectural_signals, repair_contract, related_patterns, and the
7
+ * model_task_prompt_ref pointing to the inference prompt template.
8
+ *
9
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
10
+ */
11
+ import { z } from "zod";
12
+ import { loadActivePack, getCapsule, listCapsuleIds } from "../pattern-pack/index.js";
13
+ import { withNextSteps, withNextStepsError } from "../lib/next-steps.js";
14
+ export const THREAT_GET_CAPSULE_NAME = "zivis_threat_get_capsule";
15
+ export const THREAT_GET_CAPSULE_DESCRIPTION = `Return the full capsule for a single threat-model pattern.
16
+
17
+ Use after zivis_threat_list_relevant_capsules has surfaced an id the user wants to dig into. The capsule includes:
18
+ - safe_summary, detect_when, risk_hints, architectural_signals — for explaining the pattern in threat-model language
19
+ - threats[] with STRIDE categories and remediations — for grounding the conversation in component/flow/boundary terms
20
+ - repair_contract.allowed / forbidden — what refactors are safe
21
+ - related_patterns — adjacent ids in the library
22
+ - model_task_prompt_ref — pass to zivis_threat_get_inference_prompt to get the prompt the host LLM should run for a deeper check
23
+
24
+ Capsule data is read from the local pack (~/Library/Caches/zivis/pattern-packs/) with SHA256 integrity verification on every read.`;
25
+ export const THREAT_GET_CAPSULE_SCHEMA = {
26
+ capsule_id: z
27
+ .string()
28
+ .describe("Capsule id, e.g. 'agents.privilege-separation'. Discoverable via zivis_threat_list_relevant_capsules."),
29
+ };
30
+ export function createThreatGetCapsuleHandler() {
31
+ return async (params) => {
32
+ const handle = await loadActivePack();
33
+ let capsule;
34
+ try {
35
+ capsule = await getCapsule(handle, params.capsule_id);
36
+ }
37
+ catch (err) {
38
+ const ids = await listCapsuleIds(handle);
39
+ return withNextStepsError(`Capsule '${params.capsule_id}' not found in pack ${handle.manifest.pack_id}@${handle.manifest.version}. ${err.message}`, [
40
+ {
41
+ id: "list_relevant_capsules_first",
42
+ label: "Find relevant capsules for the current repo first",
43
+ tool: "zivis_threat_list_relevant_capsules",
44
+ why: "Returns ids you can pass back into zivis_threat_get_capsule.",
45
+ },
46
+ ], `Available capsule ids in this pack: ${ids.join(", ")}`);
47
+ }
48
+ return withNextSteps({
49
+ pack: { id: handle.manifest.pack_id, version: handle.manifest.version },
50
+ capsule,
51
+ }, capsule.model_task_prompt_ref
52
+ ? [
53
+ {
54
+ id: "get_inference_prompt",
55
+ label: "Get the inference prompt template the host LLM should run",
56
+ tool: "zivis_threat_get_inference_prompt",
57
+ args_hint: { capsule_id: capsule.id },
58
+ why: "Inference prompt + expected_output_schema together form the prompt bundle the IDE LLM executes.",
59
+ },
60
+ ]
61
+ : [], `Capsule ${capsule.id}@${capsule.version} (${capsule.lifecycle}, ${capsule.sensitivity_level ?? "unspecified-tier"}). Threats: ${(capsule.threats?.length ?? 0)}.`);
62
+ };
63
+ }
64
+ //# sourceMappingURL=threat-get-capsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threat-get-capsule.js","sourceRoot":"","sources":["../../src/tools/threat-get-capsule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAElE,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;;;;mIASqF,CAAC;AAEpI,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,CACP,uGAAuG,CACxG;CACJ,CAAC;AAEF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,KAAK,EAAE,MAA8B,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,kBAAkB,CACvB,YAAY,MAAM,CAAC,UAAU,uBAAuB,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,EACnI;gBACE;oBACE,EAAE,EAAE,8BAA8B;oBAClC,KAAK,EAAE,mDAAmD;oBAC1D,IAAI,EAAE,qCAAqC;oBAC3C,GAAG,EAAE,8DAA8D;iBACpE;aACF,EACD,uCAAuC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAClB;YACE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvE,OAAO;SACR,EACD,OAAO,CAAC,qBAAqB;YAC3B,CAAC,CAAC;gBACE;oBACE,EAAE,EAAE,sBAAsB;oBAC1B,KAAK,EAAE,2DAA2D;oBAClE,IAAI,EAAE,mCAAmC;oBACzC,SAAS,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE;oBACrC,GAAG,EAAE,iGAAiG;iBACvG;aACF;YACH,CAAC,CAAC,EAAE,EACN,WAAW,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,iBAAiB,IAAI,kBAAkB,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CACnK,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * zivis_threat_get_inference_prompt — return the prompt bundle for a capsule's
3
+ * INFER strategy so the host LLM can run local inference.
4
+ *
5
+ * MCP servers cannot invoke the customer's LLM. The host (Cursor, Claude Code)
6
+ * runs the model. This tool returns:
7
+ * - the prompt template (markdown)
8
+ * - the capsule's expected_output_schema
9
+ * - the capsule's safe_summary as ambient context
10
+ * - guidance on which evidence spans the host should attach
11
+ *
12
+ * The host LLM consumes the bundle, gathers code spans per minimum_context_required,
13
+ * runs the inference, and returns structured JSON. That JSON enters the
14
+ * `inferred` lane until promoted to `trusted` per the platform's promotion policy.
15
+ *
16
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
17
+ */
18
+ import { z } from "zod";
19
+ export declare const THREAT_GET_INFERENCE_PROMPT_NAME = "zivis_threat_get_inference_prompt";
20
+ export declare const THREAT_GET_INFERENCE_PROMPT_DESCRIPTION = "Return the prompt bundle for the host LLM to run local inference for a capsule.\n\nZIVIS doesn't run an LLM itself \u2014 the host (Cursor, Claude Code, etc.) does. This tool returns the prompt template + structured output schema + ambient capsule context so the host model can run the inference and produce JSON the inferred lane accepts.\n\nUse this when:\n- After zivis_threat_get_capsule, the user wants the host LLM to actually evaluate whether the pattern is present in the code\n- The user says \"go check if my code does this\" / \"is this pattern actually in my repo\"\n- The matcher emits an INFER candidate that needs host-LLM evaluation\n\nThe bundle includes:\n- prompt: the markdown inference prompt\n- expected_output_schema: JSON Schema for the structured response\n- safe_summary: ambient capsule context\n- minimum_context_required: hint to the host for how much code to attach\n- evidence_focus: spans the deterministic strategies already flagged\n\nThe host LLM is expected to gather the indicated code spans, fill in the prompt, return JSON matching the schema. That output then flows back into the inferred lane.";
21
+ export declare const THREAT_GET_INFERENCE_PROMPT_SCHEMA: {
22
+ capsule_id: z.ZodString;
23
+ };
24
+ export declare function createThreatGetInferencePromptHandler(): (params: {
25
+ capsule_id: string;
26
+ }) => Promise<{
27
+ content: Array<{
28
+ type: "text";
29
+ text: string;
30
+ }>;
31
+ isError?: boolean;
32
+ }>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * zivis_threat_get_inference_prompt — return the prompt bundle for a capsule's
3
+ * INFER strategy so the host LLM can run local inference.
4
+ *
5
+ * MCP servers cannot invoke the customer's LLM. The host (Cursor, Claude Code)
6
+ * runs the model. This tool returns:
7
+ * - the prompt template (markdown)
8
+ * - the capsule's expected_output_schema
9
+ * - the capsule's safe_summary as ambient context
10
+ * - guidance on which evidence spans the host should attach
11
+ *
12
+ * The host LLM consumes the bundle, gathers code spans per minimum_context_required,
13
+ * runs the inference, and returns structured JSON. That JSON enters the
14
+ * `inferred` lane until promoted to `trusted` per the platform's promotion policy.
15
+ *
16
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
17
+ */
18
+ import { z } from "zod";
19
+ import { loadActivePack, getCapsule, getInferencePrompt } from "../pattern-pack/index.js";
20
+ import { withNextSteps, withNextStepsError } from "../lib/next-steps.js";
21
+ export const THREAT_GET_INFERENCE_PROMPT_NAME = "zivis_threat_get_inference_prompt";
22
+ export const THREAT_GET_INFERENCE_PROMPT_DESCRIPTION = `Return the prompt bundle for the host LLM to run local inference for a capsule.
23
+
24
+ ZIVIS doesn't run an LLM itself — the host (Cursor, Claude Code, etc.) does. This tool returns the prompt template + structured output schema + ambient capsule context so the host model can run the inference and produce JSON the inferred lane accepts.
25
+
26
+ Use this when:
27
+ - After zivis_threat_get_capsule, the user wants the host LLM to actually evaluate whether the pattern is present in the code
28
+ - The user says "go check if my code does this" / "is this pattern actually in my repo"
29
+ - The matcher emits an INFER candidate that needs host-LLM evaluation
30
+
31
+ The bundle includes:
32
+ - prompt: the markdown inference prompt
33
+ - expected_output_schema: JSON Schema for the structured response
34
+ - safe_summary: ambient capsule context
35
+ - minimum_context_required: hint to the host for how much code to attach
36
+ - evidence_focus: spans the deterministic strategies already flagged
37
+
38
+ The host LLM is expected to gather the indicated code spans, fill in the prompt, return JSON matching the schema. That output then flows back into the inferred lane.`;
39
+ export const THREAT_GET_INFERENCE_PROMPT_SCHEMA = {
40
+ capsule_id: z
41
+ .string()
42
+ .describe("Capsule id whose INFER prompt should be returned (e.g. 'agents.privilege-separation')."),
43
+ };
44
+ export function createThreatGetInferencePromptHandler() {
45
+ return async (params) => {
46
+ const handle = await loadActivePack();
47
+ let capsule;
48
+ try {
49
+ capsule = await getCapsule(handle, params.capsule_id);
50
+ }
51
+ catch (err) {
52
+ return withNextStepsError(`Capsule '${params.capsule_id}' not found. ${err.message}`, [
53
+ {
54
+ id: "list_relevant_capsules_first",
55
+ label: "List relevant capsules for the current repo first",
56
+ tool: "zivis_threat_list_relevant_capsules",
57
+ why: "Returns ids you can pass back here.",
58
+ },
59
+ ], "Capsule not found — list first to discover ids.");
60
+ }
61
+ if (!capsule.model_task_prompt_ref) {
62
+ return withNextStepsError(`Capsule '${capsule.id}' has no inference prompt defined (model_task_prompt_ref missing). This capsule is deterministic-only.`, [
63
+ {
64
+ id: "get_capsule",
65
+ label: "Read the full capsule to see its deterministic strategies",
66
+ tool: "zivis_threat_get_capsule",
67
+ args_hint: { capsule_id: capsule.id },
68
+ why: "Some capsules have no INFER strategy — only AST/GRAPH/META/etc. that the matcher runs locally.",
69
+ },
70
+ ], "No inference prompt for this capsule (deterministic only).");
71
+ }
72
+ const promptText = await getInferencePrompt(handle, capsule.model_task_prompt_ref);
73
+ return withNextSteps({
74
+ pack: { id: handle.manifest.pack_id, version: handle.manifest.version },
75
+ capsule_id: capsule.id,
76
+ prompt: promptText,
77
+ expected_output_schema: capsule.expected_output_schema ?? null,
78
+ safe_summary: capsule.safe_summary ?? null,
79
+ minimum_context_required: capsule.minimum_context_required ?? null,
80
+ host_instructions: "Gather the code spans indicated by minimum_context_required.symbols (or any deterministic match spans the matcher already flagged), attach them to the prompt above, run inference with your model, and return JSON matching expected_output_schema. The structured output flows back into the inferred lane.",
81
+ }, [
82
+ {
83
+ id: "host_runs_inference",
84
+ label: "Host LLM runs inference now (no further tool call)",
85
+ tool: "zivis_threat_get_inference_prompt",
86
+ why: "MCP cannot invoke your model. The host orchestrates the inference using this bundle.",
87
+ },
88
+ ], `Prompt bundle ready for host-side inference of ${capsule.id}.`);
89
+ };
90
+ }
91
+ //# sourceMappingURL=threat-get-inference-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threat-get-inference-prompt.js","sourceRoot":"","sources":["../../src/tools/threat-get-inference-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,MAAM,CAAC,MAAM,gCAAgC,GAAG,mCAAmC,CAAC;AAEpF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;;;;;;;;;;;;;sKAgB+G,CAAC;AAEvK,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,CAAC,wFAAwF,CAAC;CACtG,CAAC;AAEF,MAAM,UAAU,qCAAqC;IACnD,OAAO,KAAK,EAAE,MAA8B,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,kBAAkB,CACvB,YAAY,MAAM,CAAC,UAAU,gBAAiB,GAAa,CAAC,OAAO,EAAE,EACrE;gBACE;oBACE,EAAE,EAAE,8BAA8B;oBAClC,KAAK,EAAE,mDAAmD;oBAC1D,IAAI,EAAE,qCAAqC;oBAC3C,GAAG,EAAE,qCAAqC;iBAC3C;aACF,EACD,iDAAiD,CAClD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACnC,OAAO,kBAAkB,CACvB,YAAY,OAAO,CAAC,EAAE,wGAAwG,EAC9H;gBACE;oBACE,EAAE,EAAE,aAAa;oBACjB,KAAK,EAAE,2DAA2D;oBAClE,IAAI,EAAE,0BAA0B;oBAChC,SAAS,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE;oBACrC,GAAG,EAAE,gGAAgG;iBACtG;aACF,EACD,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnF,OAAO,aAAa,CAClB;YACE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvE,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,MAAM,EAAE,UAAU;YAClB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;YAC9D,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;YAC1C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,IAAI;YAClE,iBAAiB,EACf,+SAA+S;SAClT,EACD;YACE;gBACE,EAAE,EAAE,qBAAqB;gBACzB,KAAK,EAAE,oDAAoD;gBAC3D,IAAI,EAAE,mCAAmC;gBACzC,GAAG,EAAE,sFAAsF;aAC5F;SACF,EACD,kDAAkD,OAAO,CAAC,EAAE,GAAG,CAChE,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * zivis_threat_list_relevant_capsules — surface threat-model patterns
3
+ * relevant to the user's current repo, mid-IDE-conversation.
4
+ *
5
+ * Reads the latest RepoGraphArtifactV1 from the user cache, evaluates
6
+ * every capsule's relevance_filter against it, and returns the matching
7
+ * capsules with their safe_summary so the host LLM can frame the
8
+ * conversation in threat-model terms.
9
+ *
10
+ * Tier 1 / public pack only. Proprietary patterns are evaluated platform-side.
11
+ *
12
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
13
+ */
14
+ import { z } from "zod";
15
+ export declare const THREAT_LIST_RELEVANT_CAPSULES_NAME = "zivis_threat_list_relevant_capsules";
16
+ export declare const THREAT_LIST_RELEVANT_CAPSULES_DESCRIPTION = "List threat-model patterns relevant to the user's current repo.\n\nUse this when the user asks any of:\n- \"what should I be worried about in this code\"\n- \"what threats apply to my app\"\n- \"are there known patterns that match my architecture\"\n- \"what's in my threat model\"\n- mid-conversation when the user describes a feature that touches deps the threat library covers\n\nReads the latest local repo graph artifact (produced by 'zivis inspect') from the user cache, runs every capsule's relevance_filter against it, and returns the subset whose filter passes \u2014 together with each capsule's safe_summary so you can frame the conversation in threat-model terms (component, flow, trust boundary, scenario).\n\nIf no graph artifact exists yet for this repo, the tool returns a next-step pointing to 'zivis inspect'. Always speak in threat-model vocabulary even when the user doesn't.";
17
+ export declare const THREAT_LIST_RELEVANT_CAPSULES_SCHEMA: {
18
+ artifact_path: z.ZodOptional<z.ZodString>;
19
+ cwd: z.ZodOptional<z.ZodString>;
20
+ };
21
+ export declare function createThreatListRelevantCapsulesHandler(): (params: {
22
+ artifact_path?: string;
23
+ cwd?: string;
24
+ }) => Promise<{
25
+ content: Array<{
26
+ type: "text";
27
+ text: string;
28
+ }>;
29
+ isError?: boolean;
30
+ }>;
@@ -0,0 +1,176 @@
1
+ /**
2
+ * zivis_threat_list_relevant_capsules — surface threat-model patterns
3
+ * relevant to the user's current repo, mid-IDE-conversation.
4
+ *
5
+ * Reads the latest RepoGraphArtifactV1 from the user cache, evaluates
6
+ * every capsule's relevance_filter against it, and returns the matching
7
+ * capsules with their safe_summary so the host LLM can frame the
8
+ * conversation in threat-model terms.
9
+ *
10
+ * Tier 1 / public pack only. Proprietary patterns are evaluated platform-side.
11
+ *
12
+ * Plan: docs/plans/LOCAL-REPO-GRAPH-IMPLEMENTATION.md (Phase 2A)
13
+ */
14
+ import { z } from "zod";
15
+ import * as fs from "node:fs/promises";
16
+ import * as fssync from "node:fs";
17
+ import * as os from "node:os";
18
+ import * as path from "node:path";
19
+ import { loadActivePack, findRelevantCapsules, } from "../pattern-pack/index.js";
20
+ import { withNextSteps, withNextStepsError } from "../lib/next-steps.js";
21
+ export const THREAT_LIST_RELEVANT_CAPSULES_NAME = "zivis_threat_list_relevant_capsules";
22
+ export const THREAT_LIST_RELEVANT_CAPSULES_DESCRIPTION = `List threat-model patterns relevant to the user's current repo.
23
+
24
+ Use this when the user asks any of:
25
+ - "what should I be worried about in this code"
26
+ - "what threats apply to my app"
27
+ - "are there known patterns that match my architecture"
28
+ - "what's in my threat model"
29
+ - mid-conversation when the user describes a feature that touches deps the threat library covers
30
+
31
+ Reads the latest local repo graph artifact (produced by 'zivis inspect') from the user cache, runs every capsule's relevance_filter against it, and returns the subset whose filter passes — together with each capsule's safe_summary so you can frame the conversation in threat-model terms (component, flow, trust boundary, scenario).
32
+
33
+ If no graph artifact exists yet for this repo, the tool returns a next-step pointing to 'zivis inspect'. Always speak in threat-model vocabulary even when the user doesn't.`;
34
+ export const THREAT_LIST_RELEVANT_CAPSULES_SCHEMA = {
35
+ artifact_path: z
36
+ .string()
37
+ .optional()
38
+ .describe("Optional path to a specific RepoGraphArtifactV1 JSON. If omitted, the tool finds the most recent artifact in ~/Library/Caches/zivis/repos/<repo-id>/inspect/runs/ for the repo at cwd."),
39
+ cwd: z
40
+ .string()
41
+ .optional()
42
+ .describe("Working directory whose repo cache to search (defaults to server cwd)."),
43
+ };
44
+ export function createThreatListRelevantCapsulesHandler() {
45
+ return async (params) => {
46
+ const cwd = params.cwd ?? process.cwd();
47
+ let artifact;
48
+ let artifactPath;
49
+ try {
50
+ const resolved = await resolveArtifactPath(params.artifact_path, cwd);
51
+ artifactPath = resolved;
52
+ const raw = await fs.readFile(resolved, "utf8");
53
+ artifact = JSON.parse(raw);
54
+ }
55
+ catch (err) {
56
+ return withNextStepsError(`No repo graph artifact found. ${err.message}`, [
57
+ {
58
+ id: "run_zivis_inspect",
59
+ label: "Run `zivis inspect` to build the local repo graph",
60
+ tool: "zivis_inspect",
61
+ why: "The relevance evaluation reads from the latest inspect run in the user cache.",
62
+ },
63
+ ], "Run `zivis inspect` first; this tool reads from its output.");
64
+ }
65
+ const handle = await loadActivePack();
66
+ const relevant = await findRelevantCapsules(handle, artifact);
67
+ const summaries = relevant.map((cap) => ({
68
+ id: cap.id,
69
+ title: cap.title,
70
+ category: cap.category,
71
+ safe_summary: cap.safe_summary,
72
+ applicable_languages: cap.applicable_languages,
73
+ matched_on: matchedTerms(cap, artifact),
74
+ }));
75
+ return withNextSteps({
76
+ artifact_path: artifactPath,
77
+ pack: { id: handle.manifest.pack_id, version: handle.manifest.version },
78
+ languages_in_scope: artifact.scope.languages ?? [],
79
+ relevant_count: summaries.length,
80
+ relevant_capsules: summaries,
81
+ }, summaries.length > 0
82
+ ? [
83
+ {
84
+ id: "get_capsule_details",
85
+ label: "Pull the full capsule for any item the user wants to investigate",
86
+ tool: "zivis_threat_get_capsule",
87
+ why: "The full capsule has threats (with STRIDE), risk_hints, repair_contract, related_patterns.",
88
+ },
89
+ {
90
+ id: "get_inference_prompt",
91
+ label: "Get the inference prompt for the host LLM to run a deeper check",
92
+ tool: "zivis_threat_get_inference_prompt",
93
+ why: "INFER strategies in each capsule reference a prompt template the user's IDE model executes.",
94
+ },
95
+ ]
96
+ : [
97
+ {
98
+ id: "no_relevant_patterns",
99
+ label: "No public-pack patterns matched this repo",
100
+ tool: "zivis_threat_list_relevant_capsules",
101
+ why: "This is normal for repos without agentic / RAG / self-consistency / multi-tenant patterns. Proprietary patterns may still apply server-side.",
102
+ },
103
+ ], summaries.length > 0
104
+ ? `Found ${summaries.length} relevant capsule(s) in the threat library.`
105
+ : "No public-pack capsules matched this repo. Proprietary patterns evaluated server-side may still apply.");
106
+ };
107
+ }
108
+ // ── Helpers ──
109
+ function userCacheRoot() {
110
+ const home = os.homedir();
111
+ if (process.platform === "darwin") {
112
+ return path.join(home, "Library", "Caches", "zivis");
113
+ }
114
+ if (process.platform === "win32") {
115
+ const localAppData = process.env.LOCALAPPDATA ?? path.join(home, "AppData", "Local");
116
+ return path.join(localAppData, "zivis", "Cache");
117
+ }
118
+ const xdg = process.env.XDG_CACHE_HOME;
119
+ return path.join(xdg ?? path.join(home, ".cache"), "zivis");
120
+ }
121
+ async function resolveArtifactPath(explicit, cwd) {
122
+ if (explicit) {
123
+ if (!fssync.existsSync(explicit)) {
124
+ throw new Error(`Artifact path does not exist: ${explicit}`);
125
+ }
126
+ return explicit;
127
+ }
128
+ const reposRoot = path.join(userCacheRoot(), "repos");
129
+ if (!fssync.existsSync(reposRoot)) {
130
+ throw new Error(`No inspect cache found at ${reposRoot}. Run \`zivis inspect\` from the repo to populate it.`);
131
+ }
132
+ // Best-effort: find the newest .json under any repo's inspect/runs/ directory.
133
+ // The future improvement is to derive the repo-id from cwd's git remote and
134
+ // pick its newest run only.
135
+ const candidates = [];
136
+ for (const repo of await fs.readdir(reposRoot, { withFileTypes: true })) {
137
+ if (!repo.isDirectory())
138
+ continue;
139
+ const runs = path.join(reposRoot, repo.name, "inspect", "runs");
140
+ if (!fssync.existsSync(runs))
141
+ continue;
142
+ for (const entry of await fs.readdir(runs)) {
143
+ if (!entry.endsWith(".json"))
144
+ continue;
145
+ const full = path.join(runs, entry);
146
+ const stat = await fs.stat(full);
147
+ candidates.push({ file: full, mtime: stat.mtimeMs });
148
+ }
149
+ }
150
+ if (candidates.length === 0) {
151
+ throw new Error(`No inspect runs found under ${reposRoot}. Run \`zivis inspect\` from the repo to produce one.`);
152
+ }
153
+ candidates.sort((a, b) => b.mtime - a.mtime);
154
+ return candidates[0].file;
155
+ }
156
+ function matchedTerms(cap, artifact) {
157
+ const matched = [];
158
+ const pkgs = new Set();
159
+ for (const node of artifact.nodes) {
160
+ if (node.type === "external_dependency" && node.attributes?.package) {
161
+ pkgs.add(node.attributes.package);
162
+ }
163
+ }
164
+ const langs = new Set(artifact.scope.languages ?? []);
165
+ const f = cap.relevance_filter;
166
+ if (!f)
167
+ return ["always-applicable (no relevance_filter set)"];
168
+ for (const term of [...(f.any_of ?? []), ...(f.all_of ?? [])]) {
169
+ if (term.dependency && pkgs.has(term.dependency))
170
+ matched.push(`dep:${term.dependency}`);
171
+ if (term.language && langs.has(term.language))
172
+ matched.push(`language:${term.language}`);
173
+ }
174
+ return matched.length > 0 ? matched : ["language match only"];
175
+ }
176
+ //# sourceMappingURL=threat-list-relevant-capsules.js.map