@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
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
3
|
/**
|
|
3
4
|
* 4DA MCP Server - Internal Use Only
|
|
4
5
|
*
|
|
@@ -12,26 +13,23 @@
|
|
|
12
13
|
* Do NOT expose this server over a network without adding proper auth.
|
|
13
14
|
*/
|
|
14
15
|
/**
|
|
15
|
-
* 4DA MCP Server
|
|
16
|
+
* 4DA MCP Server v4.1.0 — Intelligence Platform
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* 36 tools across 9 categories. Live vulnerability scanning (OSV.dev),
|
|
19
|
+
* persistent project memory, and tech stack awareness for any MCP host.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* - topic_connections: Build knowledge graphs from content (AI-powered)
|
|
33
|
-
* - config_validator: Validate configuration and detect issues
|
|
34
|
-
* - llm_status: Check LLM configuration and Ollama availability
|
|
21
|
+
* Categories (canonical — matches schema-registry.ts `ToolCategory`):
|
|
22
|
+
* Core (4) — content feed, context, relevance, feedback
|
|
23
|
+
* Intelligence (11) — briefings, signals, autopsy, trends, topics,
|
|
24
|
+
* chains, shifts, attention, trust, preemption
|
|
25
|
+
* Diagnostic (3) — source health, config, LLM status
|
|
26
|
+
* Knowledge & Health (4) — gaps, project health, mentions, context export
|
|
27
|
+
* Decision Intelligence (3) — decision memory, tech radar, alignment checks
|
|
28
|
+
* Agent Autonomy (6) — persistent memory, session briefs, delegation,
|
|
29
|
+
* agent feedback record + stats, what_should_i_know
|
|
30
|
+
* Developer DNA / Identity (1)— tech identity profile
|
|
31
|
+
* Intelligence Metabolism (3) — autophagy, decision windows, compound advantage
|
|
32
|
+
* Security (1) — live vulnerability scanning via OSV.dev
|
|
35
33
|
*/
|
|
36
34
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
37
35
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -40,36 +38,96 @@ import { readFileSync, existsSync } from "node:fs";
|
|
|
40
38
|
import { join, dirname } from "node:path";
|
|
41
39
|
import { fileURLToPath } from "node:url";
|
|
42
40
|
import { homedir } from "node:os";
|
|
43
|
-
|
|
44
|
-
import {
|
|
41
|
+
import { startHttpServer } from "./http-transport.js";
|
|
42
|
+
import { runSetup } from "./setup.js";
|
|
43
|
+
import { runDoctor } from "./doctor.js";
|
|
44
|
+
import { scanCurrentProject } from "./project-scanner.js";
|
|
45
|
+
import { LiveIntelligence } from "./live/index.js";
|
|
46
|
+
import { setLiveIntelligence } from "./live-singleton.js";
|
|
47
|
+
// Schema registry for slim tool listing + category metadata
|
|
48
|
+
import { getSlimToolList, getSchemaResources, hasToolSchema, getSchemaFilename, getCategoryManifest } from "./schema-registry.js";
|
|
49
|
+
// Map-based tool dispatch (replaces per-tool imports + switch statement)
|
|
50
|
+
import { dispatchTool } from "./tool-dispatch.js";
|
|
45
51
|
const __filename = fileURLToPath(import.meta.url);
|
|
46
52
|
const __dirname = dirname(__filename);
|
|
47
|
-
import { createDatabase } from "./db.js";
|
|
48
|
-
// Core Tools
|
|
49
|
-
import { executeGetRelevantContent, executeGetContext, executeExplainRelevance, executeRecordFeedback, } from "./tools/index.js";
|
|
50
|
-
// Superpower Tools
|
|
51
|
-
import { executeScoreAutopsy, executeTrendAnalysis, executeDailyBriefing, executeContextAnalysis, executeSourceHealth, executeTopicConnections, executeConfigValidator, executeLLMStatus, executeGetActionableSignals, executeExportContextPacket, executeKnowledgeGaps, executeSignalChains, executeSemanticShifts, executeReverseMentions, executeAttentionReport, executeProjectHealth, } from "./tools/index.js";
|
|
53
|
+
import { createDatabase, FourDADatabase } from "./db.js";
|
|
52
54
|
// =============================================================================
|
|
53
55
|
// Server Setup
|
|
54
56
|
// =============================================================================
|
|
55
57
|
const server = new Server({
|
|
56
58
|
name: "4da-server",
|
|
57
|
-
version: "
|
|
59
|
+
version: "4.1.0",
|
|
58
60
|
}, {
|
|
59
61
|
capabilities: {
|
|
60
|
-
tools: {},
|
|
61
|
-
resources: {},
|
|
62
|
+
tools: { listChanged: true },
|
|
63
|
+
resources: {},
|
|
62
64
|
},
|
|
63
65
|
});
|
|
64
66
|
// Database instance (lazy initialized)
|
|
65
67
|
let db = null;
|
|
68
|
+
let liveIntel = null;
|
|
66
69
|
/**
|
|
67
|
-
* Get or create database connection
|
|
70
|
+
* Get or create database connection.
|
|
71
|
+
* In standalone mode (no existing 4DA database), creates a minimal database
|
|
72
|
+
* and populates it from the current working directory's project files.
|
|
68
73
|
*/
|
|
69
74
|
function getDatabase() {
|
|
70
75
|
if (!db) {
|
|
71
76
|
const dbPath = process.env.FOURDA_DB_PATH;
|
|
72
77
|
db = createDatabase(dbPath);
|
|
78
|
+
// Initialize live intelligence layer
|
|
79
|
+
liveIntel = new LiveIntelligence(db.getRawDb());
|
|
80
|
+
setLiveIntelligence(liveIntel);
|
|
81
|
+
// Standalone mode: auto-populate from project scan
|
|
82
|
+
if (db.isStandalone) {
|
|
83
|
+
const cwd = process.cwd();
|
|
84
|
+
const scan = scanCurrentProject(cwd);
|
|
85
|
+
db.populateFromScan(scan);
|
|
86
|
+
const detected = [
|
|
87
|
+
...scan.languages,
|
|
88
|
+
...scan.frameworks,
|
|
89
|
+
].filter(Boolean);
|
|
90
|
+
console.error(`[4DA] Standalone mode: scanned ${scan.projectPath}`);
|
|
91
|
+
if (detected.length > 0) {
|
|
92
|
+
console.error(`[4DA] Detected: ${detected.join(", ")} | ${scan.dependencies.length} deps, ${scan.devDependencies.length} dev deps`);
|
|
93
|
+
// Initialize live intelligence with resolved versions
|
|
94
|
+
const primaryLang = scan.languages.includes("typescript") || scan.languages.includes("javascript")
|
|
95
|
+
? "npm"
|
|
96
|
+
: scan.languages.includes("rust")
|
|
97
|
+
? "rust"
|
|
98
|
+
: scan.languages.includes("python")
|
|
99
|
+
? "python"
|
|
100
|
+
: scan.languages.includes("go")
|
|
101
|
+
? "go"
|
|
102
|
+
: "npm";
|
|
103
|
+
liveIntel.initFromProject(cwd, scan.dependencies, scan.devDependencies, primaryLang);
|
|
104
|
+
if (liveIntel.isEnabled()) {
|
|
105
|
+
console.error(`[4DA] Live intelligence: enabled (OSV.dev + HN)`);
|
|
106
|
+
// Background prefetch — non-blocking, warms cache for first tool call
|
|
107
|
+
const techStack = [...scan.languages, ...scan.frameworks];
|
|
108
|
+
liveIntel.scanVulnerabilities(cwd).catch(() => { });
|
|
109
|
+
liveIntel.fetchHeadlines(techStack).catch(() => { });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.error(`[4DA] No project manifests found in ${cwd} — tools will return empty results`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Full 4DA database mode — still initialize live intel from project_dependencies
|
|
118
|
+
try {
|
|
119
|
+
const rawDb = db.getRawDb();
|
|
120
|
+
const deps = rawDb.prepare("SELECT DISTINCT package_name, language FROM project_dependencies WHERE is_dev = 0 LIMIT 200").all();
|
|
121
|
+
const devDeps = rawDb.prepare("SELECT DISTINCT package_name FROM project_dependencies WHERE is_dev = 1 LIMIT 100").all();
|
|
122
|
+
if (deps.length > 0) {
|
|
123
|
+
const primaryLang = deps[0].language || "npm";
|
|
124
|
+
liveIntel.initFromProject(process.cwd(), deps.map((d) => d.package_name), devDeps.map((d) => d.package_name), primaryLang);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Non-fatal — live intel just won't have version data
|
|
129
|
+
}
|
|
130
|
+
}
|
|
73
131
|
}
|
|
74
132
|
return db;
|
|
75
133
|
}
|
|
@@ -103,6 +161,13 @@ server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
|
103
161
|
description: "Registry of 4DA skills for Claude Code agent dispatch",
|
|
104
162
|
mimeType: "application/json",
|
|
105
163
|
},
|
|
164
|
+
// Category manifest for tool discovery
|
|
165
|
+
{
|
|
166
|
+
uri: "4da://categories",
|
|
167
|
+
name: "Tool categories",
|
|
168
|
+
description: "Tool groupings by category with tag metadata",
|
|
169
|
+
mimeType: "application/json",
|
|
170
|
+
},
|
|
106
171
|
];
|
|
107
172
|
return { resources };
|
|
108
173
|
});
|
|
@@ -111,6 +176,18 @@ server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
|
111
176
|
*/
|
|
112
177
|
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
113
178
|
const uri = request.params.uri;
|
|
179
|
+
// Handle category manifest
|
|
180
|
+
if (uri === "4da://categories") {
|
|
181
|
+
return {
|
|
182
|
+
contents: [
|
|
183
|
+
{
|
|
184
|
+
uri,
|
|
185
|
+
mimeType: "application/json",
|
|
186
|
+
text: JSON.stringify(getCategoryManifest(), null, 2),
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
};
|
|
190
|
+
}
|
|
114
191
|
// Handle skill manifest
|
|
115
192
|
if (uri === "4da://skills") {
|
|
116
193
|
const skillsPath = join(homedir(), ".local", "share", "4da", "skills", "registry.json");
|
|
@@ -161,221 +238,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
161
238
|
const { name, arguments: args } = request.params;
|
|
162
239
|
try {
|
|
163
240
|
const database = getDatabase();
|
|
164
|
-
|
|
165
|
-
case "get_relevant_content": {
|
|
166
|
-
const params = (args || {});
|
|
167
|
-
const result = executeGetRelevantContent(database, params);
|
|
168
|
-
return {
|
|
169
|
-
content: [
|
|
170
|
-
{
|
|
171
|
-
type: "text",
|
|
172
|
-
text: JSON.stringify(result, null, 2),
|
|
173
|
-
},
|
|
174
|
-
],
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
case "get_context": {
|
|
178
|
-
const params = (args || {});
|
|
179
|
-
const result = executeGetContext(database, params);
|
|
180
|
-
return {
|
|
181
|
-
content: [
|
|
182
|
-
{
|
|
183
|
-
type: "text",
|
|
184
|
-
text: JSON.stringify(result, null, 2),
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
case "explain_relevance": {
|
|
190
|
-
const params = (args || {});
|
|
191
|
-
const result = executeExplainRelevance(database, params);
|
|
192
|
-
return {
|
|
193
|
-
content: [
|
|
194
|
-
{
|
|
195
|
-
type: "text",
|
|
196
|
-
text: JSON.stringify(result, null, 2),
|
|
197
|
-
},
|
|
198
|
-
],
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
case "record_feedback": {
|
|
202
|
-
const params = (args || {});
|
|
203
|
-
const result = executeRecordFeedback(database, params);
|
|
204
|
-
return {
|
|
205
|
-
content: [
|
|
206
|
-
{
|
|
207
|
-
type: "text",
|
|
208
|
-
text: JSON.stringify(result, null, 2),
|
|
209
|
-
},
|
|
210
|
-
],
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
// =========================================================================
|
|
214
|
-
// Superpower Tools (async with LLM synthesis)
|
|
215
|
-
// =========================================================================
|
|
216
|
-
case "score_autopsy": {
|
|
217
|
-
const params = (args || {});
|
|
218
|
-
const result = await executeScoreAutopsy(database, params);
|
|
219
|
-
return {
|
|
220
|
-
content: [
|
|
221
|
-
{
|
|
222
|
-
type: "text",
|
|
223
|
-
text: JSON.stringify(result, null, 2),
|
|
224
|
-
},
|
|
225
|
-
],
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
case "trend_analysis": {
|
|
229
|
-
const params = (args || {});
|
|
230
|
-
const result = await executeTrendAnalysis(database, params);
|
|
231
|
-
return {
|
|
232
|
-
content: [
|
|
233
|
-
{
|
|
234
|
-
type: "text",
|
|
235
|
-
text: JSON.stringify(result, null, 2),
|
|
236
|
-
},
|
|
237
|
-
],
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
case "daily_briefing": {
|
|
241
|
-
const params = (args || {});
|
|
242
|
-
const result = await executeDailyBriefing(database, params);
|
|
243
|
-
return {
|
|
244
|
-
content: [
|
|
245
|
-
{
|
|
246
|
-
type: "text",
|
|
247
|
-
text: JSON.stringify(result, null, 2),
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
case "context_analysis": {
|
|
253
|
-
const params = (args || {});
|
|
254
|
-
const result = await executeContextAnalysis(database, params);
|
|
255
|
-
return {
|
|
256
|
-
content: [
|
|
257
|
-
{
|
|
258
|
-
type: "text",
|
|
259
|
-
text: JSON.stringify(result, null, 2),
|
|
260
|
-
},
|
|
261
|
-
],
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
case "source_health": {
|
|
265
|
-
const params = (args || {});
|
|
266
|
-
const result = executeSourceHealth(database, params);
|
|
267
|
-
return {
|
|
268
|
-
content: [
|
|
269
|
-
{
|
|
270
|
-
type: "text",
|
|
271
|
-
text: JSON.stringify(result, null, 2),
|
|
272
|
-
},
|
|
273
|
-
],
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
case "topic_connections": {
|
|
277
|
-
const params = (args || {});
|
|
278
|
-
const result = await executeTopicConnections(database, params);
|
|
279
|
-
return {
|
|
280
|
-
content: [
|
|
281
|
-
{
|
|
282
|
-
type: "text",
|
|
283
|
-
text: JSON.stringify(result, null, 2),
|
|
284
|
-
},
|
|
285
|
-
],
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
case "config_validator": {
|
|
289
|
-
const params = (args || {});
|
|
290
|
-
const result = executeConfigValidator(database, params);
|
|
291
|
-
return {
|
|
292
|
-
content: [
|
|
293
|
-
{
|
|
294
|
-
type: "text",
|
|
295
|
-
text: JSON.stringify(result, null, 2),
|
|
296
|
-
},
|
|
297
|
-
],
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
case "llm_status": {
|
|
301
|
-
const params = (args || {});
|
|
302
|
-
const result = await executeLLMStatus(database, params);
|
|
303
|
-
return {
|
|
304
|
-
content: [
|
|
305
|
-
{
|
|
306
|
-
type: "text",
|
|
307
|
-
text: JSON.stringify(result, null, 2),
|
|
308
|
-
},
|
|
309
|
-
],
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
case "get_actionable_signals": {
|
|
313
|
-
const params = (args || {});
|
|
314
|
-
const result = executeGetActionableSignals(database, params);
|
|
315
|
-
return {
|
|
316
|
-
content: [
|
|
317
|
-
{
|
|
318
|
-
type: "text",
|
|
319
|
-
text: JSON.stringify(result, null, 2),
|
|
320
|
-
},
|
|
321
|
-
],
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
// =========================================================================
|
|
325
|
-
// Innovation Feature Tools
|
|
326
|
-
// =========================================================================
|
|
327
|
-
case "export_context_packet": {
|
|
328
|
-
const params = (args || {});
|
|
329
|
-
const result = executeExportContextPacket(database, params);
|
|
330
|
-
return {
|
|
331
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
case "knowledge_gaps": {
|
|
335
|
-
const params = (args || {});
|
|
336
|
-
const result = executeKnowledgeGaps(database, params);
|
|
337
|
-
return {
|
|
338
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
case "signal_chains": {
|
|
342
|
-
const params = (args || {});
|
|
343
|
-
const result = executeSignalChains(database, params);
|
|
344
|
-
return {
|
|
345
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
case "semantic_shifts": {
|
|
349
|
-
const params = (args || {});
|
|
350
|
-
const result = executeSemanticShifts(database, params);
|
|
351
|
-
return {
|
|
352
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
case "reverse_mentions": {
|
|
356
|
-
const params = (args || {});
|
|
357
|
-
const result = executeReverseMentions(database, params);
|
|
358
|
-
return {
|
|
359
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
case "attention_report": {
|
|
363
|
-
const params = (args || {});
|
|
364
|
-
const result = executeAttentionReport(database, params);
|
|
365
|
-
return {
|
|
366
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
case "project_health": {
|
|
370
|
-
const params = (args || {});
|
|
371
|
-
const result = executeProjectHealth(database, params);
|
|
372
|
-
return {
|
|
373
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
default:
|
|
377
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
378
|
-
}
|
|
241
|
+
return await dispatchTool(name, database, args);
|
|
379
242
|
}
|
|
380
243
|
catch (error) {
|
|
381
244
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -395,25 +258,107 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
395
258
|
// =============================================================================
|
|
396
259
|
/**
|
|
397
260
|
* Start the MCP server
|
|
261
|
+
*
|
|
262
|
+
* Supports three modes:
|
|
263
|
+
* (default) stdio transport — classic MCP, works with all hosts
|
|
264
|
+
* --http Streamable HTTP transport (spec 2025-03-26)
|
|
265
|
+
* --setup Configure editors for 4DA MCP
|
|
398
266
|
*/
|
|
399
267
|
async function main() {
|
|
268
|
+
const args = process.argv.slice(2);
|
|
269
|
+
// Version
|
|
270
|
+
if (args.includes("--version") || args.includes("-v")) {
|
|
271
|
+
console.log("@4da/mcp-server 4.1.0");
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
// Help
|
|
275
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
276
|
+
console.log(`
|
|
277
|
+
@4da/mcp-server — 36 tools for codebase-aware developer intelligence
|
|
278
|
+
|
|
279
|
+
Usage:
|
|
280
|
+
npx @4da/mcp-server Start MCP server (stdio transport)
|
|
281
|
+
npx @4da/mcp-server --http Start Streamable HTTP transport
|
|
282
|
+
npx @4da/mcp-server --setup Auto-configure your editor
|
|
283
|
+
npx @4da/mcp-server --doctor Check installation health
|
|
284
|
+
npx @4da/mcp-server --version Print version
|
|
285
|
+
|
|
286
|
+
Options:
|
|
287
|
+
--http Use Streamable HTTP instead of stdio
|
|
288
|
+
--port <number> HTTP port (default: 4840)
|
|
289
|
+
--host <address> HTTP bind address (default: 127.0.0.1)
|
|
290
|
+
--setup Detect editors and write MCP config
|
|
291
|
+
--doctor Validate database, bindings, and LLM providers
|
|
292
|
+
|
|
293
|
+
Environment:
|
|
294
|
+
FOURDA_DB_PATH Path to 4DA's SQLite database (auto-detected if omitted)
|
|
295
|
+
FOURDA_OFFLINE Set to "true" to disable all network calls (OSV.dev, HN)
|
|
296
|
+
|
|
297
|
+
Works standalone (scans your project on startup) or with the full
|
|
298
|
+
4DA desktop app for content scoring, source monitoring, and more.
|
|
299
|
+
Desktop app: https://github.com/runyourempire/4DA/releases/latest
|
|
300
|
+
Docs: https://4da.ai
|
|
301
|
+
`);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
// Setup command: configure editors
|
|
305
|
+
if (args.includes("--setup") || args.includes("setup")) {
|
|
306
|
+
runSetup();
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// Doctor command: validate installation health
|
|
310
|
+
if (args.includes("--doctor") || args.includes("doctor")) {
|
|
311
|
+
runDoctor();
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
// HTTP transport mode
|
|
315
|
+
if (args.includes("--http")) {
|
|
316
|
+
const portIndex = args.indexOf("--port");
|
|
317
|
+
const port = portIndex !== -1 ? parseInt(args[portIndex + 1], 10) : 4840;
|
|
318
|
+
const host = args.includes("--host") ? args[args.indexOf("--host") + 1] : "127.0.0.1";
|
|
319
|
+
await startHttpServer(server, { port, host });
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
// -------------------------------------------------------------------------
|
|
323
|
+
// Pre-flight: validate the database before accepting tool calls
|
|
324
|
+
// -------------------------------------------------------------------------
|
|
325
|
+
const dbPath = process.env.FOURDA_DB_PATH || undefined;
|
|
326
|
+
const validation = FourDADatabase.validateDatabase(dbPath);
|
|
327
|
+
if (validation.valid) {
|
|
328
|
+
console.error(`[4DA] Database validated — ${validation.tables?.length ?? 0} tables found`);
|
|
329
|
+
}
|
|
330
|
+
else if (validation.standalone) {
|
|
331
|
+
// No existing DB — standalone mode will create one on first tool call
|
|
332
|
+
console.error(`[4DA] No existing database found — standalone mode enabled.`);
|
|
333
|
+
console.error(` Will scan your project and create a local database on first tool call.`);
|
|
334
|
+
console.error(` For full features, install the 4DA desktop app: https://4da.ai`);
|
|
335
|
+
console.error(``);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
// Database exists but is corrupt or unreadable
|
|
339
|
+
console.error(`[4DA] Database issue: ${validation.error}`);
|
|
340
|
+
console.error(` Or run: npx @4da/mcp-server --doctor for diagnostics`);
|
|
341
|
+
console.error(``);
|
|
342
|
+
}
|
|
343
|
+
// Default: stdio transport (existing behavior)
|
|
400
344
|
const transport = new StdioServerTransport();
|
|
401
345
|
await server.connect(transport);
|
|
402
346
|
// Handle graceful shutdown
|
|
403
347
|
process.on("SIGINT", () => {
|
|
404
|
-
|
|
348
|
+
console.error("[4DA] Received SIGINT — shutting down gracefully");
|
|
349
|
+
if (db)
|
|
405
350
|
db.close();
|
|
406
|
-
}
|
|
407
351
|
process.exit(0);
|
|
408
352
|
});
|
|
409
353
|
process.on("SIGTERM", () => {
|
|
410
|
-
|
|
354
|
+
console.error("[4DA] Received SIGTERM — shutting down gracefully");
|
|
355
|
+
if (db)
|
|
411
356
|
db.close();
|
|
412
|
-
}
|
|
413
357
|
process.exit(0);
|
|
414
358
|
});
|
|
415
|
-
|
|
416
|
-
console.error(
|
|
359
|
+
const toolCount = getSlimToolList().length;
|
|
360
|
+
console.error(`4DA MCP Server v4.1.0 started — ${toolCount} tools, stdio transport`);
|
|
361
|
+
console.error(" Use --http for Streamable HTTP, --setup to configure editors, --doctor to check health");
|
|
417
362
|
}
|
|
418
363
|
main().catch((error) => {
|
|
419
364
|
console.error("Fatal error:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
export declare class LiveCache {
|
|
3
|
+
private db;
|
|
4
|
+
constructor(db: Database.Database);
|
|
5
|
+
private ensureTable;
|
|
6
|
+
get<T>(key: string): T | null;
|
|
7
|
+
getStale<T>(key: string): {
|
|
8
|
+
data: T;
|
|
9
|
+
fetchedAt: string;
|
|
10
|
+
} | null;
|
|
11
|
+
set(key: string, data: unknown, source: string, ttlSeconds: number): void;
|
|
12
|
+
purgeExpired(): number;
|
|
13
|
+
invalidateSource(source: string): void;
|
|
14
|
+
invalidateAll(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/live/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAU3C,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAMjC,OAAO,CAAC,WAAW;IAcnB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa7B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAa/D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAOzE,YAAY,IAAI,MAAM;IAOtB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,aAAa,IAAI,IAAI;CAGtB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
export class LiveCache {
|
|
3
|
+
db;
|
|
4
|
+
constructor(db) {
|
|
5
|
+
this.db = db;
|
|
6
|
+
this.ensureTable();
|
|
7
|
+
this.purgeExpired();
|
|
8
|
+
}
|
|
9
|
+
ensureTable() {
|
|
10
|
+
this.db.exec(`
|
|
11
|
+
CREATE TABLE IF NOT EXISTS live_cache (
|
|
12
|
+
cache_key TEXT PRIMARY KEY,
|
|
13
|
+
data TEXT NOT NULL,
|
|
14
|
+
source TEXT NOT NULL,
|
|
15
|
+
fetched_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
16
|
+
expires_at TEXT NOT NULL
|
|
17
|
+
);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_live_cache_expires ON live_cache(expires_at);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_live_cache_source ON live_cache(source);
|
|
20
|
+
`);
|
|
21
|
+
}
|
|
22
|
+
get(key) {
|
|
23
|
+
const row = this.db.prepare("SELECT data FROM live_cache WHERE cache_key = ? AND expires_at > datetime('now')").get(key);
|
|
24
|
+
if (!row)
|
|
25
|
+
return null;
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(row.data);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getStale(key) {
|
|
34
|
+
const row = this.db.prepare("SELECT data, fetched_at FROM live_cache WHERE cache_key = ?").get(key);
|
|
35
|
+
if (!row)
|
|
36
|
+
return null;
|
|
37
|
+
try {
|
|
38
|
+
return { data: JSON.parse(row.data), fetchedAt: row.fetched_at };
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
set(key, data, source, ttlSeconds) {
|
|
45
|
+
this.db.prepare(`
|
|
46
|
+
INSERT OR REPLACE INTO live_cache (cache_key, data, source, fetched_at, expires_at)
|
|
47
|
+
VALUES (?, ?, ?, datetime('now'), datetime('now', '+' || ? || ' seconds'))
|
|
48
|
+
`).run(key, JSON.stringify(data), source, ttlSeconds);
|
|
49
|
+
}
|
|
50
|
+
purgeExpired() {
|
|
51
|
+
const result = this.db.prepare("DELETE FROM live_cache WHERE expires_at <= datetime('now')").run();
|
|
52
|
+
return result.changes;
|
|
53
|
+
}
|
|
54
|
+
invalidateSource(source) {
|
|
55
|
+
this.db.prepare("DELETE FROM live_cache WHERE source = ?").run(source);
|
|
56
|
+
}
|
|
57
|
+
invalidateAll() {
|
|
58
|
+
this.db.prepare("DELETE FROM live_cache").run();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/live/cache.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAY9C,MAAM,OAAO,SAAS;IACZ,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;KAUZ,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAI,GAAW;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,kFAAkF,CACnF,CAAC,GAAG,CAAC,GAAG,CAAiC,CAAC;QAE3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAM,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,QAAQ,CAAI,GAAW;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,6DAA6D,CAC9D,CAAC,GAAG,CAAC,GAAG,CAAqD,CAAC;QAE/D,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAM,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,MAAc,EAAE,UAAkB;QAChE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,YAAY;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,4DAA4D,CAC7D,CAAC,GAAG,EAAE,CAAC;QACR,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,aAAa;QACX,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;CACF"}
|