@nxuss/lemma 1.32.0 → 1.34.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 (183) hide show
  1. package/README.md +16 -2
  2. package/dashboard/README.md +28 -332
  3. package/dashboard/dist/assets/{index-Dh-whqJ7.js → index-euG1IvQ7.js} +82 -82
  4. package/dashboard/dist/index.html +1 -1
  5. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  6. package/dist/cjs/cli/lemma-proxy.js +20 -1
  7. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  8. package/dist/cjs/language-core/contracts/CapabilityMatrix.d.ts +10 -0
  9. package/dist/cjs/language-core/contracts/CapabilityMatrix.d.ts.map +1 -0
  10. package/dist/cjs/language-core/contracts/CapabilityMatrix.js +70 -0
  11. package/dist/cjs/language-core/contracts/CapabilityMatrix.js.map +1 -0
  12. package/dist/cjs/language-core/detection/detectProjectType.d.ts +17 -0
  13. package/dist/cjs/language-core/detection/detectProjectType.d.ts.map +1 -0
  14. package/dist/cjs/language-core/detection/detectProjectType.js +186 -0
  15. package/dist/cjs/language-core/detection/detectProjectType.js.map +1 -0
  16. package/dist/cjs/language-core/registry/adapterRegistry.d.ts +11 -0
  17. package/dist/cjs/language-core/registry/adapterRegistry.d.ts.map +1 -0
  18. package/dist/cjs/language-core/registry/adapterRegistry.js +45 -0
  19. package/dist/cjs/language-core/registry/adapterRegistry.js.map +1 -0
  20. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.d.ts +24 -0
  21. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.d.ts.map +1 -0
  22. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.js +199 -0
  23. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.js.map +1 -0
  24. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts +37 -0
  25. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts.map +1 -0
  26. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.js +51 -0
  27. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.js.map +1 -0
  28. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.d.ts +25 -0
  29. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.d.ts.map +1 -0
  30. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.js +241 -0
  31. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.js.map +1 -0
  32. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.d.ts +18 -0
  33. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.d.ts.map +1 -0
  34. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.js +214 -0
  35. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.js.map +1 -0
  36. package/dist/cjs/languages/csharp/csharpSymbols.d.ts +33 -0
  37. package/dist/cjs/languages/csharp/csharpSymbols.d.ts.map +1 -0
  38. package/dist/cjs/languages/csharp/csharpSymbols.js +274 -0
  39. package/dist/cjs/languages/csharp/csharpSymbols.js.map +1 -0
  40. package/dist/cjs/mcp/cognitiveMap.d.ts +39 -10
  41. package/dist/cjs/mcp/cognitiveMap.d.ts.map +1 -1
  42. package/dist/cjs/mcp/cognitiveMap.js +488 -31
  43. package/dist/cjs/mcp/cognitiveMap.js.map +1 -1
  44. package/dist/cjs/mcp/index.js +6 -0
  45. package/dist/cjs/mcp/index.js.map +1 -1
  46. package/dist/cjs/mcp/tools/analysis.d.ts.map +1 -1
  47. package/dist/cjs/mcp/tools/analysis.js +9 -0
  48. package/dist/cjs/mcp/tools/analysis.js.map +1 -1
  49. package/dist/cjs/mcp/tools/codenav.d.ts.map +1 -1
  50. package/dist/cjs/mcp/tools/codenav.js +45 -76
  51. package/dist/cjs/mcp/tools/codenav.js.map +1 -1
  52. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  53. package/dist/cjs/mcp/tools/context-tools.js +28 -0
  54. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  55. package/dist/cjs/mcp/tools/depgraph.d.ts.map +1 -1
  56. package/dist/cjs/mcp/tools/depgraph.js +15 -0
  57. package/dist/cjs/mcp/tools/depgraph.js.map +1 -1
  58. package/dist/cjs/mcp/tools/dev-utils.d.ts.map +1 -1
  59. package/dist/cjs/mcp/tools/dev-utils.js +6 -0
  60. package/dist/cjs/mcp/tools/dev-utils.js.map +1 -1
  61. package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -1
  62. package/dist/cjs/mcp/tools/devtools.js +51 -39
  63. package/dist/cjs/mcp/tools/devtools.js.map +1 -1
  64. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  65. package/dist/cjs/mcp/tools/memory.js +10 -0
  66. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  67. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  68. package/dist/cjs/mcp/tools/misc.js +11 -0
  69. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  70. package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -1
  71. package/dist/cjs/mcp/tools/refactor.js +9 -0
  72. package/dist/cjs/mcp/tools/refactor.js.map +1 -1
  73. package/dist/cjs/mcp/tools.d.ts +1 -0
  74. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  75. package/dist/cjs/mcp/tools.js +44 -7
  76. package/dist/cjs/mcp/tools.js.map +1 -1
  77. package/dist/cjs/proxy/DebuggerState.d.ts +3 -0
  78. package/dist/cjs/proxy/DebuggerState.d.ts.map +1 -0
  79. package/dist/cjs/proxy/DebuggerState.js +18 -0
  80. package/dist/cjs/proxy/DebuggerState.js.map +1 -0
  81. package/dist/cjs/subconscious/TheBrainV2.d.ts +11 -0
  82. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  83. package/dist/cjs/subconscious/TheBrainV2.js +8 -0
  84. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  85. package/dist/cjs/utils/SearchCache.d.ts +2 -2
  86. package/dist/cjs/utils/SearchCache.d.ts.map +1 -1
  87. package/dist/cjs/utils/SearchCache.js +6 -6
  88. package/dist/cjs/utils/SearchCache.js.map +1 -1
  89. package/dist/cjs/utils/WorkspaceSearch.d.ts +3 -1
  90. package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
  91. package/dist/cjs/utils/WorkspaceSearch.js +5 -2
  92. package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
  93. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  94. package/dist/esm/cli/lemma-proxy.js +20 -1
  95. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  96. package/dist/esm/language-core/contracts/CapabilityMatrix.d.ts +10 -0
  97. package/dist/esm/language-core/contracts/CapabilityMatrix.d.ts.map +1 -0
  98. package/dist/esm/language-core/contracts/CapabilityMatrix.js +66 -0
  99. package/dist/esm/language-core/contracts/CapabilityMatrix.js.map +1 -0
  100. package/dist/esm/language-core/detection/detectProjectType.d.ts +17 -0
  101. package/dist/esm/language-core/detection/detectProjectType.d.ts.map +1 -0
  102. package/dist/esm/language-core/detection/detectProjectType.js +150 -0
  103. package/dist/esm/language-core/detection/detectProjectType.js.map +1 -0
  104. package/dist/esm/language-core/registry/adapterRegistry.d.ts +11 -0
  105. package/dist/esm/language-core/registry/adapterRegistry.d.ts.map +1 -0
  106. package/dist/esm/language-core/registry/adapterRegistry.js +41 -0
  107. package/dist/esm/language-core/registry/adapterRegistry.js.map +1 -0
  108. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.d.ts +24 -0
  109. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.d.ts.map +1 -0
  110. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.js +162 -0
  111. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.js.map +1 -0
  112. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts +37 -0
  113. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts.map +1 -0
  114. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.js +44 -0
  115. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.js.map +1 -0
  116. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.d.ts +25 -0
  117. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.d.ts.map +1 -0
  118. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.js +201 -0
  119. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.js.map +1 -0
  120. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.d.ts +18 -0
  121. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.d.ts.map +1 -0
  122. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.js +175 -0
  123. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.js.map +1 -0
  124. package/dist/esm/languages/csharp/csharpSymbols.d.ts +33 -0
  125. package/dist/esm/languages/csharp/csharpSymbols.d.ts.map +1 -0
  126. package/dist/esm/languages/csharp/csharpSymbols.js +268 -0
  127. package/dist/esm/languages/csharp/csharpSymbols.js.map +1 -0
  128. package/dist/esm/mcp/cognitiveMap.d.ts +39 -10
  129. package/dist/esm/mcp/cognitiveMap.d.ts.map +1 -1
  130. package/dist/esm/mcp/cognitiveMap.js +442 -25
  131. package/dist/esm/mcp/cognitiveMap.js.map +1 -1
  132. package/dist/esm/mcp/index.js +6 -0
  133. package/dist/esm/mcp/index.js.map +1 -1
  134. package/dist/esm/mcp/tools/analysis.d.ts.map +1 -1
  135. package/dist/esm/mcp/tools/analysis.js +9 -0
  136. package/dist/esm/mcp/tools/analysis.js.map +1 -1
  137. package/dist/esm/mcp/tools/codenav.d.ts.map +1 -1
  138. package/dist/esm/mcp/tools/codenav.js +46 -77
  139. package/dist/esm/mcp/tools/codenav.js.map +1 -1
  140. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  141. package/dist/esm/mcp/tools/context-tools.js +28 -0
  142. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  143. package/dist/esm/mcp/tools/depgraph.d.ts.map +1 -1
  144. package/dist/esm/mcp/tools/depgraph.js +15 -0
  145. package/dist/esm/mcp/tools/depgraph.js.map +1 -1
  146. package/dist/esm/mcp/tools/dev-utils.d.ts.map +1 -1
  147. package/dist/esm/mcp/tools/dev-utils.js +6 -0
  148. package/dist/esm/mcp/tools/dev-utils.js.map +1 -1
  149. package/dist/esm/mcp/tools/devtools.d.ts.map +1 -1
  150. package/dist/esm/mcp/tools/devtools.js +51 -39
  151. package/dist/esm/mcp/tools/devtools.js.map +1 -1
  152. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  153. package/dist/esm/mcp/tools/memory.js +10 -0
  154. package/dist/esm/mcp/tools/memory.js.map +1 -1
  155. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  156. package/dist/esm/mcp/tools/misc.js +11 -0
  157. package/dist/esm/mcp/tools/misc.js.map +1 -1
  158. package/dist/esm/mcp/tools/refactor.d.ts.map +1 -1
  159. package/dist/esm/mcp/tools/refactor.js +9 -0
  160. package/dist/esm/mcp/tools/refactor.js.map +1 -1
  161. package/dist/esm/mcp/tools.d.ts +1 -0
  162. package/dist/esm/mcp/tools.d.ts.map +1 -1
  163. package/dist/esm/mcp/tools.js +45 -9
  164. package/dist/esm/mcp/tools.js.map +1 -1
  165. package/dist/esm/proxy/DebuggerState.d.ts +3 -0
  166. package/dist/esm/proxy/DebuggerState.d.ts.map +1 -0
  167. package/dist/esm/proxy/DebuggerState.js +14 -0
  168. package/dist/esm/proxy/DebuggerState.js.map +1 -0
  169. package/dist/esm/subconscious/TheBrainV2.d.ts +11 -0
  170. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  171. package/dist/esm/subconscious/TheBrainV2.js +8 -0
  172. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  173. package/dist/esm/utils/SearchCache.d.ts +2 -2
  174. package/dist/esm/utils/SearchCache.d.ts.map +1 -1
  175. package/dist/esm/utils/SearchCache.js +6 -6
  176. package/dist/esm/utils/SearchCache.js.map +1 -1
  177. package/dist/esm/utils/WorkspaceSearch.d.ts +3 -1
  178. package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
  179. package/dist/esm/utils/WorkspaceSearch.js +5 -2
  180. package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
  181. package/mcp-server.js +1 -1
  182. package/package.json +4 -2
  183. package/dashboard/dist/assets/index-Dh-whqJ7.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ const UNIVERSAL_FULL = [
2
+ "read_workspace_file",
3
+ "write_workspace_file",
4
+ "create_workspace_file",
5
+ "list_workspace_dir",
6
+ "search_workspace",
7
+ "smart_file_slice",
8
+ "run_workspace_command",
9
+ "output_region",
10
+ "apply_workspace_patch",
11
+ "search_memory",
12
+ "get_memory",
13
+ "store_memory",
14
+ "cognitive_map",
15
+ "file_intent_index",
16
+ "get_project_onboarding",
17
+ ];
18
+ const TS_SEMANTIC_FULL = [
19
+ "get_ast_hologram",
20
+ "get_symbol_surgical_context",
21
+ "imports_skeleton_resolver",
22
+ "ast_flow_visualizer",
23
+ "surgical_ast_insert",
24
+ "validate_patch_sandbox",
25
+ "depgraph",
26
+ "affected_tests",
27
+ "refactor",
28
+ "refactor_rename",
29
+ "refactor_move",
30
+ "type_coverage_report",
31
+ "entropy_score",
32
+ "dead_export_necromancer",
33
+ "coupling_radar",
34
+ ];
35
+ /**
36
+ * Honest support table. Levels are upgraded by later phases as each capability
37
+ * actually lands (F2: csharp read-only; F3: validate) — never ahead of the code.
38
+ */
39
+ export function getCapabilityMatrix(language) {
40
+ const matrix = {};
41
+ for (const tool of UNIVERSAL_FULL)
42
+ matrix[tool] = "full";
43
+ if (language === "typescript") {
44
+ for (const tool of TS_SEMANTIC_FULL)
45
+ matrix[tool] = "full";
46
+ return matrix;
47
+ }
48
+ if (language === "csharp") {
49
+ // Upgraded as capabilities land (F2: read-only tools via the dotnet adapter).
50
+ matrix.get_ast_hologram = "full";
51
+ matrix.get_symbol_surgical_context = "full";
52
+ matrix.depgraph = "partial";
53
+ matrix.validate_patch_sandbox = "partial";
54
+ for (const tool of TS_SEMANTIC_FULL) {
55
+ if (matrix[tool] === undefined)
56
+ matrix[tool] = "fallback";
57
+ }
58
+ return matrix;
59
+ }
60
+ for (const tool of TS_SEMANTIC_FULL)
61
+ matrix[tool] = "fallback";
62
+ return matrix;
63
+ }
64
+ export const FALLBACK_MESSAGE = "This semantic tool is TypeScript-only today (support level: fallback). Nothing was modified. " +
65
+ "See capability_matrix for the current support level of your project language.";
66
+ //# sourceMappingURL=CapabilityMatrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityMatrix.js","sourceRoot":"","sources":["../../../../src/language-core/contracts/CapabilityMatrix.ts"],"names":[],"mappings":"AAMA,MAAM,cAAc,GAAG;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,eAAe;IACf,uBAAuB;IACvB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,wBAAwB;CAChB,CAAC;AAEX,MAAM,gBAAgB,GAAG;IACvB,kBAAkB;IAClB,6BAA6B;IAC7B,2BAA2B;IAC3B,qBAAqB;IACrB,qBAAqB;IACrB,wBAAwB;IACxB,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,sBAAsB;IACtB,eAAe;IACf,yBAAyB;IACzB,gBAAgB;CACR,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAyB;IAEzB,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,cAAc;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACzD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,gBAAgB;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,8EAA8E;QAC9E,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACjC,MAAM,CAAC,2BAA2B,GAAG,MAAM,CAAC;QAC5C,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,gBAAgB;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAC3B,+FAA+F;IAC/F,+EAA+E,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type ProjectLanguage = "typescript" | "csharp" | "python" | "go" | "rust" | "unknown";
2
+ export interface ProjectDetection {
3
+ /** Primary language (most file evidence; ties break toward typescript). */
4
+ language: ProjectLanguage;
5
+ /** Every language with evidence in this repo (mixed repos report both). */
6
+ languages: ProjectLanguage[];
7
+ /** Human-readable evidence, capped (paths relative to root). */
8
+ evidence: string[];
9
+ /** Detected frameworks/TFMs, e.g. ["net8.0", "react"]. */
10
+ frameworks: string[];
11
+ }
12
+ /**
13
+ * Detect the project language from repo evidence (never from user declaration).
14
+ * Name-only scan + capped csproj reads: no content indexing, no LLM, no tokens.
15
+ */
16
+ export declare function detectProjectType(root?: string): ProjectDetection;
17
+ //# sourceMappingURL=detectProjectType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectProjectType.d.ts","sourceRoot":"","sources":["../../../../src/language-core/detection/detectProjectType.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,IAAI,GACJ,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,EAAE,eAAe,CAAC;IAC1B,2EAA2E;IAC3E,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAsDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,GAAE,MAAsB,GAC3B,gBAAgB,CAkFlB"}
@@ -0,0 +1,150 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ const MAX_SCAN_FILES = 200;
4
+ const MAX_EVIDENCE = 10;
5
+ const SKIP_DIRS = new Set([
6
+ "node_modules",
7
+ ".git",
8
+ "dist",
9
+ "build",
10
+ "bin",
11
+ "obj",
12
+ ".lemma",
13
+ "coverage",
14
+ ]);
15
+ function listFiles(root) {
16
+ const out = [];
17
+ const walk = (rel, depth) => {
18
+ if (depth > 3 || out.length >= MAX_SCAN_FILES)
19
+ return;
20
+ let entries;
21
+ try {
22
+ entries = fs.readdirSync(path.join(root, rel), { withFileTypes: true });
23
+ }
24
+ catch {
25
+ return;
26
+ }
27
+ for (const e of entries) {
28
+ if (SKIP_DIRS.has(e.name))
29
+ continue;
30
+ const r = rel ? `${rel}/${e.name}` : e.name;
31
+ if (e.isDirectory())
32
+ walk(r, depth + 1);
33
+ else {
34
+ out.push(r);
35
+ if (out.length >= MAX_SCAN_FILES)
36
+ return;
37
+ }
38
+ }
39
+ };
40
+ walk("", 0);
41
+ return out;
42
+ }
43
+ function readCapped(abs, maxBytes = 100000) {
44
+ try {
45
+ const st = fs.statSync(abs);
46
+ if (!st.isFile() || st.size > maxBytes)
47
+ return null;
48
+ return fs.readFileSync(abs, "utf8");
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ function pushEvidence(evidence, item) {
55
+ if (evidence.length < MAX_EVIDENCE && !evidence.includes(item))
56
+ evidence.push(item);
57
+ }
58
+ /**
59
+ * Detect the project language from repo evidence (never from user declaration).
60
+ * Name-only scan + capped csproj reads: no content indexing, no LLM, no tokens.
61
+ */
62
+ export function detectProjectType(root = process.cwd()) {
63
+ const resolved = path.resolve(root);
64
+ const counts = {
65
+ typescript: 0,
66
+ csharp: 0,
67
+ python: 0,
68
+ go: 0,
69
+ rust: 0,
70
+ };
71
+ const evidence = [];
72
+ const frameworks = [];
73
+ const pushFramework = (f) => {
74
+ const norm = f.trim().toLowerCase();
75
+ if (norm && !frameworks.includes(norm))
76
+ frameworks.push(norm);
77
+ };
78
+ let files;
79
+ try {
80
+ files = listFiles(resolved);
81
+ }
82
+ catch {
83
+ files = [];
84
+ }
85
+ for (const rel of files) {
86
+ const lower = rel.toLowerCase();
87
+ if (lower.endsWith("tsconfig.json") || lower === "package.json") {
88
+ counts.typescript += 3;
89
+ pushEvidence(evidence, rel);
90
+ }
91
+ else if (/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(lower)) {
92
+ counts.typescript += 1;
93
+ }
94
+ else if (lower.endsWith(".csproj")) {
95
+ counts.csharp += 3;
96
+ pushEvidence(evidence, rel);
97
+ const content = readCapped(path.join(resolved, rel));
98
+ if (content) {
99
+ const tfm = content.match(/<TargetFramework>\s*([^<]+?)\s*<\/TargetFramework>/i);
100
+ if (tfm)
101
+ pushFramework(tfm[1]);
102
+ const tfms = content.match(/<TargetFrameworks>\s*([^<]+?)\s*<\/TargetFrameworks>/i);
103
+ if (tfms)
104
+ tfms[1].split(";").forEach(pushFramework);
105
+ }
106
+ }
107
+ else if (lower.endsWith(".sln")) {
108
+ counts.csharp += 2;
109
+ pushEvidence(evidence, rel);
110
+ }
111
+ else if (lower.endsWith(".cs")) {
112
+ counts.csharp += 1;
113
+ }
114
+ else if (lower === "pyproject.toml" ||
115
+ lower === "setup.py" ||
116
+ lower.endsWith(".py")) {
117
+ counts.python += lower.endsWith(".py") ? 1 : 3;
118
+ if (!lower.endsWith(".py"))
119
+ pushEvidence(evidence, rel);
120
+ }
121
+ else if (lower === "go.mod" || lower.endsWith(".go")) {
122
+ counts.go += lower.endsWith(".go") ? 1 : 3;
123
+ if (!lower.endsWith(".go"))
124
+ pushEvidence(evidence, rel);
125
+ }
126
+ else if (lower === "cargo.toml" || lower.endsWith(".rs")) {
127
+ counts.rust += lower.endsWith(".rs") ? 1 : 3;
128
+ if (!lower.endsWith(".rs"))
129
+ pushEvidence(evidence, rel);
130
+ }
131
+ }
132
+ const order = [
133
+ "typescript",
134
+ "csharp",
135
+ "python",
136
+ "go",
137
+ "rust",
138
+ ];
139
+ const ranked = order
140
+ .filter((l) => counts[l] > 0)
141
+ .sort((a, b) => counts[b] - counts[a]);
142
+ // Tie-break toward typescript preserves pre-detection behavior for TS repos.
143
+ return {
144
+ language: ranked[0] ?? "unknown",
145
+ languages: ranked,
146
+ evidence,
147
+ frameworks,
148
+ };
149
+ }
150
+ //# sourceMappingURL=detectProjectType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectProjectType.js","sourceRoot":"","sources":["../../../../src/language-core/detection/detectProjectType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAqB7B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;QAChD,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,cAAc;YAAE,OAAO;QACtD,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;iBACnC,CAAC;gBACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACZ,IAAI,GAAG,CAAC,MAAM,IAAI,cAAc;oBAAE,OAAO;YAC3C,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,QAAQ,GAAG,MAAO;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAkB,EAAE,IAAY;IACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,OAAO,CAAC,GAAG,EAAE;IAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAwD;QAClE,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,CAAC;QACL,IAAI,EAAE,CAAC;KACR,CAAC;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,CAAC,CAAS,EAAQ,EAAE;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAChE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACvB,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CACvB,qDAAqD,CACtD,CAAC;gBACF,IAAI,GAAG;oBAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CACxB,uDAAuD,CACxD,CAAC;gBACF,IAAI,IAAI;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IACL,KAAK,KAAK,gBAAgB;YAC1B,KAAK,KAAK,UAAU;YACpB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EACrB,CAAC;YACD,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA0C;QACnD,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,IAAI;QACJ,MAAM;KACP,CAAC;IACF,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,6EAA6E;IAC7E,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS;QAChC,SAAS,EAAE,MAAM;QACjB,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type AdapterId = "typescript" | "dotnet";
2
+ /**
3
+ * File-aware routing. Returns "dotnet" only for C# files inside a repo with
4
+ * C# evidence; "typescript" for TS/JS files; null when nothing applies.
5
+ * Callers fall through to the legacy TypeScript path on anything but "dotnet",
6
+ * so TypeScript behavior is structurally unchanged.
7
+ */
8
+ export declare function resolveAdapterForFile(root: string, filePath: string): AdapterId | null;
9
+ /** Directory/repo-level routing (used by dir-scoped tools like hologram). */
10
+ export declare function resolveAdapterForProject(root: string): AdapterId | null;
11
+ //# sourceMappingURL=adapterRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterRegistry.d.ts","sourceRoot":"","sources":["../../../../src/language-core/registry/adapterRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAKhD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI,CAalB;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CASvE"}
@@ -0,0 +1,41 @@
1
+ import { detectProjectType } from "../detection/detectProjectType.js";
2
+ const TS_EXT = /\.(ts|tsx|js|jsx|mjs|cjs)$/i;
3
+ const CS_EXT = /\.(cs|csproj|sln)$/i;
4
+ /**
5
+ * File-aware routing. Returns "dotnet" only for C# files inside a repo with
6
+ * C# evidence; "typescript" for TS/JS files; null when nothing applies.
7
+ * Callers fall through to the legacy TypeScript path on anything but "dotnet",
8
+ * so TypeScript behavior is structurally unchanged.
9
+ */
10
+ export function resolveAdapterForFile(root, filePath) {
11
+ const lower = (filePath || "").toLowerCase();
12
+ if (CS_EXT.test(lower)) {
13
+ try {
14
+ const det = detectProjectType(root);
15
+ if (det.languages.includes("csharp"))
16
+ return "dotnet";
17
+ }
18
+ catch {
19
+ // detection failed — fall through to legacy path
20
+ }
21
+ return null;
22
+ }
23
+ if (TS_EXT.test(lower))
24
+ return "typescript";
25
+ return null;
26
+ }
27
+ /** Directory/repo-level routing (used by dir-scoped tools like hologram). */
28
+ export function resolveAdapterForProject(root) {
29
+ try {
30
+ const det = detectProjectType(root);
31
+ if (det.language === "csharp")
32
+ return "dotnet";
33
+ if (det.language === "typescript")
34
+ return "typescript";
35
+ }
36
+ catch {
37
+ // fall through
38
+ }
39
+ return null;
40
+ }
41
+ //# sourceMappingURL=adapterRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterRegistry.js","sourceRoot":"","sources":["../../../../src/language-core/registry/adapterRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAC7C,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAErC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,QAAgB;IAEhB,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY;YAAE,OAAO,YAAY,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface DotNetFileNode {
2
+ file: string;
3
+ namespaces: string[];
4
+ usings: string[];
5
+ /** Resolved edges: { via: using, to: file } */
6
+ resolved: Array<{
7
+ via: string;
8
+ to: string;
9
+ }>;
10
+ /** Usings with no in-repo declaration (System.*, xunit, …) — capped. */
11
+ unresolved: string[];
12
+ }
13
+ export declare function buildDotNetGraphMap(root: string): Map<string, DotNetFileNode>;
14
+ export interface DotNetGraphOptions {
15
+ reverse?: boolean;
16
+ depth?: number;
17
+ format?: string;
18
+ }
19
+ /**
20
+ * Using-based .NET dependency view. PARTIAL by design: namespace resolution is
21
+ * lexical (no Roslyn), external packages surface as `unresolved`, never as edges.
22
+ */
23
+ export declare function formatDotNetDepGraph(root: string, targetRel: string, opts?: DotNetGraphOptions): string;
24
+ //# sourceMappingURL=DotNetDependencyGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotNetDependencyGraph.d.ts","sourceRoot":"","sources":["../../../../../src/languages/adapters/dotnet/DotNetDependencyGraph.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA+BD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA+C7E;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiCD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,kBAAuB,GAC5B,MAAM,CAuDR"}
@@ -0,0 +1,162 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { parseCSharpFile } from "../../csharp/csharpSymbols.js";
4
+ const MAX_FILES = 500;
5
+ function listCsFiles(root) {
6
+ const out = [];
7
+ const walk = (dir, rel) => {
8
+ if (out.length >= MAX_FILES)
9
+ return;
10
+ let entries;
11
+ try {
12
+ entries = fs.readdirSync(dir, { withFileTypes: true });
13
+ }
14
+ catch {
15
+ return;
16
+ }
17
+ for (const e of entries) {
18
+ if (["node_modules", ".git", "bin", "obj", "dist", ".lemma"].includes(e.name))
19
+ continue;
20
+ const r = rel ? `${rel}/${e.name}` : e.name;
21
+ if (e.isDirectory())
22
+ walk(path.join(dir, e.name), r);
23
+ else if (e.name.toLowerCase().endsWith(".cs")) {
24
+ out.push(r);
25
+ if (out.length >= MAX_FILES)
26
+ return;
27
+ }
28
+ }
29
+ };
30
+ walk(root, "");
31
+ return out;
32
+ }
33
+ export function buildDotNetGraphMap(root) {
34
+ const files = listCsFiles(root);
35
+ const map = new Map();
36
+ const nsToFiles = new Map();
37
+ const parsed = new Map();
38
+ for (const rel of files) {
39
+ let content;
40
+ try {
41
+ content = fs.readFileSync(path.join(root, rel), "utf8");
42
+ }
43
+ catch {
44
+ continue;
45
+ }
46
+ const syms = parseCSharpFile(content);
47
+ parsed.set(rel, syms);
48
+ for (const ns of syms.namespaces) {
49
+ const list = nsToFiles.get(ns) ?? [];
50
+ list.push(rel);
51
+ nsToFiles.set(ns, list);
52
+ }
53
+ }
54
+ for (const [rel, syms] of parsed) {
55
+ const node = {
56
+ file: rel,
57
+ namespaces: syms.namespaces,
58
+ usings: syms.usings,
59
+ resolved: [],
60
+ unresolved: [],
61
+ };
62
+ for (const using of syms.usings) {
63
+ const targets = (nsToFiles.get(using) ?? []).filter((f) => f !== rel);
64
+ if (targets.length > 0) {
65
+ for (const to of targets) {
66
+ if (!node.resolved.some((r) => r.to === to && r.via === using))
67
+ node.resolved.push({ via: using, to });
68
+ }
69
+ }
70
+ else if (!node.unresolved.includes(using) &&
71
+ node.unresolved.length < 20) {
72
+ node.unresolved.push(using);
73
+ }
74
+ }
75
+ map.set(rel, node);
76
+ }
77
+ return map;
78
+ }
79
+ function bfs(map, start, direction, maxDepth) {
80
+ const seen = new Map([[start, 0]]);
81
+ const queue = [start];
82
+ while (queue.length > 0) {
83
+ const cur = queue.shift();
84
+ const d = seen.get(cur);
85
+ if (d >= maxDepth)
86
+ continue;
87
+ const next = [];
88
+ if (direction === "forward") {
89
+ const node = map.get(cur);
90
+ if (node)
91
+ for (const r of node.resolved)
92
+ next.push(r.to);
93
+ }
94
+ else {
95
+ for (const [file, node] of map) {
96
+ if (node.resolved.some((r) => r.to === cur))
97
+ next.push(file);
98
+ }
99
+ }
100
+ for (const n of next) {
101
+ if (!seen.has(n)) {
102
+ seen.set(n, d + 1);
103
+ queue.push(n);
104
+ }
105
+ }
106
+ }
107
+ return seen;
108
+ }
109
+ /**
110
+ * Using-based .NET dependency view. PARTIAL by design: namespace resolution is
111
+ * lexical (no Roslyn), external packages surface as `unresolved`, never as edges.
112
+ */
113
+ export function formatDotNetDepGraph(root, targetRel, opts = {}) {
114
+ const map = buildDotNetGraphMap(root);
115
+ const node = map.get(targetRel);
116
+ if (!node) {
117
+ return `File not found in .NET workspace graph: ${targetRel}\nCheck path is correct and has a .cs extension.`;
118
+ }
119
+ const depth = Math.min(Math.max(opts.depth ?? 1, 1), 5);
120
+ const reverse = opts.reverse !== false;
121
+ const forward = bfs(map, targetRel, "forward", depth);
122
+ const backward = reverse
123
+ ? bfs(map, targetRel, "backward", depth)
124
+ : new Map();
125
+ if (opts.format === "json") {
126
+ return JSON.stringify({
127
+ target: targetRel,
128
+ language: "dotnet",
129
+ partial: true,
130
+ dependsOn: [...forward.keys()].filter((f) => f !== targetRel),
131
+ dependedOnBy: [...backward.keys()].filter((f) => f !== targetRel),
132
+ unresolvedUsings: node.unresolved,
133
+ }, null, 2);
134
+ }
135
+ const lines = [
136
+ `### .NET dependency graph for \`${targetRel}\` (partial: using-based, depth ${depth})`,
137
+ `\nDepends on (${forward.size - 1}):`,
138
+ ];
139
+ for (const [file, d] of [...forward.entries()]
140
+ .filter(([f]) => f !== targetRel)
141
+ .sort((a, b) => a[1] - b[1])) {
142
+ const via = map
143
+ .get(targetRel)
144
+ ?.resolved.filter((r) => r.to === file)
145
+ .map((r) => r.via)
146
+ .join(", ");
147
+ lines.push(` - ${file} (depth ${d}${via ? ` via ${via}` : ""})`);
148
+ }
149
+ if (reverse) {
150
+ lines.push(`\nDepended on by (${backward.size - 1}):`);
151
+ for (const [file, d] of [...backward.entries()]
152
+ .filter(([f]) => f !== targetRel)
153
+ .sort((a, b) => a[1] - b[1])) {
154
+ lines.push(` - ${file} (depth ${d})`);
155
+ }
156
+ }
157
+ if (node.unresolved.length > 0) {
158
+ lines.push(`\nUnresolved usings (external packages / framework, not edges): ${node.unresolved.join(", ")}`);
159
+ }
160
+ return lines.join("\n");
161
+ }
162
+ //# sourceMappingURL=DotNetDependencyGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotNetDependencyGraph.js","sourceRoot":"","sources":["../../../../../src/languages/adapters/dotnet/DotNetDependencyGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const DOTNET_SUPPORT: {
2
+ readonly get_ast_hologram: "full";
3
+ readonly get_symbol_surgical_context: "full";
4
+ readonly depgraph: "partial";
5
+ readonly validate_patch_sandbox: "partial";
6
+ readonly refactor: "fallback";
7
+ readonly refactor_rename: "fallback";
8
+ readonly refactor_move: "fallback";
9
+ readonly surgical_ast_insert: "fallback";
10
+ readonly type_coverage_report: "fallback";
11
+ readonly entropy_score: "fallback";
12
+ };
13
+ /** True when this file/dir target should be served by the .NET adapter. */
14
+ export declare function isDotNetTarget(root: string, fileOrDir: string): boolean;
15
+ export declare function dotNetHologramResult(root: string, dirRel: string): {
16
+ content: Array<{
17
+ type: string;
18
+ text: string;
19
+ }>;
20
+ };
21
+ export declare function dotNetSurgicalResult(root: string, filePath: string, symbolName: string): {
22
+ content: Array<{
23
+ type: string;
24
+ text: string;
25
+ }>;
26
+ };
27
+ export declare function dotNetDepgraphResult(root: string, filePath: string, opts: {
28
+ reverse?: boolean;
29
+ depth?: number;
30
+ format?: string;
31
+ }): {
32
+ content: Array<{
33
+ type: string;
34
+ text: string;
35
+ }>;
36
+ };
37
+ //# sourceMappingURL=DotNetLanguageAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotNetLanguageAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/languages/adapters/dotnet/DotNetLanguageAdapter.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKvE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAIpD;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAMpD;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAMpD"}
@@ -0,0 +1,44 @@
1
+ import { resolveAdapterForFile, resolveAdapterForProject, } from "../../../language-core/registry/adapterRegistry.js";
2
+ import { formatDotNetDepGraph } from "./DotNetDependencyGraph.js";
3
+ import { dotNetSurgicalContext, formatDotNetHologram, } from "./DotNetSymbolGraph.js";
4
+ export const DOTNET_SUPPORT = {
5
+ get_ast_hologram: "full",
6
+ get_symbol_surgical_context: "full",
7
+ depgraph: "partial",
8
+ validate_patch_sandbox: "partial",
9
+ refactor: "fallback",
10
+ refactor_rename: "fallback",
11
+ refactor_move: "fallback",
12
+ surgical_ast_insert: "fallback",
13
+ type_coverage_report: "fallback",
14
+ entropy_score: "fallback",
15
+ };
16
+ /** True when this file/dir target should be served by the .NET adapter. */
17
+ export function isDotNetTarget(root, fileOrDir) {
18
+ if (!fileOrDir)
19
+ return resolveAdapterForProject(root) === "dotnet";
20
+ const byFile = resolveAdapterForFile(root, fileOrDir);
21
+ if (byFile)
22
+ return byFile === "dotnet";
23
+ return resolveAdapterForProject(root) === "dotnet";
24
+ }
25
+ export function dotNetHologramResult(root, dirRel) {
26
+ return {
27
+ content: [{ type: "text", text: formatDotNetHologram(root, dirRel) }],
28
+ };
29
+ }
30
+ export function dotNetSurgicalResult(root, filePath, symbolName) {
31
+ return {
32
+ content: [
33
+ { type: "text", text: dotNetSurgicalContext(root, filePath, symbolName) },
34
+ ],
35
+ };
36
+ }
37
+ export function dotNetDepgraphResult(root, filePath, opts) {
38
+ return {
39
+ content: [
40
+ { type: "text", text: formatDotNetDepGraph(root, filePath, opts) },
41
+ ],
42
+ };
43
+ }
44
+ //# sourceMappingURL=DotNetLanguageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotNetLanguageAdapter.js","sourceRoot":"","sources":["../../../../../src/languages/adapters/dotnet/DotNetLanguageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GAEzB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,gBAAgB,EAAE,MAAM;IACxB,2BAA2B,EAAE,MAAM;IACnC,QAAQ,EAAE,SAAS;IACnB,sBAAsB,EAAE,SAAS;IACjC,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,UAAU;IAC/B,oBAAoB,EAAE,UAAU;IAChC,aAAa,EAAE,UAAU;CACjB,CAAC;AAEX,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,SAAiB;IAC5D,IAAI,CAAC,SAAS;QAAE,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;IACnE,MAAM,MAAM,GAAqB,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxE,IAAI,MAAM;QAAE,OAAO,MAAM,KAAK,QAAQ,CAAC;IACvC,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,MAAc;IAEd,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,QAAgB,EAChB,UAAkB;IAElB,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;SAC1E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,QAAgB,EAChB,IAA4D;IAE5D,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;SACnE;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface DotNetValidation {
2
+ verdict: "SAFE TO APPLY" | "DO NOT APPLY -- Issues Found";
3
+ syntaxBalanced: boolean;
4
+ /** Human-readable outcome; explicit about whether a real build ran. */
5
+ csharpCheck: string;
6
+ buildAttempted: boolean;
7
+ }
8
+ /** Injectable CLI runner so unit tests never need the .NET SDK installed. */
9
+ export type DotNetRunner = (args: string[], cwd: string) => string;
10
+ export declare function defaultDotNetRunner(args: string[], cwd: string): string;
11
+ /** Cached `dotnet --version` probe. Never throws. */
12
+ export declare function isDotnetAvailable(): boolean;
13
+ export declare function resetDotnetAvailabilityCache(): void;
14
+ /** Nearest .csproj at or above the target file, relative to root. Null if none. */
15
+ export declare function findNearestCsproj(root: string, fileRel: string): string | null;
16
+ /**
17
+ * Three-level C# patch validation:
18
+ * 1. `dotnet build` on a temp copy of the owning project (real compiler).
19
+ * 2. Structural check (brackets + C# parse smoke) with an explicit disclaimer.
20
+ * 3. Never the TypeScript path — callers route here only for C# targets.
21
+ */
22
+ export declare function validateCSharpPatch(root: string, fileRel: string, patchedContent: string, runner?: DotNetRunner, opts?: {
23
+ dotnetAvailable?: boolean;
24
+ }): DotNetValidation;
25
+ //# sourceMappingURL=DotNetPatchValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotNetPatchValidator.d.ts","sourceRoot":"","sources":["../../../../../src/languages/adapters/dotnet/DotNetPatchValidator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,GAAG,8BAA8B,CAAC;IAC1D,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQvE;AAID,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAiBf;AAyDD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,YAAkC,EAC1C,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,gBAAgB,CAwFlB"}