@4da/mcp-server 3.2.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -62
  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 +100 -2
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +707 -1
  10. package/dist/db.js.map +1 -1
  11. package/dist/doctor.d.ts +15 -0
  12. package/dist/doctor.d.ts.map +1 -0
  13. package/dist/doctor.js +124 -0
  14. package/dist/doctor.js.map +1 -0
  15. package/dist/http-transport.d.ts +25 -0
  16. package/dist/http-transport.d.ts.map +1 -0
  17. package/dist/http-transport.js +143 -0
  18. package/dist/http-transport.js.map +1 -0
  19. package/dist/index.d.ts +15 -18
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +195 -250
  22. package/dist/index.js.map +1 -1
  23. package/dist/live/cache.d.ts +16 -0
  24. package/dist/live/cache.d.ts.map +1 -0
  25. package/dist/live/cache.js +61 -0
  26. package/dist/live/cache.js.map +1 -0
  27. package/dist/live/hn-fetcher.d.ts +19 -0
  28. package/dist/live/hn-fetcher.d.ts.map +1 -0
  29. package/dist/live/hn-fetcher.js +123 -0
  30. package/dist/live/hn-fetcher.js.map +1 -0
  31. package/dist/live/index.d.ts +55 -0
  32. package/dist/live/index.d.ts.map +1 -0
  33. package/dist/live/index.js +131 -0
  34. package/dist/live/index.js.map +1 -0
  35. package/dist/live/osv-scanner.d.ts +19 -0
  36. package/dist/live/osv-scanner.d.ts.map +1 -0
  37. package/dist/live/osv-scanner.js +197 -0
  38. package/dist/live/osv-scanner.js.map +1 -0
  39. package/dist/live/rate-limiter.d.ts +19 -0
  40. package/dist/live/rate-limiter.d.ts.map +1 -0
  41. package/dist/live/rate-limiter.js +52 -0
  42. package/dist/live/rate-limiter.js.map +1 -0
  43. package/dist/live/types.d.ts +89 -0
  44. package/dist/live/types.d.ts.map +1 -0
  45. package/dist/live/types.js +3 -0
  46. package/dist/live/types.js.map +1 -0
  47. package/dist/live/version-resolver.d.ts +11 -0
  48. package/dist/live/version-resolver.d.ts.map +1 -0
  49. package/dist/live/version-resolver.js +321 -0
  50. package/dist/live/version-resolver.js.map +1 -0
  51. package/dist/live-singleton.d.ts +9 -0
  52. package/dist/live-singleton.d.ts.map +1 -0
  53. package/dist/live-singleton.js +14 -0
  54. package/dist/live-singleton.js.map +1 -0
  55. package/dist/llm.d.ts +20 -2
  56. package/dist/llm.d.ts.map +1 -1
  57. package/dist/llm.js +80 -22
  58. package/dist/llm.js.map +1 -1
  59. package/dist/output-manager.d.ts.map +1 -1
  60. package/dist/output-manager.js +1 -0
  61. package/dist/output-manager.js.map +1 -1
  62. package/dist/project-scanner.d.ts +27 -0
  63. package/dist/project-scanner.d.ts.map +1 -0
  64. package/dist/project-scanner.js +366 -0
  65. package/dist/project-scanner.js.map +1 -0
  66. package/dist/schema-registry.d.ts +31 -13
  67. package/dist/schema-registry.d.ts.map +1 -1
  68. package/dist/schema-registry.js +208 -32
  69. package/dist/schema-registry.js.map +1 -1
  70. package/dist/schemas/agent-feedback-stats.json +14 -0
  71. package/dist/schemas/agent-memory.json +49 -0
  72. package/dist/schemas/agent-session-brief.json +25 -0
  73. package/dist/schemas/attention-report.json +13 -0
  74. package/dist/schemas/autophagy-status.json +13 -0
  75. package/dist/schemas/compound-advantage.json +14 -0
  76. package/dist/schemas/decision-enforcement.json +22 -0
  77. package/dist/schemas/decision-memory.json +54 -0
  78. package/dist/schemas/decision-windows.json +22 -0
  79. package/dist/schemas/delegation-score.json +18 -0
  80. package/dist/schemas/developer-dna.json +219 -0
  81. package/dist/schemas/export-context.json +17 -0
  82. package/dist/schemas/knowledge-gaps.json +14 -0
  83. package/dist/schemas/preemption-feed.json +18 -0
  84. package/dist/schemas/project-health.json +13 -0
  85. package/dist/schemas/record-agent-feedback.json +28 -0
  86. package/dist/schemas/reverse-mentions.json +13 -0
  87. package/dist/schemas/semantic-shifts.json +17 -0
  88. package/dist/schemas/signal-chains.json +19 -0
  89. package/dist/schemas/tech-radar.json +23 -0
  90. package/dist/schemas/trust-summary.json +13 -0
  91. package/dist/schemas/vulnerability-scan.json +26 -0
  92. package/dist/schemas/what-should-i-know.json +19 -0
  93. package/dist/setup.d.ts +18 -0
  94. package/dist/setup.d.ts.map +1 -0
  95. package/dist/setup.js +171 -0
  96. package/dist/setup.js.map +1 -0
  97. package/dist/tool-dispatch.d.ts +33 -0
  98. package/dist/tool-dispatch.d.ts.map +1 -0
  99. package/dist/tool-dispatch.js +87 -0
  100. package/dist/tool-dispatch.js.map +1 -0
  101. package/dist/tools/agent-feedback-stats.d.ts +30 -0
  102. package/dist/tools/agent-feedback-stats.d.ts.map +1 -0
  103. package/dist/tools/agent-feedback-stats.js +41 -0
  104. package/dist/tools/agent-feedback-stats.js.map +1 -0
  105. package/dist/tools/agent-memory.d.ts +94 -0
  106. package/dist/tools/agent-memory.d.ts.map +1 -0
  107. package/dist/tools/agent-memory.js +262 -0
  108. package/dist/tools/agent-memory.js.map +1 -0
  109. package/dist/tools/agent-session-brief.d.ts +44 -0
  110. package/dist/tools/agent-session-brief.d.ts.map +1 -0
  111. package/dist/tools/agent-session-brief.js +179 -0
  112. package/dist/tools/agent-session-brief.js.map +1 -0
  113. package/dist/tools/attention-report.d.ts +6 -5
  114. package/dist/tools/attention-report.d.ts.map +1 -1
  115. package/dist/tools/attention-report.js +1 -0
  116. package/dist/tools/attention-report.js.map +1 -1
  117. package/dist/tools/autophagy-status.d.ts +25 -0
  118. package/dist/tools/autophagy-status.d.ts.map +1 -0
  119. package/dist/tools/autophagy-status.js +56 -0
  120. package/dist/tools/autophagy-status.js.map +1 -0
  121. package/dist/tools/compound-advantage.d.ts +30 -0
  122. package/dist/tools/compound-advantage.d.ts.map +1 -0
  123. package/dist/tools/compound-advantage.js +133 -0
  124. package/dist/tools/compound-advantage.js.map +1 -0
  125. package/dist/tools/config-validator.d.ts.map +1 -1
  126. package/dist/tools/config-validator.js +31 -0
  127. package/dist/tools/config-validator.js.map +1 -1
  128. package/dist/tools/context-analysis.d.ts.map +1 -1
  129. package/dist/tools/context-analysis.js +1 -0
  130. package/dist/tools/context-analysis.js.map +1 -1
  131. package/dist/tools/daily-briefing.d.ts.map +1 -1
  132. package/dist/tools/daily-briefing.js +17 -1
  133. package/dist/tools/daily-briefing.js.map +1 -1
  134. package/dist/tools/decision-enforcement.d.ts +59 -0
  135. package/dist/tools/decision-enforcement.d.ts.map +1 -0
  136. package/dist/tools/decision-enforcement.js +185 -0
  137. package/dist/tools/decision-enforcement.js.map +1 -0
  138. package/dist/tools/decision-memory.d.ts +132 -0
  139. package/dist/tools/decision-memory.d.ts.map +1 -0
  140. package/dist/tools/decision-memory.js +345 -0
  141. package/dist/tools/decision-memory.js.map +1 -0
  142. package/dist/tools/decision-windows.d.ts +37 -0
  143. package/dist/tools/decision-windows.d.ts.map +1 -0
  144. package/dist/tools/decision-windows.js +67 -0
  145. package/dist/tools/decision-windows.js.map +1 -0
  146. package/dist/tools/delegation-score.d.ts +34 -0
  147. package/dist/tools/delegation-score.d.ts.map +1 -0
  148. package/dist/tools/delegation-score.js +251 -0
  149. package/dist/tools/delegation-score.js.map +1 -0
  150. package/dist/tools/developer-dna.d.ts +79 -0
  151. package/dist/tools/developer-dna.d.ts.map +1 -0
  152. package/dist/tools/developer-dna.js +378 -0
  153. package/dist/tools/developer-dna.js.map +1 -0
  154. package/dist/tools/explain-relevance.d.ts.map +1 -1
  155. package/dist/tools/explain-relevance.js +1 -0
  156. package/dist/tools/explain-relevance.js.map +1 -1
  157. package/dist/tools/export-context.d.ts +23 -6
  158. package/dist/tools/export-context.d.ts.map +1 -1
  159. package/dist/tools/export-context.js +58 -14
  160. package/dist/tools/export-context.js.map +1 -1
  161. package/dist/tools/get-actionable-signals.d.ts.map +1 -1
  162. package/dist/tools/get-actionable-signals.js +60 -9
  163. package/dist/tools/get-actionable-signals.js.map +1 -1
  164. package/dist/tools/get-context.d.ts.map +1 -1
  165. package/dist/tools/get-context.js +1 -0
  166. package/dist/tools/get-context.js.map +1 -1
  167. package/dist/tools/get-relevant-content.d.ts.map +1 -1
  168. package/dist/tools/get-relevant-content.js +3 -0
  169. package/dist/tools/get-relevant-content.js.map +1 -1
  170. package/dist/tools/index.d.ts +26 -16
  171. package/dist/tools/index.d.ts.map +1 -1
  172. package/dist/tools/index.js +35 -16
  173. package/dist/tools/index.js.map +1 -1
  174. package/dist/tools/knowledge-gaps.d.ts +11 -1
  175. package/dist/tools/knowledge-gaps.d.ts.map +1 -1
  176. package/dist/tools/knowledge-gaps.js +9 -3
  177. package/dist/tools/knowledge-gaps.js.map +1 -1
  178. package/dist/tools/llm-status.d.ts.map +1 -1
  179. package/dist/tools/llm-status.js +1 -0
  180. package/dist/tools/llm-status.js.map +1 -1
  181. package/dist/tools/muse-context.d.ts +195 -0
  182. package/dist/tools/muse-context.d.ts.map +1 -0
  183. package/dist/tools/muse-context.js +284 -0
  184. package/dist/tools/muse-context.js.map +1 -0
  185. package/dist/tools/preemption-feed.d.ts +55 -0
  186. package/dist/tools/preemption-feed.d.ts.map +1 -0
  187. package/dist/tools/preemption-feed.js +124 -0
  188. package/dist/tools/preemption-feed.js.map +1 -0
  189. package/dist/tools/project-health.d.ts +12 -6
  190. package/dist/tools/project-health.d.ts.map +1 -1
  191. package/dist/tools/project-health.js +49 -10
  192. package/dist/tools/project-health.js.map +1 -1
  193. package/dist/tools/record-agent-feedback.d.ts +46 -0
  194. package/dist/tools/record-agent-feedback.d.ts.map +1 -0
  195. package/dist/tools/record-agent-feedback.js +71 -0
  196. package/dist/tools/record-agent-feedback.js.map +1 -0
  197. package/dist/tools/record-feedback.d.ts.map +1 -1
  198. package/dist/tools/record-feedback.js +1 -0
  199. package/dist/tools/record-feedback.js.map +1 -1
  200. package/dist/tools/reverse-mentions.d.ts +8 -8
  201. package/dist/tools/reverse-mentions.d.ts.map +1 -1
  202. package/dist/tools/reverse-mentions.js +1 -0
  203. package/dist/tools/reverse-mentions.js.map +1 -1
  204. package/dist/tools/score-autopsy.d.ts.map +1 -1
  205. package/dist/tools/score-autopsy.js +1 -0
  206. package/dist/tools/score-autopsy.js.map +1 -1
  207. package/dist/tools/semantic-shifts.d.ts +17 -1
  208. package/dist/tools/semantic-shifts.d.ts.map +1 -1
  209. package/dist/tools/semantic-shifts.js +1 -0
  210. package/dist/tools/semantic-shifts.js.map +1 -1
  211. package/dist/tools/signal-chains.d.ts +14 -7
  212. package/dist/tools/signal-chains.d.ts.map +1 -1
  213. package/dist/tools/signal-chains.js +5 -2
  214. package/dist/tools/signal-chains.js.map +1 -1
  215. package/dist/tools/source-health.d.ts.map +1 -1
  216. package/dist/tools/source-health.js +1 -0
  217. package/dist/tools/source-health.js.map +1 -1
  218. package/dist/tools/tech-radar.d.ts +38 -0
  219. package/dist/tools/tech-radar.d.ts.map +1 -0
  220. package/dist/tools/tech-radar.js +249 -0
  221. package/dist/tools/tech-radar.js.map +1 -0
  222. package/dist/tools/topic-connections.d.ts.map +1 -1
  223. package/dist/tools/topic-connections.js +1 -0
  224. package/dist/tools/topic-connections.js.map +1 -1
  225. package/dist/tools/trend-analysis.d.ts.map +1 -1
  226. package/dist/tools/trend-analysis.js +1 -0
  227. package/dist/tools/trend-analysis.js.map +1 -1
  228. package/dist/tools/trust-summary.d.ts +38 -0
  229. package/dist/tools/trust-summary.d.ts.map +1 -0
  230. package/dist/tools/trust-summary.js +89 -0
  231. package/dist/tools/trust-summary.js.map +1 -0
  232. package/dist/tools/vulnerability-scan.d.ts +89 -0
  233. package/dist/tools/vulnerability-scan.d.ts.map +1 -0
  234. package/dist/tools/vulnerability-scan.js +127 -0
  235. package/dist/tools/vulnerability-scan.js.map +1 -0
  236. package/dist/tools/what-should-i-know.d.ts +79 -0
  237. package/dist/tools/what-should-i-know.d.ts.map +1 -0
  238. package/dist/tools/what-should-i-know.js +376 -0
  239. package/dist/tools/what-should-i-know.js.map +1 -0
  240. package/dist/types.d.ts +221 -0
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/types.js +1 -0
  243. package/dist/types.js.map +1 -1
  244. package/package.json +53 -24
