@4da/mcp-server 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +160 -85
  3. package/dist/auth.d.ts +36 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +82 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/db.d.ts +73 -0
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +607 -4
  10. package/dist/db.js.map +1 -1
  11. package/dist/doctor.d.ts.map +1 -1
  12. package/dist/doctor.js +33 -7
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/http-transport.d.ts.map +1 -1
  15. package/dist/http-transport.js +19 -2
  16. package/dist/http-transport.js.map +1 -1
  17. package/dist/index.d.ts +15 -18
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +150 -325
  20. package/dist/index.js.map +1 -1
  21. package/dist/live/cache.d.ts +16 -0
  22. package/dist/live/cache.d.ts.map +1 -0
  23. package/dist/live/cache.js +61 -0
  24. package/dist/live/cache.js.map +1 -0
  25. package/dist/live/hn-fetcher.d.ts +19 -0
  26. package/dist/live/hn-fetcher.d.ts.map +1 -0
  27. package/dist/live/hn-fetcher.js +123 -0
  28. package/dist/live/hn-fetcher.js.map +1 -0
  29. package/dist/live/index.d.ts +55 -0
  30. package/dist/live/index.d.ts.map +1 -0
  31. package/dist/live/index.js +131 -0
  32. package/dist/live/index.js.map +1 -0
  33. package/dist/live/osv-scanner.d.ts +19 -0
  34. package/dist/live/osv-scanner.d.ts.map +1 -0
  35. package/dist/live/osv-scanner.js +197 -0
  36. package/dist/live/osv-scanner.js.map +1 -0
  37. package/dist/live/rate-limiter.d.ts +19 -0
  38. package/dist/live/rate-limiter.d.ts.map +1 -0
  39. package/dist/live/rate-limiter.js +52 -0
  40. package/dist/live/rate-limiter.js.map +1 -0
  41. package/dist/live/types.d.ts +89 -0
  42. package/dist/live/types.d.ts.map +1 -0
  43. package/dist/live/types.js +3 -0
  44. package/dist/live/types.js.map +1 -0
  45. package/dist/live/version-resolver.d.ts +11 -0
  46. package/dist/live/version-resolver.d.ts.map +1 -0
  47. package/dist/live/version-resolver.js +321 -0
  48. package/dist/live/version-resolver.js.map +1 -0
  49. package/dist/live-singleton.d.ts +9 -0
  50. package/dist/live-singleton.d.ts.map +1 -0
  51. package/dist/live-singleton.js +14 -0
  52. package/dist/live-singleton.js.map +1 -0
  53. package/dist/llm.d.ts.map +1 -1
  54. package/dist/llm.js +3 -2
  55. package/dist/llm.js.map +1 -1
  56. package/dist/output-manager.d.ts.map +1 -1
  57. package/dist/output-manager.js +1 -0
  58. package/dist/output-manager.js.map +1 -1
  59. package/dist/project-scanner.d.ts +27 -0
  60. package/dist/project-scanner.d.ts.map +1 -0
  61. package/dist/project-scanner.js +366 -0
  62. package/dist/project-scanner.js.map +1 -0
  63. package/dist/schema-registry.d.ts +31 -13
  64. package/dist/schema-registry.d.ts.map +1 -1
  65. package/dist/schema-registry.js +164 -32
  66. package/dist/schema-registry.js.map +1 -1
  67. package/dist/schemas/agent-feedback-stats.json +14 -0
  68. package/dist/schemas/preemption-feed.json +18 -0
  69. package/dist/schemas/record-agent-feedback.json +28 -0
  70. package/dist/schemas/trust-summary.json +13 -0
  71. package/dist/schemas/vulnerability-scan.json +26 -0
  72. package/dist/schemas/what-should-i-know.json +19 -0
  73. package/dist/setup.d.ts +2 -1
  74. package/dist/setup.d.ts.map +1 -1
  75. package/dist/setup.js +38 -4
  76. package/dist/setup.js.map +1 -1
  77. package/dist/tool-dispatch.d.ts +33 -0
  78. package/dist/tool-dispatch.d.ts.map +1 -0
  79. package/dist/tool-dispatch.js +87 -0
  80. package/dist/tool-dispatch.js.map +1 -0
  81. package/dist/tools/agent-feedback-stats.d.ts +30 -0
  82. package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
  83. package/dist/tools/agent-feedback-stats.js +41 -0
  84. package/dist/tools/agent-feedback-stats.js.map +1 -0
  85. package/dist/tools/agent-memory.d.ts.map +1 -1
  86. package/dist/tools/agent-memory.js +33 -0
  87. package/dist/tools/agent-memory.js.map +1 -1
  88. package/dist/tools/agent-session-brief.d.ts.map +1 -1
  89. package/dist/tools/agent-session-brief.js +1 -0
  90. package/dist/tools/agent-session-brief.js.map +1 -1
  91. package/dist/tools/attention-report.d.ts.map +1 -1
  92. package/dist/tools/attention-report.js +1 -0
  93. package/dist/tools/attention-report.js.map +1 -1
  94. package/dist/tools/autophagy-status.d.ts.map +1 -1
  95. package/dist/tools/autophagy-status.js.map +1 -1
  96. package/dist/tools/compound-advantage.d.ts +3 -0
  97. package/dist/tools/compound-advantage.d.ts.map +1 -1
  98. package/dist/tools/compound-advantage.js +67 -10
  99. package/dist/tools/compound-advantage.js.map +1 -1
  100. package/dist/tools/config-validator.d.ts.map +1 -1
  101. package/dist/tools/config-validator.js +31 -0
  102. package/dist/tools/config-validator.js.map +1 -1
  103. package/dist/tools/context-analysis.d.ts.map +1 -1
  104. package/dist/tools/context-analysis.js +1 -0
  105. package/dist/tools/context-analysis.js.map +1 -1
  106. package/dist/tools/daily-briefing.d.ts.map +1 -1
  107. package/dist/tools/daily-briefing.js +17 -1
  108. package/dist/tools/daily-briefing.js.map +1 -1
  109. package/dist/tools/decision-enforcement.d.ts.map +1 -1
  110. package/dist/tools/decision-enforcement.js +1 -0
  111. package/dist/tools/decision-enforcement.js.map +1 -1
  112. package/dist/tools/decision-memory.d.ts +2 -0
  113. package/dist/tools/decision-memory.d.ts.map +1 -1
  114. package/dist/tools/decision-memory.js +80 -0
  115. package/dist/tools/decision-memory.js.map +1 -1
  116. package/dist/tools/decision-windows.d.ts.map +1 -1
  117. package/dist/tools/decision-windows.js.map +1 -1
  118. package/dist/tools/delegation-score.d.ts.map +1 -1
  119. package/dist/tools/delegation-score.js +1 -0
  120. package/dist/tools/delegation-score.js.map +1 -1
  121. package/dist/tools/developer-dna.d.ts.map +1 -1
  122. package/dist/tools/developer-dna.js +1 -0
  123. package/dist/tools/developer-dna.js.map +1 -1
  124. package/dist/tools/explain-relevance.d.ts.map +1 -1
  125. package/dist/tools/explain-relevance.js +1 -0
  126. package/dist/tools/explain-relevance.js.map +1 -1
  127. package/dist/tools/export-context.d.ts +9 -0
  128. package/dist/tools/export-context.d.ts.map +1 -1
  129. package/dist/tools/export-context.js +45 -1
  130. package/dist/tools/export-context.js.map +1 -1
  131. package/dist/tools/get-actionable-signals.d.ts.map +1 -1
  132. package/dist/tools/get-actionable-signals.js +60 -9
  133. package/dist/tools/get-actionable-signals.js.map +1 -1
  134. package/dist/tools/get-context.d.ts.map +1 -1
  135. package/dist/tools/get-context.js +1 -0
  136. package/dist/tools/get-context.js.map +1 -1
  137. package/dist/tools/get-relevant-content.d.ts.map +1 -1
  138. package/dist/tools/get-relevant-content.js +3 -0
  139. package/dist/tools/get-relevant-content.js.map +1 -1
  140. package/dist/tools/index.d.ts +16 -16
  141. package/dist/tools/index.d.ts.map +1 -1
  142. package/dist/tools/index.js +21 -16
  143. package/dist/tools/index.js.map +1 -1
  144. package/dist/tools/knowledge-gaps.d.ts.map +1 -1
  145. package/dist/tools/knowledge-gaps.js +9 -3
  146. package/dist/tools/knowledge-gaps.js.map +1 -1
  147. package/dist/tools/llm-status.d.ts.map +1 -1
  148. package/dist/tools/llm-status.js +1 -0
  149. package/dist/tools/llm-status.js.map +1 -1
  150. package/dist/tools/muse-context.d.ts +195 -0
  151. package/dist/tools/muse-context.d.ts.map +1 -0
  152. package/dist/tools/muse-context.js +284 -0
  153. package/dist/tools/muse-context.js.map +1 -0
  154. package/dist/tools/preemption-feed.d.ts +55 -0
  155. package/dist/tools/preemption-feed.d.ts.map +1 -0
  156. package/dist/tools/preemption-feed.js +124 -0
  157. package/dist/tools/preemption-feed.js.map +1 -0
  158. package/dist/tools/project-health.d.ts +6 -0
  159. package/dist/tools/project-health.d.ts.map +1 -1
  160. package/dist/tools/project-health.js +49 -10
  161. package/dist/tools/project-health.js.map +1 -1
  162. package/dist/tools/record-agent-feedback.d.ts +46 -0
  163. package/dist/tools/record-agent-feedback.d.ts.map +1 -0
  164. package/dist/tools/record-agent-feedback.js +71 -0
  165. package/dist/tools/record-agent-feedback.js.map +1 -0
  166. package/dist/tools/record-feedback.d.ts.map +1 -1
  167. package/dist/tools/record-feedback.js +1 -0
  168. package/dist/tools/record-feedback.js.map +1 -1
  169. package/dist/tools/reverse-mentions.d.ts.map +1 -1
  170. package/dist/tools/reverse-mentions.js +1 -0
  171. package/dist/tools/reverse-mentions.js.map +1 -1
  172. package/dist/tools/score-autopsy.d.ts.map +1 -1
  173. package/dist/tools/score-autopsy.js +1 -0
  174. package/dist/tools/score-autopsy.js.map +1 -1
  175. package/dist/tools/semantic-shifts.d.ts.map +1 -1
  176. package/dist/tools/semantic-shifts.js +1 -0
  177. package/dist/tools/semantic-shifts.js.map +1 -1
  178. package/dist/tools/signal-chains.d.ts.map +1 -1
  179. package/dist/tools/signal-chains.js +5 -2
  180. package/dist/tools/signal-chains.js.map +1 -1
  181. package/dist/tools/source-health.d.ts.map +1 -1
  182. package/dist/tools/source-health.js +1 -0
  183. package/dist/tools/source-health.js.map +1 -1
  184. package/dist/tools/tech-radar.d.ts.map +1 -1
  185. package/dist/tools/tech-radar.js +1 -0
  186. package/dist/tools/tech-radar.js.map +1 -1
  187. package/dist/tools/topic-connections.d.ts.map +1 -1
  188. package/dist/tools/topic-connections.js +1 -0
  189. package/dist/tools/topic-connections.js.map +1 -1
  190. package/dist/tools/trend-analysis.d.ts.map +1 -1
  191. package/dist/tools/trend-analysis.js +1 -0
  192. package/dist/tools/trend-analysis.js.map +1 -1
  193. package/dist/tools/trust-summary.d.ts +38 -0
  194. package/dist/tools/trust-summary.d.ts.map +1 -0
  195. package/dist/tools/trust-summary.js +89 -0
  196. package/dist/tools/trust-summary.js.map +1 -0
  197. package/dist/tools/vulnerability-scan.d.ts +89 -0
  198. package/dist/tools/vulnerability-scan.d.ts.map +1 -0
  199. package/dist/tools/vulnerability-scan.js +127 -0
  200. package/dist/tools/vulnerability-scan.js.map +1 -0
  201. package/dist/tools/what-should-i-know.d.ts +79 -0
  202. package/dist/tools/what-should-i-know.d.ts.map +1 -0
  203. package/dist/tools/what-should-i-know.js +376 -0
  204. package/dist/tools/what-should-i-know.js.map +1 -0
  205. package/dist/types.d.ts +112 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +1 -0
  208. package/dist/types.js.map +1 -1
  209. package/package.json +35 -18
