@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
@@ -1,199 +1,21 @@
1
1
  /**
2
- * Unified error-result factories for code-intelligence tool executors.
2
+ * Compatibility export for code-intelligence error result assembly.
3
3
  *
4
- * Every factory returns a complete {@link CodeIntelResult} (content + typed
5
- * details) so executors never need to inline the `{ content, details }`
6
- * wrapper. The old `unavailableXxxDetails()` functions are kept as thin
7
- * wrappers — prefer the combined `xxxErrorResult()` factories in new code.
4
+ * Returned tool errors are assembled behind `src/tool/result/` with the rest
5
+ * of public tool evidence. New tool code should import from
6
+ * `../result/errors.ts` directly.
8
7
  */
9
-
10
- import type {
11
- CodeIntelResult,
12
- ContextDetails,
13
- HealthDetails,
14
- ImpactDetails,
15
- InspectDetails,
16
- ResolveDetails,
17
- SearchDetails,
18
- } from "../../types/index.ts";
19
-
20
- // ── Combined error-result factories (preferred) ──────────────────────
21
-
22
- /** Full error result for search-family tools (code_find, code_graph, code_find, code_refactor_plan). */
23
- export function searchErrorResult(
24
- content: string,
25
- opts?: { scope?: string | null; nextQueries?: string[] },
26
- ): CodeIntelResult {
27
- return {
28
- content,
29
- details: {
30
- type: "search" as const,
31
- data: {
32
- confidence: "unavailable" as const,
33
- scope: opts?.scope ?? null,
34
- candidateCount: 0,
35
- omittedCount: 0,
36
- nextQueries: opts?.nextQueries ?? [],
37
- },
38
- },
39
- };
40
- }
41
-
42
- /** Full error result for code_orientation (context-type details). */
43
- export function contextErrorResult(
44
- content: string,
45
- opts?: { nextQueries?: string[] },
46
- ): CodeIntelResult {
47
- return {
48
- content,
49
- details: {
50
- type: "context" as const,
51
- data: {
52
- confidence: "unavailable" as const,
53
- task: null,
54
- focusTarget: null,
55
- requestedSections: [],
56
- renderedSections: [],
57
- omittedCount: 0,
58
- nextQueries: opts?.nextQueries ?? [],
59
- },
60
- },
61
- };
62
- }
63
-
64
- /** Full error result for code_resolve. */
65
- export function resolveErrorResult(
66
- content: string,
67
- opts?: { nextQueries?: string[] },
68
- ): CodeIntelResult {
69
- return {
70
- content,
71
- details: {
72
- type: "resolve" as const,
73
- data: {
74
- confidence: "unavailable" as const,
75
- targetCount: 0,
76
- omittedCount: 0,
77
- targets: [],
78
- nextQueries: opts?.nextQueries ?? [],
79
- },
80
- },
81
- };
82
- }
83
-
84
- /** Full error result for code_inspect. */
85
- export function inspectErrorResult(
86
- content: string,
87
- opts?: { focusTarget?: string; nextQueries?: string[] },
88
- ): CodeIntelResult {
89
- return {
90
- content,
91
- details: {
92
- type: "inspect" as const,
93
- data: {
94
- confidence: "unavailable" as const,
95
- focusTarget: opts?.focusTarget ?? "",
96
- unavailableSections: [],
97
- nextQueries: opts?.nextQueries ?? [],
98
- },
99
- },
100
- };
101
- }
102
-
103
- /** Full error result for code_impact. */
104
- export function impactErrorResult(
105
- content: string,
106
- opts?: { nextQueries?: string[] },
107
- ): CodeIntelResult {
108
- const data: ImpactDetails = {
109
- confidence: "unavailable",
110
- directCount: 0,
111
- downstreamCount: 0,
112
- riskLevel: "low",
113
- checkNext: [],
114
- likelyTests: [],
115
- likelyTestCommands: [],
116
- omittedCount: 0,
117
- nextQueries: opts?.nextQueries ?? [],
118
- };
119
- return { content, details: { type: "impact" as const, data } };
120
- }
121
-
122
- /** Full error result for code_health. */
123
- export function healthErrorResult(content: string, reason?: string): CodeIntelResult {
124
- return {
125
- content,
126
- details: {
127
- type: "health" as const,
128
- data: {
129
- lspAvailable: false,
130
- lspStatus: reason ?? content,
131
- recovered: false,
132
- diagnosticFileCount: 0,
133
- serverCount: 0,
134
- },
135
- },
136
- };
137
- }
138
-
139
- // ── Details-only helpers (thin wrappers — prefer combined factories above) ─
140
-
141
- export function unavailableSearchDetails(
142
- scope: string | null,
143
- nextQueries: string[],
144
- ): { type: "search"; data: SearchDetails } {
145
- return searchErrorResult("", { scope, nextQueries }).details as {
146
- type: "search";
147
- data: SearchDetails;
148
- };
149
- }
150
-
151
- export function unavailableContextDetails(nextQueries: string[]): {
152
- type: "context";
153
- data: ContextDetails;
154
- } {
155
- return contextErrorResult("", { nextQueries }).details as {
156
- type: "context";
157
- data: ContextDetails;
158
- };
159
- }
160
-
161
- export function unavailableResolveDetails(nextQueries: string[]): {
162
- type: "resolve";
163
- data: ResolveDetails;
164
- } {
165
- return resolveErrorResult("", { nextQueries }).details as {
166
- type: "resolve";
167
- data: ResolveDetails;
168
- };
169
- }
170
-
171
- export function unavailableInspectDetails(
172
- focusTarget: string,
173
- nextQueries: string[],
174
- ): { type: "inspect"; data: InspectDetails } {
175
- return inspectErrorResult("", { focusTarget, nextQueries }).details as {
176
- type: "inspect";
177
- data: InspectDetails;
178
- };
179
- }
180
-
181
- export function unavailableImpactDetails(nextQueries: string[]): {
182
- type: "impact";
183
- data: ImpactDetails;
184
- } {
185
- return impactErrorResult("", { nextQueries }).details as {
186
- type: "impact";
187
- data: ImpactDetails;
188
- };
189
- }
190
-
191
- export function unavailableHealthDetails(reason: string): {
192
- type: "health";
193
- data: HealthDetails;
194
- } {
195
- return healthErrorResult("", reason).details as {
196
- type: "health";
197
- data: HealthDetails;
198
- };
199
- }
8
+ export {
9
+ contextErrorResult,
10
+ healthErrorResult,
11
+ impactErrorResult,
12
+ inspectErrorResult,
13
+ resolveErrorResult,
14
+ searchErrorResult,
15
+ unavailableContextDetails,
16
+ unavailableHealthDetails,
17
+ unavailableImpactDetails,
18
+ unavailableInspectDetails,
19
+ unavailableResolveDetails,
20
+ unavailableSearchDetails,
21
+ } from "../result/errors.ts";
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { match } from "ts-pattern";
25
25
  import { ensureSemanticReadiness } from "../../analysis/readiness.ts";
