codesift-mcp 0.5.24 → 0.5.27

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 (217) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +28 -0
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/help.js +1 -1
  6. package/dist/cli/help.js.map +1 -1
  7. package/dist/cli/hooks.d.ts +4 -0
  8. package/dist/cli/hooks.d.ts.map +1 -1
  9. package/dist/cli/hooks.js +15 -4
  10. package/dist/cli/hooks.js.map +1 -1
  11. package/dist/cli/journal-commands.d.ts +9 -0
  12. package/dist/cli/journal-commands.d.ts.map +1 -0
  13. package/dist/cli/journal-commands.js +160 -0
  14. package/dist/cli/journal-commands.js.map +1 -0
  15. package/dist/cli/wiki-commands.d.ts.map +1 -1
  16. package/dist/cli/wiki-commands.js +5 -0
  17. package/dist/cli/wiki-commands.js.map +1 -1
  18. package/dist/instructions.d.ts +1 -1
  19. package/dist/instructions.d.ts.map +1 -1
  20. package/dist/instructions.js +41 -47
  21. package/dist/instructions.js.map +1 -1
  22. package/dist/parser/extractors/_shared.d.ts +2 -0
  23. package/dist/parser/extractors/_shared.d.ts.map +1 -1
  24. package/dist/parser/extractors/_shared.js +4 -0
  25. package/dist/parser/extractors/_shared.js.map +1 -1
  26. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  27. package/dist/parser/extractors/typescript.js +606 -31
  28. package/dist/parser/extractors/typescript.js.map +1 -1
  29. package/dist/parser/parse-worker.d.ts +2 -0
  30. package/dist/parser/parse-worker.d.ts.map +1 -0
  31. package/dist/parser/parse-worker.js +47 -0
  32. package/dist/parser/parse-worker.js.map +1 -0
  33. package/dist/parser/parser-manager.d.ts +10 -1
  34. package/dist/parser/parser-manager.d.ts.map +1 -1
  35. package/dist/parser/parser-manager.js +40 -2
  36. package/dist/parser/parser-manager.js.map +1 -1
  37. package/dist/parser/parser-pool.d.ts +31 -0
  38. package/dist/parser/parser-pool.d.ts.map +1 -0
  39. package/dist/parser/parser-pool.js +211 -0
  40. package/dist/parser/parser-pool.js.map +1 -0
  41. package/dist/register-tools.d.ts.map +1 -1
  42. package/dist/register-tools.js +382 -35
  43. package/dist/register-tools.js.map +1 -1
  44. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
  45. package/dist/retrieval/codebase-retrieval.js +9 -1
  46. package/dist/retrieval/codebase-retrieval.js.map +1 -1
  47. package/dist/search/chunker.d.ts +1 -0
  48. package/dist/search/chunker.d.ts.map +1 -1
  49. package/dist/search/chunker.js +8 -1
  50. package/dist/search/chunker.js.map +1 -1
  51. package/dist/server-helpers.d.ts +27 -0
  52. package/dist/server-helpers.d.ts.map +1 -1
  53. package/dist/server-helpers.js +90 -9
  54. package/dist/server-helpers.js.map +1 -1
  55. package/dist/server.js +31 -0
  56. package/dist/server.js.map +1 -1
  57. package/dist/storage/index-store.d.ts +41 -4
  58. package/dist/storage/index-store.d.ts.map +1 -1
  59. package/dist/storage/index-store.js +89 -6
  60. package/dist/storage/index-store.js.map +1 -1
  61. package/dist/storage/watcher.d.ts +33 -6
  62. package/dist/storage/watcher.d.ts.map +1 -1
  63. package/dist/storage/watcher.js +73 -34
  64. package/dist/storage/watcher.js.map +1 -1
  65. package/dist/storage/workspace-resolver.d.ts +15 -0
  66. package/dist/storage/workspace-resolver.d.ts.map +1 -0
  67. package/dist/storage/workspace-resolver.js +130 -0
  68. package/dist/storage/workspace-resolver.js.map +1 -0
  69. package/dist/tools/_helpers.d.ts +37 -0
  70. package/dist/tools/_helpers.d.ts.map +1 -0
  71. package/dist/tools/_helpers.js +31 -0
  72. package/dist/tools/_helpers.js.map +1 -0
  73. package/dist/tools/constant-resolution-tools.d.ts +8 -0
  74. package/dist/tools/constant-resolution-tools.d.ts.map +1 -0
  75. package/dist/tools/constant-resolution-tools.js +68 -0
  76. package/dist/tools/constant-resolution-tools.js.map +1 -0
  77. package/dist/tools/graph-tools.d.ts +27 -5
  78. package/dist/tools/graph-tools.d.ts.map +1 -1
  79. package/dist/tools/graph-tools.js +141 -18
  80. package/dist/tools/graph-tools.js.map +1 -1
  81. package/dist/tools/hotspot-tools.d.ts +6 -0
  82. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  83. package/dist/tools/hotspot-tools.js +48 -8
  84. package/dist/tools/hotspot-tools.js.map +1 -1
  85. package/dist/tools/impact-tools.d.ts.map +1 -1
  86. package/dist/tools/impact-tools.js +9 -2
  87. package/dist/tools/impact-tools.js.map +1 -1
  88. package/dist/tools/index-tools.d.ts +15 -1
  89. package/dist/tools/index-tools.d.ts.map +1 -1
  90. package/dist/tools/index-tools.js +161 -16
  91. package/dist/tools/index-tools.js.map +1 -1
  92. package/dist/tools/journal-generator-helpers.d.ts +55 -0
  93. package/dist/tools/journal-generator-helpers.d.ts.map +1 -0
  94. package/dist/tools/journal-generator-helpers.js +250 -0
  95. package/dist/tools/journal-generator-helpers.js.map +1 -0
  96. package/dist/tools/journal-generator.d.ts +48 -0
  97. package/dist/tools/journal-generator.d.ts.map +1 -0
  98. package/dist/tools/journal-generator.js +204 -0
  99. package/dist/tools/journal-generator.js.map +1 -0
  100. package/dist/tools/journal-git-client.d.ts +20 -0
  101. package/dist/tools/journal-git-client.d.ts.map +1 -0
  102. package/dist/tools/journal-git-client.js +57 -0
  103. package/dist/tools/journal-git-client.js.map +1 -0
  104. package/dist/tools/journal-llm-client.d.ts +57 -0
  105. package/dist/tools/journal-llm-client.d.ts.map +1 -0
  106. package/dist/tools/journal-llm-client.js +175 -0
  107. package/dist/tools/journal-llm-client.js.map +1 -0
  108. package/dist/tools/journal-migrator.d.ts +22 -0
  109. package/dist/tools/journal-migrator.d.ts.map +1 -0
  110. package/dist/tools/journal-migrator.js +183 -0
  111. package/dist/tools/journal-migrator.js.map +1 -0
  112. package/dist/tools/journal-phase-detector.d.ts +26 -0
  113. package/dist/tools/journal-phase-detector.d.ts.map +1 -0
  114. package/dist/tools/journal-phase-detector.js +126 -0
  115. package/dist/tools/journal-phase-detector.js.map +1 -0
  116. package/dist/tools/journal-sentinel.d.ts +15 -0
  117. package/dist/tools/journal-sentinel.d.ts.map +1 -0
  118. package/dist/tools/journal-sentinel.js +110 -0
  119. package/dist/tools/journal-sentinel.js.map +1 -0
  120. package/dist/tools/journal-templates.d.ts +28 -0
  121. package/dist/tools/journal-templates.d.ts.map +1 -0
  122. package/dist/tools/journal-templates.js +93 -0
  123. package/dist/tools/journal-templates.js.map +1 -0
  124. package/dist/tools/pattern-tools.d.ts +2 -0
  125. package/dist/tools/pattern-tools.d.ts.map +1 -1
  126. package/dist/tools/pattern-tools.js +73 -0
  127. package/dist/tools/pattern-tools.js.map +1 -1
  128. package/dist/tools/perf-tools.d.ts.map +1 -1
  129. package/dist/tools/perf-tools.js +6 -0
  130. package/dist/tools/perf-tools.js.map +1 -1
  131. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  132. package/dist/tools/plan-turn-tools.js +38 -2
  133. package/dist/tools/plan-turn-tools.js.map +1 -1
  134. package/dist/tools/project-tools.d.ts +6 -0
  135. package/dist/tools/project-tools.d.ts.map +1 -1
  136. package/dist/tools/project-tools.js +65 -25
  137. package/dist/tools/project-tools.js.map +1 -1
  138. package/dist/tools/python-constants-tools.d.ts +6 -0
  139. package/dist/tools/python-constants-tools.d.ts.map +1 -1
  140. package/dist/tools/python-constants-tools.js.map +1 -1
  141. package/dist/tools/react-tools.d.ts +44 -1
  142. package/dist/tools/react-tools.d.ts.map +1 -1
  143. package/dist/tools/react-tools.js +142 -9
  144. package/dist/tools/react-tools.js.map +1 -1
  145. package/dist/tools/search-tools.d.ts.map +1 -1
  146. package/dist/tools/search-tools.js +21 -2
  147. package/dist/tools/search-tools.js.map +1 -1
  148. package/dist/tools/status-tools.d.ts +10 -0
  149. package/dist/tools/status-tools.d.ts.map +1 -1
  150. package/dist/tools/status-tools.js +53 -2
  151. package/dist/tools/status-tools.js.map +1 -1
  152. package/dist/tools/symbol-tools.d.ts +13 -0
  153. package/dist/tools/symbol-tools.d.ts.map +1 -1
  154. package/dist/tools/symbol-tools.js +38 -0
  155. package/dist/tools/symbol-tools.js.map +1 -1
  156. package/dist/tools/typescript-constants-tools.d.ts +6 -0
  157. package/dist/tools/typescript-constants-tools.d.ts.map +1 -0
  158. package/dist/tools/typescript-constants-tools.js +687 -0
  159. package/dist/tools/typescript-constants-tools.js.map +1 -0
  160. package/dist/tools/wiki-hub-ranker.d.ts +36 -0
  161. package/dist/tools/wiki-hub-ranker.d.ts.map +1 -0
  162. package/dist/tools/wiki-hub-ranker.js +72 -0
  163. package/dist/tools/wiki-hub-ranker.js.map +1 -0
  164. package/dist/tools/wiki-lint.d.ts +7 -2
  165. package/dist/tools/wiki-lint.d.ts.map +1 -1
  166. package/dist/tools/wiki-lint.js +73 -1
  167. package/dist/tools/wiki-lint.js.map +1 -1
  168. package/dist/tools/wiki-manifest.d.ts +129 -21
  169. package/dist/tools/wiki-manifest.d.ts.map +1 -1
  170. package/dist/tools/wiki-manifest.js +16 -9
  171. package/dist/tools/wiki-manifest.js.map +1 -1
  172. package/dist/tools/wiki-module-builder.d.ts +42 -0
  173. package/dist/tools/wiki-module-builder.d.ts.map +1 -0
  174. package/dist/tools/wiki-module-builder.js +449 -0
  175. package/dist/tools/wiki-module-builder.js.map +1 -0
  176. package/dist/tools/wiki-overview-sources.d.ts +26 -0
  177. package/dist/tools/wiki-overview-sources.d.ts.map +1 -0
  178. package/dist/tools/wiki-overview-sources.js +128 -0
  179. package/dist/tools/wiki-overview-sources.js.map +1 -0
  180. package/dist/tools/wiki-page-generators.d.ts +19 -3
  181. package/dist/tools/wiki-page-generators.d.ts.map +1 -1
  182. package/dist/tools/wiki-page-generators.js +156 -22
  183. package/dist/tools/wiki-page-generators.js.map +1 -1
  184. package/dist/tools/wiki-tools.d.ts +20 -0
  185. package/dist/tools/wiki-tools.d.ts.map +1 -1
  186. package/dist/tools/wiki-tools.js +181 -29
  187. package/dist/tools/wiki-tools.js.map +1 -1
  188. package/dist/tools/workspace-scope-helper.d.ts +21 -0
  189. package/dist/tools/workspace-scope-helper.d.ts.map +1 -0
  190. package/dist/tools/workspace-scope-helper.js +50 -0
  191. package/dist/tools/workspace-scope-helper.js.map +1 -0
  192. package/dist/tools/workspace-tools.d.ts +74 -0
  193. package/dist/tools/workspace-tools.d.ts.map +1 -0
  194. package/dist/tools/workspace-tools.js +366 -0
  195. package/dist/tools/workspace-tools.js.map +1 -0
  196. package/dist/types.d.ts +65 -0
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/import-graph.d.ts +27 -0
  199. package/dist/utils/import-graph.d.ts.map +1 -1
  200. package/dist/utils/import-graph.js +331 -8
  201. package/dist/utils/import-graph.js.map +1 -1
  202. package/dist/utils/ts-imports.d.ts +30 -0
  203. package/dist/utils/ts-imports.d.ts.map +1 -0
  204. package/dist/utils/ts-imports.js +168 -0
  205. package/dist/utils/ts-imports.js.map +1 -0
  206. package/dist/utils/tsconfig-paths.d.ts +59 -0
  207. package/dist/utils/tsconfig-paths.d.ts.map +1 -0
  208. package/dist/utils/tsconfig-paths.js +176 -0
  209. package/dist/utils/tsconfig-paths.js.map +1 -0
  210. package/dist/utils/walk.d.ts.map +1 -1
  211. package/dist/utils/walk.js +1 -0
  212. package/dist/utils/walk.js.map +1 -1
  213. package/package.json +13 -3
  214. package/rules/codesift.md +19 -2
  215. package/rules/codesift.mdc +2 -2
  216. package/rules/codex.md +13 -2
  217. package/rules/gemini.md +13 -2
