@4da/mcp-server 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +160 -85
  3. package/dist/auth.d.ts +36 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +82 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/db.d.ts +73 -0
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +607 -4
  10. package/dist/db.js.map +1 -1
  11. package/dist/doctor.d.ts.map +1 -1
  12. package/dist/doctor.js +33 -7
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/http-transport.d.ts.map +1 -1
  15. package/dist/http-transport.js +19 -2
  16. package/dist/http-transport.js.map +1 -1
  17. package/dist/index.d.ts +15 -18
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +150 -325
  20. package/dist/index.js.map +1 -1
  21. package/dist/live/cache.d.ts +16 -0
  22. package/dist/live/cache.d.ts.map +1 -0
  23. package/dist/live/cache.js +61 -0
  24. package/dist/live/cache.js.map +1 -0
  25. package/dist/live/hn-fetcher.d.ts +19 -0
  26. package/dist/live/hn-fetcher.d.ts.map +1 -0
  27. package/dist/live/hn-fetcher.js +123 -0
  28. package/dist/live/hn-fetcher.js.map +1 -0
  29. package/dist/live/index.d.ts +55 -0
  30. package/dist/live/index.d.ts.map +1 -0
  31. package/dist/live/index.js +131 -0
  32. package/dist/live/index.js.map +1 -0
  33. package/dist/live/osv-scanner.d.ts +19 -0
  34. package/dist/live/osv-scanner.d.ts.map +1 -0
  35. package/dist/live/osv-scanner.js +197 -0
  36. package/dist/live/osv-scanner.js.map +1 -0
  37. package/dist/live/rate-limiter.d.ts +19 -0
  38. package/dist/live/rate-limiter.d.ts.map +1 -0
  39. package/dist/live/rate-limiter.js +52 -0
  40. package/dist/live/rate-limiter.js.map +1 -0
  41. package/dist/live/types.d.ts +89 -0
  42. package/dist/live/types.d.ts.map +1 -0
  43. package/dist/live/types.js +3 -0
  44. package/dist/live/types.js.map +1 -0
  45. package/dist/live/version-resolver.d.ts +11 -0
  46. package/dist/live/version-resolver.d.ts.map +1 -0
  47. package/dist/live/version-resolver.js +321 -0
  48. package/dist/live/version-resolver.js.map +1 -0
  49. package/dist/live-singleton.d.ts +9 -0
  50. package/dist/live-singleton.d.ts.map +1 -0
  51. package/dist/live-singleton.js +14 -0
  52. package/dist/live-singleton.js.map +1 -0
  53. package/dist/llm.d.ts.map +1 -1
  54. package/dist/llm.js +3 -2
  55. package/dist/llm.js.map +1 -1
  56. package/dist/output-manager.d.ts.map +1 -1
  57. package/dist/output-manager.js +1 -0
  58. package/dist/output-manager.js.map +1 -1
  59. package/dist/project-scanner.d.ts +27 -0
  60. package/dist/project-scanner.d.ts.map +1 -0
  61. package/dist/project-scanner.js +366 -0
  62. package/dist/project-scanner.js.map +1 -0
  63. package/dist/schema-registry.d.ts +31 -13
  64. package/dist/schema-registry.d.ts.map +1 -1
  65. package/dist/schema-registry.js +164 -32
  66. package/dist/schema-registry.js.map +1 -1
  67. package/dist/schemas/agent-feedback-stats.json +14 -0
  68. package/dist/schemas/preemption-feed.json +18 -0
  69. package/dist/schemas/record-agent-feedback.json +28 -0
  70. package/dist/schemas/trust-summary.json +13 -0
  71. package/dist/schemas/vulnerability-scan.json +26 -0
  72. package/dist/schemas/what-should-i-know.json +19 -0
  73. package/dist/setup.d.ts +2 -1
  74. package/dist/setup.d.ts.map +1 -1
  75. package/dist/setup.js +38 -4
  76. package/dist/setup.js.map +1 -1
  77. package/dist/tool-dispatch.d.ts +33 -0
  78. package/dist/tool-dispatch.d.ts.map +1 -0
  79. package/dist/tool-dispatch.js +87 -0
  80. package/dist/tool-dispatch.js.map +1 -0
  81. package/dist/tools/agent-feedback-stats.d.ts +30 -0
  82. package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
  83. package/dist/tools/agent-feedback-stats.js +41 -0
  84. package/dist/tools/agent-feedback-stats.js.map +1 -0
  85. package/dist/tools/agent-memory.d.ts.map +1 -1
  86. package/dist/tools/agent-memory.js +33 -0
  87. package/dist/tools/agent-memory.js.map +1 -1
  88. package/dist/tools/agent-session-brief.d.ts.map +1 -1
  89. package/dist/tools/agent-session-brief.js +1 -0
  90. package/dist/tools/agent-session-brief.js.map +1 -1
  91. package/dist/tools/attention-report.d.ts.map +1 -1
  92. package/dist/tools/attention-report.js +1 -0
  93. package/dist/tools/attention-report.js.map +1 -1
  94. package/dist/tools/autophagy-status.d.ts.map +1 -1
  95. package/dist/tools/autophagy-status.js.map +1 -1
  96. package/dist/tools/compound-advantage.d.ts +3 -0
  97. package/dist/tools/compound-advantage.d.ts.map +1 -1
  98. package/dist/tools/compound-advantage.js +67 -10
  99. package/dist/tools/compound-advantage.js.map +1 -1
  100. package/dist/tools/config-validator.d.ts.map +1 -1
  101. package/dist/tools/config-validator.js +31 -0
  102. package/dist/tools/config-validator.js.map +1 -1
  103. package/dist/tools/context-analysis.d.ts.map +1 -1
  104. package/dist/tools/context-analysis.js +1 -0
  105. package/dist/tools/context-analysis.js.map +1 -1
  106. package/dist/tools/daily-briefing.d.ts.map +1 -1
  107. package/dist/tools/daily-briefing.js +17 -1
  108. package/dist/tools/daily-briefing.js.map +1 -1
  109. package/dist/tools/decision-enforcement.d.ts.map +1 -1
  110. package/dist/tools/decision-enforcement.js +1 -0
  111. package/dist/tools/decision-enforcement.js.map +1 -1
  112. package/dist/tools/decision-memory.d.ts +2 -0
  113. package/dist/tools/decision-memory.d.ts.map +1 -1
  114. package/dist/tools/decision-memory.js +80 -0
  115. package/dist/tools/decision-memory.js.map +1 -1
  116. package/dist/tools/decision-windows.d.ts.map +1 -1
  117. package/dist/tools/decision-windows.js.map +1 -1
  118. package/dist/tools/delegation-score.d.ts.map +1 -1
  119. package/dist/tools/delegation-score.js +1 -0
  120. package/dist/tools/delegation-score.js.map +1 -1
  121. package/dist/tools/developer-dna.d.ts.map +1 -1
  122. package/dist/tools/developer-dna.js +1 -0
  123. package/dist/tools/developer-dna.js.map +1 -1
  124. package/dist/tools/explain-relevance.d.ts.map +1 -1
  125. package/dist/tools/explain-relevance.js +1 -0
  126. package/dist/tools/explain-relevance.js.map +1 -1
  127. package/dist/tools/export-context.d.ts +9 -0
  128. package/dist/tools/export-context.d.ts.map +1 -1
  129. package/dist/tools/export-context.js +45 -1
  130. package/dist/tools/export-context.js.map +1 -1
  131. package/dist/tools/get-actionable-signals.d.ts.map +1 -1
  132. package/dist/tools/get-actionable-signals.js +60 -9
  133. package/dist/tools/get-actionable-signals.js.map +1 -1
  134. package/dist/tools/get-context.d.ts.map +1 -1
  135. package/dist/tools/get-context.js +1 -0
  136. package/dist/tools/get-context.js.map +1 -1
  137. package/dist/tools/get-relevant-content.d.ts.map +1 -1
  138. package/dist/tools/get-relevant-content.js +3 -0
  139. package/dist/tools/get-relevant-content.js.map +1 -1
  140. package/dist/tools/index.d.ts +16 -16
  141. package/dist/tools/index.d.ts.map +1 -1
  142. package/dist/tools/index.js +21 -16
  143. package/dist/tools/index.js.map +1 -1
  144. package/dist/tools/knowledge-gaps.d.ts.map +1 -1
  145. package/dist/tools/knowledge-gaps.js +9 -3
  146. package/dist/tools/knowledge-gaps.js.map +1 -1
  147. package/dist/tools/llm-status.d.ts.map +1 -1
  148. package/dist/tools/llm-status.js +1 -0
  149. package/dist/tools/llm-status.js.map +1 -1
  150. package/dist/tools/muse-context.d.ts +195 -0
  151. package/dist/tools/muse-context.d.ts.map +1 -0
  152. package/dist/tools/muse-context.js +284 -0
  153. package/dist/tools/muse-context.js.map +1 -0
  154. package/dist/tools/preemption-feed.d.ts +55 -0
  155. package/dist/tools/preemption-feed.d.ts.map +1 -0
  156. package/dist/tools/preemption-feed.js +124 -0
  157. package/dist/tools/preemption-feed.js.map +1 -0
  158. package/dist/tools/project-health.d.ts +6 -0
  159. package/dist/tools/project-health.d.ts.map +1 -1
  160. package/dist/tools/project-health.js +49 -10
  161. package/dist/tools/project-health.js.map +1 -1
  162. package/dist/tools/record-agent-feedback.d.ts +46 -0
  163. package/dist/tools/record-agent-feedback.d.ts.map +1 -0
  164. package/dist/tools/record-agent-feedback.js +71 -0
  165. package/dist/tools/record-agent-feedback.js.map +1 -0
  166. package/dist/tools/record-feedback.d.ts.map +1 -1
  167. package/dist/tools/record-feedback.js +1 -0
  168. package/dist/tools/record-feedback.js.map +1 -1
  169. package/dist/tools/reverse-mentions.d.ts.map +1 -1
  170. package/dist/tools/reverse-mentions.js +1 -0
  171. package/dist/tools/reverse-mentions.js.map +1 -1
  172. package/dist/tools/score-autopsy.d.ts.map +1 -1
  173. package/dist/tools/score-autopsy.js +1 -0
  174. package/dist/tools/score-autopsy.js.map +1 -1
  175. package/dist/tools/semantic-shifts.d.ts.map +1 -1
  176. package/dist/tools/semantic-shifts.js +1 -0
  177. package/dist/tools/semantic-shifts.js.map +1 -1
  178. package/dist/tools/signal-chains.d.ts.map +1 -1
  179. package/dist/tools/signal-chains.js +5 -2
  180. package/dist/tools/signal-chains.js.map +1 -1
  181. package/dist/tools/source-health.d.ts.map +1 -1
  182. package/dist/tools/source-health.js +1 -0
  183. package/dist/tools/source-health.js.map +1 -1
  184. package/dist/tools/tech-radar.d.ts.map +1 -1
  185. package/dist/tools/tech-radar.js +1 -0
  186. package/dist/tools/tech-radar.js.map +1 -1
  187. package/dist/tools/topic-connections.d.ts.map +1 -1
  188. package/dist/tools/topic-connections.js +1 -0
  189. package/dist/tools/topic-connections.js.map +1 -1
  190. package/dist/tools/trend-analysis.d.ts.map +1 -1
  191. package/dist/tools/trend-analysis.js +1 -0
  192. package/dist/tools/trend-analysis.js.map +1 -1
  193. package/dist/tools/trust-summary.d.ts +38 -0
  194. package/dist/tools/trust-summary.d.ts.map +1 -0
  195. package/dist/tools/trust-summary.js +89 -0
  196. package/dist/tools/trust-summary.js.map +1 -0
  197. package/dist/tools/vulnerability-scan.d.ts +89 -0
  198. package/dist/tools/vulnerability-scan.d.ts.map +1 -0
  199. package/dist/tools/vulnerability-scan.js +127 -0
  200. package/dist/tools/vulnerability-scan.js.map +1 -0
  201. package/dist/tools/what-should-i-know.d.ts +79 -0
  202. package/dist/tools/what-should-i-know.d.ts.map +1 -0
  203. package/dist/tools/what-should-i-know.js +376 -0
  204. package/dist/tools/what-should-i-know.js.map +1 -0
  205. package/dist/types.d.ts +112 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +1 -0
  208. package/dist/types.js.map +1 -1
  209. package/package.json +35 -18