26
- import { resolveScope } from "../../analysis/search/ripgrep.ts";
26
+ import { resolveScope, resolveScopeSet } from "../../analysis/search/ripgrep.ts";
27
27
  import { routeFor } from "../../analysis/target/planner.ts";
28
28
  import type {
29
29
  CodeIntelligenceToolName,
@@ -150,6 +150,15 @@ export interface HasScopeParam {
150
150
  scope?: string;
151
151
  }
152
152
 
153
+ /** Minimum parameter shape needed by `resolveScopeSetParam`. */
154
+ export interface HasScopeSetParam {
155
+ scope?: string | string[];
156
+ /** Set by resolveScopeSetParam — absolute search roots for code_find. */
157
+ _resolvedScopePaths?: string[];
158
+ /** Set by resolveScopeSetParam — display label for requested search roots. */
159
+ _resolvedScopeDisplay?: string | null;
160
+ }
161
+
153
162
  /**
154
163
  * Resolve the `scope` parameter to an absolute path.
155
164
  *
@@ -175,6 +184,20 @@ export function resolveScopeParam<P extends HasScopeParam>(
175
184
  };
176
185
  }
177
186
 
187
+ /** Resolve code_find's one-or-many `scope` input to absolute search roots. */
188
+ export function resolveScopeSetParam<P extends HasScopeSetParam>(
189
+ onError: (reason: string) => CodeIntelResult,
190
+ ): PipeStage<P> {
191
+ return (params, ctx) => {
192
+ const result = resolveScopeSet(params.scope, ctx.cwd);
193
+ if (result.kind === "error") return { kind: "error", result: onError(result.reason) };
194
+
195
+ params._resolvedScopePaths = [...result.paths];
196
+ params._resolvedScopeDisplay = result.display;
197
+ return { kind: "continue" };
198
+ };
199
+ }
200
+
178
201
  /**
179
202
  * Apply cross-field validation rules after TypeBox schema validation.
180
203
  *
@@ -1,46 +1,9 @@
1
- import type { ConfidenceMode } from "@mrclrchtr/supi-code-runtime/api";
2
- import {
3
- type EvidenceListMetadata,
4
- renderEvidenceListMetadataDisclosure,
5
- } from "../../analysis/evidence.ts";
6
-
7
- export interface InspectRenderInput {
8
- relPath: string;
9
- line: number;
10
- character: number;
11
- confidence: ConfidenceMode;
12
- node: {
13
- type: string;
14
- text: string;
15
- startLine: number;
16
- startCharacter: number;
17
- ancestry?: Array<
18
- | string
19
- | {
20
- type: string;
21
- startLine: number;
22
- startCharacter: number;
23
- endLine?: number;
24
- endCharacter?: number;
25
- }
26
- >;
27
- } | null;
28
- enclosingSymbol: {
29
- name: string;
30
- kind: string;
31
- startLine: number;
32
- endLine: number;
33
- } | null;
34
- hover: string | null;
35
- definitions: Array<{ file: string; line: number; character: number }>;
36
- diagnostics: Array<{ line: number; severity: number | string; message: string }>;
37
- codeActions: Array<{ title: string; kind?: string }>;
38
- codeActionEvidence?: EvidenceListMetadata;
39
- unavailableSections: string[];
40
- }
1
+ import { renderEvidenceListMetadataDisclosure } from "../../analysis/evidence.ts";
2
+ import type { InspectResultAssembly } from "../result/inspect.ts";
41
3
 
42
4
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: inspect rendering keeps section ordering and unavailable-state handling explicit
43
- export function renderInspectResult(input: InspectRenderInput): string {
5
+ export function renderInspectResult(assembly: InspectResultAssembly): string {
6
+ const input = assembly.data;
44
7
  const lines: string[] = [];
45
8
  lines.push(`# Inspect: ${input.relPath}:${input.line}:${input.character}`);
46
9
  lines.push("");
@@ -4,6 +4,7 @@ import { createEvidenceList } from "../../analysis/evidence.ts";
4
4
  import { normalizePath } from "../../analysis/search/ripgrep.ts";
5
5
  import { gatherNearbyDiagnostics, gatherTreeSitterContext } from "../../ui/markdown/gather.ts";
6
6
  import type { InspectDeps, InspectInput, InspectUseCaseResult } from "../../ui/markdown/types.ts";
7
+ import { assembleInspectResult } from "../result/inspect.ts";
7
8
  import { renderInspectResult } from "./markdown.ts";
8
9
 
9
10
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: inspect orchestration keeps data gathering and unavailable-section derivation in one place
@@ -89,37 +90,35 @@ export async function executeInspect(
89
90
  });
90
91
 
91
92
  const nextQueries = buildNextQueries(relPath, input.line, input.character, confidence);
92
- const content = renderInspectResult({
93
- relPath,
94
- line: input.line,
95
- character: input.character,
96
- confidence,
97
- node: context.nodeInfo,
98
- enclosingSymbol: enclosing
99
- ? {
100
- name: enclosing.name,
101
- kind: enclosing.kind,
102
- startLine: enclosing.startLine,
103
- endLine: enclosing.endLine,
104
- }
105
- : null,
106
- hover: context.hover?.contents ?? null,
107
- definitions,
108
- diagnostics,
109
- codeActions: codeActions.items,
110
- codeActionEvidence: codeActions.metadata,
111
- unavailableSections: dedupe(unavailableSections),
112
- });
113
-
114
- return {
115
- content,
116
- details: {
93
+ const assembly = assembleInspectResult(
94
+ {
95
+ relPath,
96
+ line: input.line,
97
+ character: input.character,
117
98
  confidence,
118
- focusTarget: `${relPath}:${input.line}:${input.character}`,
99
+ node: context.nodeInfo,
100
+ enclosingSymbol: enclosing
101
+ ? {
102
+ name: enclosing.name,
103
+ kind: enclosing.kind,
104
+ startLine: enclosing.startLine,
105
+ endLine: enclosing.endLine,
106
+ }
107
+ : null,
108
+ hover: context.hover?.contents ?? null,
109
+ definitions,
110
+ diagnostics,
111
+ codeActions: codeActions.items,
112
+ codeActionEvidence: codeActions.metadata,
119
113
  unavailableSections: dedupe(unavailableSections),
120
- evidenceLists: [codeActions.metadata],
121
- nextQueries,
122
114
  },
115
+ nextQueries,
116
+ );
117
+ const content = renderInspectResult(assembly);
118
+
119
+ return {
120
+ content,
121
+ details: assembly.details,
123
122
  };
124
123
  }
125
124
 
@@ -6,10 +6,17 @@
6
6
  * orientation.
7
7
  */
8
8
 
9
- import { existsSync } from "node:fs";
9
+ import { existsSync, statSync } from "node:fs";
10
10
  import type { ArchitectureModel } from "../../analysis/architecture/model.ts";
11
+ import {
12
+ findInstructionFilesForDirectory,
13
+ insertInstructionsNearTop,
14
+ renderInstructionFiles,
15
+ } from "../../analysis/instruction-files.ts";
11
16
  import { normalizePath } from "../../analysis/search/ripgrep.ts";
17
+ import { loadCodeIntelligenceConfig } from "../../config.ts";
12
18
  import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
19
+ import type { OrientationUseCaseResult } from "../../ui/markdown/types.ts";
13
20
  import { unavailableContextDetails } from "../infra/error-results.ts";
14
21
  import { prepareOrientationDeps } from "./deps.ts";
15
22
  import type { CodeOrientationToolParams } from "./execute.ts";
@@ -50,8 +57,52 @@ export async function runOrientationMode(
50
57
  },
51
58
  { ...deps, cwd: ctx.cwd },
52
59
  );
