@4da/mcp-server 4.5.0 → 4.6.1

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 (257) hide show
  1. package/LICENSE +201 -21
  2. package/README.md +63 -83
  3. package/dist/auth.js +1 -1
  4. package/dist/auth.js.map +1 -1
  5. package/dist/db.d.ts +46 -1
  6. package/dist/db.d.ts.map +1 -1
  7. package/dist/db.js +156 -36
  8. package/dist/db.js.map +1 -1
  9. package/dist/doctor.js +1 -1
  10. package/dist/doctor.js.map +1 -1
  11. package/dist/http-transport.js +1 -1
  12. package/dist/http-transport.js.map +1 -1
  13. package/dist/index.d.ts +9 -14
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +49 -35
  16. package/dist/index.js.map +1 -1
  17. package/dist/live/cache.js +1 -1
  18. package/dist/live/cache.js.map +1 -1
  19. package/dist/live/crates-registry.js +1 -1
  20. package/dist/live/crates-registry.js.map +1 -1
  21. package/dist/live/go-registry.js +1 -1
  22. package/dist/live/go-registry.js.map +1 -1
  23. package/dist/live/hn-fetcher.js +1 -1
  24. package/dist/live/hn-fetcher.js.map +1 -1
  25. package/dist/live/http-utils.js +1 -1
  26. package/dist/live/http-utils.js.map +1 -1
  27. package/dist/live/index.d.ts +28 -0
  28. package/dist/live/index.d.ts.map +1 -1
  29. package/dist/live/index.js +63 -4
  30. package/dist/live/index.js.map +1 -1
  31. package/dist/live/npm-registry.js +1 -1
  32. package/dist/live/npm-registry.js.map +1 -1
  33. package/dist/live/osv-scanner.d.ts +4 -0
  34. package/dist/live/osv-scanner.d.ts.map +1 -1
  35. package/dist/live/osv-scanner.js +45 -40
  36. package/dist/live/osv-scanner.js.map +1 -1
  37. package/dist/live/pypi-registry.js +1 -1
  38. package/dist/live/pypi-registry.js.map +1 -1
  39. package/dist/live/rate-limiter.js +1 -1
  40. package/dist/live/rate-limiter.js.map +1 -1
  41. package/dist/live/semver-utils.js +1 -1
  42. package/dist/live/semver-utils.js.map +1 -1
  43. package/dist/live/types.d.ts +4 -0
  44. package/dist/live/types.d.ts.map +1 -1
  45. package/dist/live/types.js +1 -1
  46. package/dist/live/types.js.map +1 -1
  47. package/dist/live/version-resolver.d.ts +5 -0
  48. package/dist/live/version-resolver.d.ts.map +1 -1
  49. package/dist/live/version-resolver.js +64 -14
  50. package/dist/live/version-resolver.js.map +1 -1
  51. package/dist/live-singleton.js +1 -1
  52. package/dist/live-singleton.js.map +1 -1
  53. package/dist/llm.d.ts.map +1 -1
  54. package/dist/llm.js +13 -16
  55. package/dist/llm.js.map +1 -1
  56. package/dist/output-manager.js +1 -1
  57. package/dist/output-manager.js.map +1 -1
  58. package/dist/project-scanner.d.ts +5 -0
  59. package/dist/project-scanner.d.ts.map +1 -1
  60. package/dist/project-scanner.js +66 -10
  61. package/dist/project-scanner.js.map +1 -1
  62. package/dist/schema-registry.d.ts +4 -2
  63. package/dist/schema-registry.d.ts.map +1 -1
  64. package/dist/schema-registry.js +58 -238
  65. package/dist/schema-registry.js.map +1 -1
  66. package/dist/schemas/agent-memory.json +1 -1
  67. package/dist/schemas/decision-enforcement.json +1 -1
  68. package/dist/schemas/decision-memory.json +1 -1
  69. package/dist/schemas/dependency-health.json +1 -1
  70. package/dist/schemas/developer-dna.json +1 -1
  71. package/dist/schemas/ecosystem-pulse.json +1 -1
  72. package/dist/schemas/get-actionable-signals.json +1 -1
  73. package/dist/schemas/get-context.json +1 -1
  74. package/dist/schemas/get-relevant-content.json +1 -1
  75. package/dist/schemas/knowledge-gaps.json +1 -1
  76. package/dist/schemas/record-feedback.json +1 -1
  77. package/dist/schemas/upgrade-planner.json +1 -1
  78. package/dist/schemas/vulnerability-scan.json +2 -2
  79. package/dist/setup.js +1 -1
  80. package/dist/setup.js.map +1 -1
  81. package/dist/tool-dispatch.d.ts +1 -7
  82. package/dist/tool-dispatch.d.ts.map +1 -1
  83. package/dist/tool-dispatch.js +51 -50
  84. package/dist/tool-dispatch.js.map +1 -1
  85. package/dist/tools/agent-memory.js +1 -1
  86. package/dist/tools/agent-memory.js.map +1 -1
  87. package/dist/tools/decision-enforcement.js +1 -1
  88. package/dist/tools/decision-enforcement.js.map +1 -1
  89. package/dist/tools/decision-memory.d.ts +0 -2
  90. package/dist/tools/decision-memory.d.ts.map +1 -1
  91. package/dist/tools/decision-memory.js +1 -80
  92. package/dist/tools/decision-memory.js.map +1 -1
  93. package/dist/tools/dependency-health.js +1 -1
  94. package/dist/tools/dependency-health.js.map +1 -1
  95. package/dist/tools/developer-dna.js +1 -1
  96. package/dist/tools/developer-dna.js.map +1 -1
  97. package/dist/tools/ecosystem-pulse.js +1 -1
  98. package/dist/tools/ecosystem-pulse.js.map +1 -1
  99. package/dist/tools/get-actionable-signals.d.ts.map +1 -1
  100. package/dist/tools/get-actionable-signals.js +26 -1
  101. package/dist/tools/get-actionable-signals.js.map +1 -1
  102. package/dist/tools/get-context.js +1 -1
  103. package/dist/tools/get-context.js.map +1 -1
  104. package/dist/tools/get-relevant-content.js +1 -1
  105. package/dist/tools/get-relevant-content.js.map +1 -1
  106. package/dist/tools/index.d.ts +13 -42
  107. package/dist/tools/index.d.ts.map +1 -1
  108. package/dist/tools/index.js +19 -55
  109. package/dist/tools/index.js.map +1 -1
  110. package/dist/tools/knowledge-gaps.js +1 -1
  111. package/dist/tools/knowledge-gaps.js.map +1 -1
  112. package/dist/tools/record-feedback.js +1 -1
  113. package/dist/tools/record-feedback.js.map +1 -1
  114. package/dist/tools/upgrade-planner.js +1 -1
  115. package/dist/tools/upgrade-planner.js.map +1 -1
  116. package/dist/tools/vulnerability-scan.d.ts +7 -3
  117. package/dist/tools/vulnerability-scan.d.ts.map +1 -1
  118. package/dist/tools/vulnerability-scan.js +19 -6
  119. package/dist/tools/vulnerability-scan.js.map +1 -1
  120. package/dist/tools/what-should-i-know.d.ts +3 -12
  121. package/dist/tools/what-should-i-know.d.ts.map +1 -1
  122. package/dist/tools/what-should-i-know.js +11 -171
  123. package/dist/tools/what-should-i-know.js.map +1 -1
  124. package/dist/types.d.ts +4 -0
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js +1 -1
  127. package/dist/types.js.map +1 -1
  128. package/package.json +12 -8
  129. package/dist/schemas/agent-feedback-stats.json +0 -14
  130. package/dist/schemas/agent-session-brief.json +0 -25
  131. package/dist/schemas/attention-report.json +0 -13
  132. package/dist/schemas/autophagy-status.json +0 -13
  133. package/dist/schemas/compound-advantage.json +0 -14
  134. package/dist/schemas/config-validator.json +0 -18
  135. package/dist/schemas/context-analysis.json +0 -25
  136. package/dist/schemas/daily-briefing.json +0 -34
  137. package/dist/schemas/decision-windows.json +0 -22
  138. package/dist/schemas/delegation-score.json +0 -18
  139. package/dist/schemas/explain-relevance.json +0 -19
  140. package/dist/schemas/export-context.json +0 -17
  141. package/dist/schemas/llm-status.json +0 -13
  142. package/dist/schemas/preemption-feed.json +0 -18
  143. package/dist/schemas/project-health.json +0 -13
  144. package/dist/schemas/record-agent-feedback.json +0 -28
  145. package/dist/schemas/reverse-mentions.json +0 -13
  146. package/dist/schemas/score-autopsy.json +0 -30
  147. package/dist/schemas/semantic-shifts.json +0 -17
  148. package/dist/schemas/signal-chains.json +0 -19
  149. package/dist/schemas/source-health.json +0 -17
  150. package/dist/schemas/tech-radar.json +0 -23
  151. package/dist/schemas/topic-connections.json +0 -34
  152. package/dist/schemas/trend-analysis.json +0 -29
  153. package/dist/schemas/trust-summary.json +0 -13
  154. package/dist/tools/agent-feedback-stats.d.ts +0 -30
  155. package/dist/tools/agent-feedback-stats.d.ts.map +0 -1
  156. package/dist/tools/agent-feedback-stats.js +0 -41
  157. package/dist/tools/agent-feedback-stats.js.map +0 -1
  158. package/dist/tools/agent-session-brief.d.ts +0 -44
  159. package/dist/tools/agent-session-brief.d.ts.map +0 -1
  160. package/dist/tools/agent-session-brief.js +0 -179
  161. package/dist/tools/agent-session-brief.js.map +0 -1
  162. package/dist/tools/attention-report.d.ts +0 -40
  163. package/dist/tools/attention-report.d.ts.map +0 -1
  164. package/dist/tools/attention-report.js +0 -73
  165. package/dist/tools/attention-report.js.map +0 -1
  166. package/dist/tools/autophagy-status.d.ts +0 -25
  167. package/dist/tools/autophagy-status.d.ts.map +0 -1
  168. package/dist/tools/autophagy-status.js +0 -56
  169. package/dist/tools/autophagy-status.js.map +0 -1
  170. package/dist/tools/compound-advantage.d.ts +0 -30
  171. package/dist/tools/compound-advantage.d.ts.map +0 -1
  172. package/dist/tools/compound-advantage.js +0 -133
  173. package/dist/tools/compound-advantage.js.map +0 -1
  174. package/dist/tools/config-validator.d.ts +0 -59
  175. package/dist/tools/config-validator.d.ts.map +0 -1
  176. package/dist/tools/config-validator.js +0 -417
  177. package/dist/tools/config-validator.js.map +0 -1
  178. package/dist/tools/context-analysis.d.ts +0 -108
  179. package/dist/tools/context-analysis.d.ts.map +0 -1
  180. package/dist/tools/context-analysis.js +0 -301
  181. package/dist/tools/context-analysis.js.map +0 -1
  182. package/dist/tools/daily-briefing.d.ts +0 -103
  183. package/dist/tools/daily-briefing.d.ts.map +0 -1
  184. package/dist/tools/daily-briefing.js +0 -294
  185. package/dist/tools/daily-briefing.js.map +0 -1
  186. package/dist/tools/decision-windows.d.ts +0 -37
  187. package/dist/tools/decision-windows.d.ts.map +0 -1
  188. package/dist/tools/decision-windows.js +0 -67
  189. package/dist/tools/decision-windows.js.map +0 -1
  190. package/dist/tools/delegation-score.d.ts +0 -34
  191. package/dist/tools/delegation-score.d.ts.map +0 -1
  192. package/dist/tools/delegation-score.js +0 -260
  193. package/dist/tools/delegation-score.js.map +0 -1
  194. package/dist/tools/explain-relevance.d.ts +0 -36
  195. package/dist/tools/explain-relevance.d.ts.map +0 -1
  196. package/dist/tools/explain-relevance.js +0 -51
  197. package/dist/tools/explain-relevance.js.map +0 -1
  198. package/dist/tools/export-context.d.ts +0 -60
  199. package/dist/tools/export-context.d.ts.map +0 -1
  200. package/dist/tools/export-context.js +0 -179
  201. package/dist/tools/export-context.js.map +0 -1
  202. package/dist/tools/llm-status.d.ts +0 -45
  203. package/dist/tools/llm-status.d.ts.map +0 -1
  204. package/dist/tools/llm-status.js +0 -93
  205. package/dist/tools/llm-status.js.map +0 -1
  206. package/dist/tools/muse-context.d.ts +0 -195
  207. package/dist/tools/muse-context.d.ts.map +0 -1
  208. package/dist/tools/muse-context.js +0 -284
  209. package/dist/tools/muse-context.js.map +0 -1
  210. package/dist/tools/preemption-feed.d.ts +0 -55
  211. package/dist/tools/preemption-feed.d.ts.map +0 -1
  212. package/dist/tools/preemption-feed.js +0 -124
  213. package/dist/tools/preemption-feed.js.map +0 -1
  214. package/dist/tools/project-health.d.ts +0 -53
  215. package/dist/tools/project-health.d.ts.map +0 -1
  216. package/dist/tools/project-health.js +0 -122
  217. package/dist/tools/project-health.js.map +0 -1
  218. package/dist/tools/record-agent-feedback.d.ts +0 -46
  219. package/dist/tools/record-agent-feedback.d.ts.map +0 -1
  220. package/dist/tools/record-agent-feedback.js +0 -71
  221. package/dist/tools/record-agent-feedback.js.map +0 -1
  222. package/dist/tools/reverse-mentions.d.ts +0 -38
  223. package/dist/tools/reverse-mentions.d.ts.map +0 -1
  224. package/dist/tools/reverse-mentions.js +0 -75
  225. package/dist/tools/reverse-mentions.js.map +0 -1
  226. package/dist/tools/score-autopsy.d.ts +0 -93
  227. package/dist/tools/score-autopsy.d.ts.map +0 -1
  228. package/dist/tools/score-autopsy.js +0 -295
  229. package/dist/tools/score-autopsy.js.map +0 -1
  230. package/dist/tools/semantic-shifts.d.ts +0 -53
  231. package/dist/tools/semantic-shifts.d.ts.map +0 -1
  232. package/dist/tools/semantic-shifts.js +0 -74
  233. package/dist/tools/semantic-shifts.js.map +0 -1
  234. package/dist/tools/signal-chains.d.ts +0 -52
  235. package/dist/tools/signal-chains.d.ts.map +0 -1
  236. package/dist/tools/signal-chains.js +0 -63
  237. package/dist/tools/signal-chains.js.map +0 -1
  238. package/dist/tools/source-health.d.ts +0 -64
  239. package/dist/tools/source-health.d.ts.map +0 -1
  240. package/dist/tools/source-health.js +0 -205
  241. package/dist/tools/source-health.js.map +0 -1
  242. package/dist/tools/tech-radar.d.ts +0 -38
  243. package/dist/tools/tech-radar.d.ts.map +0 -1
  244. package/dist/tools/tech-radar.js +0 -249
  245. package/dist/tools/tech-radar.js.map +0 -1
  246. package/dist/tools/topic-connections.d.ts +0 -112
  247. package/dist/tools/topic-connections.d.ts.map +0 -1
  248. package/dist/tools/topic-connections.js +0 -319
  249. package/dist/tools/topic-connections.js.map +0 -1
  250. package/dist/tools/trend-analysis.d.ts +0 -105
  251. package/dist/tools/trend-analysis.d.ts.map +0 -1
  252. package/dist/tools/trend-analysis.js +0 -296
  253. package/dist/tools/trend-analysis.js.map +0 -1
  254. package/dist/tools/trust-summary.d.ts +0 -38
  255. package/dist/tools/trust-summary.d.ts.map +0 -1
  256. package/dist/tools/trust-summary.js +0 -89
  257. package/dist/tools/trust-summary.js.map +0 -1