@@ -0,0 +1,449 @@
1
+ /**
2
+ * Wiki v2 module builder — assembles ProjectOverview, ModuleMetadata[], and
3
+ * the v2 WikiManifest writer. Framework-aware description cascade lives in
4
+ * wiki-cascade.ts; raw parsers and key-dep selector in wiki-overview-sources.ts.
5
+ */
6
+ import { readFileSync } from "node:fs";
7
+ import { basename, join } from "node:path";
8
+ import { isShallowClone, parseGoMod, parsePyprojectToml, parseCargoToml, selectKeyDependencies, } from "./wiki-overview-sources.js";
9
+ import { buildUniqueSlugs, buildFileToCommunityMap, } from "./wiki-manifest.js";
10
+ /**
11
+ * Build a ProjectOverview from the analyzeProject result and the code index.
12
+ * Emits `_degraded` as a side-channel when git history is shallow/missing; the
13
+ * orchestrator strips it and pushes to `degraded_reasons`.
14
+ */
15
+ export function buildProjectOverview(projectResult, codeIndex) {
16
+ const ident = projectResult.identity;
17
+ const stack = projectResult.stack;
18
+ const name = ident?.project_name ?? basename(codeIndex.root);
19
+ const project_type = ident?.project_type ?? "single";
20
+ const workspaces = stack?.monorepo?.workspaces ?? [];
21
+ const scripts = readScripts(codeIndex.root);
22
+ const fallbackName = nonJsFallbackName(codeIndex.root);
23
+ const dependencies = selectKeyDependencies(projectResult);
24
+ mergeNonJsDeps(dependencies, codeIndex.root);
25
+ const gh = projectResult.git_health ?? null;
26
+ const shallow = isShallowClone(codeIndex.root);
27
+ const totalCommits = shallow || gh === null ? null : (gh?.total_commits ?? null);
28
+ const contributors = shallow || gh === null ? null : (gh?.contributors ?? null);
29
+ const overview = {
30
+ name: name ?? fallbackName ?? "unknown",
31
+ git_remote: ident?.git_remote ?? null,
32
+ project_type,
33
+ stack: {
34
+ language: stack?.language ?? inferLanguage(codeIndex.root) ?? "unknown",
35
+ language_version: stack?.language_version ?? null,
36
+ framework: stack?.framework ?? null,
37
+ framework_version: stack?.framework_version ?? null,
38
+ test_runner: stack?.test_runner ?? null,
39
+ package_manager: stack?.package_manager ?? null,
40
+ build_tool: stack?.build_tool ?? null,
41
+ },
42
+ scripts,
43
+ entry_points: projectResult.dependency_graph?.entry_points ?? [],
44
+ workspaces,
45
+ dependencies,
46
+ known_gotchas: (projectResult.known_gotchas?.auto_detected ?? []).map((g) => ({
47
+ gotcha: g.gotcha,
48
+ severity: g.severity,
49
+ })),
50
+ stats: {
51
+ total_files: codeIndex.file_count,
52
+ total_commits: totalCommits,
53
+ contributors,
54
+ },
55
+ };
56
+ if (shallow || gh === null) {
57
+ overview._degraded = "shallow_clone_or_insufficient_history";
58
+ }
59
+ return overview;
60
+ }
61
+ function readScripts(root) {
62
+ try {
63
+ const raw = readFileSync(join(root, "package.json"), "utf-8");
64
+ const pkg = JSON.parse(raw);
65
+ return pkg.scripts ?? {};
66
+ }
67
+ catch {
68
+ return {};
69
+ }
70
+ }
71
+ function nonJsFallbackName(root) {
72
+ try {
73
+ const goMod = readFileSync(join(root, "go.mod"), "utf-8");
74
+ const p = parseGoMod(goMod);
75
+ if (p.name)
76
+ return basename(p.name);
77
+ }
78
+ catch { /* no go.mod */ }
79
+ try {
80
+ const py = readFileSync(join(root, "pyproject.toml"), "utf-8");
81
+ const p = parsePyprojectToml(py);
82
+ if (p.name)
83
+ return p.name;
84
+ }
85
+ catch { /* no pyproject */ }
86
+ try {
87
+ const cargo = readFileSync(join(root, "Cargo.toml"), "utf-8");
88
+ const p = parseCargoToml(cargo);
89
+ if (p.name)
90
+ return p.name;
91
+ }
92
+ catch { /* no cargo */ }
93
+ return null;
94
+ }
95
+ function mergeNonJsDeps(summary, root) {
96
+ if (summary.key.length > 0)
97
+ return;
98
+ try {
99
+ const py = readFileSync(join(root, "pyproject.toml"), "utf-8");
100
+ const p = parsePyprojectToml(py);
101
+ summary.prod_total = Math.max(summary.prod_total, p.deps.length);
102
+ for (const name of p.deps.slice(0, 15)) {
103
+ summary.key.push({ name, version: "", kind: "prod" });
104
+ }
105
+ return;
106
+ }
107
+ catch { /* skip */ }
108
+ try {
109
+ const goMod = readFileSync(join(root, "go.mod"), "utf-8");
110
+ const p = parseGoMod(goMod);
111
+ summary.prod_total = Math.max(summary.prod_total, p.deps.length);
112
+ for (const name of p.deps.slice(0, 15)) {
113
+ summary.key.push({ name, version: "", kind: "prod" });
114
+ }
115
+ }
116
+ catch { /* skip */ }
117
+ }
118
+ function inferLanguage(root) {
119
+ try {
120
+ readFileSync(join(root, "go.mod"), "utf-8");
121
+ return "Go";
122
+ }
123
+ catch { }
124
+ try {
125
+ readFileSync(join(root, "pyproject.toml"), "utf-8");
126
+ return "Python";
127
+ }
128
+ catch { }
129
+ try {
130
+ readFileSync(join(root, "Cargo.toml"), "utf-8");
131
+ return "Rust";
132
+ }
133
+ catch { }
134
+ return null;
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // ModuleMetadata assembly (cascade + per-community data)
138
+ // ---------------------------------------------------------------------------
139
+ const TEST_FILE_RE = /\.test\.(ts|js|py|go)$|\.spec\.(ts|js)$|__tests__\//;
140
+ export function buildModuleMetadata(communities, projectResult, codeIndex, importEdges, fileHotspots, rankedHubs) {
141
+ void rankedHubs;
142
+ const slugs = buildUniqueSlugs(communities);
143
+ const fileToCommunity = buildFileToCommunityMap(communities, slugs);
144
+ const hotspotFiles = new Set(fileHotspots.slice(0, 20).map((h) => h.file));
145
+ const symbolsByFile = indexSymbolsByFile(codeIndex.symbols);
146
+ const out = [];
147
+ for (const c of communities) {
148
+ const slug = slugs.get(c.name);
149
+ const isTestCommunity = c.files.length > 0 && c.files.every((f) => TEST_FILE_RE.test(f));
150
+ const microModule = c.files.length < 4;
151
+ const description = describeCommunity(c, projectResult, isTestCommunity, importEdges, fileToCommunity);
152
+ const role = isTestCommunity ? "tests"
153
+ : microModule ? "micro-module"
154
+ : inferRole(c, projectResult);
155
+ const { key_exports, approximate } = collectKeyExports(c, symbolsByFile, importEdges);
156
+ const has_hotspot = c.files.some((f) => hotspotFiles.has(f));
157
+ const { depends_on, depended_by } = computeCommunityEdges(c, importEdges, fileToCommunity, slug);
158
+ const module = {
159
+ slug,
160
+ name: c.name,
161
+ description,
162
+ role,
163
+ files: c.files.length,
164
+ cohesion: c.cohesion ?? 0,
165
+ key_exports,
166
+ depends_on,
167
+ depended_by,
168
+ has_hotspot,
169
+ };
170
+ if (approximate)
171
+ module.key_exports_approximate = true;
172
+ out.push(module);
173
+ }
174
+ return out;
175
+ }
176
+ function indexSymbolsByFile(symbols) {
177
+ const map = new Map();
178
+ for (const s of symbols) {
179
+ const arr = map.get(s.file);
180
+ if (arr)
181
+ arr.push(s);
182
+ else
183
+ map.set(s.file, [s]);
184
+ }
185
+ return map;
186
+ }
187
+ function collectKeyExports(c, symbolsByFile, importEdges) {
188
+ const candidates = [];
189
+ for (const f of c.files) {
190
+ for (const s of symbolsByFile.get(f) ?? []) {
191
+ if (s.is_exported === true)
192
+ candidates.push(s);
193
+ }
194
+ }
195
+ if (candidates.length > 0) {
196
+ const byFanIn = rankByExternalImport(candidates, importEdges, c.files);
197
+ return {
198
+ key_exports: byFanIn.slice(0, 5).map(toKeyExport),
199
+ approximate: false,
200
+ };
201
+ }
202
+ // Fallback: community files imported from outside → surface first symbol per file
203
+ const externallyImported = new Set();
204
+ const fileSet = new Set(c.files);
205
+ for (const e of importEdges) {
206
+ if (fileSet.has(e.to) && !fileSet.has(e.from))
207
+ externallyImported.add(e.to);
208
+ }
209
+ const approx = [];
210
+ for (const f of externallyImported) {
211
+ const syms = symbolsByFile.get(f) ?? [];
212
+ const first = syms.find((s) => EXPORT_KINDS.has(s.kind));
213
+ if (first)
214
+ approx.push(first);
215
+ }
216
+ return {
217
+ key_exports: approx.slice(0, 5).map(toKeyExport),
218
+ approximate: approx.length > 0,
219
+ };
220
+ }
221
+ const EXPORT_KINDS = new Set(["function", "class", "interface", "type", "component", "hook"]);
222
+ function toKeyExport(s) {
223
+ const kind = EXPORT_KINDS.has(s.kind) ? s.kind : "function";
224
+ const out = { name: s.name, kind, file: s.file };
225
+ if (s.signature)
226
+ out.signature = s.signature;
227
+ return out;
228
+ }
229
+ function rankByExternalImport(syms, edges, communityFiles) {
230
+ const fileSet = new Set(communityFiles);
231
+ const externalImporters = new Map();
232
+ for (const e of edges) {
233
+ if (fileSet.has(e.to) && !fileSet.has(e.from)) {
234
+ externalImporters.set(e.to, (externalImporters.get(e.to) ?? 0) + 1);
235
+ }
236
+ }
237
+ return [...syms].sort((a, b) => (externalImporters.get(b.file) ?? 0) - (externalImporters.get(a.file) ?? 0));
238
+ }
239
+ function computeCommunityEdges(c, edges, fileToCommunity, ownSlug) {
240
+ const fileSet = new Set(c.files);
241
+ const dependsOn = new Set();
242
+ const dependedBy = new Set();
243
+ for (const e of edges) {
244
+ const fromSlug = fileToCommunity[e.from];
245
+ const toSlug = fileToCommunity[e.to];
246
+ if (fromSlug === ownSlug && toSlug && toSlug !== ownSlug)
247
+ dependsOn.add(toSlug);
248
+ if (toSlug === ownSlug && fromSlug && fromSlug !== ownSlug)
249
+ dependedBy.add(fromSlug);
250
+ // fileSet referenced to preserve intent
251
+ void fileSet;
252
+ }
253
+ return {
254
+ depends_on: [...dependsOn].sort(),
255
+ depended_by: [...dependedBy].sort(),
256
+ };
257
+ }
258
+ function inferRole(c, projectResult) {
259
+ const dir = commonDirPrefix(c.files);
260
+ if (/routes|controller|handlers?/.test(dir))
261
+ return "framework-routes";
262
+ if (/components?|ui|views/.test(dir))
263
+ return "framework-components";
264
+ if (/utils?|helpers?|lib/.test(dir))
265
+ return "utilities";
266
+ if (/parser|extract/.test(dir))
267
+ return "parsers";
268
+ if (/storage|db|repository/.test(dir))
269
+ return "storage";
270
+ if (/search|query|index/.test(dir))
271
+ return "search";
272
+ if (/cli|bin/.test(dir))
273
+ return "cli";
274
+ if (projectResult.stack?.framework)
275
+ return "framework-tools";
276
+ return "core-library";
277
+ }
278
+ function commonDirPrefix(files) {
279
+ if (files.length === 0)
280
+ return "";
281
+ const parts = files[0].split("/");
282
+ for (const f of files.slice(1)) {
283
+ const fp = f.split("/");
284
+ while (parts.length > 0 && parts[0] !== fp[0])
285
+ parts.shift();
286
+ if (parts.length === 0)
287
+ break;
288
+ }
289
+ return parts.join("/");
290
+ }
291
+ // Description cascade: framework → dep-lookup → file-pattern/keyword
292
+ function describeCommunity(c, projectResult, isTestCommunity, importEdges, fileToCommunity) {
293
+ if (isTestCommunity)
294
+ return describeTestCommunity(c, importEdges, fileToCommunity);
295
+ try {
296
+ const lvl1 = describeViaFramework(c, projectResult);
297
+ if (lvl1)
298
+ return lvl1;
299
+ }
300
+ catch { /* advance */ }
301
+ try {
302
+ const lvl2 = describeViaDependencyLookup(c, projectResult);
303
+ if (lvl2)
304
+ return lvl2;
305
+ }
306
+ catch { /* advance */ }
307
+ return describeViaFilePatterns(c);
308
+ }
309
+ function describeTestCommunity(c, importEdges, fileToCommunity) {
310
+ const fileSet = new Set(c.files);
311
+ const outgoing = new Map();
312
+ for (const e of importEdges) {
313
+ if (!fileSet.has(e.from))
314
+ continue;
315
+ const target = fileToCommunity[e.to];
316
+ if (target)
317
+ outgoing.set(target, (outgoing.get(target) ?? 0) + 1);
318
+ }
319
+ const top = [...outgoing.entries()].sort((a, b) => b[1] - a[1])[0];
320
+ const target = top?.[0] ?? "this project";
321
+ return `Test suite for ${target}`;
322
+ }
323
+ function describeViaFramework(c, p) {
324
+ const dir = commonDirPrefix(c.files);
325
+ const fw = p.stack?.framework;
326
+ if (!fw)
327
+ return null;
328
+ if (/controller/.test(dir) && fw.toLowerCase().includes("nest")) {
329
+ return `NestJS controllers — ${c.files.length} files handling HTTP routes.`;
330
+ }
331
+ if (/pages|app/.test(dir) && fw.toLowerCase().includes("next")) {
332
+ return `Next.js routes and layouts — ${c.files.length} files.`;
333
+ }
334
+ if (/routes|handlers?/.test(dir) && fw.toLowerCase().includes("hono")) {
335
+ return `Hono route handlers — ${c.files.length} files.`;
336
+ }
337
+ if (/components?/.test(dir) && fw.toLowerCase().includes("react")) {
338
+ return `React components — ${c.files.length} files.`;
339
+ }
340
+ return null;
341
+ }
342
+ const DEP_ROLES = {
343
+ prisma: "Prisma data access", "@prisma/client": "Prisma client integration",
344
+ pg: "Postgres data access", mongoose: "MongoDB data access",
345
+ "drizzle-orm": "Drizzle ORM data access",
346
+ redis: "Redis integration", ioredis: "Redis integration",
347
+ zod: "Zod validation schemas",
348
+ "@tanstack/react-query": "Data fetching via TanStack Query",
349
+ "graphql": "GraphQL integration",
350
+ };
351
+ function describeViaDependencyLookup(c, p) {
352
+ const kv = p.dependency_health?.key_versions ?? {};
353
+ for (const pkg of Object.keys(kv)) {
354
+ if (pkg in DEP_ROLES && pkg_keywordsInFiles(pkg, c.files)) {
355
+ return `${DEP_ROLES[pkg]} — ${c.files.length} files.`;
356
+ }
357
+ }
358
+ return null;
359
+ }
360
+ function pkg_keywordsInFiles(pkg, files) {
361
+ const base = pkg.replace(/^@/, "").split("/")[0].toLowerCase();
362
+ return files.some((f) => f.toLowerCase().includes(base));
363
+ }
364
+ function describeViaFilePatterns(c) {
365
+ const dir = commonDirPrefix(c.files);
366
+ if (/utils?|helpers?/.test(dir))
367
+ return `Utilities — ${c.files.length} helper files under ${dir || "this module"}.`;
368
+ if (/parser|extractor/.test(dir))
369
+ return `Parsers and extractors — ${c.files.length} files under ${dir}.`;
370
+ if (/storage/.test(dir))
371
+ return `Storage layer — ${c.files.length} files.`;
372
+ if (/tools?/.test(dir))
373
+ return `Tooling — ${c.files.length} files under ${dir}.`;
374
+ return `Module of ${c.files.length} files${dir ? ` under ${dir}` : ""}.`;
375
+ }
376
+ export function buildWikiManifestV2(options) {
377
+ const { index_hash, git_commit, pages, communities, project, modules, oldManifest, degradedReasons, modules_truncated, truncation_reason, } = options;
378
+ const file_to_community = buildFileToCommunityMap(communities);
379
+ const token_estimates = {};
380
+ const CHARS_PER_TOKEN = 4;
381
+ for (const p of pages)
382
+ token_estimates[p.slug] = Math.ceil(p.content.length / CHARS_PER_TOKEN);
383
+ const slug_redirects = {
384
+ ...(oldManifest?.slug_redirects ?? {}),
385
+ };
386
+ const linkRe = /\[\[([^\]]+)\]\]/g;
387
+ const builtPages = pages.map((p) => {
388
+ const outbound_links = [];
389
+ linkRe.lastIndex = 0;
390
+ let m;
391
+ while ((m = linkRe.exec(p.content)) !== null) {
392
+ if (m[1] !== undefined)
393
+ outbound_links.push(m[1]);
394
+ }
395
+ return { slug: p.slug, title: p.title, type: p.type, file: p.file, outbound_links };
396
+ });
397
+ const degraded = (degradedReasons?.length ?? 0) > 0;
398
+ return {
399
+ schema_version: 2,
400
+ manifest_schema_version: "2.1.0",
401
+ generated_at: new Date().toISOString(),
402
+ index_hash,
403
+ git_commit,
404
+ project,
405
+ modules,
406
+ pages: builtPages,
407
+ slug_redirects,
408
+ token_estimates,
409
+ file_to_community,
410
+ degraded,
411
+ ...(degraded ? { degraded_reasons: degradedReasons } : {}),
412
+ ...(modules_truncated ? { modules_truncated: true } : {}),
413
+ ...(truncation_reason ? { truncation_reason } : {}),
414
+ };
415
+ }
416
+ export function buildWikiManifestV1(options) {
417
+ const { index_hash, git_commit, pages, communities, oldManifest, degradedReasons } = options;
418
+ const file_to_community = buildFileToCommunityMap(communities);
419
+ const token_estimates = {};
420
+ const CHARS_PER_TOKEN = 4;
421
+ for (const p of pages)
422
+ token_estimates[p.slug] = Math.ceil(p.content.length / CHARS_PER_TOKEN);
423
+ const slug_redirects = { ...(oldManifest?.slug_redirects ?? {}) };
424
+ const linkRe = /\[\[([^\]]+)\]\]/g;
425
+ const builtPages = pages.map((p) => {
426
+ const outbound_links = [];
427
+ linkRe.lastIndex = 0;
428
+ let m;
429
+ while ((m = linkRe.exec(p.content)) !== null) {
430
+ if (m[1] !== undefined)
431
+ outbound_links.push(m[1]);
432
+ }
433
+ return { slug: p.slug, title: p.title, type: p.type, file: p.file, outbound_links };
434
+ });
435
+ const degraded = (degradedReasons?.length ?? 0) > 0;
436
+ return {
437
+ manifest_schema_version: "2.1.0",
438
+ generated_at: new Date().toISOString(),
439
+ index_hash,
440
+ git_commit,
441
+ pages: builtPages,
442
+ slug_redirects,
443
+ token_estimates,
444
+ file_to_community,
445
+ degraded,
446
+ ...(degraded ? { degraded_reasons: degradedReasons } : {}),
447
+ };
448
+ }
449
+ //# sourceMappingURL=wiki-module-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-module-builder.js","sourceRoot":"","sources":["../../src/tools/wiki-module-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAM3C,OAAO,EACL,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAA6B,EAC7B,SAAoB;IAEpB,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,EAAE,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,QAAQ,CAAC;IACrD,MAAM,UAAU,GAAG,KAAK,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC1D,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAI,aAAkE,CAAC,UAAU,IAAI,IAAI,CAAC;IAClG,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAA6C;QACzD,IAAI,EAAE,IAAI,IAAI,YAAY,IAAI,SAAS;QACvC,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,IAAI;QACrC,YAAY;QACZ,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS;YACvE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,IAAI,IAAI;YACjD,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI;YACnC,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,IAAI,IAAI;YACnD,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI;YACvC,eAAe,EAAE,KAAK,EAAE,eAAe,IAAI,IAAI;YAC/C,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,IAAI;SACtC;QACD,OAAO;QACP,YAAY,EAAE,aAAa,CAAC,gBAAgB,EAAE,YAAY,IAAI,EAAE;QAChE,UAAU;QACV,YAAY;QACZ,aAAa,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC;QACH,KAAK,EAAE;YACL,WAAW,EAAE,SAAS,CAAC,UAAU;YACjC,aAAa,EAAE,YAAY;YAC3B,YAAY;SACb;KACF,CAAC;IACF,IAAI,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3B,QAAQ,CAAC,SAAS,GAAG,uCAAuC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAA0B,EAAE,IAAY;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;IACT,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC1E,IAAI,CAAC;QAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACtF,IAAI,CAAC;QAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,YAAY,GAAG,qDAAqD,CAAC;AAE3E,MAAM,UAAU,mBAAmB,CACjC,WAA4B,EAC5B,aAA6B,EAC7B,SAAoB,EACpB,WAAyB,EACzB,YAA2B,EAC3B,UAA6B;IAE7B,KAAK,UAAU,CAAC;IAChB,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAqB,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC;QAChC,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACvG,MAAM,IAAI,GAAe,eAAe,CAAC,CAAC,CAAC,OAAO;YAChD,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;gBAC9B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAChC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,MAAM,GAAmB;YAC7B,IAAI;YACJ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW;YACX,IAAI;YACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;YACrB,QAAQ,EAAG,CAAsC,CAAC,QAAQ,IAAI,CAAC;YAC/D,WAAW;YACX,UAAU;YACV,WAAW;YACX,WAAW;SACZ,CAAC;QACF,IAAI,WAAW;YAAE,MAAM,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,CAAgB,EAChB,aAAwC,EACxC,WAAyB;IAEzB,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YACjD,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,kFAAkF;IAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAChD,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9F,SAAS,WAAW,CAAC,CAAa;IAChC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAA0B,CAAC,CAAC,CAAC,UAAU,CAAC;IACnF,MAAM,GAAG,GAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAkB,EAClB,KAAmB,EACnB,cAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,qBAAqB,CAC5B,CAAgB,EAChB,KAAmB,EACnB,eAAuC,EACvC,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,OAAO,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO;YAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChF,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO;YAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrF,wCAAwC;QACxC,KAAK,OAAO,CAAC;IACf,CAAC;IACD,OAAO;QACL,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;QACjC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,CAAgB,EAAE,aAA6B;IAChE,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACvE,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACpE,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpD,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS;QAAE,OAAO,iBAAiB,CAAC;IAC7D,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,KAAe;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,qEAAqE;AACrE,SAAS,iBAAiB,CACxB,CAAgB,EAChB,aAA6B,EAC7B,eAAwB,EACxB,WAAyB,EACzB,eAAuC;IAEvC,IAAI,eAAe;QAAE,OAAO,qBAAqB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACnF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,2BAA2B,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC3D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IACzB,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,qBAAqB,CAC5B,CAAgB,EAChB,WAAyB,EACzB,eAAuC;IAEvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;IAC1C,OAAO,kBAAkB,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAgB,EAAE,CAAiB;IAC/D,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,OAAO,wBAAwB,CAAC,CAAC,KAAK,CAAC,MAAM,8BAA8B,CAAC;IAC9E,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,OAAO,gCAAgC,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;IACjE,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,OAAO,yBAAyB,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;IAC1D,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,OAAO,sBAAsB,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,SAAS,GAA2B;IACxC,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,2BAA2B;IAC3E,EAAE,EAAE,sBAAsB,EAAE,QAAQ,EAAE,qBAAqB;IAC3D,aAAa,EAAE,yBAAyB;IACxC,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;IACxD,GAAG,EAAE,wBAAwB;IAC7B,uBAAuB,EAAE,kCAAkC;IAC3D,SAAS,EAAE,qBAAqB;CACjC,CAAC;AAEF,SAAS,2BAA2B,CAAC,CAAgB,EAAE,CAAiB;IACtE,MAAM,EAAE,GAAI,CAAkF,CAAC,iBAAiB,EAAE,YAAY,IAAI,EAAE,CAAC;IACrI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,IAAI,SAAS,IAAI,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAe;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;IAChE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAgB;IAC/C,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,eAAe,CAAC,CAAC,KAAK,CAAC,MAAM,uBAAuB,GAAG,IAAI,aAAa,GAAG,CAAC;IACpH,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC,CAAC,KAAK,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;IAC1G,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;IAC3E,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;IACjF,OAAO,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3E,CAAC;AAmBD,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,EACJ,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAC5D,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,GACnE,GAAG,OAAO,CAAC;IACZ,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;IAC/F,MAAM,cAAc,GAA2B;QAC7C,GAAG,CAAE,WAA4B,EAAE,cAAc,IAAI,EAAE,CAAC;KACzD,CAAC;IACF,MAAM,MAAM,GAAG,mBAAmB,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,uBAAuB,EAAE,OAAO;QAChC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,UAAU;QACV,UAAU;QACV,OAAO;QACP,OAAO;QACP,KAAK,EAAE,UAAU;QACjB,cAAc;QACd,eAAe;QACf,iBAAiB;QACjB,QAAQ;QACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC7F,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;IAC/F,MAAM,cAAc,GAA2B,EAAE,GAAG,CAAC,WAAW,EAAE,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1F,MAAM,MAAM,GAAG,mBAAmB,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO;QACL,uBAAuB,EAAE,OAAO;QAChC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,UAAU;QACV,UAAU;QACV,KAAK,EAAE,UAAU;QACjB,cAAc;QACd,eAAe;QACf,iBAAiB;QACjB,QAAQ;QACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Non-JS manifest parsers + key-dependency selector for buildProjectOverview.
3
+ * Narrow scope by design — we only extract the few fields the wiki overview
4
+ * needs, not full TOML/Go-module parse trees.
5
+ */
6
+ import type { DependencySummary } from "./wiki-manifest.js";
7
+ import type { ProjectProfile } from "./project-tools.js";
8
+ export interface GoModSummary {
9
+ name: string | null;
10
+ deps: string[];
11
+ }
12
+ export interface TomlProjectSummary {
13
+ name: string | null;
14
+ version: string | null;
15
+ description: string | null;
16
+ deps: string[];
17
+ }
18
+ export declare function parseGoMod(source: string): GoModSummary;
19
+ /** Narrow regex-based parse of pyproject.toml `[project]` section. */
20
+ export declare function parsePyprojectToml(source: string): TomlProjectSummary;
21
+ export declare function parseCargoToml(source: string): TomlProjectSummary;
22
+ /** Detect shallow clone (git rev-parse --is-shallow-repository). Safe on
23
+ * missing git binary / non-repo / permission errors. */
24
+ export declare function isShallowClone(root: string): boolean;
25
+ export declare function selectKeyDependencies(projectResult: ProjectProfile): DependencySummary;
26
+ //# sourceMappingURL=wiki-overview-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-overview-sources.d.ts","sourceRoot":"","sources":["../../src/tools/wiki-overview-sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE;AACrE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAcvD;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAerE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAajE;AAwBD;yDACyD;AACzD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUpD;AAwBD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,cAAc,GAAG,iBAAiB,CAYtF"}
@@ -0,0 +1,128 @@
1
+ import { execFileSync } from "node:child_process";
2
+ export function parseGoMod(source) {
3
+ const nameMatch = source.match(/^module\s+(\S+)/m);
4
+ const deps = [];
5
+ const requireBlock = source.match(/require\s*\(([^)]*)\)/);
6
+ if (requireBlock?.[1]) {
7
+ for (const line of requireBlock[1].split("\n")) {
8
+ const m = line.trim().match(/^([^\s]+)\s+/);
9
+ if (m?.[1])
10
+ deps.push(m[1]);
11
+ }
12
+ }
13
+ for (const m of source.matchAll(/^require\s+([^\s]+)\s+/gm)) {
14
+ if (m[1])
15
+ deps.push(m[1]);
16
+ }
17
+ return { name: nameMatch?.[1] ?? null, deps };
18
+ }
19
+ /** Narrow regex-based parse of pyproject.toml `[project]` section. */
20
+ export function parsePyprojectToml(source) {
21
+ const section = extractTomlSection(source, "project");
22
+ const name = matchTomlKey(section, "name");
23
+ const version = matchTomlKey(section, "version");
24
+ const description = matchTomlKey(section, "description");
25
+ const deps = [];
26
+ const depsArray = section.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
27
+ if (depsArray?.[1]) {
28
+ for (const m of depsArray[1].matchAll(/"([^"]+)"/g)) {
29
+ // e.g. "fastapi>=0.100" -> fastapi
30
+ const base = m[1].split(/[<>=\s!~]/)[0];
31
+ if (base)
32
+ deps.push(base);
33
+ }
34
+ }
35
+ return { name, version, description, deps };
36
+ }
37
+ export function parseCargoToml(source) {
38
+ const section = extractTomlSection(source, "package");
39
+ const depsSection = extractTomlSection(source, "dependencies");
40
+ const deps = [];
41
+ for (const m of depsSection.matchAll(/^([A-Za-z0-9_-]+)\s*=/gm)) {
42
+ if (m[1])
43
+ deps.push(m[1]);
44
+ }
45
+ return {
46
+ name: matchTomlKey(section, "name"),
47
+ version: matchTomlKey(section, "version"),
48
+ description: matchTomlKey(section, "description"),
49
+ deps,
50
+ };
51
+ }
52
+ function extractTomlSection(source, name) {
53
+ // Find the header line, then capture everything until the next section header
54
+ // or end of input.
55
+ const lines = source.split("\n");
56
+ const headerRe = new RegExp(`^\\[${name}\\]\\s*$`);
57
+ let startIdx = -1;
58
+ for (let i = 0; i < lines.length; i++) {
59
+ if (headerRe.test(lines[i])) {
60
+ startIdx = i + 1;
61
+ break;
62
+ }
63
+ }
64
+ if (startIdx < 0)
65
+ return "";
66
+ let endIdx = lines.length;
67
+ for (let i = startIdx; i < lines.length; i++) {
68
+ if (/^\[[^\]]+\]\s*$/.test(lines[i])) {
69
+ endIdx = i;
70
+ break;
71
+ }
72
+ }
73
+ return lines.slice(startIdx, endIdx).join("\n");
74
+ }
75
+ function matchTomlKey(section, key) {
76
+ const m = section.match(new RegExp(`^\\s*${key}\\s*=\\s*"([^"]*)"`, "m"));
77
+ return m?.[1] ?? null;
78
+ }
79
+ /** Detect shallow clone (git rev-parse --is-shallow-repository). Safe on
80
+ * missing git binary / non-repo / permission errors. */
81
+ export function isShallowClone(root) {
82
+ try {
83
+ const out = execFileSync("git", ["rev-parse", "--is-shallow-repository"], {
84
+ cwd: root,
85
+ stdio: ["ignore", "pipe", "ignore"],
86
+ });
87
+ return out.toString().trim() === "true";
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ /** Architectural relevance table for selectKeyDependencies. */
94
+ const ARCH_RELEVANT = new Set([
95
+ // Frameworks
96
+ "react", "next", "vue", "angular", "svelte", "solid-js", "nuxt", "gatsby", "remix",
97
+ "express", "fastify", "hono", "@nestjs/core", "koa", "hapi",
98
+ "fastapi", "flask", "django", "pyramid", "starlette",
99
+ // DB / ORM
100
+ "prisma", "@prisma/client", "pg", "mysql2", "mongodb", "mongoose", "drizzle-orm",
101
+ "typeorm", "sequelize", "redis", "ioredis", "sqlalchemy", "peewee",
102
+ // Testing
103
+ "vitest", "jest", "mocha", "cypress", "playwright", "pytest",
104
+ // Build / bundler
105
+ "vite", "webpack", "rollup", "esbuild", "parcel", "tsup", "turbopack",
106
+ // Language / type
107
+ "typescript", "ts-node", "tsx",
108
+ // Validation / schema
109
+ "zod", "yup", "joi", "pydantic",
110
+ // State / data
111
+ "zustand", "redux", "@tanstack/react-query", "swr", "graphql", "apollo-server",
112
+ "@trpc/server",
113
+ ]);
114
+ export function selectKeyDependencies(projectResult) {
115
+ const dh = projectResult.dependency_health;
116
+ const prodTotal = dh?.prod ?? 0;
117
+ const devTotal = dh?.dev ?? 0;
118
+ const key = [];
119
+ const kv = dh?.key_versions ?? {};
120
+ for (const [name, version] of Object.entries(kv)) {
121
+ if (key.length >= 15)
122
+ break;
123
+ const kind = ARCH_RELEVANT.has(name) ? "prod" : "prod";
124
+ key.push({ name, version: String(version), kind });
125
+ }
126
+ return { prod_total: prodTotal, dev_total: devTotal, key };
127
+ }
128
+ //# sourceMappingURL=wiki-overview-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-overview-sources.js","sourceRoot":"","sources":["../../src/tools/wiki-overview-sources.ts"],"names":[],"mappings":"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"}