60
+ const withInstructions = addInstructionFilesForDirectoryFocus(result, focusResolution.path, ctx);
53
61
 
54
- return { content: result.content, details: { type: "context", data: result.details } };
62
+ return {
63
+ content: withInstructions.content,
64
+ details: { type: "context", data: withInstructions.details },
65
+ };
66
+ }
67
+
68
+ function addInstructionFilesForDirectoryFocus(
69
+ result: OrientationUseCaseResult,
70
+ focusPath: string | undefined,
71
+ ctx: CodeIntelToolExecCtx,
72
+ ): OrientationUseCaseResult {
73
+ if (!focusPath || !isDirectory(focusPath)) return result;
74
+
75
+ const config = loadCodeIntelligenceConfig(ctx.cwd);
76
+ const matches = findInstructionFilesForDirectory({
77
+ directory: focusPath,
78
+ cwd: ctx.cwd,
79
+ fileNames: config.instructionFileNames,
80
+ nativeContextPaths: ctx.session.nativeInstructionPaths,
81
+ surfacedDirectories: ctx.session.surfacedInstructionDirs,
82
+ });
83
+ if (matches.length === 0) return result;
84
+
85
+ const rendered = renderInstructionFiles(matches);
86
+ if (!rendered) return result;
87
+
88
+ ctx.session.markInstructionDirsSurfaced(rendered.metadata.files.map((file) => file.directory));
89
+
90
+ return {
91
+ content: insertInstructionsNearTop(result.content, rendered.markdown),
92
+ details: {
93
+ ...result.details,
94
+ renderedSections: ["instructions", ...result.details.renderedSections],
95
+ instructions: rendered.metadata,
96
+ },
97
+ };
98
+ }
99
+
100
+ function isDirectory(filePath: string): boolean {
101
+ try {
102
+ return statSync(filePath).isDirectory();
103
+ } catch {
104
+ return false;
105
+ }
55
106
  }
