@4da/mcp-server 3.2.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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -62
  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 +100 -2
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +707 -1
  10. package/dist/db.js.map +1 -1
  11. package/dist/doctor.d.ts +15 -0
  12. package/dist/doctor.d.ts.map +1 -0
  13. package/dist/doctor.js +124 -0
  14. package/dist/doctor.js.map +1 -0
  15. package/dist/http-transport.d.ts +25 -0
  16. package/dist/http-transport.d.ts.map +1 -0
  17. package/dist/http-transport.js +143 -0
  18. package/dist/http-transport.js.map +1 -0
  19. package/dist/index.d.ts +15 -18
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +195 -250
  22. package/dist/index.js.map +1 -1
  23. package/dist/live/cache.d.ts +16 -0
  24. package/dist/live/cache.d.ts.map +1 -0
  25. package/dist/live/cache.js +61 -0
  26. package/dist/live/cache.js.map +1 -0
  27. package/dist/live/hn-fetcher.d.ts +19 -0
  28. package/dist/live/hn-fetcher.d.ts.map +1 -0
  29. package/dist/live/hn-fetcher.js +123 -0
  30. package/dist/live/hn-fetcher.js.map +1 -0
  31. package/dist/live/index.d.ts +55 -0
  32. package/dist/live/index.d.ts.map +1 -0
  33. package/dist/live/index.js +131 -0
  34. package/dist/live/index.js.map +1 -0
  35. package/dist/live/osv-scanner.d.ts +19 -0
  36. package/dist/live/osv-scanner.d.ts.map +1 -0
  37. package/dist/live/osv-scanner.js +197 -0
  38. package/dist/live/osv-scanner.js.map +1 -0
  39. package/dist/live/rate-limiter.d.ts +19 -0
  40. package/dist/live/rate-limiter.d.ts.map +1 -0
  41. package/dist/live/rate-limiter.js +52 -0
  42. package/dist/live/rate-limiter.js.map +1 -0
  43. package/dist/live/types.d.ts +89 -0
  44. package/dist/live/types.d.ts.map +1 -0
  45. package/dist/live/types.js +3 -0
  46. package/dist/live/types.js.map +1 -0
  47. package/dist/live/version-resolver.d.ts +11 -0
  48. package/dist/live/version-resolver.d.ts.map +1 -0
  49. package/dist/live/version-resolver.js +321 -0
  50. package/dist/live/version-resolver.js.map +1 -0
  51. package/dist/live-singleton.d.ts +9 -0
  52. package/dist/live-singleton.d.ts.map +1 -0
  53. package/dist/live-singleton.js +14 -0
  54. package/dist/live-singleton.js.map +1 -0
  55. package/dist/llm.d.ts +20 -2
  56. package/dist/llm.d.ts.map +1 -1
  57. package/dist/llm.js +80 -22
  58. package/dist/llm.js.map +1 -1
  59. package/dist/output-manager.d.ts.map +1 -1
  60. package/dist/output-manager.js +1 -0
  61. package/dist/output-manager.js.map +1 -1
  62. package/dist/project-scanner.d.ts +27 -0
  63. package/dist/project-scanner.d.ts.map +1 -0
  64. package/dist/project-scanner.js +366 -0
  65. package/dist/project-scanner.js.map +1 -0
  66. package/dist/schema-registry.d.ts +31 -13
  67. package/dist/schema-registry.d.ts.map +1 -1
  68. package/dist/schema-registry.js +208 -32
  69. package/dist/schema-registry.js.map +1 -1
  70. package/dist/schemas/agent-feedback-stats.json +14 -0
  71. package/dist/schemas/agent-memory.json +49 -0
  72. package/dist/schemas/agent-session-brief.json +25 -0
  73. package/dist/schemas/attention-report.json +13 -0
  74. package/dist/schemas/autophagy-status.json +13 -0
  75. package/dist/schemas/compound-advantage.json +14 -0
  76. package/dist/schemas/decision-enforcement.json +22 -0
  77. package/dist/schemas/decision-memory.json +54 -0
  78. package/dist/schemas/decision-windows.json +22 -0
  79. package/dist/schemas/delegation-score.json +18 -0
  80. package/dist/schemas/developer-dna.json +219 -0
  81. package/dist/schemas/export-context.json +17 -0
  82. package/dist/schemas/knowledge-gaps.json +14 -0
  83. package/dist/schemas/preemption-feed.json +18 -0
  84. package/dist/schemas/project-health.json +13 -0
  85. package/dist/schemas/record-agent-feedback.json +28 -0
  86. package/dist/schemas/reverse-mentions.json +13 -0
  87. package/dist/schemas/semantic-shifts.json +17 -0
  88. package/dist/schemas/signal-chains.json +19 -0
  89. package/dist/schemas/tech-radar.json +23 -0
  90. package/dist/schemas/trust-summary.json +13 -0
  91. package/dist/schemas/vulnerability-scan.json +26 -0
  92. package/dist/schemas/what-should-i-know.json +19 -0
  93. package/dist/setup.d.ts +18 -0
  94. package/dist/setup.d.ts.map +1 -0
  95. package/dist/setup.js +171 -0
  96. package/dist/setup.js.map +1 -0
  97. package/dist/tool-dispatch.d.ts +33 -0
  98. package/dist/tool-dispatch.d.ts.map +1 -0
  99. package/dist/tool-dispatch.js +87 -0
  100. package/dist/tool-dispatch.js.map +1 -0
  101. package/dist/tools/agent-feedback-stats.d.ts +30 -0
  102. package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
  103. package/dist/tools/agent-feedback-stats.js +41 -0
  104. package/dist/tools/agent-feedback-stats.js.map +1 -0
  105. package/dist/tools/agent-memory.d.ts +94 -0
  106. package/dist/tools/agent-memory.d.ts.map +1 -0
  107. package/dist/tools/agent-memory.js +262 -0
  108. package/dist/tools/agent-memory.js.map +1 -0
  109. package/dist/tools/agent-session-brief.d.ts +44 -0
  110. package/dist/tools/agent-session-brief.d.ts.map +1 -0
  111. package/dist/tools/agent-session-brief.js +179 -0
  112. package/dist/tools/agent-session-brief.js.map +1 -0
  113. package/dist/tools/attention-report.d.ts +6 -5
  114. package/dist/tools/attention-report.d.ts.map +1 -1
  115. package/dist/tools/attention-report.js +1 -0
  116. package/dist/tools/attention-report.js.map +1 -1
  117. package/dist/tools/autophagy-status.d.ts +25 -0
  118. package/dist/tools/autophagy-status.d.ts.map +1 -0
  119. package/dist/tools/autophagy-status.js +56 -0
  120. package/dist/tools/autophagy-status.js.map +1 -0
  121. package/dist/tools/compound-advantage.d.ts +30 -0
  122. package/dist/tools/compound-advantage.d.ts.map +1 -0
  123. package/dist/tools/compound-advantage.js +133 -0
  124. package/dist/tools/compound-advantage.js.map +1 -0
  125. package/dist/tools/config-validator.d.ts.map +1 -1
  126. package/dist/tools/config-validator.js +31 -0
  127. package/dist/tools/config-validator.js.map +1 -1
  128. package/dist/tools/context-analysis.d.ts.map +1 -1
  129. package/dist/tools/context-analysis.js +1 -0
  130. package/dist/tools/context-analysis.js.map +1 -1
  131. package/dist/tools/daily-briefing.d.ts.map +1 -1
  132. package/dist/tools/daily-briefing.js +17 -1
  133. package/dist/tools/daily-briefing.js.map +1 -1
  134. package/dist/tools/decision-enforcement.d.ts +59 -0
  135. package/dist/tools/decision-enforcement.d.ts.map +1 -0
  136. package/dist/tools/decision-enforcement.js +185 -0
  137. package/dist/tools/decision-enforcement.js.map +1 -0
  138. package/dist/tools/decision-memory.d.ts +132 -0
  139. package/dist/tools/decision-memory.d.ts.map +1 -0
  140. package/dist/tools/decision-memory.js +345 -0
  141. package/dist/tools/decision-memory.js.map +1 -0
  142. package/dist/tools/decision-windows.d.ts +37 -0
  143. package/dist/tools/decision-windows.d.ts.map +1 -0
  144. package/dist/tools/decision-windows.js +67 -0
  145. package/dist/tools/decision-windows.js.map +1 -0
  146. package/dist/tools/delegation-score.d.ts +34 -0
  147. package/dist/tools/delegation-score.d.ts.map +1 -0
  148. package/dist/tools/delegation-score.js +251 -0
  149. package/dist/tools/delegation-score.js.map +1 -0
  150. package/dist/tools/developer-dna.d.ts +79 -0
  151. package/dist/tools/developer-dna.d.ts.map +1 -0
  152. package/dist/tools/developer-dna.js +378 -0
  153. package/dist/tools/developer-dna.js.map +1 -0
  154. package/dist/tools/explain-relevance.d.ts.map +1 -1
  155. package/dist/tools/explain-relevance.js +1 -0
  156. package/dist/tools/explain-relevance.js.map +1 -1
  157. package/dist/tools/export-context.d.ts +23 -6
  158. package/dist/tools/export-context.d.ts.map +1 -1
  159. package/dist/tools/export-context.js +58 -14
  160. package/dist/tools/export-context.js.map +1 -1
  161. package/dist/tools/get-actionable-signals.d.ts.map +1 -1
  162. package/dist/tools/get-actionable-signals.js +60 -9
  163. package/dist/tools/get-actionable-signals.js.map +1 -1
  164. package/dist/tools/get-context.d.ts.map +1 -1
  165. package/dist/tools/get-context.js +1 -0
  166. package/dist/tools/get-context.js.map +1 -1
  167. package/dist/tools/get-relevant-content.d.ts.map +1 -1
  168. package/dist/tools/get-relevant-content.js +3 -0
  169. package/dist/tools/get-relevant-content.js.map +1 -1
  170. package/dist/tools/index.d.ts +26 -16
  171. package/dist/tools/index.d.ts.map +1 -1
  172. package/dist/tools/index.js +35 -16
  173. package/dist/tools/index.js.map +1 -1
  174. package/dist/tools/knowledge-gaps.d.ts +11 -1
  175. package/dist/tools/knowledge-gaps.d.ts.map +1 -1
  176. package/dist/tools/knowledge-gaps.js +9 -3
  177. package/dist/tools/knowledge-gaps.js.map +1 -1
  178. package/dist/tools/llm-status.d.ts.map +1 -1
  179. package/dist/tools/llm-status.js +1 -0
  180. package/dist/tools/llm-status.js.map +1 -1
  181. package/dist/tools/muse-context.d.ts +195 -0
  182. package/dist/tools/muse-context.d.ts.map +1 -0
  183. package/dist/tools/muse-context.js +284 -0
  184. package/dist/tools/muse-context.js.map +1 -0
  185. package/dist/tools/preemption-feed.d.ts +55 -0
  186. package/dist/tools/preemption-feed.d.ts.map +1 -0
  187. package/dist/tools/preemption-feed.js +124 -0
  188. package/dist/tools/preemption-feed.js.map +1 -0
  189. package/dist/tools/project-health.d.ts +12 -6
  190. package/dist/tools/project-health.d.ts.map +1 -1
  191. package/dist/tools/project-health.js +49 -10
  192. package/dist/tools/project-health.js.map +1 -1
  193. package/dist/tools/record-agent-feedback.d.ts +46 -0
  194. package/dist/tools/record-agent-feedback.d.ts.map +1 -0
  195. package/dist/tools/record-agent-feedback.js +71 -0
  196. package/dist/tools/record-agent-feedback.js.map +1 -0
  197. package/dist/tools/record-feedback.d.ts.map +1 -1
  198. package/dist/tools/record-feedback.js +1 -0
  199. package/dist/tools/record-feedback.js.map +1 -1
  200. package/dist/tools/reverse-mentions.d.ts +8 -8
  201. package/dist/tools/reverse-mentions.d.ts.map +1 -1
  202. package/dist/tools/reverse-mentions.js +1 -0
  203. package/dist/tools/reverse-mentions.js.map +1 -1
  204. package/dist/tools/score-autopsy.d.ts.map +1 -1
  205. package/dist/tools/score-autopsy.js +1 -0
  206. package/dist/tools/score-autopsy.js.map +1 -1
  207. package/dist/tools/semantic-shifts.d.ts +17 -1
  208. package/dist/tools/semantic-shifts.d.ts.map +1 -1
  209. package/dist/tools/semantic-shifts.js +1 -0
  210. package/dist/tools/semantic-shifts.js.map +1 -1
  211. package/dist/tools/signal-chains.d.ts +14 -7
  212. package/dist/tools/signal-chains.d.ts.map +1 -1
  213. package/dist/tools/signal-chains.js +5 -2
  214. package/dist/tools/signal-chains.js.map +1 -1
  215. package/dist/tools/source-health.d.ts.map +1 -1
  216. package/dist/tools/source-health.js +1 -0
  217. package/dist/tools/source-health.js.map +1 -1
  218. package/dist/tools/tech-radar.d.ts +38 -0
  219. package/dist/tools/tech-radar.d.ts.map +1 -0
  220. package/dist/tools/tech-radar.js +249 -0
  221. package/dist/tools/tech-radar.js.map +1 -0
  222. package/dist/tools/topic-connections.d.ts.map +1 -1
  223. package/dist/tools/topic-connections.js +1 -0
  224. package/dist/tools/topic-connections.js.map +1 -1
  225. package/dist/tools/trend-analysis.d.ts.map +1 -1
  226. package/dist/tools/trend-analysis.js +1 -0
  227. package/dist/tools/trend-analysis.js.map +1 -1
  228. package/dist/tools/trust-summary.d.ts +38 -0
  229. package/dist/tools/trust-summary.d.ts.map +1 -0
  230. package/dist/tools/trust-summary.js +89 -0
  231. package/dist/tools/trust-summary.js.map +1 -0
  232. package/dist/tools/vulnerability-scan.d.ts +89 -0
  233. package/dist/tools/vulnerability-scan.d.ts.map +1 -0
  234. package/dist/tools/vulnerability-scan.js +127 -0
  235. package/dist/tools/vulnerability-scan.js.map +1 -0
  236. package/dist/tools/what-should-i-know.d.ts +79 -0
  237. package/dist/tools/what-should-i-know.d.ts.map +1 -0
  238. package/dist/tools/what-should-i-know.js +376 -0
  239. package/dist/tools/what-should-i-know.js.map +1 -0
  240. package/dist/types.d.ts +221 -0
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/types.js +1 -0
  243. package/dist/types.js.map +1 -1
  244. package/package.json +53 -24
