@mrclrchtr/supi-code-intelligence 2.0.6 → 2.2.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 (169) hide show
  1. package/README.md +88 -4
  2. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  5. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  6. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  7. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  8. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  9. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  10. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  11. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  12. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  13. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  14. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  15. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  16. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  17. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  18. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  19. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  20. package/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  21. package/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  22. package/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  23. package/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  24. package/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  25. package/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  26. package/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  27. package/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  28. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  29. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  30. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  31. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  32. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  33. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  34. package/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  35. package/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  36. package/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  37. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  38. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  39. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  40. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  41. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  42. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  43. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  44. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  45. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  46. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  47. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  48. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  49. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  50. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  51. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  52. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  53. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  54. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  55. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  56. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  57. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  58. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  59. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  60. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  61. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  62. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  63. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  64. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  65. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  66. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  67. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  68. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  69. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  70. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  71. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  72. package/node_modules/@mrclrchtr/supi-lsp/package.json +3 -3
  73. package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +1 -1
  74. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  75. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  76. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  77. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  78. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  79. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  80. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  81. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  82. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  83. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  84. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  85. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  86. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  87. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  88. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  89. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  90. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  91. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  92. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/README.md +32 -23
  93. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +2 -1
  94. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/config.ts +22 -8
  95. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +357 -0
  96. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config.ts +2 -3
  97. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -5
  98. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +4 -0
  99. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +372 -0
  100. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +101 -0
  101. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +1 -1
  102. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +55 -27
  103. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +464 -0
  104. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +124 -0
  105. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +72 -285
  106. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +2 -5
  107. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings.ts +27 -5
  108. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +10 -0
  109. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +3 -3
  110. package/package.json +5 -5
  111. package/src/analysis/evidence.ts +13 -0
  112. package/src/analysis/instruction-files.ts +194 -0
  113. package/src/analysis/search/pattern.ts +24 -13
  114. package/src/analysis/search/ripgrep.ts +92 -7
  115. package/src/app/app.ts +6 -1
  116. package/src/config.ts +42 -0
  117. package/src/extension.ts +9 -1
  118. package/src/session/capability-adapter.ts +218 -0
  119. package/src/session/session.ts +106 -1
  120. package/src/session/target-workflow.ts +430 -0
  121. package/src/substrate/lsp/diagnostic-injection.ts +0 -15
  122. package/src/substrate/lsp/settings.ts +101 -175
  123. package/src/tool/find/execute.ts +23 -10
  124. package/src/tool/find/orchestrate.ts +67 -54
  125. package/src/tool/find/semantic-search.ts +30 -16
  126. package/src/tool/graph/collect-relation.ts +2 -1
  127. package/src/tool/graph/execute.ts +40 -12
  128. package/src/tool/graph/markdown-base.ts +5 -37
  129. package/src/tool/graph/orchestrate.ts +9 -35
  130. package/src/tool/graph/tui.ts +2 -0
  131. package/src/tool/guidance.ts +27 -38
  132. package/src/tool/health/markdown.ts +12 -70
  133. package/src/tool/health/orchestrate.ts +5 -13
  134. package/src/tool/impact/analysis.ts +0 -27
  135. package/src/tool/impact/change-set-impact.ts +3 -2
  136. package/src/tool/impact/execute.ts +27 -0
  137. package/src/tool/impact/file-level-impact.ts +3 -2
  138. package/src/tool/impact/result.ts +2 -21
  139. package/src/tool/impact/single-impact.ts +3 -2
  140. package/src/tool/infra/error-results.ts +18 -196
  141. package/src/tool/infra/pipeline.ts +24 -1
  142. package/src/tool/inspect/markdown.ts +4 -41
  143. package/src/tool/inspect/orchestrate.ts +27 -28
  144. package/src/tool/orientation/mode.ts +53 -2
  145. package/src/tool/orientation/orchestrate.ts +5 -8
  146. package/src/tool/orientation/precise-target.ts +65 -69
  147. package/src/tool/refactor-apply/orchestrate.ts +2 -7
  148. package/src/tool/refactor-plan/orchestrate.ts +31 -39
  149. package/src/tool/resolve/markdown.ts +5 -6
  150. package/src/tool/resolve/orchestrate.ts +7 -103
  151. package/src/tool/result/errors.ts +199 -0
  152. package/src/tool/result/find.ts +29 -0
  153. package/src/tool/result/graph.ts +93 -0
  154. package/src/tool/result/health.ts +94 -0
  155. package/src/tool/result/impact.ts +50 -0
  156. package/src/tool/result/inspect.ts +60 -0
  157. package/src/tool/result/orientation.ts +30 -0
  158. package/src/tool/result/refactor.ts +35 -0
  159. package/src/tool/result/resolve.ts +114 -0
  160. package/src/tool/result/types.ts +191 -0
  161. package/src/tool/schemas.ts +39 -28
  162. package/src/types/details.ts +17 -185
  163. package/src/ui/tui/common.ts +45 -1
  164. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
  165. package/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
  166. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
  167. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
  168. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
  169. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/config-settings.ts +0 -188