@@ -1,124 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"preemption-feed.js","sourceRoot":"","sources":["../../src/tools/preemption-feed.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- /**
2
- * project_health tool
3
- *
4
- * Get project health summary across all tracked projects.
5
- */
6
- import type { FourDADatabase } from "../db.js";
7
- export interface ProjectHealthParams {
8
- project_path?: string;
9
- }
10
- export declare const projectHealthTool: {
11
- name: string;
12
- description: string;
13
- inputSchema: {
14
- type: "object";
15
- properties: {
16
- project_path: {
17
- type: string;
18
- description: string;
19
- };
20
- };
21
- };
22
- };
23
- export declare function executeProjectHealth(db: FourDADatabase, params: ProjectHealthParams): {
24
- projects: never[];
25
- total_projects: number;
26
- summary: string;
27
- error: string;
28
- } | {
29
- projects: {
30
- project_path: string;
31
- project_name: string;
32
- dependency_count: number;
33
- dependencies: {
34
- name: string;
35
- version: string;
36
- language: string;
37
- }[];
38
- health: {
39
- security_score: number;
40
- security_issues: number;
41
- vulnerable_packages: {
42
- name: string;
43
- vulnCount: number;
44
- highestSeverity: string;
45
- }[] | undefined;
46
- data_source: string;
47
- };
48
- }[];
49
- total_projects: number;
50
- summary: string;
51
- error?: undefined;
52
- };
53
- //# sourceMappingURL=project-health.d.ts.map
@@ -1 +0,0 @@
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;;;;;;;;;;;;;;;;;;;sBAuCW,MAAM;2BAAa,MAAM;iCAAmB,MAAM;;;;;;;;EAsEzF"}
@@ -1,122 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * project_health tool
4
- *
5
- * Get project health summary across all tracked projects.
6
- */
7
- import { getLiveIntelligence } from "../live-singleton.js";
8
- export const projectHealthTool = {
9
- name: "project_health",
10
- description: `Get project health radar - dependency freshness, security exposure, ecosystem momentum, and community signals for your tracked projects.`,
11
- inputSchema: {
12
- type: "object",
13
- properties: {
14
- project_path: {
15
- type: "string",
16
- description: "Specific project path to check. Omit for all projects.",
17
- },
18
- },
19
- },
20
- };
21
- export function executeProjectHealth(db, params) {
22
- const rawDb = db.getRawDb();
23
- // Get all projects with their dependency counts
24
- let query = `SELECT project_path, COUNT(*) as dep_count,
25
- GROUP_CONCAT(package_name, ', ') as packages
26
- FROM project_dependencies`;
27
- const queryParams = [];
28
- if (params.project_path) {
29
- query += " WHERE project_path = ?";
30
- queryParams.push(params.project_path);
31
- }
32
- query += " GROUP BY project_path";
33
- let projects;
34
- try {
35
- projects = rawDb.prepare(query).all(...queryParams);
36
- }
37
- catch (e) {
38
- const msg = e instanceof Error ? e.message : String(e);
39
- return {
40
- projects: [],
41
- total_projects: 0,
42
- summary: "Project health unavailable — database may need updating",
43
- error: msg,
44
- };
45
- }
46
- const healthReports = projects.map((proj) => {
47
- // Get dependencies for this project
48
- const deps = rawDb
49
- .prepare("SELECT package_name, version, language, is_dev FROM project_dependencies WHERE project_path = ?")
50
- .all(proj.project_path);
51
- // Security: use live OSV data if available, fall back to source_items pattern matching
52
- let securityIssues = 0;
53
- const depVulnDetails = [];
54
- const liveIntel = getLiveIntelligence();
55
- const vulnResult = liveIntel?.getVulnerabilities();
56
- if (vulnResult && vulnResult.vulnerabilities.length > 0) {
57
- // Use real vulnerability data from OSV
58
- const vulnByPkg = new Map();
59
- for (const v of vulnResult.vulnerabilities) {
60
- const existing = vulnByPkg.get(v.package);
61
- if (!existing) {
62
- vulnByPkg.set(v.package, { count: 1, severity: v.severity });
63
- }
64
- else {
65
- existing.count++;
66
- const order = { critical: 4, high: 3, medium: 2, low: 1, unknown: 0 };
67
- if ((order[v.severity] || 0) > (order[existing.severity] || 0)) {
68
- existing.severity = v.severity;
69
- }
70
- }
71
- }
72
- for (const dep of deps) {
73
- const vuln = vulnByPkg.get(dep.package_name);
74
- if (vuln) {
75
- securityIssues++;
76
- depVulnDetails.push({ name: dep.package_name, vulnCount: vuln.count, highestSeverity: vuln.severity });
77
- }
78
- }
79
- }
80
- else {
81
- // Fallback: search source_items for security mentions (only if table has expected columns)
82
- try {
83
- for (const dep of deps.slice(0, 20)) {
84
- const pattern = `%${dep.package_name}%`;
85
- const securityMentions = rawDb
86
- .prepare(`SELECT COUNT(*) as cnt FROM source_items
87
- WHERE (title LIKE ? OR content LIKE ?)
88
- AND (title LIKE '%CVE%' OR title LIKE '%vulnerability%')`)
89
- .get(pattern, pattern);
90
- if (securityMentions && securityMentions.cnt > 0)
91
- securityIssues++;
92
- }
93
- }
94
- catch {
95
- // source_items table may not exist or have different schema in standalone
96
- }
97
- }
98
- const securityScore = deps.length > 0 ? 1.0 - securityIssues / deps.length : 1.0;
99
- return {
100
- project_path: proj.project_path,
101
- project_name: proj.project_path.split(/[/\\]/).pop() || proj.project_path,
102
- dependency_count: proj.dep_count,
103
- dependencies: deps.slice(0, 20).map((d) => ({
104
- name: d.package_name,
105
- version: d.version,
106
- language: d.language,
107
- })),
108
- health: {
109
- security_score: Math.max(0, securityScore),
110
- security_issues: securityIssues,
111
- vulnerable_packages: depVulnDetails.length > 0 ? depVulnDetails : undefined,
112
- data_source: vulnResult ? "osv.dev" : "source_items",
113
- },
114
- };
115
- });
116
- return {
117
- projects: healthReports,
118
- total_projects: healthReports.length,
119
- summary: `${healthReports.length} project${healthReports.length !== 1 ? "s" : ""} tracked`,
120
- };
121
- }
122
- //# sourceMappingURL=project-health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-health.js","sourceRoot":"","sources":["../../src/tools/project-health.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,71 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * record_agent_feedback tool
4
- *
5
- * Record whether content recommended by 4DA was useful in the agent's task.
6
- * Feeds into PASIFA scoring system learning.
7
- */
8
- /**
9
- * Tool definition for MCP registration
10
- */
11
- export const recordAgentFeedbackTool = {
12
- name: "record_agent_feedback",
13
- description: `Record whether content recommended by 4DA was useful in the agent's task.
14
-
15
- Call this after using get_relevant_content results to help 4DA learn what's actually valuable for AI-assisted development.
16
-
17
- Outcomes:
18
- - "used": Agent/developer used the recommended content (strong positive signal)
19
- - "rejected": Content was not useful — outdated, irrelevant, or wrong context (negative signal)
20
- - "partially_used": Some value extracted but not directly applicable (weak positive signal)
21
-
22
- This feedback helps 4DA's PASIFA scoring system learn which content sources and topics are genuinely useful when agents recommend them.`,
23
- inputSchema: {
24
- type: "object",
25
- properties: {
26
- item_ids: {
27
- type: "array",
28
- items: { type: "string" },
29
- description: "Source item IDs that were recommended (from get_relevant_content results)",
30
- },
31
- outcome: {
32
- type: "string",
33
- enum: ["used", "rejected", "partially_used"],
34
- description: "Whether the agent/developer used the recommended content",
35
- },
36
- context: {
37
- type: "string",
38
- description: "Brief context about why (e.g., 'recommended to developer, they found it relevant' or 'content was outdated')",
39
- },
40
- session_task: {
41
- type: "string",
42
- description: "What task the agent was working on when it used this content",
43
- },
44
- },
45
- required: ["item_ids", "outcome"],
46
- },
47
- };
48
- const validOutcomes = ["used", "rejected", "partially_used"];
49
- /**
50
- * Execute the record_agent_feedback tool
51
- */
52
- export function executeRecordAgentFeedback(db, params) {
53
- if (!params.item_ids || !Array.isArray(params.item_ids) || params.item_ids.length === 0) {
54
- return {
55
- success: false,
56
- message: "item_ids must be a non-empty array of item ID strings",
57
- recorded_count: 0,
58
- };
59
- }
60
- if (!params.outcome || !validOutcomes.includes(params.outcome)) {
61
- return {
62
- success: false,
63
- message: `Invalid outcome: ${params.outcome}. Valid outcomes: ${validOutcomes.join(", ")}`,
64
- recorded_count: 0,
65
- };
66
- }
67
- // Normalize item IDs to strings
68
- const itemIds = params.item_ids.map((id) => String(id));
69
- return db.recordAgentFeedback(itemIds, params.outcome, params.context, params.session_task);
70
- }
71
- //# sourceMappingURL=record-agent-feedback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"record-agent-feedback.js","sourceRoot":"","sources":["../../src/tools/record-agent-feedback.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE;;;;;;;;;wIASyH;IACtI,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,2EAA2E;aACzF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC;gBAC5C,WAAW,EAAE,0DAA0D;aACxE;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8GAA8G;aACjH;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;KAClC;CACF,CAAC;AAEF,MAAM,aAAa,GAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAErF;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,EAAkB,EAClB,MAAiC;IAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,uDAAuD;YAChE,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,oBAAoB,MAAM,CAAC,OAAO,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1F,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD,OAAO,EAAE,CAAC,mBAAmB,CAC3B,OAAO,EACP,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,YAAY,CACpB,CAAC;AACJ,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * reverse_mentions tool
3
- *
4
- * Detect when your projects/packages are mentioned in sources.
5
- */
6
- import type { FourDADatabase } from "../db.js";
7
- export interface ReverseMentionsParams {
8
- limit?: number;
9
- }
10
- export declare const reverseMentionsTool: {
11
- name: string;
12
- description: string;
13
- inputSchema: {
14
- type: "object";
15
- properties: {
16
- limit: {
17
- type: string;
18
- description: string;
19
- default: number;
20
- };
21
- };
22
- };
23
- };
24
- export declare function executeReverseMentions(db: FourDADatabase, params: ReverseMentionsParams): {
25
- mentions: {
26
- source_item_id: number;
27
- title: string;
28
- url: string;
29
- source_type: string;
30
- mentioned_project: string;
31
- mention_context: string;
32
- discovered_at: string;
33
- }[];
34
- total: number;
35
- tracked_projects: string[];
36
- summary: string;
37
- };
38
- //# sourceMappingURL=reverse-mentions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reverse-mentions.d.ts","sourceRoot":"","sources":["../../src/tools/reverse-mentions.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;CAa/B,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,qBAAqB;;;;;;;;;;;;;EA0D9B"}
@@ -1,75 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * reverse_mentions tool
4
- *
5
- * Detect when your projects/packages are mentioned in sources.
6
- */
7
- export const reverseMentionsTool = {
8
- name: "reverse_mentions",
9
- description: `Detect when your projects or packages are mentioned in sources. Finds discussions about your work in HN, Reddit, etc.`,
10
- inputSchema: {
11
- type: "object",
12
- properties: {
13
- limit: {
14
- type: "number",
15
- description: "Maximum mentions to return. Default: 20",
16
- default: 20,
17
- },
18
- },
19
- },
20
- };
21
- export function executeReverseMentions(db, params) {
22
- const rawDb = db.getRawDb();
23
- const limit = params.limit || 20;
24
- // Get project identifiers from item_relationships
25
- let mentions = [];
26
- try {
27
- mentions = rawDb
28
- .prepare(`SELECT ir.source_item_id, ir.related_item_id, ir.metadata, ir.created_at,
29
- si.title, si.url, si.source_type
30
- FROM item_relationships ir
31
- JOIN source_items si ON ir.source_item_id = si.id
32
- WHERE ir.relationship_type = 'mentions_project'
33
- ORDER BY ir.created_at DESC
34
- LIMIT ?`)
35
- .all(limit);
36
- }
37
- catch {
38
- return {
39
- mentions: [],
40
- total: 0,
41
- tracked_projects: [],
42
- summary: "Reverse mentions unavailable — item_relationships table not present in this database.",
43
- };
44
- }
45
- const results = mentions.map((m) => {
46
- const metadata = m.metadata ? JSON.parse(m.metadata) : {};
47
- return {
48
- source_item_id: m.source_item_id,
49
- title: m.title,
50
- url: m.url,
51
- source_type: m.source_type,
52
- mentioned_project: metadata.project_name || "unknown",
53
- mention_context: metadata.context || "",
54
- discovered_at: m.created_at,
55
- };
56
- });
57
- // Also check for mentions via text search of project names from dependencies
58
- let projectNames = [];
59
- try {
60
- projectNames = rawDb
61
- .prepare("SELECT DISTINCT package_name FROM project_dependencies LIMIT 10")
62
- .all()
63
- .map((r) => r.package_name);
64
- }
65
- catch {
66
- // project_dependencies table not present
67
- }
68
- return {
69
- mentions: results,
70
- total: results.length,
71
- tracked_projects: projectNames,
72
- summary: `${results.length} mention${results.length !== 1 ? "s" : ""} found across ${projectNames.length} tracked projects`,
73
- };
74
- }
75
- //# sourceMappingURL=reverse-mentions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reverse-mentions.js","sourceRoot":"","sources":["../../src/tools/reverse-mentions.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;GAIG;AASH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,uHAAuH;IACpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;gBACtD,OAAO,EAAE,EAAE;aACZ;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CACpC,EAAkB,EAClB,MAA6B;IAE7B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAEjC,kDAAkD;IAClD,IAAI,QAAQ,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,QAAQ,GAAG,KAAK;aACb,OAAO,CACN;;;;;;iBAMS,CACV;aACA,GAAG,CAAC,KAAK,CAAiB,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,CAAC;YACR,gBAAgB,EAAE,EAAE;YACpB,OAAO,EAAE,uFAAuF;SACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAgD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,OAAO;YACL,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,iBAAiB,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;YACrD,eAAe,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;YACvC,aAAa,EAAE,CAAC,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,YAAY,GAAI,KAAK;aAClB,OAAO,CAAC,iEAAiE,CAAC;aAC1E,GAAG,EAAuB;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,gBAAgB,EAAE,YAAY;QAC9B,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,YAAY,CAAC,MAAM,mBAAmB;KAC5H,CAAC;AACJ,CAAC"}
@@ -1,93 +0,0 @@
1
- /**
2
- * Score Autopsy Tool
3
- *
4
- * Deep forensic analysis of why content scored the way it did.
5
- * This is a SUPERPOWER - it reveals the complete scoring breakdown.
6
- *
7
- * With synthesize=true, uses LLM to explain whether the score makes sense.
8
- */
9
- import type { FourDADatabase } from "../db.js";
10
- import { type CompactResult, type ScoreAutopsyKeyData } from "../output-manager.js";
11
- export declare const scoreAutopsyTool: {
12
- name: string;
13
- description: string;
14
- inputSchema: {
15
- type: string;
16
- properties: {
17
- item_id: {
18
- type: string;
19
- description: string;
20
- };
21
- source_type: {
22
- type: string;
23
- description: string;
24
- };
25
- compare_count: {
26
- type: string;
27
- description: string;
28
- };
29
- synthesize: {
30
- type: string;
31
- description: string;
32
- };
33
- compact: {
34
- type: string;
35
- description: string;
36
- };
37
- };
38
- required: string[];
39
- };
40
- };
41
- export interface ScoreAutopsyParams {
42
- item_id: number;
43
- source_type: string;
44
- compare_count?: number;
45
- synthesize?: boolean;
46
- compact?: boolean;
47
- }
48
- interface ScoreComponent {
49
- name: string;
50
- raw_value: number;
51
- weight: number;
52
- contribution: number;
53
- explanation: string;
54
- }
55
- interface SimilarItem {
56
- id: number;
57
- title: string;
58
- score: number;
59
- score_difference: number;
60
- key_difference: string;
61
- }
62
- interface AutopsyResult {
63
- item: {
64
- id: number;
65
- title: string;
66
- url: string | null;
67
- source_type: string;
68
- created_at: string;
69
- age_hours: number;
70
- };
71
- final_score: number;
72
- components: ScoreComponent[];
73
- matching_context: {
74
- interests: string[];
75
- tech_stack: string[];
76
- active_topics: string[];
77
- learned_affinities: string[];
78
- exclusions_hit: string[];
79
- };
80
- similar_items: SimilarItem[];
81
- recommendations: string[];
82
- narrative: string;
83
- ai_analysis?: {
84
- verdict: string;
85
- score_assessment: "accurate" | "too_high" | "too_low" | "uncertain";
86
- reasoning: string;
87
- suggested_action: string;
88
- model_used: string;
89
- };
90
- }
91
- export declare function executeScoreAutopsy(db: FourDADatabase, params: ScoreAutopsyParams): Promise<AutopsyResult | CompactResult<ScoreAutopsyKeyData>>;
92
- export {};
93
- //# sourceMappingURL=score-autopsy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"score-autopsy.d.ts","sourceRoot":"","sources":["../../src/tools/score-autopsy.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE/G,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC5B,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;QACpE,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC,CA4L7D"}