@@ -0,0 +1,89 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ /**
3
+ * trust_summary tool
4
+ *
5
+ * Returns intelligence quality metrics from the trust ledger —
6
+ * precision, action rate, false positive rate, preemption wins.
7
+ * Helps agents assess how reliable 4DA's intelligence is.
8
+ */
9
+ export const trustSummaryTool = {
10
+ name: "trust_summary",
11
+ description: "Get intelligence quality metrics — precision, action conversion rate, false positive rate, and preemption wins. Use this to assess how reliable 4DA's signals are before acting on them.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ days: {
16
+ type: "number",
17
+ description: "Number of days to analyze. Default: 30",
18
+ default: 30,
19
+ },
20
+ },
21
+ },
22
+ };
23
+ export function executeTrustSummary(db, params) {
24
+ const rawDb = db.getRawDb();
25
+ const days = params.days ?? 30;
26
+ const offset = `-${days} days`;
27
+ // Count events by type
28
+ let counts = [];
29
+ try {
30
+ counts = rawDb
31
+ .prepare(`SELECT event_type, COUNT(*) as cnt
32
+ FROM trust_events
33
+ WHERE created_at >= datetime('now', ?)
34
+ GROUP BY event_type`)
35
+ .all(offset);
36
+ }
37
+ catch {
38
+ /* trust_events table may not exist yet */
39
+ }
40
+ const getCount = (type) => counts.find((c) => c.event_type === type)?.cnt ?? 0;
41
+ const surfaced = getCount("surfaced");
42
+ const acted_on = getCount("acted_on");
43
+ const dismissed = getCount("dismissed");
44
+ const false_positives = getCount("false_positive");
45
+ const validated = getCount("validated");
46
+ const true_positives = acted_on + validated;
47
+ const precision = true_positives + false_positives > 0
48
+ ? true_positives / (true_positives + false_positives)
49
+ : 1.0;
50
+ const action_rate = surfaced > 0 ? acted_on / surfaced : 0;
51
+ // Preemption wins
52
+ let preemption_wins = 0;
53
+ let avg_lead_time_hours = null;
54
+ try {
55
+ const winRow = rawDb
56
+ .prepare(`SELECT COUNT(*) as wins, AVG(lead_time_hours) as avg_lead
57
+ FROM preemption_wins
58
+ WHERE verified = 1 AND created_at >= datetime('now', ?)`)
59
+ .get(offset);
60
+ if (winRow) {
61
+ preemption_wins = winRow.wins;
62
+ avg_lead_time_hours = winRow.avg_lead;
63
+ }
64
+ }
65
+ catch {
66
+ /* table may not exist yet */
67
+ }
68
+ return {
69
+ period_days: days,
70
+ total_surfaced: surfaced,
71
+ acted_on,
72
+ dismissed,
73
+ false_positives,
74
+ precision: Math.round(precision * 1000) / 1000,
75
+ action_conversion_rate: Math.round(action_rate * 1000) / 1000,
76
+ preemption_wins,
77
+ avg_lead_time_hours: avg_lead_time_hours
78
+ ? Math.round(avg_lead_time_hours * 10) / 10
79
+ : null,
80
+ reliability_assessment: precision >= 0.8
81
+ ? "high"
82
+ : precision >= 0.6
83
+ ? "moderate"
84
+ : precision >= 0.3
85
+ ? "developing"
86
+ : "insufficient_data",
87
+ };
88
+ }
89
+ //# sourceMappingURL=trust-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-summary.js","sourceRoot":"","sources":["../../src/tools/trust-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * vulnerability_scan tool
3
+ *
4
+ * Scans project dependencies for known vulnerabilities using OSV.dev.
5
+ * Zero configuration — auto-detects stack from manifest files.
6
+ * Returns CVEs, severity, fix versions across npm, Rust, Python, Go.
7
+ */
8
+ import type { FourDADatabase } from "../db.js";
9
+ import type { LiveIntelligence } from "../live/index.js";
10
+ export interface VulnerabilityScanParams {
11
+ project_path?: string;
12
+ severity_filter?: "critical" | "high" | "medium" | "low";
13
+ include_dev?: boolean;
14
+ force_refresh?: boolean;
15
+ }
16
+ export declare const vulnerabilityScanTool: {
17
+ name: string;
18
+ description: string;
19
+ inputSchema: {
20
+ type: "object";
21
+ properties: {
22
+ project_path: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ severity_filter: {
27
+ type: string;
28
+ enum: string[];
29
+ description: string;
30
+ };
31
+ include_dev: {
32
+ type: string;
33
+ description: string;
34
+ };
35
+ force_refresh: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ };
40
+ };
41
+ };
42
+ export declare function executeVulnerabilityScan(db: FourDADatabase, params: VulnerabilityScanParams, liveIntelligence: LiveIntelligence | null): Promise<{
43
+ scan_time: string;
44
+ project: string;
45
+ ecosystems_scanned: string[];
46
+ total_dependencies_scanned: number;
47
+ total_vulnerable_packages: number;
48
+ by_severity: {
49
+ critical: number;
50
+ high: number;
51
+ medium: number;
52
+ low: number;
53
+ unknown: number;
54
+ };
55
+ vulnerabilities: {
56
+ package: string;
57
+ current_version: string;
58
+ ecosystem: import("../live/types.js").OsvEcosystem;
59
+ is_dev: boolean;
60
+ vuln_id: string;
61
+ aliases: string[];
62
+ severity: "unknown" | "critical" | "high" | "medium" | "low";
63
+ cvss_score: number | null;
64
+ summary: string;
65
+ fixed_version: string | null;
66
+ published: string;
67
+ references: string[];
68
+ }[];
69
+ recommendations: string[];
70
+ clean_dependencies: number;
71
+ scan_duration_ms: number;
72
+ _meta: {
73
+ source: string;
74
+ cached: boolean;
75
+ offline: boolean;
76
+ privacy: string;
77
+ };
78
+ } | {
79
+ error: null;
80
+ offline: boolean;
81
+ message: string;
82
+ hint: string;
83
+ } | {
84
+ error: null;
85
+ offline: boolean;
86
+ message: string;
87
+ hint?: undefined;
88
+ }>;
89
+ //# sourceMappingURL=vulnerability-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vulnerability-scan.d.ts","sourceRoot":"","sources":["../../src/tools/vulnerability-scan.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,kBAAkB,CAAC;AAElF,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;CA6BjC,CAAC;AAUF,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,uBAAuB,EAC/B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2B1C"}
@@ -0,0 +1,127 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ /**
3
+ * vulnerability_scan tool
4
+ *
5
+ * Scans project dependencies for known vulnerabilities using OSV.dev.
6
+ * Zero configuration — auto-detects stack from manifest files.
7
+ * Returns CVEs, severity, fix versions across npm, Rust, Python, Go.
8
+ */
9
+ export const vulnerabilityScanTool = {
10
+ name: "vulnerability_scan",
11
+ description: "Scan project dependencies for known vulnerabilities (CVEs) using OSV.dev. " +
12
+ "Returns severity, fix versions, and upgrade recommendations for npm, Rust, Python, and Go. " +
13
+ "Zero config — automatically detects your stack from manifest/lock files. " +
14
+ "Privacy: only sends package names and versions (public manifest data).",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ project_path: {
19
+ type: "string",
20
+ description: "Project directory to scan. Default: current working directory.",
21
+ },
22
+ severity_filter: {
23
+ type: "string",
24
+ enum: ["critical", "high", "medium", "low"],
25
+ description: "Only show vulnerabilities at or above this severity level.",
26
+ },
27
+ include_dev: {
28
+ type: "boolean",
29
+ description: "Include devDependencies in scan. Default: false.",
30
+ },
31
+ force_refresh: {
32
+ type: "boolean",
33
+ description: "Ignore cache and fetch fresh data from OSV.dev. Default: false.",
34
+ },
35
+ },
36
+ },
37
+ };
38
+ const SEVERITY_ORDER = {
39
+ critical: 4,
40
+ high: 3,
41
+ medium: 2,
42
+ low: 1,
43
+ unknown: 0,
44
+ };
45
+ export async function executeVulnerabilityScan(db, params, liveIntelligence) {
46
+ if (!liveIntelligence || !liveIntelligence.isEnabled()) {
47
+ return {
48
+ error: null,
49
+ offline: true,
50
+ message: "Live intelligence disabled. Set FOURDA_OFFLINE=false or remove the env var to enable vulnerability scanning.",
51
+ hint: "4DA queries OSV.dev with your dependency names and versions (public manifest data). No personal data is transmitted.",
52
+ };
53
+ }
54
+ if (!liveIntelligence.isInitialized()) {
55
+ return {
56
+ error: null,
57
+ offline: false,
58
+ message: "No project dependencies detected. Ensure manifest files (package.json, Cargo.toml, etc.) exist in your project.",
59
+ };
60
+ }
61
+ const projectPath = params.project_path || process.cwd();
62
+ const result = await liveIntelligence.scanVulnerabilities(projectPath, {
63
+ includeDev: params.include_dev || false,
64
+ forceRefresh: params.force_refresh || false,
65
+ });
66
+ return formatResult(result, params.severity_filter);
67
+ }
68
+ function formatResult(result, severityFilter) {
69
+ let vulns = result.vulnerabilities;
70
+ // Apply severity filter
71
+ if (severityFilter) {
72
+ const minOrder = SEVERITY_ORDER[severityFilter] || 0;
73
+ vulns = vulns.filter((v) => (SEVERITY_ORDER[v.severity] || 0) >= minOrder);
74
+ }
75
+ // Sort: critical first, then high, etc.
76
+ vulns.sort((a, b) => (SEVERITY_ORDER[b.severity] || 0) - (SEVERITY_ORDER[a.severity] || 0));
77
+ // Generate recommendations
78
+ const recommendations = [];
79
+ const byPackage = new Map();
80
+ for (const v of vulns) {
81
+ if (!byPackage.has(v.package))
82
+ byPackage.set(v.package, []);
83
+ byPackage.get(v.package).push(v);
84
+ }
85
+ for (const [pkg, pkgVulns] of byPackage) {
86
+ const highest = pkgVulns[0];
87
+ const fixVersion = pkgVulns.find((v) => v.fixedVersion)?.fixedVersion;
88
+ if (fixVersion) {
89
+ recommendations.push(`Upgrade ${pkg} ${highest.currentVersion} \u2192 ${fixVersion} (fixes ${pkgVulns.length} ${highest.severity} severity CVE${pkgVulns.length > 1 ? "s" : ""})`);
90
+ }
91
+ else {
92
+ recommendations.push(`Review ${pkg} ${highest.currentVersion} \u2014 ${pkgVulns.length} known vulnerabilit${pkgVulns.length > 1 ? "ies" : "y"}, no fix version published`);
93
+ }
94
+ }
95
+ return {
96
+ scan_time: result.scannedAt,
97
+ project: result.projectPath.split(/[/\\]/).pop() || result.projectPath,
98
+ ecosystems_scanned: result.ecosystemsScanned,
99
+ total_dependencies_scanned: result.totalScanned,
100
+ total_vulnerable_packages: result.totalVulnerable,
101
+ by_severity: result.bySeverity,
102
+ vulnerabilities: vulns.map((v) => ({
103
+ package: v.package,
104
+ current_version: v.currentVersion,
105
+ ecosystem: v.ecosystem,
106
+ is_dev: v.isDev,
107
+ vuln_id: v.vulnId,
108
+ aliases: v.aliases,
109
+ severity: v.severity,
110
+ cvss_score: v.cvssScore,
111
+ summary: v.summary,
112
+ fixed_version: v.fixedVersion,
113
+ published: v.published,
114
+ references: v.references,
115
+ })),
116
+ recommendations,
117
+ clean_dependencies: result.cleanCount,
118
+ scan_duration_ms: result.scanDurationMs,
119
+ _meta: {
120
+ source: "osv.dev",
121
+ cached: result.cached,
122
+ offline: result.offline,
123
+ privacy: "Only package names and versions were sent (public manifest data)",
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=vulnerability-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vulnerability-scan.js","sourceRoot":"","sources":["../../src/tools/vulnerability-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * what_should_i_know tool
3
+ *
4
+ * Single entry point for external AI agents to get task-relevant intelligence
5
+ * before starting work. Synthesizes multiple intelligence layers:
6
+ * - Actionable signals (security alerts, breaking changes)
7
+ * - Decision windows (time-bounded opportunities)
8
+ * - Signal chains (escalating causal narratives)
9
+ * - Session brief (decisions, concerns, memories)
10
+ *
11
+ * Filters everything for relevance to the described task and involved files.
12
+ */
13
+ import type { FourDADatabase } from "../db.js";
14
+ export interface WhatShouldIKnowParams {
15
+ task: string;
16
+ files?: string[];
17
+ }
18
+ interface Advisory {
19
+ title: string;
20
+ signal_type: string;
21
+ priority: string;
22
+ action: string;
23
+ url: string | null;
24
+ }
25
+ interface DecisionWindow {
26
+ id: number;
27
+ title: string;
28
+ description: string | null;
29
+ urgency: number;
30
+ }
31
+ interface ActiveSignal {
32
+ chain_name: string;
33
+ priority: string;
34
+ suggested_action: string;
35
+ link_count: number;
36
+ }
37
+ interface WisdomEntry {
38
+ type: string;
39
+ subject: string;
40
+ detail: string;
41
+ }
42
+ type DelegationLevel = "safe_to_delegate" | "review_needed" | "human_only";
43
+ interface WhatShouldIKnowResult {
44
+ task: string;
45
+ files: string[];
46
+ advisories: Advisory[];
47
+ decision_windows: DecisionWindow[];
48
+ active_signals: ActiveSignal[];
49
+ relevant_wisdom: WisdomEntry[];
50
+ delegation_assessment: {
51
+ level: DelegationLevel;
52
+ reason: string;
53
+ };
54
+ summary: string;
55
+ }
56
+ export declare const whatShouldIKnowTool: {
57
+ name: string;
58
+ description: string;
59
+ inputSchema: {
60
+ type: "object";
61
+ properties: {
62
+ task: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ files: {
67
+ type: string;
68
+ items: {
69
+ type: string;
70
+ };
71
+ description: string;
72
+ };
73
+ };
74
+ required: string[];
75
+ };
76
+ };
77
+ export declare function executeWhatShouldIKnow(db: FourDADatabase, params: WhatShouldIKnowParams): WhatShouldIKnowResult;
78
+ export {};
79
+ //# sourceMappingURL=what-should-i-know.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"what-should-i-know.d.ts","sourceRoot":"","sources":["../../src/tools/what-should-i-know.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAY/C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,eAAe,GAAG,kBAAkB,GAAG,eAAe,GAAG,YAAY,CAAC;AAE3E,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,qBAAqB,EAAE;QACrB,KAAK,EAAE,eAAe,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;CAqB/B,CAAC;AA0IF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAkPvB"}