@@ -2,6 +2,11 @@
2
2
  //
3
3
  // Each code_* tool owns its complete promptGuidelines here.
4
4
  // Runtime registration data (name, parameters, run) lives in specs.ts.
5
+ //
6
+ // Cross-tool steering is centralized (authored once on its natural-home tool) and
7
+ // some tools have empty promptGuidelines by design: all code_* tools are always
8
+ // active together, so a steering bullet on one tool is always co-visible. See
9
+ // docs/adr/0013-centralized-code-intelligence-prompt-steering-assumes-all-tools-active.md.
5
10
 
6
11
  import type { CodeIntelligenceToolName } from "../types/index.ts";
7
12
 
@@ -19,94 +24,78 @@ export type CodeIntelligenceToolPromptSurfaceMap = Record<
19
24
  export const CODE_INTELLIGENCE_TOOL_PROMPT_SURFACES: CodeIntelligenceToolPromptSurfaceMap = {
20
25
  code_resolve: {
21
26
  description:
22
- "Resolve human or code references into precise file/range/symbol targets and stable target handles. Use when a symbol, file, or code reference is ambiguous and needs precise resolution. Returns targetId and spanId handles that can be passed to code_graph, code_impact, and code_refactor_plan. Supports anchored (file + line + character), file-only, and query/symbol inputs. Anchored coordinates resolve a real symbol target from provider-backed evidence: an exact identifier coordinate resolves to a named target; a declaration-header coordinate (e.g. an `export` keyword) snaps to the symbol name anchor only when unambiguous. Whitespace/comment/non-symbol coordinates fail honestly and recommend code_inspect. Does not fall back to text search for symbol resolution; ambiguous results return ranked candidates with target IDs for every shown item. Output is truncated to 2000 lines / 50KB.",
27
+ "Resolve references to evidence-backed code targets and stable targetId/spanId handles for follow-up code_* tools. Accepts query/symbol/file or anchored file+line+character; anchored resolution snaps only to real provider-backed symbols, and whitespace/comment/non-symbol points fail with code_inspect guidance. No text-search fallback; ambiguous results return ranked candidates. Truncates at 2000 lines/50KB.",
23
28
  promptSnippet: "code_resolve — resolve references into precise targets and target handles",
24
29
  promptGuidelines: [
25
- "Use code_resolve when a symbol, file, or code reference is ambiguous and needs precise resolution.",
26
- "Prefer code_resolve as the entry point before code_orientation, code_graph, code_impact, or code_refactor_plan — its targetId replaces fragile file/line/character coordinates.",
27
- "When code_resolve returns ambiguous results with ranked candidates, pick one and use file + line + character for follow-up resolution.",
30
+ "Use code_resolve first for ambiguous or symbol-only targets, before graph/impact/refactor/orientation; if resolve returns ranked candidates, narrow with a candidate file + line + character.",
28
31
  ],
29
32
  },
30
33
  code_inspect: {
31
34
  description:
32
- "Inspect one precise point in a file and return factual syntax, symbol, hover, definition, diagnostics, and code-action information. Use when you need to understand exactly what is at a position without choosing between provider-specific substrate tools. When some providers are unavailable, returns best-effort sections with explicit unavailable notes instead of heuristic guesses. Code action titles are advisory only — there is no tool to execute them yet. Output is truncated to 2000 lines / 50KB.",
35
+ "Inspect one exact file position for syntax, symbol, hover/definition, nearby diagnostics, and code-action titles. Requires file, line, and character; use for point facts, not broad orientation. Unavailable providers are disclosed; code actions are advisory only. Truncates at 2000 lines/50KB.",
33
36
  promptSnippet: "code_inspect — factual point inspection",
34
- promptGuidelines: [
35
- "Use code_inspect for factual point inspection at one precise file position.",
36
- "Provide `file`, `line`, and `character` — code_inspect is intentionally point-based.",
37
- "Prefer code_inspect over code_orientation for point-level facts when no symbol target can be resolved.",
38
- ],
37
+ // No guidelines: selection is steered by code_orientation's bullet plus this
38
+ // self-sufficient description. See ADR 0013 (all code_* tools always active).
39
+ promptGuidelines: [],
39
40
  },
40
41
  code_orientation: {
41
42
  description:
42
- "Primary code-orientation tool for understanding a project, discovered module, directory, file, or symbol before choosing surgical follow-up tools. Use `focus` for a workspace-relative path or discovered module name; omit `focus` for project orientation. Use `focus` + `line` + `character` for symbol orientation, or pass `targetId` from `code_resolve`; `targetId` takes precedence over focus/coordinates and stale target IDs do not fall back. Symbol orientation returns definitions, JSDoc/TSDoc docs, local diagnostics near the target, and Read Next guidance; relation evidence belongs in code_graph, impact evidence in code_impact, and health/status in code_health. Not a point-inspection tool — use code_inspect for exact position facts. `maxResults` caps each rendered list and defaults to 10. Output is truncated to 2000 lines / 50KB.",
43
+ "Orient around the workspace, module, directory, file, or resolved symbol before surgical work. Omit focus for workspace orientation; use focus for a path/module, or targetId/focus+line+character for symbol orientation. Directory focus may surface local instruction files (CLAUDE.md, AGENTS.md). targetId wins and stale IDs error. Returns landmarks, docs, local diagnostics, and read-next guidance; relations/impact/health belong in code_graph/code_impact/code_health. maxResults caps lists; output is truncated to 2000 lines / 50KB.",
43
44
  promptSnippet: "code_orientation — project/module/file/symbol orientation",
44
45
  promptGuidelines: [
45
46
  "Use `code_orientation({ focus })` for first-pass project/package/directory/file orientation before `bash`/`read`.",
47
+ "Use directory focus (for example `packages/foo`) to surface local instruction files before package work.",
46
48
  "Use code_resolve first for bare symbol names, then pass the resulting targetId to code_orientation.",
47
49
  "Use code_graph/code_impact/code_health for relations, impact, or full health instead of asking code_orientation for those sections.",
48
50
  ],
49
51
  },
50
52
  code_graph: {
51
53
  description:
52
- 'Unified relation-graph tool replaces code_references, code_calls, and code_implementations. Resolves a target once and dispatches to the appropriate analysis service per requested relation. Defaults to ["references"] when `relations` is omitted. Each relation is best-effort: unavailable substrates skip with a note rather than failing the whole call. Each relation annotates its evidence source. The tests relation displays discovery provenance (semantic+conventions or conventions-only) separately from any extracted test labels. `callees` is structural/direct-scope evidence: it reports call expressions by source shape, not symbol identity, and excludes calls inside nested function/method/callback scopes — use `references` on a resolved target for identity-aware incoming callers. Pass `calleeDepth: "deep"` to include callees from nested scopes. `imports` and `exports` use file-level tree-sitter analysis; `tests` discovers companion test files and labels. Targeted graph results include Read Next guidance for source ranges worth inspecting via `read`. `scope` (not `path`) narrows by workspace-relative directory/package. Use code_resolve first to get a targetId, then pass it to code_graph. Output is truncated to 2000 lines / 50KB.',
54
+ 'Analyze relation evidence for a resolved target or coordinates: references, structural callees, imports/exports, implementations, and tests. Defaults to references; relations:["all"] expands all families. Per-relation substrate failures are disclosed. Callees are syntax/direct-scope source-shape calls, not symbol identity; calleeDepth:"deep" includes nested scopes. Scope narrows by workspace path; targetId from code_resolve is preferred. Truncates at 2000 lines/50KB.',
53
55
  promptSnippet: "code_graph — semantic and structural relation graph",
54
- promptGuidelines: [
55
- "Use code_graph to find references, direct structural calls, and implementations for a target.",
56
- 'Default `relations` is ["references"]; use `relations: ["callees"]` or `["implements"]` for those, or `relations: ["all"]` to expand to every relation family in one call.',
57
- "After code_graph, follow up with code_orientation on individual results for type or definition context.",
58
- 'Pass `calleeDepth: "deep"` to include callees from nested function/method/callback scopes (default `"direct"` excludes them).',
59
- 'Suggested relations by target kind: For functions/methods: `["references", "callees", "tests"]` — For interfaces/types/classes/enums: `["references", "implements"]` — For files/modules: `["imports", "exports"]` — For tests: `["tests"]`.',
60
- ],
56
+ // No guidelines: selection is steered by this self-sufficient description plus
57
+ // code_impact's "use code_graph instead of code_impact" bullet. See ADR 0013.
58
+ promptGuidelines: [],
61
59
  },
62
60
  code_impact: {
63
61
  description:
64
- "Estimate blast radius and downstream impact for a target or user-supplied change set before making edits. `changeSetFiles` are explicit workspace-relative files to analyze as in scope for a proposed/current change; they are not inferred from git and carry no line-level diff evidence. Uses semantic evidence for target-based impact and merges semantic references for symbols defined in change-set files when available. Includes Read Next guidance for source ranges worth inspecting via `read` before editing. Does not fall back to heuristic text search. Use a resolved target for precise semantic reference-based impact. Output is truncated to 2000 lines / 50KB.",
62
+ "Estimate blast radius for a resolved target or user-supplied changeSetFiles before editing. changeSetFiles are explicit files, not inferred from git and no line-level diff; change-only requests report insufficient evidence. Uses semantic references plus deterministic test discovery when available; no heuristic search fallback. Output includes read-next guidance; truncates at 2000 lines/50KB.",
65
63
  promptSnippet: "code_impact — blast radius and impact",
66
64
  promptGuidelines: [
67
- "Use code_impact before edits to estimate blast radius and follow-up checks.",
68
- "Use code_graph instead of code_impact when you only need a plain reference list without impact analysis.",
65
+ "Use code_graph instead of code_impact when you only need a plain reference list.",
69
66
  ],
70
67
  },
71
68
  code_find: {
72
69
  description:
73
- 'Unified ranked code search with strict mode dispatch: default/`mode: "text"` is literal ripgrep, `mode: "regex"` is ripgrep regex, `mode: "semantic"` is LSP workspace-symbol search, and `mode: "ast"` is tree-sitter structured search. `mode: "ast"` requires `kind` and currently supports `definition`, `import`, `export`, `call`, `type`, `interface`, `class`, `method`, `enum`, and `test`. `mode: "text"`, `mode: "regex"`, and `mode: "semantic"` do not accept `kind`. `code_find` with `mode: "semantic"` does not silently fall back to text search, and unsupported mode/kind combinations fail. AST `call` mode matches call-site identifiers by name, not by symbol identity; use `code_graph` references for identity-aware callers of a resolved target. Output is truncated to 2000 lines / 50KB.',
70
+ 'Search code with explicit modes: text literal (default), regex, semantic workspace-symbol, or ast structured. mode:"ast" requires `kind` (definition/import/export/call/type/interface/class/method/enum/test); text/regex/semantic reject kind. Semantic mode uses LSP only and does not silently fall back. AST call matches written call-site names, not by symbol identity; use code_graph references on a resolved target for symbol-identity-aware callers. Truncates at 2000 lines/50KB.',
74
71
  promptSnippet: "code_find — unified ranked code search",
75
72
  promptGuidelines: [
76
- "Use code_find as the sole code search tool for literal text, regex, semantic workspace-symbol, or AST structured search.",
77
- 'code_find with `mode: "ast"` requires `kind` and supports `definition`, `import`, `export`, `call`, `type`, `interface`, `class`, `method`, `enum`, and `test`.',
78
- 'code_find with `mode: "text"`, `mode: "regex"`, or `mode: "semantic"` does not accept `kind`.',
79
- 'code_find with `mode: "semantic"` does not fall back to text search and fails when semantic capability is unavailable.',
80
- 'AST `call` mode matches call-site identifiers by name only; use `code_graph` with `relations: ["references"]` on a resolved target for symbol-identity-aware callers.',
73
+ "Use code_find for explicit text, regex, semantic symbol, or AST search; use code_graph references for symbol-identity callers.",
81
74
  ],
82
75
  },
83
76
  code_refactor_plan: {
84
77
  description:
85
- 'Pure planner: previews a precise semantic refactor plan without mutating files and returns a planId for later use with code_refactor_apply. Supports rename_symbol plus extract_function/extract_variable when the active LSP can return precise edits. Legacy `operation: "rename"` is accepted as a compatibility alias. This tool never mutates files. Output is truncated to 2000 lines / 50KB.',
78
+ "Preview a semantic refactor plan and return planId; never mutates files. Supports rename_symbol (rename alias) and extract_function/extract_variable when LSP returns precise edits. Requires targetId or anchored file+line+character, plus operation-specific newName/range. Apply separately with code_refactor_apply. Truncates at 2000 lines/50KB.",
86
79
  promptSnippet: "code_refactor_plan — preview a precise workflow refactor plan",
87
80
  promptGuidelines: [
88
- 'Use `operation: "rename_symbol"` with code_refactor_plan for symbol renames. Legacy `operation: "rename"` is accepted as a compatibility alias.',
89
- 'Use `operation: "extract_function"` or `"extract_variable"` with a 1-based `range` and `newName` when the LSP advertises precise extract code actions.',
90
- "code_refactor_plan is a pure planner — it returns a planId. Use code_refactor_apply with that planId to execute.",
81
+ "Use code_refactor_plan to preview rename/extract edits only; mutate later with code_refactor_apply and the returned planId.",
91
82
  ],
92
83
  },
93
84
  code_refactor_apply: {
94
85
  description:
95
- "Sole mutator in the refactor workflow: applies a previously stored plan by planId. Revalidates the plan and checks file fingerprints, mutating files only when the plan is still fresh. Output is truncated to 2000 lines / 50KB.",
86
+ "Apply a stored refactor plan by planId. Revalidates plan freshness and file fingerprints before mutating; does not compose new plans. Truncates at 2000 lines/50KB.",
96
87
  promptSnippet: "code_refactor_apply — apply a stored refactor plan",
97
88
  promptGuidelines: [
98
- "Use code_refactor_apply to execute a plan generated by code_refactor_plan.",
99
- "Use code_refactor_plan first to obtain a planId, then code_refactor_apply to execute it.",
89
+ "Use code_refactor_apply only with a planId returned by code_refactor_plan.",
100
90
  ],
101
91
  },
102
92
  code_health: {
103
93
  description:
104
- "Summarize diagnostics, language server status, dirty workspace signals, coverage, and unused-code findings. Pass refresh: true to recover stale diagnostics before checking. Use scope to narrow to a specific file or package. Use include to request specific sections: diagnostics, servers, dirty, coverage, unused. Defaults to summary level (counts); use level: detailed for per-file listings. Output is truncated to 2000 lines / 50KB.",
94
+ "Report workspace health: diagnostics, language-server status, dirty files, coverage, and unused code. Use scope/include/level to narrow; refresh:true recovers stale diagnostics. Missing coverage/unused reports are disclosed. Truncates at 2000 lines/50KB.",
105
95
  promptSnippet:
106
96
  "code_health — diagnostics, server status, coverage, unused-code, and workspace health",
107
97
  promptGuidelines: [
108
- "Use code_health to check for diagnostics, language server status, dirty workspace state, coverage, or unused-code signals.",
109
- "Pass `refresh: true` to code_health to recover stale diagnostics before checking.",
98
+ "Use code_health for diagnostics/server/dirty/coverage/unused health; pass refresh:true to code_health before relying on stale diagnostics.",
110
99
  ],
111
100
  },
112
101
  };