56
107
 
57
108
  /**
@@ -19,6 +19,7 @@ import type {
19
19
  OrientationTarget,
20
20
  OrientationUseCaseResult,
21
21
  } from "../../ui/markdown/types.ts";
22
+ import { assembleOrientationDetails } from "../result/orientation.ts";
22
23
  import { type RenderedOrientationSection, renderOrientationResult } from "./markdown.ts";
23
24
 
24
25
  const DEFAULT_TARGET_SECTIONS: OrientationSection[] = ["defs", "docs", "diagnostics"];
@@ -59,15 +60,13 @@ async function executeOrientationContext(
59
60
  lspService: deps.lspService,
60
61
  });
61
62
 
62
- const details: ContextDetails = {
63
+ const details: ContextDetails = assembleOrientationDetails({
63
64
  confidence: result.details.confidence,
64
- task: null,
65
65
  focusTarget: input.focus ?? null,
66
- requestedSections: [],
67
66
  renderedSections: ["orientation"],
68
67
  omittedCount: result.details.omittedCount,
69
68
  nextQueries: result.details.nextQueries,
70
- };
69
+ });
71
70
 
72
71
  return {
73
72
  content: result.content,
@@ -107,15 +106,13 @@ async function executeTargetOrientation(
107
106
  ? "structural"
108
107
  : "unavailable";
109
108
 
110
- const details: ContextDetails = {
109
+ const details: ContextDetails = assembleOrientationDetails({
111
110
  confidence,
112
- task: null,
113
111
  focusTarget,
114
112
  requestedSections,
115
113
  renderedSections: sections.map((section) => section.key),
116
- omittedCount: 0,
117
114
  nextQueries: buildNextQueries(input.target, deps.cwd),
118
- };
115
+ });
119
116
 
120
117
  return {
121
118
  content: renderOrientationResult({