@@ -0,0 +1,366 @@
1
+ // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ /**
3
+ * Project Scanner for MCP Standalone Mode
4
+ *
5
+ * Lightweight project scanner that detects languages, frameworks,
6
+ * dependencies, and topics from the current working directory.
7
+ * Runs on startup when no existing 4DA database is found.
8
+ *
9
+ * Design goals:
10
+ * - Fast (<2 seconds) — only checks immediate directory
11
+ * - No recursion — reads manifest files at project root
12
+ * - No dependencies — uses only Node.js built-ins
13
+ */
14
+ import * as fs from "node:fs";
15
+ import * as path from "node:path";
16
+ // =============================================================================
17
+ // Framework Detection Maps
18
+ // =============================================================================
19
+ /** npm package name -> framework label */
20
+ const NPM_FRAMEWORK_MAP = {
21
+ react: "react",
22
+ "react-dom": "react",
23
+ vue: "vue",
24
+ next: "next.js",
25
+ nuxt: "nuxt",
26
+ "@angular/core": "angular",
27
+ svelte: "svelte",
28
+ "@sveltejs/kit": "sveltekit",
29
+ astro: "astro",
30
+ remix: "remix",
31
+ express: "express",
32
+ fastify: "fastify",
33
+ hono: "hono",
34
+ elysia: "elysia",
35
+ "react-native": "react-native",
36
+ expo: "expo",
37
+ electron: "electron",
38
+ tauri: "tauri",
39
+ "@tauri-apps/api": "tauri",
40
+ "@tauri-apps/cli": "tauri",
41
+ };
42
+ /** npm devDependency name -> language/tool */
43
+ const NPM_DEVTOOL_MAP = {
44
+ typescript: "typescript",
45
+ vite: "vite",
46
+ vitest: "vitest",
47
+ jest: "jest",
48
+ webpack: "webpack",
49
+ esbuild: "esbuild",
50
+ rollup: "rollup",
51
+ tailwindcss: "tailwind",
52
+ "@tailwindcss/vite": "tailwind",
53
+ prisma: "prisma",
54
+ drizzle: "drizzle",
55
+ };
56
+ /** Rust crate name -> framework label */
57
+ const RUST_FRAMEWORK_MAP = {
58
+ tauri: "tauri",
59
+ "tauri-build": "tauri",
60
+ actix: "actix",
61
+ "actix-web": "actix",
62
+ axum: "axum",
63
+ rocket: "rocket",
64
+ warp: "warp",
65
+ tokio: "tokio",
66
+ serde: "serde",
67
+ diesel: "diesel",
68
+ sqlx: "sqlx",
69
+ rusqlite: "sqlite",
70
+ reqwest: "reqwest",
71
+ tonic: "grpc",
72
+ leptos: "leptos",
73
+ yew: "yew",
74
+ dioxus: "dioxus",
75
+ };
76
+ // =============================================================================
77
+ // Scanner
78
+ // =============================================================================
79
+ /**
80
+ * Scan a directory for project context.
81
+ * Only reads manifest files at the root level — no recursion.
82
+ */
83
+ export function scanCurrentProject(cwd) {
84
+ const result = {
85
+ languages: [],
86
+ frameworks: [],
87
+ dependencies: [],
88
+ devDependencies: [],
89
+ topics: [],
90
+ projectName: path.basename(cwd),
91
+ projectPath: cwd,
92
+ };
93
+ const langSet = new Set();
94
+ const fwSet = new Set();
95
+ // -------------------------------------------------------------------------
96
+ // 1. package.json (JavaScript / TypeScript ecosystem)
97
+ // -------------------------------------------------------------------------
98
+ const pkgPath = path.join(cwd, "package.json");
99
+ if (fs.existsSync(pkgPath)) {
100
+ try {
101
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
102
+ langSet.add("javascript");
103
+ if (pkg.name) {
104
+ result.projectName = pkg.name;
105
+ }
106
+ // Production dependencies
107
+ if (pkg.dependencies && typeof pkg.dependencies === "object") {
108
+ const depNames = Object.keys(pkg.dependencies);
109
+ result.dependencies.push(...depNames);
110
+ for (const dep of depNames) {
111
+ if (dep in NPM_FRAMEWORK_MAP) {
112
+ fwSet.add(NPM_FRAMEWORK_MAP[dep]);
113
+ }
114
+ }
115
+ }
116
+ // Dev dependencies
117
+ if (pkg.devDependencies && typeof pkg.devDependencies === "object") {
118
+ const devDepNames = Object.keys(pkg.devDependencies);
119
+ result.devDependencies.push(...devDepNames);
120
+ for (const dep of devDepNames) {
121
+ if (dep in NPM_DEVTOOL_MAP) {
122
+ const tool = NPM_DEVTOOL_MAP[dep];
123
+ if (tool === "typescript") {
124
+ langSet.add("typescript");
125
+ }
126
+ else {
127
+ fwSet.add(tool);
128
+ }
129
+ }
130
+ // Also check frameworks in devDependencies (common for meta-frameworks)
131
+ if (dep in NPM_FRAMEWORK_MAP) {
132
+ fwSet.add(NPM_FRAMEWORK_MAP[dep]);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ catch {
138
+ // Malformed package.json — skip
139
+ }
140
+ }
141
+ // -------------------------------------------------------------------------
142
+ // 2. Cargo.toml (Rust ecosystem)
143
+ // -------------------------------------------------------------------------
144
+ const cargoPath = path.join(cwd, "Cargo.toml");
145
+ if (fs.existsSync(cargoPath)) {
146
+ try {
147
+ const content = fs.readFileSync(cargoPath, "utf-8");
148
+ langSet.add("rust");
149
+ // Extract project name from [package] section
150
+ const nameMatch = content.match(/^\[package\]\s*\n(?:.*\n)*?name\s*=\s*"([^"]+)"/m);
151
+ if (nameMatch) {
152
+ result.projectName = nameMatch[1];
153
+ }
154
+ // Parse [dependencies] and [dev-dependencies] sections
155
+ parseTOMLDependencies(content, "[dependencies]", result.dependencies, fwSet, RUST_FRAMEWORK_MAP);
156
+ parseTOMLDependencies(content, "[dev-dependencies]", result.devDependencies, fwSet, RUST_FRAMEWORK_MAP);
157
+ parseTOMLDependencies(content, "[build-dependencies]", result.devDependencies, fwSet, RUST_FRAMEWORK_MAP);
158
+ }
159
+ catch {
160
+ // Malformed Cargo.toml — skip
161
+ }
162
+ }
163
+ // -------------------------------------------------------------------------
164
+ // 3. pyproject.toml / requirements.txt (Python ecosystem)
165
+ // -------------------------------------------------------------------------
166
+ const pyprojectPath = path.join(cwd, "pyproject.toml");
167
+ const requirementsPath = path.join(cwd, "requirements.txt");
168
+ const setupPyPath = path.join(cwd, "setup.py");
169
+ if (fs.existsSync(pyprojectPath)) {
170
+ langSet.add("python");
171
+ try {
172
+ const content = fs.readFileSync(pyprojectPath, "utf-8");
173
+ // Extract dependencies from pyproject.toml
174
+ const depsMatch = content.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
175
+ if (depsMatch) {
176
+ const deps = depsMatch[1].match(/"([^">=<!\s]+)/g);
177
+ if (deps) {
178
+ for (const dep of deps) {
179
+ const name = dep.replace(/^"/, "");
180
+ result.dependencies.push(name);
181
+ detectPythonFramework(name, fwSet);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ catch {
187
+ // Skip
188
+ }
189
+ }
190
+ else if (fs.existsSync(requirementsPath)) {
191
+ langSet.add("python");
192
+ try {
193
+ const content = fs.readFileSync(requirementsPath, "utf-8");
194
+ for (const line of content.split("\n")) {
195
+ const trimmed = line.trim();
196
+ if (trimmed && !trimmed.startsWith("#") && !trimmed.startsWith("-")) {
197
+ const name = trimmed.split(/[>=<!\[]/)[0].trim();
198
+ if (name) {
199
+ result.dependencies.push(name);
200
+ detectPythonFramework(name, fwSet);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ catch {
206
+ // Skip
207
+ }
208
+ }
209
+ else if (fs.existsSync(setupPyPath)) {
210
+ langSet.add("python");
211
+ }
212
+ // -------------------------------------------------------------------------
213
+ // 4. go.mod (Go ecosystem)
214
+ // -------------------------------------------------------------------------
215
+ const goModPath = path.join(cwd, "go.mod");
216
+ if (fs.existsSync(goModPath)) {
217
+ langSet.add("go");
218
+ try {
219
+ const content = fs.readFileSync(goModPath, "utf-8");
220
+ // Extract module name
221
+ const moduleMatch = content.match(/^module\s+(\S+)/m);
222
+ if (moduleMatch) {
223
+ const parts = moduleMatch[1].split("/");
224
+ result.projectName = parts[parts.length - 1];
225
+ }
226
+ // Extract require block dependencies
227
+ const requireMatch = content.match(/require\s*\(([\s\S]*?)\)/);
228
+ if (requireMatch) {
229
+ for (const line of requireMatch[1].split("\n")) {
230
+ const depMatch = line.trim().match(/^(\S+)\s+/);
231
+ if (depMatch && !depMatch[1].startsWith("//")) {
232
+ const dep = depMatch[1];
233
+ result.dependencies.push(dep);
234
+ detectGoFramework(dep, fwSet);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ catch {
240
+ // Skip
241
+ }
242
+ }
243
+ // -------------------------------------------------------------------------
244
+ // 5. tsconfig.json presence (confirms TypeScript even without package.json)
245
+ // -------------------------------------------------------------------------
246
+ if (fs.existsSync(path.join(cwd, "tsconfig.json"))) {
247
+ langSet.add("typescript");
248
+ }
249
+ // -------------------------------------------------------------------------
250
+ // 6. Dockerfile / docker-compose.yml (container detection)
251
+ // -------------------------------------------------------------------------
252
+ if (fs.existsSync(path.join(cwd, "Dockerfile")) ||
253
+ fs.existsSync(path.join(cwd, "docker-compose.yml")) ||
254
+ fs.existsSync(path.join(cwd, "docker-compose.yaml"))) {
255
+ fwSet.add("docker");
256
+ }
257
+ // -------------------------------------------------------------------------
258
+ // Finalize
259
+ // -------------------------------------------------------------------------
260
+ result.languages = [...langSet];
261
+ result.frameworks = [...fwSet];
262
+ // Deduplicate dependencies
263
+ result.dependencies = [...new Set(result.dependencies)];
264
+ result.devDependencies = [...new Set(result.devDependencies)];
265
+ // Generate topics from detected stack
266
+ result.topics = [
267
+ ...new Set([
268
+ ...result.languages,
269
+ ...result.frameworks,
270
+ // Add high-signal dependency names as topics (only well-known ones)
271
+ ...result.dependencies.filter(isNotableTopic),
272
+ ]),
273
+ ];
274
+ return result;
275
+ }
276
+ // =============================================================================
277
+ // Helpers
278
+ // =============================================================================
279
+ /**
280
+ * Parse a TOML section for dependency names.
281
+ * Simple line-by-line parsing — handles `name = "version"` and `name = { ... }` forms.
282
+ */
283
+ function parseTOMLDependencies(content, sectionHeader, target, frameworkSet, frameworkMap) {
284
+ const headerIndex = content.indexOf(sectionHeader);
285
+ if (headerIndex === -1)
286
+ return;
287
+ const afterHeader = content.substring(headerIndex + sectionHeader.length);
288
+ for (const line of afterHeader.split("\n")) {
289
+ const trimmed = line.trim();
290
+ // Stop at next section
291
+ if (trimmed.startsWith("[") && trimmed !== sectionHeader)
292
+ break;
293
+ // Skip empty lines and comments
294
+ if (!trimmed || trimmed.startsWith("#"))
295
+ continue;
296
+ // Match dependency line: `name = ...`
297
+ const depMatch = trimmed.match(/^([a-zA-Z_][\w-]*)\s*=/);
298
+ if (depMatch) {
299
+ const name = depMatch[1];
300
+ target.push(name);
301
+ if (name in frameworkMap) {
302
+ frameworkSet.add(frameworkMap[name]);
303
+ }
304
+ }
305
+ }
306
+ }
307
+ /** Detect Python framework from package name */
308
+ function detectPythonFramework(name, fwSet) {
309
+ const pythonFrameworks = {
310
+ django: "django",
311
+ flask: "flask",
312
+ fastapi: "fastapi",
313
+ starlette: "starlette",
314
+ uvicorn: "uvicorn",
315
+ celery: "celery",
316
+ sqlalchemy: "sqlalchemy",
317
+ pytorch: "pytorch",
318
+ torch: "pytorch",
319
+ tensorflow: "tensorflow",
320
+ numpy: "numpy",
321
+ pandas: "pandas",
322
+ streamlit: "streamlit",
323
+ };
324
+ if (name in pythonFrameworks) {
325
+ fwSet.add(pythonFrameworks[name]);
326
+ }
327
+ }
328
+ /** Detect Go framework from module path */
329
+ function detectGoFramework(dep, fwSet) {
330
+ if (dep.includes("gin-gonic"))
331
+ fwSet.add("gin");
332
+ if (dep.includes("gorilla/mux"))
333
+ fwSet.add("gorilla");
334
+ if (dep.includes("labstack/echo"))
335
+ fwSet.add("echo");
336
+ if (dep.includes("gofiber/fiber"))
337
+ fwSet.add("fiber");
338
+ if (dep.includes("grpc"))
339
+ fwSet.add("grpc");
340
+ }
341
+ /**
342
+ * Filter for well-known packages worth adding as topics.
343
+ * Avoids noise from utility packages.
344
+ */
345
+ function isNotableTopic(name) {
346
+ const notable = new Set([
347
+ // Databases
348
+ "sqlite3", "better-sqlite3", "pg", "mysql2", "mongodb", "mongoose", "redis",
349
+ "prisma", "drizzle-orm", "typeorm", "sequelize", "knex",
350
+ // Auth
351
+ "passport", "next-auth", "lucia", "clerk",
352
+ // APIs
353
+ "graphql", "trpc", "@trpc/server", "openapi",
354
+ // AI/ML
355
+ "openai", "@anthropic-ai/sdk", "langchain", "llamaindex",
356
+ // Testing
357
+ "vitest", "jest", "mocha", "playwright", "cypress",
358
+ // Infrastructure
359
+ "docker", "kubernetes",
360
+ // Notable Rust crates
361
+ "serde", "tokio", "axum", "actix-web", "sqlx", "diesel",
362
+ "reqwest", "rusqlite", "clap", "tracing",
363
+ ]);
364
+ return notable.has(name);
365
+ }
366
+ //# sourceMappingURL=project-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scanner.js","sourceRoot":"","sources":["../src/project-scanner.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAgBlC,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,iBAAiB,GAA2B;IAChD,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,OAAO;IACpB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,MAAM;IACZ,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,QAAQ;IAChB,eAAe,EAAE,WAAW;IAC5B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,cAAc;IAC9B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,OAAO;CAC3B,CAAC;AAEF,8CAA8C;AAC9C,MAAM,eAAe,GAA2B;IAC9C,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,UAAU;IACvB,mBAAmB,EAAE,UAAU;IAC/B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,yCAAyC;AACzC,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,OAAO;IACtB,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAsB;QAChC,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B,WAAW,EAAE,GAAG;KACjB,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,4EAA4E;IAC5E,sDAAsD;IACtD,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE1B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;YAChC,CAAC;YAED,0BAA0B;YAC1B,IAAI,GAAG,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC/C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAEtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;wBAC7B,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,IAAI,GAAG,CAAC,eAAe,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACnE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACrD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAE5C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC9B,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;wBAC3B,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;wBAClC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;4BAC1B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBAC5B,CAAC;6BAAM,CAAC;4BACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAClB,CAAC;oBACH,CAAC;oBACD,wEAAwE;oBACxE,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;wBAC7B,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,iCAAiC;IACjC,4EAA4E;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEpB,8CAA8C;YAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACpF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;YAED,uDAAuD;YACvD,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACjG,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACxG,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC5G,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,0DAA0D;IAC1D,4EAA4E;IAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE/C,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACxD,2CAA2C;YAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACnD,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACjD,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,4EAA4E;IAC5E,2BAA2B;IAC3B,4EAA4E;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,sBAAsB;YACtB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,qCAAqC;YACrC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAChD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACxB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC9B,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,4EAA4E;IAC5E,2DAA2D;IAC3D,4EAA4E;IAC5E,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC3C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,EACpD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAC5E,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAE/B,2BAA2B;IAC3B,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAE9D,sCAAsC;IACtC,MAAM,CAAC,MAAM,GAAG;QACd,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,GAAG,MAAM,CAAC,UAAU;YACpB,oEAAoE;YACpE,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;SAC9C,CAAC;KACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,OAAe,EACf,aAAqB,EACrB,MAAgB,EAChB,YAAyB,EACzB,YAAoC;IAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,OAAO;IAE/B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,uBAAuB;QACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,aAAa;YAAE,MAAM;QAChE,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,sCAAsC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;gBACzB,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,qBAAqB,CAAC,IAAY,EAAE,KAAkB;IAC7D,MAAM,gBAAgB,GAA2B;QAC/C,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,WAAW;KACvB,CAAC;IACF,IAAI,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,2CAA2C;AAC3C,SAAS,iBAAiB,CAAC,GAAW,EAAE,KAAkB;IACxD,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,YAAY;QACZ,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO;QAC3E,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;QACvD,OAAO;QACP,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO;QACzC,OAAO;QACP,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS;QAC5C,QAAQ;QACR,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY;QACxD,UAAU;QACV,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS;QAClD,iBAAiB;QACjB,QAAQ,EAAE,YAAY;QACtB,sBAAsB;QACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ;QACvD,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;KACzC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -5,19 +5,28 @@
5
5
  * - Returning only one-liner summaries in list_tools
6
6
  * - Storing full schemas as MCP Resources (lazy-loaded)
7
7
  *
8
+ * Also provides category/tag metadata for tool discovery and filtering.
9
+ *
8
10
  * Full schemas available at: 4da://schema/{tool_name}
11
+ * Category manifest at: 4da://categories
9
12
  */
10
- /**
11
- * Slim tool registry - one-liner descriptions only
12
- * Full schemas are stored in schemas/*.json and exposed as MCP Resources
13
- */
14
- export declare const TOOL_REGISTRY: Record<string, {
13
+ /** Tool categories — maps to the 8 functional groupings in the MCP server */
14
+ export type ToolCategory = "core" | "intelligence" | "diagnostic" | "knowledge" | "decisions" | "agent" | "identity" | "metabolism";
15
+ /** Shape of each entry in the tool registry */
16
+ export interface ToolRegistryEntry {
15
17
  summary: string;
16
18
  schemaFile: string;
17
- }>;
19
+ category: ToolCategory;
20
+ tags: string[];
21
+ }
22
+ /**
23
+ * Slim tool registry — one-liner descriptions + category/tag metadata.
24
+ * Full schemas are stored in schemas/*.json and exposed as MCP Resources.
25
+ */
26
+ export declare const TOOL_REGISTRY: Record<string, ToolRegistryEntry>;
18
27
  /**
19
28
  * Get slim tool list for list_tools response
20
- * Returns minimal schema (just type: object) - full schema via resources
29
+ * Returns minimal schema (just type: object) — full schema via resources
21
30
  */
22
31
  export declare function getSlimToolList(): Array<{
23
32
  name: string;
@@ -35,12 +44,21 @@ export declare function getSchemaResources(): Array<{
35
44
  description: string;
36
45
  mimeType: string;
37
46
  }>;
38
- /**
39
- * Check if a tool exists
40
- */
47
+ /** Check if a tool exists */
41
48
  export declare function hasToolSchema(toolName: string): boolean;
42
- /**
43
- * Get schema filename for a tool
44
- */
49
+ /** Get schema filename for a tool */
45
50
  export declare function getSchemaFilename(toolName: string): string | null;
51
+ /** Get tool names grouped by category */
52
+ export declare function getToolsByCategory(): Record<ToolCategory, string[]>;
53
+ /** Structured category manifest for the 4da://categories resource */
54
+ export declare function getCategoryManifest(): {
55
+ version: string;
56
+ total_tools: number;
57
+ categories: Record<ToolCategory, {
58
+ tools: string[];
59
+ count: number;
60
+ }>;
61
+ };
62
+ /** Find tools matching any of the given tags */
63
+ export declare function getToolsByTags(tags: string[]): string[];
46
64
  //# sourceMappingURL=schema-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../src/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAsFjF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,IAAI,KAAK,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;CACjC,CAAC,CAMD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAOD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE"}
1
+ {"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../src/schema-registry.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,cAAc,GACd,YAAY,GACZ,WAAW,GACX,WAAW,GACX,OAAO,GACP,UAAU,GACV,YAAY,CAAC;AAEjB,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAiP3D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,IAAI,KAAK,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;CACjC,CAAC,CAMD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAOD;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,qCAAqC;AACrC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CASnE;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE,CAaA;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvD"}