@4da/mcp-server 4.3.0 → 4.6.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 (202) hide show
  1. package/README.md +61 -81
  2. package/dist/db.d.ts +12 -1
  3. package/dist/db.d.ts.map +1 -1
  4. package/dist/db.js +71 -8
  5. package/dist/db.js.map +1 -1
  6. package/dist/index.d.ts +9 -14
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +12 -17
  9. package/dist/index.js.map +1 -1
  10. package/dist/live/crates-registry.d.ts +18 -0
  11. package/dist/live/crates-registry.d.ts.map +1 -0
  12. package/dist/live/crates-registry.js +133 -0
  13. package/dist/live/crates-registry.js.map +1 -0
  14. package/dist/live/go-registry.d.ts +19 -0
  15. package/dist/live/go-registry.d.ts.map +1 -0
  16. package/dist/live/go-registry.js +127 -0
  17. package/dist/live/go-registry.js.map +1 -0
  18. package/dist/live/http-utils.d.ts +3 -0
  19. package/dist/live/http-utils.d.ts.map +1 -0
  20. package/dist/live/http-utils.js +20 -0
  21. package/dist/live/http-utils.js.map +1 -0
  22. package/dist/live/index.d.ts +7 -2
  23. package/dist/live/index.d.ts.map +1 -1
  24. package/dist/live/index.js +71 -0
  25. package/dist/live/index.js.map +1 -1
  26. package/dist/live/npm-registry.d.ts +19 -0
  27. package/dist/live/npm-registry.d.ts.map +1 -0
  28. package/dist/live/npm-registry.js +132 -0
  29. package/dist/live/npm-registry.js.map +1 -0
  30. package/dist/live/osv-scanner.d.ts.map +1 -1
  31. package/dist/live/osv-scanner.js +1 -10
  32. package/dist/live/osv-scanner.js.map +1 -1
  33. package/dist/live/pypi-registry.d.ts +18 -0
  34. package/dist/live/pypi-registry.d.ts.map +1 -0
  35. package/dist/live/pypi-registry.js +142 -0
  36. package/dist/live/pypi-registry.js.map +1 -0
  37. package/dist/live/rate-limiter.d.ts +12 -0
  38. package/dist/live/rate-limiter.d.ts.map +1 -1
  39. package/dist/live/rate-limiter.js +4 -0
  40. package/dist/live/rate-limiter.js.map +1 -1
  41. package/dist/live/semver-utils.d.ts +5 -0
  42. package/dist/live/semver-utils.d.ts.map +1 -0
  43. package/dist/live/semver-utils.js +28 -0
  44. package/dist/live/semver-utils.js.map +1 -0
  45. package/dist/live/types.d.ts +41 -0
  46. package/dist/live/types.d.ts.map +1 -1
  47. package/dist/schema-registry.d.ts +4 -2
  48. package/dist/schema-registry.d.ts.map +1 -1
  49. package/dist/schema-registry.js +55 -221
  50. package/dist/schema-registry.js.map +1 -1
  51. package/dist/schemas/dependency-health.json +27 -0
  52. package/dist/schemas/upgrade-planner.json +22 -0
  53. package/dist/tool-dispatch.d.ts +1 -7
  54. package/dist/tool-dispatch.d.ts.map +1 -1
  55. package/dist/tool-dispatch.js +14 -46
  56. package/dist/tool-dispatch.js.map +1 -1
  57. package/dist/tools/dependency-health.d.ts +45 -0
  58. package/dist/tools/dependency-health.d.ts.map +1 -0
  59. package/dist/tools/dependency-health.js +152 -0
  60. package/dist/tools/dependency-health.js.map +1 -0
  61. package/dist/tools/index.d.ts +13 -40
  62. package/dist/tools/index.d.ts.map +1 -1
  63. package/dist/tools/index.js +18 -52
  64. package/dist/tools/index.js.map +1 -1
  65. package/dist/tools/upgrade-planner.d.ts +59 -0
  66. package/dist/tools/upgrade-planner.d.ts.map +1 -0
  67. package/dist/tools/upgrade-planner.js +167 -0
  68. package/dist/tools/upgrade-planner.js.map +1 -0
  69. package/dist/tools/what-should-i-know.d.ts +4 -12
  70. package/dist/tools/what-should-i-know.d.ts.map +1 -1
  71. package/dist/tools/what-should-i-know.js +11 -102
  72. package/dist/tools/what-should-i-know.js.map +1 -1
  73. package/package.json +2 -2
  74. package/dist/schemas/agent-feedback-stats.json +0 -14
  75. package/dist/schemas/agent-session-brief.json +0 -25
  76. package/dist/schemas/attention-report.json +0 -13
  77. package/dist/schemas/autophagy-status.json +0 -13
  78. package/dist/schemas/compound-advantage.json +0 -14
  79. package/dist/schemas/config-validator.json +0 -18
  80. package/dist/schemas/context-analysis.json +0 -25
  81. package/dist/schemas/daily-briefing.json +0 -34
  82. package/dist/schemas/decision-windows.json +0 -22
  83. package/dist/schemas/delegation-score.json +0 -18
  84. package/dist/schemas/explain-relevance.json +0 -19
  85. package/dist/schemas/export-context.json +0 -17
  86. package/dist/schemas/llm-status.json +0 -13
  87. package/dist/schemas/preemption-feed.json +0 -18
  88. package/dist/schemas/project-health.json +0 -13
  89. package/dist/schemas/record-agent-feedback.json +0 -28
  90. package/dist/schemas/reverse-mentions.json +0 -13
  91. package/dist/schemas/score-autopsy.json +0 -30
  92. package/dist/schemas/semantic-shifts.json +0 -17
  93. package/dist/schemas/signal-chains.json +0 -19
  94. package/dist/schemas/source-health.json +0 -17
  95. package/dist/schemas/tech-radar.json +0 -23
  96. package/dist/schemas/topic-connections.json +0 -34
  97. package/dist/schemas/trend-analysis.json +0 -29
  98. package/dist/schemas/trust-summary.json +0 -13
  99. package/dist/tools/agent-feedback-stats.d.ts +0 -30
  100. package/dist/tools/agent-feedback-stats.d.ts.map +0 -1
  101. package/dist/tools/agent-feedback-stats.js +0 -41
  102. package/dist/tools/agent-feedback-stats.js.map +0 -1
  103. package/dist/tools/agent-session-brief.d.ts +0 -44
  104. package/dist/tools/agent-session-brief.d.ts.map +0 -1
  105. package/dist/tools/agent-session-brief.js +0 -179
  106. package/dist/tools/agent-session-brief.js.map +0 -1
  107. package/dist/tools/attention-report.d.ts +0 -40
  108. package/dist/tools/attention-report.d.ts.map +0 -1
  109. package/dist/tools/attention-report.js +0 -73
  110. package/dist/tools/attention-report.js.map +0 -1
  111. package/dist/tools/autophagy-status.d.ts +0 -25
  112. package/dist/tools/autophagy-status.d.ts.map +0 -1
  113. package/dist/tools/autophagy-status.js +0 -56
  114. package/dist/tools/autophagy-status.js.map +0 -1
  115. package/dist/tools/compound-advantage.d.ts +0 -30
  116. package/dist/tools/compound-advantage.d.ts.map +0 -1
  117. package/dist/tools/compound-advantage.js +0 -133
  118. package/dist/tools/compound-advantage.js.map +0 -1
  119. package/dist/tools/config-validator.d.ts +0 -59
  120. package/dist/tools/config-validator.d.ts.map +0 -1
  121. package/dist/tools/config-validator.js +0 -417
  122. package/dist/tools/config-validator.js.map +0 -1
  123. package/dist/tools/context-analysis.d.ts +0 -108
  124. package/dist/tools/context-analysis.d.ts.map +0 -1
  125. package/dist/tools/context-analysis.js +0 -301
  126. package/dist/tools/context-analysis.js.map +0 -1
  127. package/dist/tools/daily-briefing.d.ts +0 -103
  128. package/dist/tools/daily-briefing.d.ts.map +0 -1
  129. package/dist/tools/daily-briefing.js +0 -294
  130. package/dist/tools/daily-briefing.js.map +0 -1
  131. package/dist/tools/decision-windows.d.ts +0 -37
  132. package/dist/tools/decision-windows.d.ts.map +0 -1
  133. package/dist/tools/decision-windows.js +0 -67
  134. package/dist/tools/decision-windows.js.map +0 -1
  135. package/dist/tools/delegation-score.d.ts +0 -34
  136. package/dist/tools/delegation-score.d.ts.map +0 -1
  137. package/dist/tools/delegation-score.js +0 -260
  138. package/dist/tools/delegation-score.js.map +0 -1
  139. package/dist/tools/explain-relevance.d.ts +0 -36
  140. package/dist/tools/explain-relevance.d.ts.map +0 -1
  141. package/dist/tools/explain-relevance.js +0 -51
  142. package/dist/tools/explain-relevance.js.map +0 -1
  143. package/dist/tools/export-context.d.ts +0 -60
  144. package/dist/tools/export-context.d.ts.map +0 -1
  145. package/dist/tools/export-context.js +0 -179
  146. package/dist/tools/export-context.js.map +0 -1
  147. package/dist/tools/llm-status.d.ts +0 -45
  148. package/dist/tools/llm-status.d.ts.map +0 -1
  149. package/dist/tools/llm-status.js +0 -93
  150. package/dist/tools/llm-status.js.map +0 -1
  151. package/dist/tools/muse-context.d.ts +0 -195
  152. package/dist/tools/muse-context.d.ts.map +0 -1
  153. package/dist/tools/muse-context.js +0 -284
  154. package/dist/tools/muse-context.js.map +0 -1
  155. package/dist/tools/preemption-feed.d.ts +0 -55
  156. package/dist/tools/preemption-feed.d.ts.map +0 -1
  157. package/dist/tools/preemption-feed.js +0 -124
  158. package/dist/tools/preemption-feed.js.map +0 -1
  159. package/dist/tools/project-health.d.ts +0 -53
  160. package/dist/tools/project-health.d.ts.map +0 -1
  161. package/dist/tools/project-health.js +0 -122
  162. package/dist/tools/project-health.js.map +0 -1
  163. package/dist/tools/record-agent-feedback.d.ts +0 -46
  164. package/dist/tools/record-agent-feedback.d.ts.map +0 -1
  165. package/dist/tools/record-agent-feedback.js +0 -71
  166. package/dist/tools/record-agent-feedback.js.map +0 -1
  167. package/dist/tools/reverse-mentions.d.ts +0 -38
  168. package/dist/tools/reverse-mentions.d.ts.map +0 -1
  169. package/dist/tools/reverse-mentions.js +0 -75
  170. package/dist/tools/reverse-mentions.js.map +0 -1
  171. package/dist/tools/score-autopsy.d.ts +0 -93
  172. package/dist/tools/score-autopsy.d.ts.map +0 -1
  173. package/dist/tools/score-autopsy.js +0 -295
  174. package/dist/tools/score-autopsy.js.map +0 -1
  175. package/dist/tools/semantic-shifts.d.ts +0 -53
  176. package/dist/tools/semantic-shifts.d.ts.map +0 -1
  177. package/dist/tools/semantic-shifts.js +0 -74
  178. package/dist/tools/semantic-shifts.js.map +0 -1
  179. package/dist/tools/signal-chains.d.ts +0 -52
  180. package/dist/tools/signal-chains.d.ts.map +0 -1
  181. package/dist/tools/signal-chains.js +0 -63
  182. package/dist/tools/signal-chains.js.map +0 -1
  183. package/dist/tools/source-health.d.ts +0 -64
  184. package/dist/tools/source-health.d.ts.map +0 -1
  185. package/dist/tools/source-health.js +0 -205
  186. package/dist/tools/source-health.js.map +0 -1
  187. package/dist/tools/tech-radar.d.ts +0 -38
  188. package/dist/tools/tech-radar.d.ts.map +0 -1
  189. package/dist/tools/tech-radar.js +0 -249
  190. package/dist/tools/tech-radar.js.map +0 -1
  191. package/dist/tools/topic-connections.d.ts +0 -112
  192. package/dist/tools/topic-connections.d.ts.map +0 -1
  193. package/dist/tools/topic-connections.js +0 -319
  194. package/dist/tools/topic-connections.js.map +0 -1
  195. package/dist/tools/trend-analysis.d.ts +0 -105
  196. package/dist/tools/trend-analysis.d.ts.map +0 -1
  197. package/dist/tools/trend-analysis.js +0 -296
  198. package/dist/tools/trend-analysis.js.map +0 -1
  199. package/dist/tools/trust-summary.d.ts +0 -38
  200. package/dist/tools/trust-summary.d.ts.map +0 -1
  201. package/dist/tools/trust-summary.js +0 -89
  202. package/dist/tools/trust-summary.js.map +0 -1
