@mrclrchtr/supi-code-intelligence 1.8.0 → 1.9.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 (159) hide show
  1. package/README.md +17 -1
  2. package/node_modules/@mrclrchtr/supi-code-runtime/README.md +13 -0
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +97 -0
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +53 -0
  5. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +30 -0
  6. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +76 -0
  7. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +186 -0
  8. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
  9. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +119 -0
  10. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +36 -0
  11. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +31 -0
  12. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
  13. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +255 -0
  14. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +30 -0
  15. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +40 -0
  16. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
  17. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +170 -0
  18. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
  19. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +86 -0
  20. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +29 -0
  21. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
  22. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +15 -0
  23. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +41 -0
  24. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +226 -0
  25. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
  26. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
  27. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
  28. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +60 -0
  29. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +116 -0
  30. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
  31. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +40 -0
  32. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +35 -0
  33. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +68 -0
  34. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +31 -0
  35. package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +110 -0
  36. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +41 -0
  37. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +170 -0
  38. package/node_modules/@mrclrchtr/supi-core/README.md +3 -13
  39. package/node_modules/@mrclrchtr/supi-core/package.json +1 -7
  40. package/node_modules/@mrclrchtr/supi-lsp/README.md +20 -2
  41. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +13 -0
  42. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +97 -0
  43. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +57 -0
  44. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +30 -0
  45. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +76 -0
  46. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +186 -0
  47. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
  48. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +119 -0
  49. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +36 -0
  50. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +31 -0
  51. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
  52. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +255 -0
  53. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +30 -0
  54. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +40 -0
  55. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
  56. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +170 -0
  57. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
  58. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +86 -0
  59. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +29 -0
  60. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
  61. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +15 -0
  62. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +41 -0
  63. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +226 -0
  64. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
  65. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
  66. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
  67. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +60 -0
  68. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +116 -0
  69. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
  70. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +40 -0
  71. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +35 -0
  72. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +68 -0
  73. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +31 -0
  74. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +110 -0
  75. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +41 -0
  76. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +170 -0
  77. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/README.md +3 -13
  78. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +1 -7
  79. package/node_modules/@mrclrchtr/supi-lsp/package.json +9 -6
  80. package/node_modules/@mrclrchtr/supi-lsp/src/handlers/session-lifecycle.ts +17 -7
  81. package/node_modules/@mrclrchtr/supi-lsp/src/lsp.ts +3 -1
  82. package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +24 -0
  83. package/node_modules/@mrclrchtr/supi-lsp/src/manager/client-pool.ts +33 -0
  84. package/node_modules/@mrclrchtr/supi-lsp/src/manager/diagnostic-store.ts +51 -0
  85. package/node_modules/@mrclrchtr/supi-lsp/src/manager/recovery-coordinator.ts +37 -0
  86. package/node_modules/@mrclrchtr/supi-lsp/src/manager/workspace-router.ts +44 -0
  87. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +156 -0
  88. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +39 -0
  89. package/node_modules/@mrclrchtr/supi-lsp/src/tool/register-tools.ts +0 -1
  90. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +18 -1
  91. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +13 -0
  92. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +97 -0
  93. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +57 -0
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +30 -0
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +76 -0
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +186 -0
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +11 -0
  98. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +119 -0
  99. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +36 -0
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +31 -0
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +16 -0
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +255 -0
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +30 -0
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +40 -0
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +2 -0
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +170 -0
  107. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +15 -0
  108. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +86 -0
  109. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +29 -0
  110. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +4 -0
  111. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +15 -0
  112. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +41 -0
  113. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +226 -0
  114. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -0
  115. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +9 -0
  116. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +11 -0
  117. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +60 -0
  118. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +116 -0
  119. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +2 -0
  120. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +40 -0
  121. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +35 -0
  122. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +68 -0
  123. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +31 -0
  124. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +110 -0
  125. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +41 -0
  126. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/runtime.ts +170 -0
  127. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/README.md +3 -13
  128. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +1 -7
  129. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +9 -6
  130. package/node_modules/@mrclrchtr/supi-tree-sitter/src/provider/tree-sitter-provider.ts +144 -0
  131. package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/runtime-registration.ts +37 -0
  132. package/node_modules/@mrclrchtr/supi-tree-sitter/src/tree-sitter.ts +18 -8
  133. package/package.json +8 -6
  134. package/src/api.ts +31 -16
  135. package/src/brief-focused.ts +2 -2
  136. package/src/brief.ts +2 -2
  137. package/src/code-intelligence.ts +13 -1
  138. package/src/index.ts +29 -16
  139. package/src/{architecture.ts → model.ts} +20 -61
  140. package/src/presentation/markdown/brief.ts +2 -2
  141. package/src/substrates/types.ts +22 -105
  142. package/src/targeting/resolve-file.ts +4 -7
  143. package/src/tool/execute-affected.ts +25 -1
  144. package/src/tool/execute-brief.ts +5 -4
  145. package/src/tool/execute-pattern.ts +4 -3
  146. package/src/tool/execute-relations.ts +22 -1
  147. package/src/types.ts +101 -3
  148. package/src/use-case/build-overview.ts +1 -1
  149. package/src/use-case/generate-affected.ts +25 -7
  150. package/src/use-case/generate-brief.ts +31 -14
  151. package/src/use-case/generate-pattern.ts +9 -9
  152. package/src/use-case/generate-relations.ts +66 -20
  153. package/src/use-case/types.ts +3 -3
  154. package/src/workspace/request-context.ts +139 -0
  155. package/node_modules/@mrclrchtr/supi-core/src/extension.ts +0 -1
  156. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/extension.ts +0 -1
  157. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/extension.ts +0 -1
  158. package/src/substrates/lsp-adapter.ts +0 -197
  159. package/src/substrates/tree-sitter-adapter.ts +0 -173