@@ -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"}
@@ -0,0 +1,376 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ /**
3
+ * what_should_i_know tool
4
+ *
5
+ * Single entry point for external AI agents to get task-relevant intelligence
6
+ * before starting work. Synthesizes multiple intelligence layers:
7
+ * - Actionable signals (security alerts, breaking changes)
8
+ * - Decision windows (time-bounded opportunities)
9
+ * - Signal chains (escalating causal narratives)
10
+ * - Session brief (decisions, concerns, memories)
11
+ *
12
+ * Filters everything for relevance to the described task and involved files.
13
+ */
14
+ import { execSync } from "node:child_process";
15
+ import { existsSync } from "node:fs";
16
+ import { executeGetActionableSignals } from "./get-actionable-signals.js";
17
+ import { executeSourceHealth } from "./source-health.js";
18
+ import { executeSignalChains } from "./signal-chains.js";
19
+ import { executeAgentSessionBrief } from "./agent-session-brief.js";
20
+ import { findAweBinary } from "./decision-memory.js";
21
+ import { getLiveIntelligence } from "../live-singleton.js";
22
+ // ============================================================================
23
+ // Tool Definition
24
+ // ============================================================================
25
+ export const whatShouldIKnowTool = {
26
+ name: "what_should_i_know",
27
+ description: "Pre-task intelligence briefing. Given a task description and optional file paths, returns filtered advisories, decision windows, signal chains, relevant wisdom, and a delegation assessment. Call before starting any non-trivial task.",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ task: {
32
+ type: "string",
33
+ description: "Description of what you are about to work on",
34
+ },
35
+ files: {
36
+ type: "array",
37
+ items: { type: "string" },
38
+ description: "File paths involved in the task (optional). Improves relevance filtering.",
39
+ },
40
+ },
41
+ required: ["task"],
42
+ },
43
+ };
44
+ // ============================================================================
45
+ // Relevance Filtering
46
+ // ============================================================================
47
+ /**
48
+ * Build a set of lowercase keywords from the task description and file paths.
49
+ * Used for simple keyword-based relevance matching against intelligence results.
50
+ */
51
+ function buildKeywords(task, files) {
52
+ const words = new Set();
53
+ // Extract meaningful words from task (3+ chars, lowercased)
54
+ for (const word of task.toLowerCase().split(/\s+/)) {
55
+ const cleaned = word.replace(/[^a-z0-9_-]/g, "");
56
+ if (cleaned.length >= 3) {
57
+ words.add(cleaned);
58
+ }
59
+ }
60
+ // Extract keywords from file paths
61
+ for (const filePath of files) {
62
+ // Get filename and directory segments
63
+ const segments = filePath.replace(/\\/g, "/").split("/");
64
+ for (const segment of segments) {
65
+ // Split on dots, dashes, underscores for granular matching
66
+ for (const part of segment.split(/[.\-_]/)) {
67
+ const cleaned = part.toLowerCase().replace(/[^a-z0-9]/g, "");
68
+ if (cleaned.length >= 3) {
69
+ words.add(cleaned);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ return words;
75
+ }
76
+ /**
77
+ * Check if a text matches any keywords from the task context.
78
+ */
79
+ function matchesKeywords(text, keywords) {
80
+ const textLower = text.toLowerCase();
81
+ for (const keyword of keywords) {
82
+ if (textLower.includes(keyword)) {
83
+ return true;
84
+ }
85
+ }
86
+ return false;
87
+ }
88
+ function getOpenDecisionWindows(db) {
89
+ try {
90
+ const rawDb = db.getRawDb();
91
+ return rawDb.prepare(`SELECT id, title, description, urgency
92
+ FROM decision_windows WHERE status = 'open'
93
+ ORDER BY urgency DESC, created_at DESC
94
+ LIMIT 20`).all();
95
+ }
96
+ catch {
97
+ // Table may not exist yet
98
+ return [];
99
+ }
100
+ }
101
+ // ============================================================================
102
+ // AWE Wisdom Engine
103
+ // ============================================================================
104
+ /**
105
+ * Retrieve AWE Wisdom Engine status and validated principles.
106
+ * Uses the AWE CLI binary — no direct database access, no new dependencies.
107
+ */
108
+ function getAweWisdom() {
109
+ try {
110
+ const aweBin = findAweBinary();
111
+ if (!aweBin)
112
+ return null;
113
+ // Quick existence check for the wisdom database
114
+ const dbPath = process.platform === "win32"
115
+ ? `${process.env.APPDATA || ""}\\awe\\wisdom.db`
116
+ : `${process.env.HOME || ""}/.local/share/awe/wisdom.db`;
117
+ if (!existsSync(dbPath))
118
+ return null;
119
+ let section = "AWE WISDOM ENGINE\n";
120
+ try {
121
+ const statusOutput = execSync(`"${aweBin}" status`, {
122
+ timeout: 5000,
123
+ encoding: "utf-8",
124
+ stdio: ["ignore", "pipe", "ignore"],
125
+ });
126
+ if (statusOutput)
127
+ section += statusOutput.trim() + "\n";
128
+ }
129
+ catch {
130
+ // status command failed — continue without it
131
+ }
132
+ try {
133
+ const wisdomOutput = execSync(`"${aweBin}" wisdom --domain software-engineering`, {
134
+ timeout: 5000,
135
+ encoding: "utf-8",
136
+ stdio: ["ignore", "pipe", "ignore"],
137
+ });
138
+ if (wisdomOutput && wisdomOutput.includes("VALIDATED")) {
139
+ section += wisdomOutput.trim() + "\n";
140
+ }
141
+ }
142
+ catch {
143
+ // wisdom command failed — continue without it
144
+ }
145
+ // Only return if we got something beyond the header
146
+ return section.length > "AWE WISDOM ENGINE\n".length ? section : null;
147
+ }
148
+ catch {
149
+ return null;
150
+ }
151
+ }
152
+ // ============================================================================
153
+ // Execute
154
+ // ============================================================================
155
+ export function executeWhatShouldIKnow(db, params) {
156
+ const task = params.task;
157
+ const files = params.files || [];
158
+ const keywords = buildKeywords(task, files);
159
+ // ── 1. Actionable Signals (security, breaking changes, etc.) ──────────
160
+ let advisories = [];
161
+ try {
162
+ const signalResult = executeGetActionableSignals(db, {
163
+ limit: 50,
164
+ since_hours: 72,
165
+ });
166
+ advisories = signalResult.signals
167
+ .filter((s) => {
168
+ // Include all critical/high security signals unconditionally
169
+ if (s.signal_type === "security_alert" && (s.signal_priority === "critical" || s.signal_priority === "high")) {
170
+ return true;
171
+ }
172
+ // Otherwise, filter by keyword relevance
173
+ return matchesKeywords(s.title + " " + s.action, keywords);
174
+ })
175
+ .slice(0, 10)
176
+ .map((s) => ({
177
+ title: s.title,
178
+ signal_type: s.signal_type,
179
+ priority: s.signal_priority,
180
+ action: s.action,
181
+ url: s.url,
182
+ }));
183
+ }
184
+ catch {
185
+ // Signals unavailable — non-fatal
186
+ }
187
+ // ── 1b. Live vulnerability data ──────────────────────────────────────
188
+ try {
189
+ const liveIntel = getLiveIntelligence();
190
+ if (liveIntel) {
191
+ const vulnResult = liveIntel.getVulnerabilities();
192
+ if (vulnResult && vulnResult.totalVulnerable > 0) {
193
+ const topVulns = vulnResult.vulnerabilities.slice(0, 3);
194
+ const details = topVulns.map((v) => `${v.package}@${v.currentVersion}: ${v.summary}`).join("; ");
195
+ advisories.unshift({
196
+ title: `${vulnResult.totalVulnerable} dependenc${vulnResult.totalVulnerable !== 1 ? "ies have" : "y has"} known vulnerabilities`,
197
+ signal_type: "security_alert",
198
+ priority: vulnResult.bySeverity.critical > 0 ? "critical" :
199
+ vulnResult.bySeverity.high > 0 ? "high" : "medium",
200
+ action: `Run vulnerability_scan for full details. ${details}`,
201
+ url: null,
202
+ });
203
+ }
204
+ }
205
+ }
206
+ catch {
207
+ // Live intel unavailable — non-fatal
208
+ }
209
+ // ── 2. Source Health (CVE/security check) ─────────────────────────────
210
+ try {
211
+ const healthResult = executeSourceHealth(db, { hours: 48 });
212
+ if (healthResult.overall_status === "critical") {
213
+ advisories.unshift({
214
+ title: "Source health critical — some data sources are failing",
215
+ signal_type: "system_health",
216
+ priority: "high",
217
+ action: "Run source_health for details. Content may be stale.",
218
+ url: null,
219
+ });
220
+ }
221
+ }
222
+ catch {
223
+ // Health check unavailable — non-fatal
224
+ }
225
+ // ── 3. Signal Chains ──────────────────────────────────────────────────
226
+ let activeSignals = [];
227
+ try {
228
+ const chainResult = executeSignalChains(db, {
229
+ resolution: "open",
230
+ min_priority: "medium",
231
+ });
232
+ activeSignals = chainResult.chains
233
+ .filter((c) => matchesKeywords(c.chain_name + " " + c.suggested_action, keywords))
234
+ .slice(0, 5)
235
+ .map((c) => ({
236
+ chain_name: c.chain_name,
237
+ priority: c.overall_priority,
238
+ suggested_action: c.suggested_action,
239
+ link_count: Array.isArray(c.links) ? c.links.length : 0,
240
+ }));
241
+ }
242
+ catch {
243
+ // Chains unavailable — non-fatal
244
+ }
245
+ // ── 4. Decision Windows ───────────────────────────────────────────────
246
+ let decisionWindows = [];
247
+ try {
248
+ const windows = getOpenDecisionWindows(db);
249
+ decisionWindows = windows
250
+ .filter((w) => matchesKeywords((w.title || "") + " " + (w.description || ""), keywords))
251
+ .slice(0, 5)
252
+ .map((w) => ({
253
+ id: w.id,
254
+ title: w.title,
255
+ description: w.description,
256
+ urgency: w.urgency,
257
+ }));
258
+ }
259
+ catch {
260
+ // Windows unavailable — non-fatal
261
+ }
262
+ // ── 5. Session Brief (decisions, memories, ecosystem) ─────────────────
263
+ let relevantWisdom = [];
264
+ try {
265
+ const brief = executeAgentSessionBrief(db, {
266
+ include_decisions: true,
267
+ include_memories: true,
268
+ });
269
+ // Filter active decisions for relevance
270
+ if (brief.active_decisions) {
271
+ for (const d of brief.active_decisions) {
272
+ if (matchesKeywords(d.subject + " " + d.decision, keywords)) {
273
+ relevantWisdom.push({
274
+ type: "decision",
275
+ subject: d.subject,
276
+ detail: d.decision,
277
+ });
278
+ }
279
+ }
280
+ }
281
+ // Filter ecosystem changes for relevance
282
+ if (brief.ecosystem_changes) {
283
+ for (const ec of brief.ecosystem_changes) {
284
+ if (matchesKeywords(ec.subject + " " + ec.summary, keywords)) {
285
+ relevantWisdom.push({
286
+ type: ec.change_type,
287
+ subject: ec.subject,
288
+ detail: ec.summary,
289
+ });
290
+ }
291
+ }
292
+ }
293
+ // Filter agent memories for relevance
294
+ if (brief.agent_memories) {
295
+ for (const m of brief.agent_memories) {
296
+ if (matchesKeywords(m.subject + " " + m.content, keywords)) {
297
+ relevantWisdom.push({
298
+ type: m.memory_type,
299
+ subject: m.subject,
300
+ detail: m.content,
301
+ });
302
+ }
303
+ }
304
+ }
305
+ // Cap wisdom entries
306
+ relevantWisdom = relevantWisdom.slice(0, 10);
307
+ }
308
+ catch {
309
+ // Brief unavailable — non-fatal
310
+ }
311
+ // ── 5b. AWE Wisdom Engine (validated principles, decision stats) ──────
312
+ try {
313
+ const aweWisdom = getAweWisdom();
314
+ if (aweWisdom) {
315
+ relevantWisdom.push({
316
+ type: "awe_wisdom",
317
+ subject: "AWE Wisdom Engine",
318
+ detail: aweWisdom,
319
+ });
320
+ }
321
+ }
322
+ catch {
323
+ // AWE unavailable — non-fatal
324
+ }
325
+ // ── 6. Delegation Assessment ──────────────────────────────────────────
326
+ const signalDensity = advisories.length + decisionWindows.length + activeSignals.length;
327
+ const hasSecuritySignals = advisories.some((a) => a.signal_type === "security_alert" && (a.priority === "critical" || a.priority === "high"));
328
+ const hasHighUrgencyWindows = decisionWindows.some((w) => w.urgency >= 4);
329
+ let delegationLevel;
330
+ let delegationReason;
331
+ if (hasSecuritySignals || hasHighUrgencyWindows) {
332
+ delegationLevel = "human_only";
333
+ delegationReason = hasSecuritySignals
334
+ ? "Active security signals require human review before proceeding."
335
+ : "High-urgency decision windows demand human judgment.";
336
+ }
337
+ else if (signalDensity > 3 || relevantWisdom.length > 3) {
338
+ delegationLevel = "review_needed";
339
+ delegationReason = `${signalDensity} active signal(s) and ${relevantWisdom.length} relevant decision(s) suggest review after completion.`;
340
+ }
341
+ else {
342
+ delegationLevel = "safe_to_delegate";
343
+ delegationReason = "No significant advisories or constraints detected for this task.";
344
+ }
345
+ // ── 7. Summary ────────────────────────────────────────────────────────
346
+ const parts = [];
347
+ if (advisories.length > 0) {
348
+ parts.push(`${advisories.length} advisor${advisories.length !== 1 ? "ies" : "y"}`);
349
+ }
350
+ if (decisionWindows.length > 0) {
351
+ parts.push(`${decisionWindows.length} decision window${decisionWindows.length !== 1 ? "s" : ""}`);
352
+ }
353
+ if (activeSignals.length > 0) {
354
+ parts.push(`${activeSignals.length} signal chain${activeSignals.length !== 1 ? "s" : ""}`);
355
+ }
356
+ if (relevantWisdom.length > 0) {
357
+ parts.push(`${relevantWisdom.length} relevant decision${relevantWisdom.length !== 1 ? "s" : ""}/memor${relevantWisdom.length !== 1 ? "ies" : "y"}`);
358
+ }
359
+ const summary = parts.length > 0
360
+ ? `Found ${parts.join(", ")} relevant to this task. Delegation: ${delegationLevel}.`
361
+ : "No active advisories or signals for this task. Proceed normally.";
362
+ return {
363
+ task,
364
+ files,
365
+ advisories,
366
+ decision_windows: decisionWindows,
367
+ active_signals: activeSignals,
368
+ relevant_wisdom: relevantWisdom,
369
+ delegation_assessment: {
370
+ level: delegationLevel,
371
+ reason: delegationReason,
372
+ },
373
+ summary,
374
+ };
375
+ }
376
+ //# sourceMappingURL=what-should-i-know.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"what-should-i-know.js","sourceRoot":"","sources":["../../src/tools/what-should-i-know.ts"],"names":[],"mappings":"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"}