@@ -1,205 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * Source Health Tool
4
- *
5
- * Diagnose source fetching, parsing, and data flow issues.
6
- * This is a SUPERPOWER - it reveals pipeline problems before they become mysteries.
7
- */
8
- export const sourceHealthTool = {
9
- name: "source_health",
10
- description: `Diagnose the health of 4DA's content sources.
11
- Returns:
12
- - Per-source status (healthy/degraded/failing)
13
- - Recent fetch statistics
14
- - Data quality metrics
15
- - Error patterns detected
16
- - Recommendations for fixes
17
-
18
- Use this when content seems stale or sources aren't working.`,
19
- inputSchema: {
20
- type: "object",
21
- properties: {
22
- source: {
23
- type: "string",
24
- description: "Specific source to analyze (optional, all if not specified)",
25
- },
26
- hours: {
27
- type: "number",
28
- description: "Hours to analyze (default: 24)",
29
- },
30
- },
31
- },
32
- };
33
- export function executeSourceHealth(db, params) {
34
- const { source, hours = 24 } = params;
35
- const dbInstance = db.db;
36
- const endDate = new Date();
37
- const startDate = new Date(endDate.getTime() - hours * 60 * 60 * 1000);
38
- // Get all sources or specific one
39
- let allSources = [];
40
- try {
41
- const sourcesStmt = dbInstance.prepare(`
42
- SELECT DISTINCT source_type FROM source_items
43
- `);
44
- allSources = sourcesStmt.all().map(s => s.source_type);
45
- }
46
- catch {
47
- // source_items table may not exist in standalone mode
48
- }
49
- if (allSources.length === 0 && !source) {
50
- return {
51
- analysis_period: {
52
- start: startDate.toISOString(),
53
- end: endDate.toISOString(),
54
- hours,
55
- },
56
- overall_status: "healthy",
57
- sources: [],
58
- summary: {
59
- total_sources: 0,
60
- healthy: 0,
61
- degraded: 0,
62
- failing: 0,
63
- total_items_24h: 0,
64
- },
65
- global_recommendations: [
66
- "No content sources found. Install the 4DA desktop app to ingest content from Hacker News, GitHub, arXiv, and more.",
67
- "Vulnerability scanning works independently — try the vulnerability_scan tool.",
68
- ],
69
- };
70
- }
71
- const sourcesToAnalyze = source ? [source] : allSources;
72
- const sourceStatuses = [];
73
- for (const src of sourcesToAnalyze) {
74
- const status = analyzeSource(dbInstance, src, hours);
75
- sourceStatuses.push(status);
76
- }
77
- // Calculate summary
78
- const healthy = sourceStatuses.filter(s => s.status === "healthy").length;
79
- const degraded = sourceStatuses.filter(s => s.status === "degraded").length;
80
- const failing = sourceStatuses.filter(s => s.status === "failing").length;
81
- const totalItems24h = sourceStatuses.reduce((sum, s) => sum + s.items_24h, 0);
82
- // Determine overall status
83
- const overallStatus = failing > 0 ? "critical" :
84
- degraded > 0 ? "degraded" : "healthy";
85
- // Global recommendations
86
- const globalRecs = [];
87
- if (failing > 0) {
88
- globalRecs.push(`${failing} source(s) failing - check network connectivity and API status`);
89
- }
90
- if (totalItems24h === 0) {
91
- globalRecs.push("No items in last 24h - verify background jobs are running");
92
- }
93
- if (degraded > healthy) {
94
- globalRecs.push("Most sources degraded - consider reviewing fetch intervals");
95
- }
96
- return {
97
- analysis_period: {
98
- start: startDate.toISOString(),
99
- end: endDate.toISOString(),
100
- hours,
101
- },
102
- overall_status: overallStatus,
103
- sources: sourceStatuses,
104
- summary: {
105
- total_sources: sourceStatuses.length,
106
- healthy,
107
- degraded,
108
- failing,
109
- total_items_24h: totalItems24h,
110
- },
111
- global_recommendations: globalRecs,
112
- };
113
- }
114
- function analyzeSource(db, source, hours) {
115
- // Last item
116
- const lastItemStmt = db.prepare(`
117
- SELECT created_at FROM source_items
118
- WHERE source_type = ?
119
- ORDER BY created_at DESC
120
- LIMIT 1
121
- `);
122
- const lastItem = lastItemStmt.get(source);
123
- const lastItemAt = lastItem?.created_at || null;
124
- const hoursSinceLast = lastItemAt
125
- ? (Date.now() - new Date(lastItemAt.replace(" ", "T") + "Z").getTime()) / (1000 * 60 * 60)
126
- : null;
127
- // Items in last 24h
128
- const items24hStmt = db.prepare(`
129
- SELECT COUNT(*) as count FROM source_items
130
- WHERE source_type = ?
131
- AND datetime(created_at) >= datetime('now', '-24 hours')
132
- `);
133
- const items24h = items24hStmt.get(source)?.count || 0;
134
- // Items in last 7d
135
- const items7dStmt = db.prepare(`
136
- SELECT COUNT(*) as count FROM source_items
137
- WHERE source_type = ?
138
- AND datetime(created_at) >= datetime('now', '-7 days')
139
- `);
140
- const items7d = items7dStmt.get(source)?.count || 0;
141
- // Quality metrics
142
- const qualityStmt = db.prepare(`
143
- SELECT
144
- AVG(CASE WHEN url IS NOT NULL AND url != '' THEN 1.0 ELSE 0.0 END) as has_url_rate,
145
- AVG(CASE WHEN content IS NOT NULL AND content != '' THEN 1.0 ELSE 0.0 END) as has_content_rate,
146
- AVG(LENGTH(COALESCE(content, ''))) as avg_content_length
147
- FROM source_items
148
- WHERE source_type = ?
149
- AND datetime(created_at) >= datetime('now', '-7 days')
150
- `);
151
- const quality = qualityStmt.get(source);
152
- // Determine issues
153
- const issues = [];
154
- const recommendations = [];
155
- // Check for staleness
156
- if (hoursSinceLast !== null && hoursSinceLast > 24) {
157
- issues.push(`No new items in ${Math.round(hoursSinceLast)} hours`);
158
- recommendations.push("Check if source is enabled and API is accessible");
159
- }
160
- // Check for low volume
161
- const avgPerDay = items7d / 7;
162
- if (avgPerDay < 1 && items7d > 0) {
163
- issues.push(`Very low volume: ${avgPerDay.toFixed(1)} items/day average`);
164
- recommendations.push("Source may have fetch issues or very restrictive filters");
165
- }
166
- // Check quality
167
- if (quality && quality.has_url_rate < 0.8) {
168
- issues.push(`${Math.round((1 - quality.has_url_rate) * 100)}% of items missing URLs`);
169
- }
170
- if (quality && quality.has_content_rate < 0.5) {
171
- issues.push(`${Math.round((1 - quality.has_content_rate) * 100)}% of items missing content`);
172
- recommendations.push("Content extraction may be failing - check parser");
173
- }
174
- // Determine status
175
- let status;
176
- if (items7d === 0) {
177
- status = "unknown";
178
- }
179
- else if (hoursSinceLast !== null && hoursSinceLast > 48) {
180
- status = "failing";
181
- }
182
- else if (issues.length > 2 || (hoursSinceLast !== null && hoursSinceLast > 24)) {
183
- status = "degraded";
184
- }
185
- else {
186
- status = "healthy";
187
- }
188
- return {
189
- source,
190
- status,
191
- last_item_at: lastItemAt,
192
- hours_since_last: hoursSinceLast ? Math.round(hoursSinceLast * 10) / 10 : null,
193
- items_24h: items24h,
194
- items_7d: items7d,
195
- avg_items_per_day: Math.round(avgPerDay * 10) / 10,
196
- quality_metrics: {
197
- has_url_rate: Math.round((quality?.has_url_rate || 0) * 100) / 100,
198
- has_content_rate: Math.round((quality?.has_content_rate || 0) * 100) / 100,
199
- avg_content_length: Math.round(quality?.avg_content_length || 0),
200
- },
201
- issues,
202
- recommendations,
203
- };
204
- }
205
- //# sourceMappingURL=source-health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-health.js","sourceRoot":"","sources":["../../src/tools/source-health.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * tech_radar tool
3
- *
4
- * Query the user's personal technology radar. Synthesizes data from
5
- * tech stack, detected technologies, dependencies, decisions, and engagement.
6
- * Mirrors the Rust tech_radar.rs module using the same tables.
7
- */
8
- import type { FourDADatabase } from "../db.js";
9
- export interface TechRadarParams {
10
- quadrant?: "languages" | "frameworks" | "tools" | "platforms";
11
- ring?: "adopt" | "trial" | "assess" | "hold";
12
- search?: string;
13
- }
14
- export declare const techRadarTool: {
15
- name: string;
16
- description: string;
17
- inputSchema: {
18
- type: "object";
19
- properties: {
20
- quadrant: {
21
- type: string;
22
- enum: string[];
23
- description: string;
24
- };
25
- ring: {
26
- type: string;
27
- enum: string[];
28
- description: string;
29
- };
30
- search: {
31
- type: string;
32
- description: string;
33
- };
34
- };
35
- };
36
- };
37
- export declare function executeTechRadar(db: FourDADatabase, params: TechRadarParams): object;
38
- //# sourceMappingURL=tech-radar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tech-radar.d.ts","sourceRoot":"","sources":["../../src/tools/tech-radar.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+DD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;CAgCzB,CAAC;AAMF,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,eAAe,GACtB,MAAM,CA6JR"}
@@ -1,249 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * tech_radar tool
4
- *
5
- * Query the user's personal technology radar. Synthesizes data from
6
- * tech stack, detected technologies, dependencies, decisions, and engagement.
7
- * Mirrors the Rust tech_radar.rs module using the same tables.
8
- */
9
- // ============================================================================
10
- // Quadrant Classification
11
- // ============================================================================
12
- const LANGUAGES = new Set([
13
- "rust", "typescript", "javascript", "python", "go", "java", "kotlin",
14
- "swift", "c++", "c#", "ruby", "php", "scala", "elixir", "haskell",
15
- "zig", "lua", "dart", "r", "julia",
16
- ]);
17
- const FRAMEWORKS = new Set([
18
- "react", "vue", "angular", "svelte", "nextjs", "next.js", "nuxt",
19
- "remix", "astro", "tauri", "electron", "django", "flask", "fastapi",
20
- "express", "fastify", "rails", "spring", "actix", "axum", "gin",
21
- "flutter", "react-native", "sveltekit",
22
- ]);
23
- const PLATFORMS = new Set([
24
- "aws", "gcp", "azure", "vercel", "netlify", "cloudflare", "heroku",
25
- "docker", "kubernetes", "k8s", "linux", "windows", "macos", "ios",
26
- "android",
27
- ]);
28
- function classifyQuadrant(name) {
29
- const n = name.toLowerCase();
30
- if (LANGUAGES.has(n))
31
- return "languages";
32
- if (FRAMEWORKS.has(n))
33
- return "frameworks";
34
- if (PLATFORMS.has(n))
35
- return "platforms";
36
- return "tools";
37
- }
38
- // ============================================================================
39
- // Dependency Filtering
40
- // ============================================================================
41
- const SKIP_DEPS = new Set([
42
- "proc-macro2", "quote", "unicode-ident", "cfg-if", "memchr", "libc",
43
- "autocfg", "version_check", "pkg-config", "itoa", "ryu", "bitflags",
44
- "bytes", "pin-project-lite", "fnv", "percent-encoding", "tinyvec",
45
- "smallvec", "indexmap", "hashbrown", "equivalent", "either", "anyhow",
46
- "thiserror",
47
- ]);
48
- function isNotableDependency(name) {
49
- if (name.length < 4)
50
- return false;
51
- return !SKIP_DEPS.has(name);
52
- }
53
- // ============================================================================
54
- // Tool Definition
55
- // ============================================================================
56
- export const techRadarTool = {
57
- name: "tech_radar",
58
- description: `Query the user's personal technology radar. Synthesizes a ThoughtWorks-style radar from tech stack, dependencies, detected technologies, and developer decisions.
59
-
60
- Each entry is placed in a ring:
61
- - adopt: Primary tech stack — actively used daily
62
- - trial: Notable dependencies — in use but not core identity
63
- - assess: Auto-detected technologies — seen in projects but not yet committed
64
- - hold: Rejected alternatives from developer decisions
65
-
66
- Entries are classified into quadrants: languages, frameworks, tools, platforms.
67
-
68
- Use filters to narrow results by quadrant, ring, or free-text search.`,
69
- inputSchema: {
70
- type: "object",
71
- properties: {
72
- quadrant: {
73
- type: "string",
74
- enum: ["languages", "frameworks", "tools", "platforms"],
75
- description: "Filter by quadrant. Leave empty for all quadrants.",
76
- },
77
- ring: {
78
- type: "string",
79
- enum: ["adopt", "trial", "assess", "hold"],
80
- description: "Filter by ring. Leave empty for all rings.",
81
- },
82
- search: {
83
- type: "string",
84
- description: "Free-text search to filter entries by name.",
85
- },
86
- },
87
- },
88
- };
89
- // ============================================================================
90
- // Execute
91
- // ============================================================================
92
- export function executeTechRadar(db, params) {
93
- const rawDb = db.getRawDb();
94
- const entries = [];
95
- const seen = new Set();
96
- // 1. Primary tech stack -> ring: "adopt"
97
- try {
98
- const rows = rawDb
99
- .prepare("SELECT technology FROM tech_stack ORDER BY technology")
100
- .all();
101
- for (const row of rows) {
102
- const name = row.technology.toLowerCase();
103
- if (!seen.has(name)) {
104
- seen.add(name);
105
- entries.push({
106
- name,
107
- ring: "adopt",
108
- quadrant: classifyQuadrant(name),
109
- source: "primary_stack",
110
- confidence: 1.0,
111
- });
112
- }
113
- }
114
- }
115
- catch {
116
- // Table may not exist
117
- }
118
- // 2. Project dependencies -> ring: "trial"
119
- try {
120
- const rows = rawDb
121
- .prepare("SELECT DISTINCT package_name FROM project_dependencies ORDER BY package_name")
122
- .all();
123
- for (const row of rows) {
124
- const name = row.package_name.toLowerCase();
125
- if (!seen.has(name) && isNotableDependency(name)) {
126
- seen.add(name);
127
- entries.push({
128
- name,
129
- ring: "trial",
130
- quadrant: classifyQuadrant(name),
131
- source: "dependency",
132
- confidence: 0.7,
133
- });
134
- }
135
- }
136
- }
137
- catch {
138
- // Table may not exist
139
- }
140
- // 3. Detected tech -> ring: "assess"
141
- try {
142
- const rows = rawDb
143
- .prepare("SELECT name, confidence FROM detected_tech WHERE confidence > 0.3 ORDER BY confidence DESC")
144
- .all();
145
- for (const row of rows) {
146
- const name = row.name.toLowerCase();
147
- if (!seen.has(name)) {
148
- seen.add(name);
149
- entries.push({
150
- name,
151
- ring: "assess",
152
- quadrant: classifyQuadrant(name),
153
- source: "detected",
154
- confidence: Math.round(row.confidence * 100) / 100,
155
- });
156
- }
157
- }
158
- }
159
- catch {
160
- // Table may not exist
161
- }
162
- // 4. Developer decisions — rejected alternatives -> ring: "hold"
163
- try {
164
- const rows = rawDb
165
- .prepare(`SELECT id, decision_type, subject, alternatives_rejected, status
166
- FROM developer_decisions
167
- WHERE status IN ('active', 'superseded') AND decision_type = 'tech_choice'`)
168
- .all();
169
- for (const row of rows) {
170
- let alts = [];
171
- try {
172
- alts = JSON.parse(row.alternatives_rejected);
173
- }
174
- catch {
175
- // Malformed JSON, skip
176
- }
177
- for (const alt of alts) {
178
- const name = alt.toLowerCase();
179
- if (!seen.has(name)) {
180
- seen.add(name);
181
- entries.push({
182
- name,
183
- ring: "hold",
184
- quadrant: classifyQuadrant(name),
185
- source: "decision_hold",
186
- decision_ref: row.id,
187
- confidence: 0.8,
188
- });
189
- }
190
- }
191
- }
192
- }
193
- catch {
194
- // Table may not exist
195
- }
196
- // 5. Apply optional filters
197
- let filtered = entries;
198
- if (params.quadrant) {
199
- filtered = filtered.filter((e) => e.quadrant === params.quadrant);
200
- }
201
- if (params.ring) {
202
- filtered = filtered.filter((e) => e.ring === params.ring);
203
- }
204
- if (params.search) {
205
- const term = params.search.toLowerCase();
206
- filtered = filtered.filter((e) => e.name.includes(term));
207
- }
208
- // Sort: adopt > trial > assess > hold, then alphabetically
209
- const ringOrder = {
210
- adopt: 0,
211
- trial: 1,
212
- assess: 2,
213
- hold: 3,
214
- };
215
- filtered.sort((a, b) => {
216
- const ringDiff = (ringOrder[a.ring] ?? 4) - (ringOrder[b.ring] ?? 4);
217
- if (ringDiff !== 0)
218
- return ringDiff;
219
- return a.name.localeCompare(b.name);
220
- });
221
- return {
222
- entries: filtered,
223
- total: filtered.length,
224
- generated_at: new Date().toISOString(),
225
- summary: buildSummary(filtered),
226
- };
227
- }
228
- // ============================================================================
229
- // Helpers
230
- // ============================================================================
231
- function buildSummary(entries) {
232
- const byRing = {};
233
- for (const e of entries) {
234
- byRing[e.ring] = (byRing[e.ring] || 0) + 1;
235
- }
236
- const parts = [];
237
- if (byRing.adopt)
238
- parts.push(`${byRing.adopt} adopt`);
239
- if (byRing.trial)
240
- parts.push(`${byRing.trial} trial`);
241
- if (byRing.assess)
242
- parts.push(`${byRing.assess} assess`);
243
- if (byRing.hold)
244
- parts.push(`${byRing.hold} hold`);
245
- return parts.length > 0
246
- ? `${entries.length} technologies: ${parts.join(", ")}`
247
- : "No technologies found in radar";
248
- }
249
- //# sourceMappingURL=tech-radar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tech-radar.js","sourceRoot":"","sources":["../../src/tools/tech-radar.ts"],"names":[],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- /**
2
- * Topic Connections Tool
3
- *
4
- * Build and explore knowledge graphs from discovered content.
5
- * This is a SUPERPOWER - it reveals hidden connections between topics.
6
- *
7
- * With synthesize=true, uses LLM to explain the significance of connections.
8
- */
9
- import type { FourDADatabase } from "../db.js";
10
- import { type CompactResult, type TopicConnectionsKeyData } from "../output-manager.js";
11
- export declare const topicConnectionsTool: {
12
- name: string;
13
- description: string;
14
- inputSchema: {
15
- type: string;
16
- properties: {
17
- topics: {
18
- type: string;
19
- items: {
20
- type: string;
21
- };
22
- description: string;
23
- };
24
- find_path: {
25
- type: string;
26
- properties: {
27
- from: {
28
- type: string;
29
- };
30
- to: {
31
- type: string;
32
- };
33
- };
34
- description: string;
35
- };
36
- days: {
37
- type: string;
38
- description: string;
39
- };
40
- synthesize: {
41
- type: string;
42
- description: string;
43
- };
44
- compact: {
45
- type: string;
46
- description: string;
47
- };
48
- };
49
- };
50
- };
51
- export interface TopicConnectionsParams {
52
- topics?: string[];
53
- find_path?: {
54
- from: string;
55
- to: string;
56
- };
57
- days?: number;
58
- synthesize?: boolean;
59
- compact?: boolean;
60
- }
61
- interface TopicNode {
62
- topic: string;
63
- mention_count: number;
64
- avg_relevance: number;
65
- centrality: number;
66
- connections: number;
67
- }
68
- interface TopicEdge {
69
- from: string;
70
- to: string;
71
- co_occurrences: number;
72
- strength: "strong" | "medium" | "weak";
73
- }
74
- interface TopicPath {
75
- from: string;
76
- to: string;
77
- path: string[];
78
- direct_connection: boolean;
79
- connecting_items: {
80
- title: string;
81
- score: number;
82
- }[];
83
- }
84
- interface TopicCluster {
85
- name: string;
86
- topics: string[];
87
- item_count: number;
88
- coherence: number;
89
- }
90
- interface TopicConnectionsResult {
91
- analysis_period: {
92
- days: number;
93
- items_analyzed: number;
94
- };
95
- nodes: TopicNode[];
96
- edges: TopicEdge[];
97
- path?: TopicPath;
98
- clusters: TopicCluster[];
99
- central_topics: string[];
100
- isolated_topics: string[];
101
- insights: string[];
102
- ai_insights?: {
103
- graph_narrative: string;
104
- surprising_connection: string;
105
- exploration_suggestion: string;
106
- hidden_pattern: string;
107
- model_used: string;
108
- };
109
- }
110
- export declare function executeTopicConnections(db: FourDADatabase, params: TopicConnectionsParams): Promise<TopicConnectionsResult | CompactResult<TopicConnectionsKeyData>>;
111
- export {};
112
- //# sourceMappingURL=topic-connections.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"topic-connections.d.ts","sourceRoot":"","sources":["../../src/tools/topic-connections.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAiC,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEvH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ChC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtD;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,WAAW,CAAC,EAAE;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAqL1E"}