@@ -1,197 +0,0 @@
1
- // LSP semantic substrate adapter — wraps SessionLspService into SemanticSubstrate.
2
-
3
- import type { CodeLocation, CodePosition } from "@mrclrchtr/supi-core/types";
4
- import {
5
- getSessionLspService,
6
- type SessionLspService,
7
- waitForSessionLspService,
8
- } from "@mrclrchtr/supi-lsp/api";
9
- import type { CodeSymbol, SemanticSubstrate } from "./types.ts";
10
-
11
- const SYMBOL_KIND_NAMES: Record<number, string> = {
12
- 1: "File",
13
- 2: "Module",
14
- 3: "Namespace",
15
- 4: "Package",
16
- 5: "Class",
17
- 6: "Method",
18
- 7: "Property",
19
- 8: "Field",
20
- 9: "Constructor",
21
- 10: "Enum",
22
- 11: "Interface",
23
- 12: "Function",
24
- 13: "Variable",
25
- 14: "Constant",
26
- 15: "String",
27
- 16: "Number",
28
- 17: "Boolean",
29
- 18: "Array",
30
- 19: "Object",
31
- 20: "Key",
32
- 21: "Null",
33
- 22: "EnumMember",
34
- 23: "Struct",
35
- 24: "Event",
36
- 25: "Operator",
37
- 26: "TypeParameter",
38
- };
39
-
40
- function symbolKindName(kind: number): string {
41
- return SYMBOL_KIND_NAMES[kind] ?? "Unknown";
42
- }
43
-
44
- /**
45
- * Create a SemanticSubstrate backed by the session-scoped LSP service.
46
- *
47
- * The adapter handles service acquisition, readiness waiting, and
48
- * normalizes LSP types into CodeLocation / CodeSymbol.
49
- */
50
- export function createSemanticSubstrate(cwd: string): SemanticSubstrate {
51
- return {
52
- references: async (filePath, position) =>
53
- withService(cwd, (lsp) =>
54
- lsp.references(filePath, position).then((locs) =>
55
- locs
56
- ? locs.map((l: { uri: string; range: { start: CodePosition; end: CodePosition } }) => ({
57
- uri: l.uri,
58
- range: l.range,
59
- }))
60
- : null,
61
- ),
62
- ),
63
-
64
- implementation: async (filePath, position) =>
65
- withService(cwd, async (lsp) => {
66
- const result = await lsp.implementation(filePath, position);
67
- if (!result) return null;
68
- const list: Array<Record<string, unknown>> = Array.isArray(result) ? result : [result];
69
- return list.map(toCodeLocation).filter(Boolean) as CodeLocation[];
70
- }),
71
-
72
- documentSymbols: async (filePath) =>
73
- withService(cwd, async (lsp) => {
74
- const symbols = await lsp.documentSymbols(filePath);
75
- if (!symbols) return null;
76
- return flattenDocumentSymbols(symbols, filePath);
77
- }),
78
-
79
- workspaceSymbols: async (query) =>
80
- withService(cwd, async (lsp) => {
81
- const results = await lsp.workspaceSymbol(query);
82
- if (!results) return null;
83
- return results.map(toCodeSymbol);
84
- }),
85
- };
86
- }
87
-
88
- // ── Acquisition ─────────────────────────────────────────────────────
89
-
90
- async function acquire(cwd: string): Promise<SessionLspService | null> {
91
- const state = getSessionLspService(cwd);
92
- if (state.kind === "ready") return state.service;
93
- if (state.kind === "pending") {
94
- const waited = await waitForSessionLspService(cwd, 250);
95
- return waited.kind === "ready" ? waited.service : null;
96
- }
97
- return null;
98
- }
99
-
100
- async function withService<T>(
101
- cwd: string,
102
- fn: (lsp: SessionLspService) => Promise<T | null>,
103
- ): Promise<T | null> {
104
- const lsp = await acquire(cwd);
105
- if (!lsp) return null;
106
- return fn(lsp);
107
- }
108
-
109
- // ── Type mapping ────────────────────────────────────────────────────
110
-
111
- function toCodeLocation(loc: Record<string, unknown>): CodeLocation | null {
112
- const uri = loc.uri ?? loc.targetUri;
113
- // LocationLink has targetSelectionRange (precise symbol span) and targetRange (full range).
114
- // Location has range only. Prefer the most precise: targetSelectionRange > targetRange > range.
115
- const range = loc.targetSelectionRange ?? loc.targetRange ?? loc.range;
116
- if (typeof uri !== "string") return null;
117
- if (!range || typeof range !== "object") return null;
118
- const r = range as { start: Record<string, unknown>; end: Record<string, unknown> };
119
- const start = r.start;
120
- const end = r.end;
121
- if (!start || !end) return null;
122
- return {
123
- uri,
124
- range: {
125
- start: { line: (start.line as number) ?? 0, character: (start.character as number) ?? 0 },
126
- end: { line: (end.line as number) ?? 0, character: (end.character as number) ?? 0 },
127
- },
128
- };
129
- }
130
-
131
- function flattenDocumentSymbols(
132
- symbols: Array<{
133
- name: string;
134
- kind: number;
135
- selectionRange?: { start: { line: number; character: number } };
136
- children?: Array<unknown>;
137
- }>,
138
- filePath: string,
139
- container: string | null = null,
140
- ): CodeSymbol[] {
141
- const result: CodeSymbol[] = [];
142
-
143
- for (const sym of symbols) {
144
- const start =
145
- sym.selectionRange?.start ??
146
- (sym as { location?: { range?: { start: { line: number; character: number } } } }).location
147
- ?.range?.start;
148
- if (!start) continue;
149
-
150
- result.push({
151
- name: sym.name,
152
- kind: symbolKindName(sym.kind),
153
- file: filePath,
154
- line: start.line + 1,
155
- character: start.character + 1,
156
- container,
157
- });
158
-
159
- if (Array.isArray(sym.children) && sym.children.length > 0) {
160
- result.push(
161
- ...flattenDocumentSymbols(
162
- sym.children as Array<{
163
- name: string;
164
- kind: number;
165
- selectionRange?: { start: { line: number; character: number } };
166
- children?: Array<unknown>;
167
- }>,
168
- filePath,
169
- sym.name,
170
- ),
171
- );
172
- }
173
- }
174
-
175
- return result;
176
- }
177
-
178
- function toCodeSymbol(sym: {
179
- name: string;
180
- kind: number;
181
- containerName?: string | null;
182
- location?: {
183
- uri: string;
184
- range?: { start: { line: number; character: number } };
185
- } | null;
186
- }): CodeSymbol {
187
- const uri = sym.location?.uri ?? "";
188
- const start = sym.location?.range?.start;
189
- return {
190
- name: sym.name,
191
- kind: symbolKindName(sym.kind),
192
- file: uri.startsWith("file://") ? decodeURIComponent(uri.slice(7)) : uri,
193
- line: start ? start.line + 1 : 0,
194
- character: start ? start.character + 1 : 0,
195
- container: sym.containerName ?? null,
196
- };
197
- }
@@ -1,173 +0,0 @@
1
- // Tree-sitter structural substrate adapter — wraps TreeSitterService into StructuralSubstrate.
2
-
3
- import {
4
- createTreeSitterSession,
5
- getSessionTreeSitterService,
6
- } from "@mrclrchtr/supi-tree-sitter/api";
7
- import type {
8
- CalleesData,
9
- ExportData,
10
- ImportData,
11
- NodeAtData,
12
- OutlineData,
13
- StructuralResult,
14
- StructuralSubstrate,
15
- } from "./types.ts";
16
-
17
- /**
18
- * Create a StructuralSubstrate backed by the tree-sitter service.
19
- *
20
- * Reuses the shared session-scoped service when available, falling back to
21
- * a short-lived owned session (disposed after the operation).
22
- */
23
- export function createStructuralSubstrate(cwd: string): StructuralSubstrate {
24
- return {
25
- calleesAt: (file, line, character) =>
26
- withSession(cwd, (s) => s.calleesAt(file, line, character)).then(mapResult(mapCallees)),
27
-
28
- exports: (file) => withSession(cwd, (s) => s.exports(file)).then(mapResult(mapExports)),
29
-
30
- outline: (file) => withSession(cwd, (s) => s.outline(file)).then(mapResult(mapOutline)),
31
-
32
- imports: (file) => withSession(cwd, (s) => s.imports(file)).then(mapResult(mapImports)),
33
-
34
- nodeAt: (file, line, character) =>
35
- withSession(cwd, (s) => s.nodeAt(file, line, character)).then(mapResult(mapNodeAt)),
36
- };
37
- }
38
-
39
- // ── Session acquisition ─────────────────────────────────────────────
40
-
41
- async function withSession<T>(
42
- cwd: string,
43
- fn: (session: {
44
- calleesAt: (f: string, l: number, c: number) => Promise<unknown>;
45
- exports: (f: string) => Promise<unknown>;
46
- outline: (f: string) => Promise<unknown>;
47
- imports: (f: string) => Promise<unknown>;
48
- nodeAt: (f: string, l: number, c: number) => Promise<unknown>;
49
- }) => Promise<T>,
50
- ): Promise<T> {
51
- const current = getSessionTreeSitterService(cwd);
52
- if (current.kind === "ready") {
53
- return fn(current.service);
54
- }
55
- const session = createTreeSitterSession(cwd);
56
- try {
57
- return await fn(session);
58
- } finally {
59
- session.dispose();
60
- }
61
- }
62
-
63
- // ── Generic result mapper ───────────────────────────────────────────
64
-
65
- function mapResult<T>(mapData: (data: unknown) => T): (raw: unknown) => StructuralResult<T> {
66
- return (raw) => {
67
- const r = raw as { kind: string; data?: unknown };
68
- if (r.kind === "success") {
69
- return { kind: "success", data: mapData(r.data) };
70
- }
71
- return raw as StructuralResult<T>;
72
- };
73
- }
74
-
75
- // ── Mapping helpers (unpack nested `range` into flat fields) ────────
76
-
77
- type RangeLike = {
78
- startLine: number;
79
- startCharacter: number;
80
- endLine: number;
81
- endCharacter: number;
82
- };
83
-
84
- function takeRange(r: RangeLike): {
85
- startLine: number;
86
- startCharacter: number;
87
- endLine: number;
88
- endCharacter: number;
89
- } {
90
- return {
91
- startLine: r.startLine,
92
- startCharacter: r.startCharacter,
93
- endLine: r.endLine,
94
- endCharacter: r.endCharacter,
95
- };
96
- }
97
-
98
- function mapExports(data: unknown): ExportData[] {
99
- const items = data as Array<{
100
- name: string;
101
- kind: string;
102
- range: RangeLike;
103
- moduleSpecifier?: string;
104
- }>;
105
- return items.map((item) => ({
106
- name: item.name,
107
- kind: item.kind,
108
- ...takeRange(item.range),
109
- moduleSpecifier: item.moduleSpecifier,
110
- }));
111
- }
112
-
113
- function mapOutline(data: unknown): OutlineData[] {
114
- const items = data as Array<{
115
- name: string;
116
- kind: string;
117
- range: RangeLike;
118
- children?: unknown[];
119
- }>;
120
- return items.map((item) => ({
121
- name: item.name,
122
- kind: item.kind,
123
- ...takeRange(item.range),
124
- children: item.children ? mapOutline(item.children) : undefined,
125
- }));
126
- }
127
-
128
- function mapImports(data: unknown): ImportData[] {
129
- const items = data as Array<{
130
- moduleSpecifier: string;
131
- range: RangeLike;
132
- }>;
133
- return items.map((item) => ({
134
- moduleSpecifier: item.moduleSpecifier,
135
- ...takeRange(item.range),
136
- }));
137
- }
138
-
139
- function mapNodeAt(data: unknown): NodeAtData {
140
- const d = data as {
141
- type: string;
142
- range: RangeLike;
143
- text: string;
144
- ancestry: Array<{ type: string; range: RangeLike }>;
145
- };
146
- return {
147
- type: d.type,
148
- ...takeRange(d.range),
149
- text: d.text,
150
- ancestry: d.ancestry.map((a) => ({
151
- type: a.type,
152
- ...takeRange(a.range),
153
- })),
154
- };
155
- }
156
-
157
- function mapCallees(data: unknown): CalleesData {
158
- const d = data as {
159
- enclosingScope: { name: string; range: RangeLike };
160
- callees: Array<{ name: string; range: RangeLike }>;
161
- };
162
- return {
163
- enclosingScope: {
164
- name: d.enclosingScope.name,
165
- startLine: d.enclosingScope.range.startLine,
166
- endLine: d.enclosingScope.range.endLine,
167
- },
168
- callees: d.callees.map((c) => ({
169
- name: c.name,
170
- startLine: c.range.startLine,
171
- })),
172
- };
173
- }