@@ -5,77 +5,19 @@
5
5
  * readable markdown sections keyed by requested `include` values.
6
6
  */
7
7
 
8
- import type { CoverageWarningReport } from "../../analysis/coverage/coverage-warnings.ts";
9
- import type { GitContext } from "../../analysis/signals/git.ts";
10
8
  import { formatGitContext } from "../../analysis/signals/git.ts";
11
-
12
- export type HealthSection = "diagnostics" | "servers" | "dirty" | "coverage" | "unused";
13
-
14
- export interface HealthServerInfo {
15
- name: string;
16
- root: string;
17
- fileTypes: string[];
18
- status: string;
19
- }
20
-
21
- export interface HealthDiagnosticEntry {
22
- file: string;
23
- errors: number;
24
- warnings: number;
25
- }
26
-
27
- export interface HealthCoverageEntry {
28
- file: string;
29
- pct: number;
30
- }
31
-
32
- export interface HealthCoverageData {
33
- available: boolean;
34
- entries: HealthCoverageEntry[];
35
- }
36
-
37
- export interface HealthUnusedExportEntry {
38
- file: string;
39
- name: string;
40
- }
41
-
42
- export interface HealthUnusedData {
43
- available: boolean;
44
- files: string[];
45
- exports: HealthUnusedExportEntry[];
46
- }
47
-
48
- /** A suggested code action at a specific diagnostic location. */
49
- export interface CodeActionSuggestion {
50
- file: string;
51
- line: number;
52
- title: string;
53
- kind?: string;
54
- }
55
-
56
- export interface HealthData {
57
- includedSections: HealthSection[];
58
- lspAvailable: boolean;
59
- lspStatus: string;
60
- recovered: boolean;
61
- /** Structural (tree-sitter) substrate readiness. Undefined when not evaluated. */
62
- structuralStatus?: string;
63
- diagnostics: HealthDiagnosticEntry[];
64
- servers: HealthServerInfo[];
65
- gitContext: GitContext | null;
66
- scopeFilter: string | null;
67
- level: "summary" | "detailed";
68
- /** Code action suggestions collected from LSP (only populated in detailed mode). */
69
- codeActions: CodeActionSuggestion[] | null;
70
- coverage: HealthCoverageData | null;
71
- unused: HealthUnusedData | null;
72
- /** Coverage warnings for degraded semantic/structural substrate. Undefined when fully healthy. */
73
- degradedCoverage?: CoverageWarningReport;
74
- /** Seconds since diagnostics were last refreshed, or undefined if never refreshed. */
75
- diagnosticAgeSeconds?: number;
76
- }
77
-
78
- export function renderHealthResult(data: HealthData, cwd: string): string {
9
+ import type { HealthData, HealthResultAssembly } from "../result/health.ts";
10
+
11
+ export type {
12
+ CodeActionSuggestion,
13
+ HealthCoverageData,
14
+ HealthData,
15
+ HealthSection,
16
+ HealthUnusedData,
17
+ } from "../result/health.ts";
18
+
19
+ export function renderHealthResult(result: HealthResultAssembly, cwd: string): string {
20
+ const data = result.data;
79
21
  const lines: string[] = ["## Code Health", ""];
80
22
 
81
23
  renderStatusLine(lines, data);
@@ -15,8 +15,8 @@ import {
15
15
  gatherCoverageEvalInput,
16
16
  } from "../../analysis/coverage/coverage-warnings.ts";
17
17
  import { loadPrioritizationSignals } from "../../analysis/signals/project.ts";
18
- import type { CodeIntelResult, HealthDetails } from "../../types/index.ts";
19
- import type { HealthData, HealthSection } from "./markdown.ts";
18
+ import type { CodeIntelResult } from "../../types/index.ts";
19
+ import { assembleHealthResult, type HealthData, type HealthSection } from "../result/health.ts";
20
20
  import { renderHealthResult } from "./markdown.ts";
21
21
  import { collectCodeActions, collectDiagnostics } from "./sections/diagnostics.ts";
22
22
  import {
@@ -138,22 +138,14 @@ export async function executeHealth(
138
138
  diagnosticAgeSeconds,
139
139
  };
140
140
 
141
- const evidenceLists = buildHealthEvidenceLists(gitContext);
142
- const content = renderHealthResult(data, cwd);
141
+ const assembly = assembleHealthResult(data, buildHealthEvidenceLists(gitContext));
142
+ const content = renderHealthResult(assembly, cwd);
143
143
 
144
144
  return {
145
145
  content,
146
146
  details: {
147
147
  type: "health",
148
- data: {
149
- lspAvailable: data.lspAvailable,
150
- lspStatus: data.lspStatus,
151
- recovered: data.recovered,
152
- structuralStatus: data.structuralStatus,
153
- diagnosticFileCount: data.diagnostics.length,
154
- serverCount: data.servers.length,
155
- evidenceLists,
156
- } satisfies HealthDetails,
148
+ data: assembly.details,
157
149
  },
158
150
  };
159
151
  }
@@ -4,7 +4,6 @@
4
4
  import * as path from "node:path";
5
5
  import type { buildArchitectureModel } from "../../analysis/architecture/discovery.ts";
6
6
  import { findModuleForPath, getDependents } from "../../analysis/architecture/model.ts";
7
- import type { EvidenceListMetadata } from "../../analysis/evidence.ts";
8
7
  import type { CodeProvider } from "../../analysis/provider.ts";
9
8
  import type { ReferenceCollection } from "../../analysis/references/semantic-refs.ts";
10
9
  import type { ResolvedTargetData } from "../../analysis/target/types.ts";
@@ -16,7 +15,6 @@ import {
16
15
  type TestAnchorMap,
17
16
  } from "../../analysis/tests/likely-tests.ts";
18
17
  import { buildTestSurfaceDetails } from "../../analysis/tests/test-discovery.ts";
19
- import type { AffectedDetails, ImpactDetails } from "../../types/index.ts";
20
18
  import type { ImpactAnalysis } from "./types.ts";
21
19
 
22
20
  // ── Shared analysis ────────────────────────────────────────────────────
@@ -220,28 +218,3 @@ export function computeOmittedCount(
220
218
  ): number {
221
219
  return externalRefs + Math.max(0, affectedFileCount - (maxResults ?? 8));
222
220
  }
223
-
224
- // biome-ignore lint/complexity/useMaxParams: detail assembly keeps shared counts, queries, and signals explicit for both surfaces
225
- export function buildDetailsData(
226
- analysis: ImpactAnalysis,
227
- directCount: number,
228
- omittedCount: number,
229
- nextQueries: string[],
230
- prioritySignals: AffectedDetails["prioritySignals"],
231
- evidenceLists: EvidenceListMetadata[] = [],
232
- ): AffectedDetails | ImpactDetails {
233
- return {
234
- confidence: analysis.confidence,
235
- directCount,
236
- downstreamCount: analysis.downstreamCount,
237
- riskLevel: analysis.riskLevel,
238
- checkNext: analysis.checkNext,
239
- likelyTests: analysis.likelyTests,
240
- likelyTestCommands: analysis.likelyTestCommands,
241
- omittedCount,
242
- evidenceLists,
243
- nextQueries,
244
- prioritySignals,
245
- tests: analysis.tests,
246
- };
247
- }
@@ -10,7 +10,8 @@ import type { ResolvedTargetData } from "../../analysis/target/types.ts";
10
10
  import type { ChangeSetFileEntry } from "../../analysis/tests/likely-tests.ts";
11
11
  import { normalizeChangeSet } from "../../analysis/tests/likely-tests.ts";
12
12
  import type { CodeIntelResult } from "../../types/index.ts";
13
- import { analyzeChangeSet, buildDetailsData, type ChangeSetSemanticImpact } from "./analysis.ts";
13
+ import { assembleImpactDetails } from "../result/impact.ts";
14
+ import { analyzeChangeSet, type ChangeSetSemanticImpact } from "./analysis.ts";
14
15
  import { renderChangeSetImpact } from "./markdown.ts";
15
16
  import { unavailableImpactResult } from "./result.ts";
16
17
  import type { ImpactAnalysis, ImpactInput } from "./types.ts";
@@ -59,7 +60,7 @@ export async function executeChangeSetImpact(
59
60
  prioritySignals,
60
61
  }) + evidenceNote;
61
62
 
62
- const detailsData = buildDetailsData(
63
+ const detailsData = assembleImpactDetails(
63
64
  analysis,
64
65
  changeSetFiles.length,
65
66
  0,
@@ -30,6 +30,7 @@ export interface CodeImpactToolParams {
30
30
  }
31
31
 
32
32
  /** Execute the public code_impact tool. */
33
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: target workflow + pipeline orchestration stays together for clarity
33
34
  export async function executeImpactTool(
34
35
  params: CodeImpactToolParams,
35
36
  ctx: CodeIntelToolExecCtx,
@@ -38,6 +39,32 @@ export async function executeImpactTool(
38
39
 
39
40
  const hasChangeSetInputs = (params.changeSetFiles?.length ?? 0) > 0 || Boolean(params.change);
40
41
 
42
+ // ── Deep seam: resolve targetId through the session target workflow ──
43
+ // Replaces expandTargetId pipeline stage for targetId expansion.
44
+ if (!hasChangeSetInputs && params.targetId) {
45
+ const outcome = await ctx.session.resolveTarget(
46
+ { targetId: params.targetId },
47
+ { fileLevelAllowed: false, nameAnchorRequired: false, waitForSemantic: false },
48
+ );
49
+
50
+ if (outcome.kind === "resolved") {
51
+ params.file = outcome.entry.file;
52
+ params.line = outcome.entry.displayLine;
53
+ params.character = outcome.entry.displayCharacter;
54
+ params.symbol = outcome.entry.name ?? undefined;
55
+ } else if (outcome.kind !== "no-target") {
56
+ const msg =
57
+ outcome.kind === "invalid-input"
58
+ ? outcome.message
59
+ : outcome.kind === "unavailable"
60
+ ? outcome.reason
61
+ : "Target resolution failed. Verify the targetId is valid.";
62
+ return impactErrorResult(msg, {
63
+ nextQueries: ["Use `code_resolve` to resolve a target first"],
64
+ });
65
+ }
66
+ }
67
+
41
68
  return runPipe(
42
69
  params,
43
70
  ctx,
@@ -8,7 +8,8 @@ import { summarizePrioritySignalsForFiles } from "../../analysis/signals/project
8
8
  import type { ResolvedTargetGroupData } from "../../analysis/target/types.ts";
9
9
  import { buildTestAnchorMap } from "../../analysis/tests/likely-tests.ts";
10
10
  import type { CodeIntelResult } from "../../types/index.ts";
11
- import { analyzeReferenceImpact, buildDetailsData, computeOmittedCount } from "./analysis.ts";
11
+ import { assembleImpactDetails } from "../result/impact.ts";
12
+ import { analyzeReferenceImpact, computeOmittedCount } from "./analysis.ts";
12
13
  import { renderImpactFileLevel } from "./markdown.ts";
13
14
  import type { ImpactInput } from "./types.ts";
14
15
 
@@ -60,7 +61,7 @@ export async function executeFileLevelImpact(
60
61
  cwd,
61
62
  });
62
63
 
63
- const detailsData = buildDetailsData(
64
+ const detailsData = assembleImpactDetails(
64
65
  analysis,
65
66
  aggregated.refs.length,
66
67
  computeOmittedCount(analysis.externalRefs, analysis.affectedFiles.size, input.maxResults),
@@ -1,21 +1,2 @@
1
- import type { CodeIntelResult } from "../../types/index.ts";
2
-
3
- export function unavailableImpactResult(content: string, nextQueries: string[]): CodeIntelResult {
4
- return {
5
- content,
6
- details: {
7
- type: "impact",
8
- data: {
9
- confidence: "unavailable",
10
- directCount: 0,
11
- downstreamCount: 0,
12
- riskLevel: "low" as const,
13
- checkNext: [],
14
- likelyTests: [],
15
- likelyTestCommands: [],
16
- omittedCount: 0,
17
- nextQueries,
18
- },
19
- },
20
- };
21
- }
1
+ /** Compatibility export for impact result assembly. */
2
+ export { unavailableImpactResult } from "../result/impact.ts";
@@ -10,7 +10,8 @@ import { summarizePrioritySignalsForFiles } from "../../analysis/signals/project
10
10
  import type { ResolvedTargetData } from "../../analysis/target/types.ts";
11
11
  import { buildTestAnchorMap } from "../../analysis/tests/likely-tests.ts";
12
12
  import type { CodeIntelResult } from "../../types/index.ts";
13
- import { analyzeReferenceImpact, buildDetailsData, computeOmittedCount } from "./analysis.ts";
13
+ import { assembleImpactDetails } from "../result/impact.ts";
14
+ import { analyzeReferenceImpact, computeOmittedCount } from "./analysis.ts";
14
15
  import { renderImpactSingle } from "./markdown.ts";
15
16
  import type { ImpactInput } from "./types.ts";
16
17
 
@@ -58,7 +59,7 @@ export async function executeSingleImpact(
58
59
  items: refs.refs,
59
60
  maxResults,
60
61
  }).metadata;
61
- const detailsData = buildDetailsData(
62
+ const detailsData = assembleImpactDetails(
62
63
  analysis,
63
64
  refs.refs.length,
64
65
  computeOmittedCount(analysis.externalRefs, analysis.affectedFiles.size, input.maxResults),