@@ -0,0 +1,284 @@
1
+ /**
2
+ * 4DA MUSE MCP Tools
3
+ *
4
+ * Creative context engine tools for managing context packs,
5
+ * enriching generation prompts, and querying creative profiles.
6
+ *
7
+ * MUSE is a private parallel development track — these tools are
8
+ * available to Claude/agents but not user-facing in the current app.
9
+ */
10
+ // =============================================================================
11
+ // Tool Definitions
12
+ // =============================================================================
13
+ export const museCreatePackTool = {
14
+ name: "muse_create_pack",
15
+ description: "Create a new MUSE context pack — a named collection of creative signals derived from local files. Packs capture color language, compositional patterns, sonic palette, and thematic tendencies.",
16
+ inputSchema: {
17
+ type: "object",
18
+ properties: {
19
+ name: {
20
+ type: "string",
21
+ description: "Pack name (e.g., 'Meridian Album Art', 'Cyberpunk Stills')",
22
+ },
23
+ description: {
24
+ type: "string",
25
+ description: "Optional description of the pack's purpose or aesthetic direction",
26
+ },
27
+ },
28
+ required: ["name"],
29
+ },
30
+ };
31
+ export const museListPacksTool = {
32
+ name: "muse_list_packs",
33
+ description: "List all MUSE context packs with their status, source count, and confidence. Use active_only=true to see only packs currently influencing generation.",
34
+ inputSchema: {
35
+ type: "object",
36
+ properties: {
37
+ active_only: {
38
+ type: "boolean",
39
+ description: "Only show active packs. Default: false",
40
+ default: false,
41
+ },
42
+ },
43
+ },
44
+ };
45
+ export const museEnrichPromptTool = {
46
+ name: "muse_enrich_prompt",
47
+ description: "Enrich a generation prompt with creative context from the active MUSE pack. Prepends style guidance (color, composition, themes, anti-patterns) to make any AI generation tool context-aware. Works with any text-accepting API (Sora, Runway, Midjourney, DALL-E, Udio, etc.).",
48
+ inputSchema: {
49
+ type: "object",
50
+ properties: {
51
+ prompt: {
52
+ type: "string",
53
+ description: "The original generation prompt to enrich",
54
+ },
55
+ pack_id: {
56
+ type: "string",
57
+ description: "Specific pack to use. If omitted, uses the first active pack.",
58
+ },
59
+ },
60
+ required: ["prompt"],
61
+ },
62
+ };
63
+ export const museAddSourcesTool = {
64
+ name: "muse_add_sources",
65
+ description: "Add source files to a MUSE context pack. Files are classified by type (image, video, audio, project file) and queued for extraction. Unsupported file types are skipped.",
66
+ inputSchema: {
67
+ type: "object",
68
+ properties: {
69
+ pack_id: {
70
+ type: "string",
71
+ description: "ID of the pack to add sources to",
72
+ },
73
+ file_paths: {
74
+ type: "array",
75
+ items: { type: "string" },
76
+ description: "Array of file paths to add (images, videos, audio, project files)",
77
+ },
78
+ },
79
+ required: ["pack_id", "file_paths"],
80
+ },
81
+ };
82
+ export const museGetStatsTool = {
83
+ name: "muse_stats",
84
+ description: "Get MUSE system statistics — total packs, active packs, source file count, generation history count. Quick health check for the creative context engine.",
85
+ inputSchema: {
86
+ type: "object",
87
+ properties: {},
88
+ },
89
+ };
90
+ export const museActivatePackTool = {
91
+ name: "muse_activate_pack",
92
+ description: "Activate or deactivate a MUSE context pack. Active packs influence generation prompts via muse_enrich_prompt.",
93
+ inputSchema: {
94
+ type: "object",
95
+ properties: {
96
+ pack_id: {
97
+ type: "string",
98
+ description: "ID of the pack to activate/deactivate",
99
+ },
100
+ active: {
101
+ type: "boolean",
102
+ description: "true to activate, false to deactivate",
103
+ },
104
+ },
105
+ required: ["pack_id", "active"],
106
+ },
107
+ };
108
+ // =============================================================================
109
+ // Execute Functions
110
+ // =============================================================================
111
+ export function executeMuseCreatePack(db, params) {
112
+ const id = crypto.randomUUID();
113
+ const name = params.name;
114
+ const description = params.description ?? null;
115
+ db.getRawDb()
116
+ .prepare(`INSERT INTO muse_packs (id, name, description, pack_type, is_active, source_count, confidence)
117
+ VALUES (?, ?, ?, 'custom', 0, 0, 0.0)`)
118
+ .run(id, name, description);
119
+ return {
120
+ id,
121
+ name,
122
+ description,
123
+ pack_type: "custom",
124
+ is_active: false,
125
+ source_count: 0,
126
+ confidence: 0,
127
+ message: `Created MUSE pack "${name}" (${id})`,
128
+ };
129
+ }
130
+ export function executeMuseListPacks(db, params) {
131
+ const activeOnly = params.active_only ?? false;
132
+ const query = activeOnly
133
+ ? `SELECT id, name, description, pack_type, is_active, source_count, confidence,
134
+ thematic_topics, anti_patterns, created_at, updated_at
135
+ FROM muse_packs WHERE is_active = 1 ORDER BY updated_at DESC`
136
+ : `SELECT id, name, description, pack_type, is_active, source_count, confidence,
137
+ thematic_topics, anti_patterns, created_at, updated_at
138
+ FROM muse_packs ORDER BY updated_at DESC`;
139
+ const rows = db.getRawDb().prepare(query).all();
140
+ return {
141
+ packs: rows.map((r) => ({
142
+ id: r.id,
143
+ name: r.name,
144
+ description: r.description,
145
+ pack_type: r.pack_type,
146
+ is_active: r.is_active === 1,
147
+ source_count: r.source_count,
148
+ confidence: r.confidence,
149
+ topics: r.thematic_topics ? JSON.parse(r.thematic_topics) : [],
150
+ anti_patterns: r.anti_patterns ? JSON.parse(r.anti_patterns) : [],
151
+ created_at: r.created_at,
152
+ updated_at: r.updated_at,
153
+ })),
154
+ total: rows.length,
155
+ };
156
+ }
157
+ export function executeMuseEnrichPrompt(db, params) {
158
+ const prompt = params.prompt;
159
+ // Find the pack to use
160
+ let pack;
161
+ if (params.pack_id) {
162
+ pack = db.getRawDb()
163
+ .prepare("SELECT * FROM muse_packs WHERE id = ?")
164
+ .get(params.pack_id);
165
+ }
166
+ else {
167
+ pack = db.getRawDb()
168
+ .prepare("SELECT * FROM muse_packs WHERE is_active = 1 ORDER BY updated_at DESC LIMIT 1")
169
+ .get();
170
+ }
171
+ if (!pack) {
172
+ return {
173
+ original_prompt: prompt,
174
+ enriched_prompt: prompt,
175
+ pack_used: null,
176
+ enrichment_applied: false,
177
+ message: "No active MUSE pack found — returning original prompt",
178
+ };
179
+ }
180
+ // Build enrichment from pack data
181
+ const parts = [];
182
+ // Parse topics and anti-patterns
183
+ const topics = pack.thematic_topics
184
+ ? JSON.parse(pack.thematic_topics)
185
+ : [];
186
+ const antiPatterns = pack.anti_patterns
187
+ ? JSON.parse(pack.anti_patterns)
188
+ : [];
189
+ if (topics.length > 0) {
190
+ parts.push(`Themes: ${topics.slice(0, 5).map((t) => t.label).join(", ")}`);
191
+ }
192
+ if (antiPatterns.length > 0) {
193
+ parts.push(`Avoid: ${antiPatterns.slice(0, 4).map((a) => a.label).join(", ")}`);
194
+ }
195
+ const enriched = parts.length > 0
196
+ ? `Style context: ${parts.join(". ")}.\n\n${prompt}`
197
+ : prompt;
198
+ return {
199
+ original_prompt: prompt,
200
+ enriched_prompt: enriched,
201
+ pack_used: { id: pack.id, name: pack.name, confidence: pack.confidence },
202
+ enrichment_applied: parts.length > 0,
203
+ };
204
+ }
205
+ export function executeMuseAddSources(db, params) {
206
+ const MUSE_EXT_MAP = {
207
+ // Image
208
+ png: "image", jpg: "image", jpeg: "image", gif: "image", webp: "image",
209
+ svg: "image", tiff: "image", tif: "image", bmp: "image", psd: "image",
210
+ raw: "image", cr2: "image", nef: "image", arw: "image", dng: "image",
211
+ heic: "image", heif: "image", exr: "image",
212
+ // Video
213
+ mp4: "video", mov: "video", avi: "video", mkv: "video", webm: "video",
214
+ flv: "video", wmv: "video", m4v: "video",
215
+ // Audio
216
+ wav: "audio", flac: "audio", mp3: "audio", aiff: "audio", aif: "audio",
217
+ ogg: "audio", m4a: "audio", aac: "audio", wma: "audio", opus: "audio",
218
+ // Project files
219
+ aep: "project_file", prproj: "project_file", drp: "project_file",
220
+ als: "project_file", flp: "project_file", blend: "project_file",
221
+ c4d: "project_file", sketch: "project_file", fig: "project_file",
222
+ xd: "project_file",
223
+ };
224
+ let added = 0;
225
+ let skipped = 0;
226
+ const insert = db.getRawDb().prepare(`INSERT INTO muse_pack_sources (pack_id, file_path, file_type, extraction_status)
227
+ VALUES (?, ?, ?, 'pending')`);
228
+ for (const filePath of params.file_paths) {
229
+ const ext = filePath.split(".").pop()?.toLowerCase() ?? "";
230
+ const mediaType = MUSE_EXT_MAP[ext];
231
+ if (mediaType) {
232
+ insert.run(params.pack_id, filePath, mediaType);
233
+ added++;
234
+ }
235
+ else {
236
+ skipped++;
237
+ }
238
+ }
239
+ // Update source count
240
+ db.getRawDb()
241
+ .prepare(`UPDATE muse_packs SET source_count = (SELECT COUNT(*) FROM muse_pack_sources WHERE pack_id = ?),
242
+ updated_at = datetime('now') WHERE id = ?`)
243
+ .run(params.pack_id, params.pack_id);
244
+ return {
245
+ added,
246
+ skipped,
247
+ total: params.file_paths.length,
248
+ message: `Added ${added} source(s) to pack (${skipped} skipped — unsupported type)`,
249
+ };
250
+ }
251
+ export function executeMuseGetStats(db) {
252
+ const totalPacks = db.getRawDb().prepare("SELECT COUNT(*) as c FROM muse_packs").get().c;
253
+ const activePacks = db.getRawDb().prepare("SELECT COUNT(*) as c FROM muse_packs WHERE is_active = 1").get().c;
254
+ const totalSources = db.getRawDb().prepare("SELECT COUNT(*) as c FROM muse_pack_sources").get().c;
255
+ const totalGenerations = db.getRawDb().prepare("SELECT COUNT(*) as c FROM muse_generations").get().c;
256
+ // Source breakdown by type
257
+ const typeBreakdown = db.getRawDb()
258
+ .prepare("SELECT file_type, COUNT(*) as count FROM muse_pack_sources GROUP BY file_type ORDER BY count DESC")
259
+ .all();
260
+ return {
261
+ total_packs: totalPacks,
262
+ active_packs: activePacks,
263
+ total_sources: totalSources,
264
+ total_generations: totalGenerations,
265
+ source_breakdown: typeBreakdown,
266
+ status: totalPacks > 0 ? "active" : "no_packs",
267
+ };
268
+ }
269
+ export function executeMuseActivatePack(db, params) {
270
+ db.getRawDb()
271
+ .prepare("UPDATE muse_packs SET is_active = ?, updated_at = datetime('now') WHERE id = ?")
272
+ .run(params.active ? 1 : 0, params.pack_id);
273
+ const pack = db.getRawDb()
274
+ .prepare("SELECT name FROM muse_packs WHERE id = ?")
275
+ .get(params.pack_id);
276
+ return {
277
+ pack_id: params.pack_id,
278
+ active: params.active,
279
+ message: pack
280
+ ? `Pack "${pack.name}" ${params.active ? "activated" : "deactivated"}`
281
+ : `Pack ${params.pack_id} not found`,
282
+ };
283
+ }
284
+ //# sourceMappingURL=muse-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muse-context.js","sourceRoot":"","sources":["../../src/tools/muse-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * preemption_feed tool
3
+ *
4
+ * Returns forward-looking intelligence alerts — what's likely to matter
5
+ * soon based on signal chains, dependency health, and knowledge gaps.
6
+ * Use before starting work to check for upcoming risks.
7
+ */
8
+ import type { FourDADatabase } from "../db.js";
9
+ export interface PreemptionFeedParams {
10
+ urgency_filter?: string;
11
+ limit?: number;
12
+ }
13
+ export declare const preemptionFeedTool: {
14
+ name: string;
15
+ description: string;
16
+ inputSchema: {
17
+ type: "object";
18
+ properties: {
19
+ urgency_filter: {
20
+ type: string;
21
+ description: string;
22
+ enum: string[];
23
+ };
24
+ limit: {
25
+ type: string;
26
+ description: string;
27
+ default: number;
28
+ };
29
+ };
30
+ };
31
+ };
32
+ export declare function executePreemptionFeed(db: FourDADatabase, params: PreemptionFeedParams): {
33
+ signal_chains: {
34
+ id: string;
35
+ chain_name: string;
36
+ overall_priority: string;
37
+ confidence: number;
38
+ suggested_action: string;
39
+ link_count: number;
40
+ }[];
41
+ health_alerts: {
42
+ project: string;
43
+ severity: string;
44
+ message: string;
45
+ dep: string | null;
46
+ }[];
47
+ blind_spots: {
48
+ dep: string;
49
+ days_stale: number;
50
+ missed_count: number;
51
+ }[];
52
+ total_alerts: number;
53
+ recommendation: string;
54
+ };
55
+ //# sourceMappingURL=preemption-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preemption-feed.d.ts","sourceRoot":"","sources":["../../src/tools/preemption-feed.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;CAoB9B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,oBAAoB;;YAStB,MAAM;oBACE,MAAM;0BACA,MAAM;oBACZ,MAAM;0BACA,MAAM;oBACZ,MAAM;;;iBA2CT,MAAM;kBACL,MAAM;iBACP,MAAM;aACV,MAAM,GAAG,IAAI;;;aAgCb,MAAM;oBACC,MAAM;sBACJ,MAAM;;;;EA2CvB"}
@@ -0,0 +1,124 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ /**
3
+ * preemption_feed tool
4
+ *
5
+ * Returns forward-looking intelligence alerts — what's likely to matter
6
+ * soon based on signal chains, dependency health, and knowledge gaps.
7
+ * Use before starting work to check for upcoming risks.
8
+ */
9
+ export const preemptionFeedTool = {
10
+ name: "preemption_feed",
11
+ description: "Get forward-looking intelligence alerts about upcoming risks, breaking changes, and ecosystem shifts affecting your stack. Use before dependency updates or when planning work.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ urgency_filter: {
16
+ type: "string",
17
+ description: "Filter by minimum urgency: critical, high, medium, watch. Default: all",
18
+ enum: ["critical", "high", "medium", "watch"],
19
+ },
20
+ limit: {
21
+ type: "number",
22
+ description: "Maximum alerts to return. Default: 10",
23
+ default: 10,
24
+ },
25
+ },
26
+ },
27
+ };
28
+ export function executePreemptionFeed(db, params) {
29
+ // Preemption data comes from the Tauri backend (signal chains, project health, etc.)
30
+ // The MCP server reads from the same DB. We synthesize from available tables.
31
+ const rawDb = db.getRawDb();
32
+ const limit = params.limit ?? 10;
33
+ // Get recent signal chains (open, with high confidence)
34
+ let chains = [];
35
+ try {
36
+ // signal_chains might be stored as temporal events
37
+ const rows = rawDb
38
+ .prepare(`SELECT te.id, te.subject, te.data, te.created_at
39
+ FROM temporal_events te
40
+ WHERE te.event_type = 'signal_chain'
41
+ AND te.created_at >= datetime('now', '-14 days')
42
+ ORDER BY te.created_at DESC
43
+ LIMIT ?`)
44
+ .all(limit);
45
+ chains = rows
46
+ .map((r) => {
47
+ try {
48
+ const data = JSON.parse(r.data);
49
+ return {
50
+ id: String(r.id),
51
+ chain_name: r.subject || data.chain_name || "Signal chain",
52
+ overall_priority: data.overall_priority || "medium",
53
+ confidence: data.confidence || 0.5,
54
+ suggested_action: data.suggested_action || "Investigate",
55
+ link_count: data.links?.length || 0,
56
+ };
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ })
62
+ .filter(Boolean);
63
+ }
64
+ catch {
65
+ /* table may not exist */
66
+ }
67
+ // Get critical dependency alerts from project health
68
+ let health_alerts = [];
69
+ try {
70
+ const alerts = rawDb
71
+ .prepare(`SELECT da.package_name, da.alert_type, da.severity, da.message, pd.project_path
72
+ FROM dependency_alerts da
73
+ LEFT JOIN project_dependencies pd ON pd.package_name = da.package_name
74
+ WHERE da.created_at >= datetime('now', '-7 days')
75
+ ORDER BY da.severity DESC
76
+ LIMIT ?`)
77
+ .all(limit);
78
+ health_alerts = alerts.map((a) => ({
79
+ project: a.project_path || "unknown",
80
+ severity: a.severity,
81
+ message: a.message,
82
+ dep: a.package_name,
83
+ }));
84
+ }
85
+ catch {
86
+ /* table may not exist */
87
+ }
88
+ // Get knowledge gaps (blind spots)
89
+ let blind_spots = [];
90
+ try {
91
+ // Find deps with no recent interactions
92
+ const gaps = rawDb
93
+ .prepare(`SELECT ud.name, ud.dep_type,
94
+ COALESCE(
95
+ CAST((julianday('now') - julianday(MAX(i.created_at))) AS INTEGER),
96
+ 999
97
+ ) as days_since
98
+ FROM user_dependencies ud
99
+ LEFT JOIN interactions i ON LOWER(i.action) LIKE '%' || LOWER(ud.name) || '%'
100
+ GROUP BY ud.name
101
+ HAVING days_since > 14
102
+ ORDER BY days_since DESC
103
+ LIMIT ?`)
104
+ .all(limit);
105
+ blind_spots = gaps.map((g) => ({
106
+ dep: g.name,
107
+ days_stale: g.days_since,
108
+ missed_count: 0,
109
+ }));
110
+ }
111
+ catch {
112
+ /* table may not exist */
113
+ }
114
+ return {
115
+ signal_chains: chains,
116
+ health_alerts,
117
+ blind_spots,
118
+ total_alerts: chains.length + health_alerts.length + blind_spots.length,
119
+ recommendation: chains.length + health_alerts.length > 0
120
+ ? "Active risks detected. Review before proceeding with dependency changes."
121
+ : "No urgent risks detected. Safe to proceed.",
122
+ };
123
+ }
124
+ //# sourceMappingURL=preemption-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preemption-feed.js","sourceRoot":"","sources":["../../src/tools/preemption-feed.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,12 @@ export declare function executeProjectHealth(db: FourDADatabase, params: Project
33
33
  health: {
34
34
  security_score: number;
35
35
  security_issues: number;
36
+ vulnerable_packages: {
37
+ name: string;
38
+ vulnCount: number;
39
+ highestSeverity: string;
40
+ }[] | undefined;
41
+ data_source: string;
36
42
  };
37
43
  }[];
