@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.
- package/LICENSE +21 -0
- package/README.md +234 -62
- package/dist/auth.d.ts +36 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +82 -0
- package/dist/auth.js.map +1 -0
- package/dist/db.d.ts +100 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +707 -1
- package/dist/db.js.map +1 -1
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +124 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-transport.d.ts +25 -0
- package/dist/http-transport.d.ts.map +1 -0
- package/dist/http-transport.js +143 -0
- package/dist/http-transport.js.map +1 -0
- package/dist/index.d.ts +15 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +195 -250
- package/dist/index.js.map +1 -1
- package/dist/live/cache.d.ts +16 -0
- package/dist/live/cache.d.ts.map +1 -0
- package/dist/live/cache.js +61 -0
- package/dist/live/cache.js.map +1 -0
- package/dist/live/hn-fetcher.d.ts +19 -0
- package/dist/live/hn-fetcher.d.ts.map +1 -0
- package/dist/live/hn-fetcher.js +123 -0
- package/dist/live/hn-fetcher.js.map +1 -0
- package/dist/live/index.d.ts +55 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +131 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/osv-scanner.d.ts +19 -0
- package/dist/live/osv-scanner.d.ts.map +1 -0
- package/dist/live/osv-scanner.js +197 -0
- package/dist/live/osv-scanner.js.map +1 -0
- package/dist/live/rate-limiter.d.ts +19 -0
- package/dist/live/rate-limiter.d.ts.map +1 -0
- package/dist/live/rate-limiter.js +52 -0
- package/dist/live/rate-limiter.js.map +1 -0
- package/dist/live/types.d.ts +89 -0
- package/dist/live/types.d.ts.map +1 -0
- package/dist/live/types.js +3 -0
- package/dist/live/types.js.map +1 -0
- package/dist/live/version-resolver.d.ts +11 -0
- package/dist/live/version-resolver.d.ts.map +1 -0
- package/dist/live/version-resolver.js +321 -0
- package/dist/live/version-resolver.js.map +1 -0
- package/dist/live-singleton.d.ts +9 -0
- package/dist/live-singleton.d.ts.map +1 -0
- package/dist/live-singleton.js +14 -0
- package/dist/live-singleton.js.map +1 -0
- package/dist/llm.d.ts +20 -2
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +80 -22
- package/dist/llm.js.map +1 -1
- package/dist/output-manager.d.ts.map +1 -1
- package/dist/output-manager.js +1 -0
- package/dist/output-manager.js.map +1 -1
- package/dist/project-scanner.d.ts +27 -0
- package/dist/project-scanner.d.ts.map +1 -0
- package/dist/project-scanner.js +366 -0
- package/dist/project-scanner.js.map +1 -0
- package/dist/schema-registry.d.ts +31 -13
- package/dist/schema-registry.d.ts.map +1 -1
- package/dist/schema-registry.js +208 -32
- package/dist/schema-registry.js.map +1 -1
- package/dist/schemas/agent-feedback-stats.json +14 -0
- package/dist/schemas/agent-memory.json +49 -0
- package/dist/schemas/agent-session-brief.json +25 -0
- package/dist/schemas/attention-report.json +13 -0
- package/dist/schemas/autophagy-status.json +13 -0
- package/dist/schemas/compound-advantage.json +14 -0
- package/dist/schemas/decision-enforcement.json +22 -0
- package/dist/schemas/decision-memory.json +54 -0
- package/dist/schemas/decision-windows.json +22 -0
- package/dist/schemas/delegation-score.json +18 -0
- package/dist/schemas/developer-dna.json +219 -0
- package/dist/schemas/export-context.json +17 -0
- package/dist/schemas/knowledge-gaps.json +14 -0
- package/dist/schemas/preemption-feed.json +18 -0
- package/dist/schemas/project-health.json +13 -0
- package/dist/schemas/record-agent-feedback.json +28 -0
- package/dist/schemas/reverse-mentions.json +13 -0
- package/dist/schemas/semantic-shifts.json +17 -0
- package/dist/schemas/signal-chains.json +19 -0
- package/dist/schemas/tech-radar.json +23 -0
- package/dist/schemas/trust-summary.json +13 -0
- package/dist/schemas/vulnerability-scan.json +26 -0
- package/dist/schemas/what-should-i-know.json +19 -0
- package/dist/setup.d.ts +18 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +171 -0
- package/dist/setup.js.map +1 -0
- package/dist/tool-dispatch.d.ts +33 -0
- package/dist/tool-dispatch.d.ts.map +1 -0
- package/dist/tool-dispatch.js +87 -0
- package/dist/tool-dispatch.js.map +1 -0
- package/dist/tools/agent-feedback-stats.d.ts +30 -0
- package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
- package/dist/tools/agent-feedback-stats.js +41 -0
- package/dist/tools/agent-feedback-stats.js.map +1 -0
- package/dist/tools/agent-memory.d.ts +94 -0
- package/dist/tools/agent-memory.d.ts.map +1 -0
- package/dist/tools/agent-memory.js +262 -0
- package/dist/tools/agent-memory.js.map +1 -0
- package/dist/tools/agent-session-brief.d.ts +44 -0
- package/dist/tools/agent-session-brief.d.ts.map +1 -0
- package/dist/tools/agent-session-brief.js +179 -0
- package/dist/tools/agent-session-brief.js.map +1 -0
- package/dist/tools/attention-report.d.ts +6 -5
- package/dist/tools/attention-report.d.ts.map +1 -1
- package/dist/tools/attention-report.js +1 -0
- package/dist/tools/attention-report.js.map +1 -1
- package/dist/tools/autophagy-status.d.ts +25 -0
- package/dist/tools/autophagy-status.d.ts.map +1 -0
- package/dist/tools/autophagy-status.js +56 -0
- package/dist/tools/autophagy-status.js.map +1 -0
- package/dist/tools/compound-advantage.d.ts +30 -0
- package/dist/tools/compound-advantage.d.ts.map +1 -0
- package/dist/tools/compound-advantage.js +133 -0
- package/dist/tools/compound-advantage.js.map +1 -0
- package/dist/tools/config-validator.d.ts.map +1 -1
- package/dist/tools/config-validator.js +31 -0
- package/dist/tools/config-validator.js.map +1 -1
- package/dist/tools/context-analysis.d.ts.map +1 -1
- package/dist/tools/context-analysis.js +1 -0
- package/dist/tools/context-analysis.js.map +1 -1
- package/dist/tools/daily-briefing.d.ts.map +1 -1
- package/dist/tools/daily-briefing.js +17 -1
- package/dist/tools/daily-briefing.js.map +1 -1
- package/dist/tools/decision-enforcement.d.ts +59 -0
- package/dist/tools/decision-enforcement.d.ts.map +1 -0
- package/dist/tools/decision-enforcement.js +185 -0
- package/dist/tools/decision-enforcement.js.map +1 -0
- package/dist/tools/decision-memory.d.ts +132 -0
- package/dist/tools/decision-memory.d.ts.map +1 -0
- package/dist/tools/decision-memory.js +345 -0
- package/dist/tools/decision-memory.js.map +1 -0
- package/dist/tools/decision-windows.d.ts +37 -0
- package/dist/tools/decision-windows.d.ts.map +1 -0
- package/dist/tools/decision-windows.js +67 -0
- package/dist/tools/decision-windows.js.map +1 -0
- package/dist/tools/delegation-score.d.ts +34 -0
- package/dist/tools/delegation-score.d.ts.map +1 -0
- package/dist/tools/delegation-score.js +251 -0
- package/dist/tools/delegation-score.js.map +1 -0
- package/dist/tools/developer-dna.d.ts +79 -0
- package/dist/tools/developer-dna.d.ts.map +1 -0
- package/dist/tools/developer-dna.js +378 -0
- package/dist/tools/developer-dna.js.map +1 -0
- package/dist/tools/explain-relevance.d.ts.map +1 -1
- package/dist/tools/explain-relevance.js +1 -0
- package/dist/tools/explain-relevance.js.map +1 -1
- package/dist/tools/export-context.d.ts +23 -6
- package/dist/tools/export-context.d.ts.map +1 -1
- package/dist/tools/export-context.js +58 -14
- package/dist/tools/export-context.js.map +1 -1
- package/dist/tools/get-actionable-signals.d.ts.map +1 -1
- package/dist/tools/get-actionable-signals.js +60 -9
- package/dist/tools/get-actionable-signals.js.map +1 -1
- package/dist/tools/get-context.d.ts.map +1 -1
- package/dist/tools/get-context.js +1 -0
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-relevant-content.d.ts.map +1 -1
- package/dist/tools/get-relevant-content.js +3 -0
- package/dist/tools/get-relevant-content.js.map +1 -1
- package/dist/tools/index.d.ts +26 -16
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +35 -16
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge-gaps.d.ts +11 -1
- package/dist/tools/knowledge-gaps.d.ts.map +1 -1
- package/dist/tools/knowledge-gaps.js +9 -3
- package/dist/tools/knowledge-gaps.js.map +1 -1
- package/dist/tools/llm-status.d.ts.map +1 -1
- package/dist/tools/llm-status.js +1 -0
- package/dist/tools/llm-status.js.map +1 -1
- package/dist/tools/muse-context.d.ts +195 -0
- package/dist/tools/muse-context.d.ts.map +1 -0
- package/dist/tools/muse-context.js +284 -0
- package/dist/tools/muse-context.js.map +1 -0
- package/dist/tools/preemption-feed.d.ts +55 -0
- package/dist/tools/preemption-feed.d.ts.map +1 -0
- package/dist/tools/preemption-feed.js +124 -0
- package/dist/tools/preemption-feed.js.map +1 -0
- package/dist/tools/project-health.d.ts +12 -6
- package/dist/tools/project-health.d.ts.map +1 -1
- package/dist/tools/project-health.js +49 -10
- package/dist/tools/project-health.js.map +1 -1
- package/dist/tools/record-agent-feedback.d.ts +46 -0
- package/dist/tools/record-agent-feedback.d.ts.map +1 -0
- package/dist/tools/record-agent-feedback.js +71 -0
- package/dist/tools/record-agent-feedback.js.map +1 -0
- package/dist/tools/record-feedback.d.ts.map +1 -1
- package/dist/tools/record-feedback.js +1 -0
- package/dist/tools/record-feedback.js.map +1 -1
- package/dist/tools/reverse-mentions.d.ts +8 -8
- package/dist/tools/reverse-mentions.d.ts.map +1 -1
- package/dist/tools/reverse-mentions.js +1 -0
- package/dist/tools/reverse-mentions.js.map +1 -1
- package/dist/tools/score-autopsy.d.ts.map +1 -1
- package/dist/tools/score-autopsy.js +1 -0
- package/dist/tools/score-autopsy.js.map +1 -1
- package/dist/tools/semantic-shifts.d.ts +17 -1
- package/dist/tools/semantic-shifts.d.ts.map +1 -1
- package/dist/tools/semantic-shifts.js +1 -0
- package/dist/tools/semantic-shifts.js.map +1 -1
- package/dist/tools/signal-chains.d.ts +14 -7
- package/dist/tools/signal-chains.d.ts.map +1 -1
- package/dist/tools/signal-chains.js +5 -2
- package/dist/tools/signal-chains.js.map +1 -1
- package/dist/tools/source-health.d.ts.map +1 -1
- package/dist/tools/source-health.js +1 -0
- package/dist/tools/source-health.js.map +1 -1
- package/dist/tools/tech-radar.d.ts +38 -0
- package/dist/tools/tech-radar.d.ts.map +1 -0
- package/dist/tools/tech-radar.js +249 -0
- package/dist/tools/tech-radar.js.map +1 -0
- package/dist/tools/topic-connections.d.ts.map +1 -1
- package/dist/tools/topic-connections.js +1 -0
- package/dist/tools/topic-connections.js.map +1 -1
- package/dist/tools/trend-analysis.d.ts.map +1 -1
- package/dist/tools/trend-analysis.js +1 -0
- package/dist/tools/trend-analysis.js.map +1 -1
- package/dist/tools/trust-summary.d.ts +38 -0
- package/dist/tools/trust-summary.d.ts.map +1 -0
- package/dist/tools/trust-summary.js +89 -0
- package/dist/tools/trust-summary.js.map +1 -0
- package/dist/tools/vulnerability-scan.d.ts +89 -0
- package/dist/tools/vulnerability-scan.d.ts.map +1 -0
- package/dist/tools/vulnerability-scan.js +127 -0
- package/dist/tools/vulnerability-scan.js.map +1 -0
- package/dist/tools/what-should-i-know.d.ts +79 -0
- package/dist/tools/what-should-i-know.d.ts.map +1 -0
- package/dist/tools/what-should-i-know.js +376 -0
- package/dist/tools/what-should-i-know.js.map +1 -0
- package/dist/types.d.ts +221 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- 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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"}
|