38
44
  total_projects: number;
@@ -1 +1 @@
1
- {"version":3,"file":"project-health.d.ts","sourceRoot":"","sources":["../../src/tools/project-health.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAY7B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,mBAAmB;;;;;;;;;;;;;;;;;EA+D5B"}
1
+ {"version":3,"file":"project-health.d.ts","sourceRoot":"","sources":["../../src/tools/project-health.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAY7B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,mBAAmB;;;;;;;;;;;;;;sBA4BW,MAAM;2BAAa,MAAM;iCAAmB,MAAM;;;;;;;EAsEzF"}
@@ -1,8 +1,10 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
1
2
  /**
2
3
  * project_health tool
3
4
  *
4
5
  * Get project health summary across all tracked projects.
5
6
  */
7
+ import { getLiveIntelligence } from "../live-singleton.js";
6
8
  export const projectHealthTool = {
7
9
  name: "project_health",
8
10
  description: `Get project health radar - dependency freshness, security exposure, ecosystem momentum, and community signals for your tracked projects.`,
@@ -34,17 +36,52 @@ export function executeProjectHealth(db, params) {
34
36
  const deps = rawDb
35
37
  .prepare("SELECT package_name, version, language, is_dev FROM project_dependencies WHERE project_path = ?")
36
38
  .all(proj.project_path);
37
- // Check for security-related source items mentioning these deps
39
+ // Security: use live OSV data if available, fall back to source_items pattern matching
38
40
  let securityIssues = 0;
39
- for (const dep of deps.slice(0, 20)) {
40
- const pattern = `%${dep.package_name}%`;
41
- const securityMentions = rawDb
42
- .prepare(`SELECT COUNT(*) as cnt FROM source_items
43
- WHERE (title LIKE ? OR content LIKE ?)
44
- AND (signal_type = 'security_alert' OR title LIKE '%CVE%' OR title LIKE '%vulnerability%')`)
45
- .get(pattern, pattern);
46
- if (securityMentions && securityMentions.cnt > 0)
47
- securityIssues++;
41
+ const depVulnDetails = [];
42
+ const liveIntel = getLiveIntelligence();
43
+ const vulnResult = liveIntel?.getVulnerabilities();
44
+ if (vulnResult && vulnResult.vulnerabilities.length > 0) {
45
+ // Use real vulnerability data from OSV
46
+ const vulnByPkg = new Map();
47
+ for (const v of vulnResult.vulnerabilities) {
48
+ const existing = vulnByPkg.get(v.package);
49
+ if (!existing) {
50
+ vulnByPkg.set(v.package, { count: 1, severity: v.severity });
51
+ }
52
+ else {
53
+ existing.count++;
54
+ const order = { critical: 4, high: 3, medium: 2, low: 1, unknown: 0 };
55
+ if ((order[v.severity] || 0) > (order[existing.severity] || 0)) {
56
+ existing.severity = v.severity;
57
+ }
58
+ }
59
+ }
60
+ for (const dep of deps) {
61
+ const vuln = vulnByPkg.get(dep.package_name);
62
+ if (vuln) {
63
+ securityIssues++;
64
+ depVulnDetails.push({ name: dep.package_name, vulnCount: vuln.count, highestSeverity: vuln.severity });
65
+ }
66
+ }
67
+ }
68
+ else {
69
+ // Fallback: search source_items for security mentions (only if table has expected columns)
70
+ try {
71
+ for (const dep of deps.slice(0, 20)) {
72
+ const pattern = `%${dep.package_name}%`;
73
+ const securityMentions = rawDb
74
+ .prepare(`SELECT COUNT(*) as cnt FROM source_items
75
+ WHERE (title LIKE ? OR content LIKE ?)
76
+ AND (title LIKE '%CVE%' OR title LIKE '%vulnerability%')`)
77
+ .get(pattern, pattern);
78
+ if (securityMentions && securityMentions.cnt > 0)
79
+ securityIssues++;
80
+ }
81
+ }
82
+ catch {
83
+ // source_items table may not exist or have different schema in standalone
84
+ }
48
85
  }
49
86
  const securityScore = deps.length > 0 ? 1.0 - securityIssues / deps.length : 1.0;
50
87
  return {
@@ -59,6 +96,8 @@ export function executeProjectHealth(db, params) {
59
96
  health: {
60
97
  security_score: Math.max(0, securityScore),
61
98
  security_issues: securityIssues,
99
+ vulnerable_packages: depVulnDetails.length > 0 ? depVulnDetails : undefined,
100
+ data_source: vulnResult ? "osv.dev" : "source_items",
62
101
  },
63
102
  };
64
103
  });
@@ -1 +1 @@
1
- {"version":3,"file":"project-health.js","sourceRoot":"","sources":["../../src/tools/project-health.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0IAA0I;IACvJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAClC,EAAkB,EAClB,MAA2B;IAE3B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE5B,gDAAgD;IAChD,IAAI,KAAK,GAAG;;yCAE2B,CAAC;IAExC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,IAAI,yBAAyB,CAAC;QACnC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,IAAI,wBAAwB,CAAC;IAElC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAwB,CAAC;IAEjF,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,oCAAoC;QACpC,MAAM,IAAI,GAAG,KAAK;aACf,OAAO,CACN,iGAAiG,CAClG;aACA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAoB,CAAC;QAE7C,gEAAgE;QAChE,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC;YACxC,MAAM,gBAAgB,GAAG,KAAK;iBAC3B,OAAO,CACN;;sGAE4F,CAC7F;iBACA,GAAG,CAAC,OAAO,EAAE,OAAO,CAAyB,CAAC;YACjD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,GAAG,GAAG,CAAC;gBAAE,cAAc,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAEjF,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY;YACzE,gBAAgB,EAAE,IAAI,CAAC,SAAS;YAChC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,EAAE,CAAC,CAAC,YAAY;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;YACH,MAAM,EAAE;gBACN,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC;gBAC1C,eAAe,EAAE,cAAc;aAChC;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,cAAc,EAAE,aAAa,CAAC,MAAM;QACpC,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,WAAW,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU;KAC3F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"project-health.js","sourceRoot":"","sources":["../../src/tools/project-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * record_agent_feedback tool
3
+ *
4
+ * Record whether content recommended by 4DA was useful in the agent's task.
5
+ * Feeds into PASIFA scoring system learning.
6
+ */
7
+ import type { FourDADatabase } from "../db.js";
8
+ import type { RecordAgentFeedbackParams, AgentFeedbackResult } from "../types.js";
9
+ /**
10
+ * Tool definition for MCP registration
11
+ */
12
+ export declare const recordAgentFeedbackTool: {
13
+ name: string;
14
+ description: string;
15
+ inputSchema: {
16
+ type: "object";
17
+ properties: {
18
+ item_ids: {
19
+ type: string;
20
+ items: {
21
+ type: string;
22
+ };
23
+ description: string;
24
+ };
25
+ outcome: {
26
+ type: string;
27
+ enum: string[];
28
+ description: string;
29
+ };
30
+ context: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ session_task: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ };
39
+ required: string[];
40
+ };
41
+ };
42
+ /**
43
+ * Execute the record_agent_feedback tool
44
+ */
45
+ export declare function executeRecordAgentFeedback(db: FourDADatabase, params: RecordAgentFeedbackParams): AgentFeedbackResult;
46
+ //# sourceMappingURL=record-agent-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-agent-feedback.d.ts","sourceRoot":"","sources":["../../src/tools/record-agent-feedback.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAwB,MAAM,aAAa,CAAC;AAExG;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnC,CAAC;AAIF;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,yBAAyB,GAChC,mBAAmB,CA0BrB"}