@mrclrchtr/supi-code-intelligence 4.7.0 → 4.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 (223) hide show
  1. package/node_modules/@mrclrchtr/supi-code-runtime/README.md +1 -1
  2. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -15
  3. package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +1 -6
  4. package/node_modules/@mrclrchtr/supi-core/README.md +29 -35
  5. package/node_modules/@mrclrchtr/supi-core/package.json +4 -7
  6. package/node_modules/@mrclrchtr/supi-core/src/api.ts +4 -6
  7. package/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -20
  8. package/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +7 -1
  9. package/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -1
  10. package/node_modules/@mrclrchtr/supi-core/src/context.ts +1 -9
  11. package/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +8 -0
  12. package/node_modules/@mrclrchtr/supi-core/src/debug-timing.ts +107 -0
  13. package/node_modules/@mrclrchtr/supi-core/src/index.ts +4 -6
  14. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +54 -28
  15. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +91 -125
  16. package/node_modules/@mrclrchtr/supi-core/src/settings.ts +10 -7
  17. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +1 -1
  18. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -15
  19. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +1 -6
  20. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/README.md +29 -35
  21. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +4 -7
  22. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/api.ts +4 -6
  23. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -20
  24. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +7 -1
  25. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -1
  26. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/context.ts +1 -9
  27. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +8 -0
  28. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug-timing.ts +107 -0
  29. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/index.ts +4 -6
  30. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +54 -28
  31. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +91 -125
  32. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings.ts +10 -7
  33. package/node_modules/@mrclrchtr/supi-lsp/package.json +3 -3
  34. package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostics.ts +361 -0
  35. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +46 -238
  36. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +25 -33
  37. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +1 -1
  38. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -15
  39. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +1 -6
  40. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/README.md +29 -35
  41. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +4 -7
  42. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +4 -6
  43. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -20
  44. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +7 -1
  45. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -1
  46. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/context.ts +1 -9
  47. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +8 -0
  48. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/debug-timing.ts +107 -0
  49. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +4 -6
  50. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +54 -28
  51. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +91 -125
  52. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings.ts +10 -7
  53. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +3 -3
  54. package/package.json +5 -5
  55. package/src/analysis/search/ast-scan-timing.ts +59 -0
  56. package/src/analysis/search/pattern-analysis.ts +230 -0
  57. package/src/analysis/search/pattern.ts +22 -224
  58. package/src/config.ts +19 -16
  59. package/src/substrate/lsp/settings.ts +90 -91
  60. package/src/tool/find/execute.ts +5 -8
  61. package/src/tool/graph/execute.ts +1 -1
  62. package/src/tool/health/execute.ts +2 -5
  63. package/src/tool/inspect/execute.ts +5 -7
  64. package/src/tool/orientation/execute.ts +4 -5
  65. package/src/tool/refactor-apply/execute.ts +4 -5
  66. package/src/tool/refactor-plan/execute.ts +7 -9
  67. package/src/tool/result/errors.ts +2 -82
  68. package/src/ui/tui/common.ts +1 -1
  69. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +0 -120
  70. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +0 -75
  71. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -42
  72. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -221
  73. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +0 -357
  74. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -11
  75. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  76. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +0 -36
  77. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +0 -31
  78. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +0 -16
  79. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -287
  80. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +0 -41
  81. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +0 -57
  82. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -36
  83. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -201
  84. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +0 -134
  85. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +0 -44
  86. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +0 -2
  87. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  88. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +0 -170
  89. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +0 -15
  90. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +0 -4
  91. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +0 -93
  92. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/report.ts +0 -121
  93. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +0 -71
  94. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +0 -8
  95. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  96. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  97. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  98. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +0 -76
  99. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +0 -487
  100. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  101. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  102. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  103. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +0 -33
  104. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +0 -11
  105. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +0 -68
  106. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +0 -60
  107. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  108. package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +0 -42
  109. package/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +0 -45
  110. package/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  111. package/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  112. package/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  113. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  114. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  115. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  116. package/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  117. package/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  118. package/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  119. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +0 -120
  120. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +0 -75
  121. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -42
  122. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -221
  123. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +0 -357
  124. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -11
  125. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  126. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +0 -36
  127. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +0 -31
  128. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +0 -16
  129. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -287
  130. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +0 -41
  131. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +0 -57
  132. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -36
  133. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -201
  134. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +0 -134
  135. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +0 -44
  136. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +0 -2
  137. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  138. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +0 -170
  139. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +0 -15
  140. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +0 -4
  141. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +0 -93
  142. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/report.ts +0 -121
  143. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +0 -71
  144. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +0 -8
  145. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  146. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  147. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  148. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +0 -76
  149. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +0 -487
  150. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  151. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  152. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  153. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +0 -33
  154. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +0 -11
  155. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +0 -68
  156. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +0 -60
  157. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  158. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +0 -42
  159. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +0 -45
  160. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  161. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  162. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  163. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  164. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  165. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  166. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  167. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  168. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  169. package/node_modules/@mrclrchtr/supi-lsp/src/client/client-refresh.ts +0 -234
  170. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostics.ts +0 -99
  171. package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/suppression-diagnostics.ts +0 -60
  172. package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +0 -41
  173. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +0 -120
  174. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +0 -75
  175. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -42
  176. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/config.ts +0 -221
  177. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config/prompt-surface.ts +0 -357
  178. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/config.ts +0 -11
  179. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  180. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-provider-registry.ts +0 -36
  181. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context/context-tag.ts +0 -31
  182. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/context.ts +0 -16
  183. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/debug-registry.ts +0 -287
  184. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +0 -41
  185. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/footer-registry.ts +0 -57
  186. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -36
  187. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -201
  188. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/model-selection.ts +0 -134
  189. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +0 -44
  190. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path.ts +0 -2
  191. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  192. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project-roots.ts +0 -170
  193. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/project.ts +0 -15
  194. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/prompt-surface.ts +0 -4
  195. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/registry-utils.ts +0 -93
  196. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/report.ts +0 -121
  197. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session-utils.ts +0 -71
  198. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/session.ts +0 -8
  199. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  200. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  201. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  202. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-registry.ts +0 -76
  203. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-schema.ts +0 -487
  204. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  205. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  206. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  207. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/settings.ts +0 -33
  208. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/spinner-frames.ts +0 -11
  209. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/status-spinner.ts +0 -68
  210. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/terminal.ts +0 -60
  211. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  212. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +0 -42
  213. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/workspace/context.ts +0 -45
  214. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/context/context-messages.ts +0 -119
  215. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/progress-widget.ts +0 -189
  216. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/scoped-settings-list.ts +0 -373
  217. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-action-menu.ts +0 -102
  218. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-command.ts +0 -15
  219. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-submenus.ts +0 -141
  220. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings/settings-ui.ts +0 -118
  221. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/settings-ui.ts +0 -3
  222. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/tool-framework.ts +0 -192
  223. package/src/tool/infra/error-results.ts +0 -19
@@ -1,51 +1,33 @@
1
- import type {
2
- CodeResult,
3
- OutlineData,
4
- StructuralProvider as StructuralSubstrate,
5
- } from "@mrclrchtr/supi-code-runtime/api";
1
+ import type { StructuralProvider as StructuralSubstrate } from "@mrclrchtr/supi-code-runtime/api";
6
2
  import type { StructuralSearchOperation } from "@mrclrchtr/supi-tree-sitter/api";
7
3
  import type { CodeFindAstKind } from "../../tool/find/ast-kinds.ts";
8
4
  import type { EvidencePartialReason } from "../evidence.ts";
9
5
  import {
10
6
  type AstScanExclusion,
11
- type AstScanLimitation,
12
7
  type AstScanOperations,
13
8
  type AstScanPolicy,
14
9
  DEFAULT_AST_SCAN_MAX_FILES,
15
10
  DEFAULT_AST_SCAN_TIMEOUT_MS,
16
11
  enumerateAstFiles,
17
12
  } from "./ast-scan.ts";
18
- import { callableExpressionForMatching } from "./call-name.ts";
19
- import { settleByDeadline } from "./deadline.ts";
13
+ import { startAstScanTimer } from "./ast-scan-timing.ts";
20
14
  import { relativeDisplayPath } from "./paths.ts";
21
-
22
- export interface StructuredPatternParams {
23
- readonly pattern: string;
24
- readonly kind: CodeFindAstKind;
25
- }
26
-
27
- export interface StructuredMatch {
28
- readonly file: string;
29
- readonly name: string;
30
- readonly kind: string;
31
- readonly line: number;
32
- }
33
-
34
- export type StructuredFailureKind = Exclude<CodeResult<never>, { kind: "success" }>["kind"];
35
-
36
- export interface StructuredFailure {
37
- readonly file: string;
38
- readonly kind: StructuredFailureKind;
39
- readonly reason: string;
40
- }
41
-
42
- export type StructuredScanLimitation = AstScanLimitation | ProviderScanLimitation;
43
-
44
- export interface ProviderScanLimitation {
45
- readonly reason: "provider-failure";
46
- readonly pathCount: number;
47
- readonly examples: readonly string[];
48
- }
15
+ import {
16
+ analyzeStructuredFiles,
17
+ type StructuredFailure,
18
+ type StructuredMatch,
19
+ type StructuredPatternParams,
20
+ type StructuredScanLimitation,
21
+ } from "./pattern-analysis.ts";
22
+
23
+ export type {
24
+ ProviderScanLimitation,
25
+ StructuredFailure,
26
+ StructuredFailureKind,
27
+ StructuredMatch,
28
+ StructuredPatternParams,
29
+ StructuredScanLimitation,
30
+ } from "./pattern-analysis.ts";
49
31
 
50
32
  /** Structured completeness state for the AST source-file scan. */
51
33
  export interface StructuredScanSummary {
@@ -98,6 +80,7 @@ export interface StructuredPatternSearchOptions {
98
80
  export async function getStructuredPatternMatches(
99
81
  options: StructuredPatternSearchOptions,
100
82
  ): Promise<StructuredPatternOutcome> {
83
+ const scanTimer = startAstScanTimer();
101
84
  const now = options.control?.now ?? Date.now;
102
85
  const maxFiles = options.control?.maxFiles ?? DEFAULT_AST_SCAN_MAX_FILES;
103
86
  const timeoutMs = options.control?.timeoutMs ?? DEFAULT_AST_SCAN_TIMEOUT_MS;
@@ -143,6 +126,7 @@ export async function getStructuredPatternMatches(
143
126
  };
144
127
  }
145
128
 
129
+ scanTimer.enumerationCompleted();
146
130
  const analysis = await analyzeStructuredFiles({
147
131
  files: enumeration.files,
148
132
  displayBase: enumeration.displayBase,
@@ -156,13 +140,14 @@ export async function getStructuredPatternMatches(
156
140
  const capabilityMismatches = analysis.failures.filter(
157
141
  (failure) => failure.kind === "unsupported-language",
158
142
  );
143
+ const complete = enumeration.complete && analysis.limitations.length === 0;
144
+ scanTimer.record({ context: options, operation, roots, enumeration, analysis, complete });
159
145
  if (capabilityMismatches.length > 0) {
160
146
  return {
161
147
  kind: "unavailable",
162
148
  reason: `Structural provider rejected ${capabilityMismatches.length} file${capabilityMismatches.length === 1 ? "" : "s"} declared eligible for ${operation} analysis.`,
163
149
  };
164
150
  }
165
- const complete = enumeration.complete && analysis.limitations.length === 0;
166
151
  return {
167
152
  kind: "completed",
168
153
  result: {
@@ -183,92 +168,6 @@ export async function getStructuredPatternMatches(
183
168
  };
184
169
  }
185
170
 
186
- interface AnalyzeStructuredFilesOptions {
187
- readonly files: readonly string[];
188
- readonly displayBase: string;
189
- readonly params: StructuredPatternParams;
190
- readonly structural: StructuralSubstrate;
191
- readonly deadline: number;
192
- readonly now: () => number;
193
- readonly signal?: AbortSignal;
194
- readonly initialLimitations: readonly AstScanLimitation[];
195
- }
196
-
197
- async function analyzeStructuredFiles(options: AnalyzeStructuredFilesOptions): Promise<{
198
- matches: StructuredMatch[];
199
- failures: StructuredFailure[];
200
- limitations: StructuredScanLimitation[];
201
- analyzedFileCount: number;
202
- }> {
203
- const matches: StructuredMatch[] = [];
204
- const failures: StructuredFailure[] = [];
205
- const limitations: StructuredScanLimitation[] = [...options.initialLimitations];
206
- const matcher = createStructuredMatcher(options.params.pattern);
207
- let analyzedFileCount = 0;
208
-
209
- for (const [index, absoluteFile] of options.files.entries()) {
210
- options.signal?.throwIfAborted();
211
- if (options.now() > options.deadline) {
212
- addAnalysisTimeout(limitations, options.files.slice(index), options.displayBase);
213
- break;
214
- }
215
- const relativeFile = relativeDisplayPath(options.displayBase, absoluteFile);
216
- const fileMatches: StructuredMatch[] = [];
217
- const fileFailures: StructuredFailure[] = [];
218
- const outcome = await settleByDeadline(
219
- async () => {
220
- try {
221
- await collectMatchesForFile(
222
- fileMatches,
223
- fileFailures,
224
- options.structural,
225
- relativeFile,
226
- options.params.kind,
227
- matcher,
228
- );
229
- } catch (error) {
230
- fileFailures.push({
231
- file: relativeFile,
232
- kind: "runtime-error",
233
- reason: errorMessage(error),
234
- });
235
- }
236
- },
237
- { deadline: options.deadline, now: options.now, signal: options.signal },
238
- );
239
- if (outcome.kind === "timeout") {
240
- addAnalysisTimeout(limitations, options.files.slice(index), options.displayBase);
241
- break;
242
- }
243
- options.signal?.throwIfAborted();
244
- matches.push(...fileMatches);
245
- failures.push(...fileFailures);
246
- if (fileFailures.length === 0) analyzedFileCount += 1;
247
- }
248
-
249
- if (failures.length > 0) {
250
- limitations.push({
251
- reason: "provider-failure",
252
- pathCount: failures.length,
253
- examples: failures.slice(0, 5).map((failure) => failure.file),
254
- });
255
- }
256
- return { matches, failures, limitations, analyzedFileCount };
257
- }
258
-
259
- function addAnalysisTimeout(
260
- limitations: StructuredScanLimitation[],
261
- remainingFiles: readonly string[],
262
- cwd: string,
263
- ): void {
264
- if (limitations.some((limitation) => limitation.reason === "timeout")) return;
265
- limitations.push({
266
- reason: "timeout",
267
- pathCount: remainingFiles.length,
268
- examples: remainingFiles.slice(0, 5).map((file) => relativeDisplayPath(cwd, file)),
269
- });
270
- }
271
-
272
171
  function primaryPartialReason(
273
172
  limitations: readonly StructuredScanLimitation[],
274
173
  ): EvidencePartialReason {
@@ -282,94 +181,6 @@ function primaryPartialReason(
282
181
  return "provider-limited";
283
182
  }
284
183
 
285
- // biome-ignore lint/complexity/useMaxParams: helper takes explicit collection inputs to avoid intermediate objects in the hot path
286
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: kind-specific tree-sitter matching is clearest as one helper
287
- async function collectMatchesForFile(
288
- matches: StructuredMatch[],
289
- failures: StructuredFailure[],
290
- structural: StructuralSubstrate,
291
- relFile: string,
292
- kind: CodeFindAstKind,
293
- matcher: (value: string) => boolean,
294
- ): Promise<void> {
295
- const recordFailure = (kind: StructuredFailureKind, reason: string) => {
296
- failures.push({ file: relFile, kind, reason });
297
- };
298
-
299
- if (kind === "definition") {
300
- const outline = await structural.outline(relFile);
301
- if (!handleStructuralResult(outline, recordFailure)) return;
302
- for (const item of flattenOutlineItems(outline.data)) {
303
- if (!matcher(item.name)) continue;
304
- matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
305
- }
306
- return;
307
- }
308
-
309
- if (kind === "export") {
310
- const exportsResult = await structural.exports(relFile);
311
- if (!handleStructuralResult(exportsResult, recordFailure)) return;
312
- for (const item of exportsResult.data) {
313
- if (!matcher(item.name)) continue;
314
- matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
315
- }
316
- return;
317
- }
318
-
319
- if (kind === "import") {
320
- const importsResult = await structural.imports(relFile);
321
- if (!handleStructuralResult(importsResult, recordFailure)) return;
322
- for (const item of importsResult.data) {
323
- if (!matcher(item.moduleSpecifier)) continue;
324
- matches.push({
325
- file: relFile,
326
- name: item.moduleSpecifier,
327
- kind: "import",
328
- line: item.startLine,
329
- });
330
- }
331
- return;
332
- }
333
-
334
- if (kind === "call") {
335
- const callResult = await structural.callSites(relFile);
336
- if (!handleStructuralResult(callResult, recordFailure)) return;
337
- for (const call of callResult.data) {
338
- if (!matcher(callableExpressionForMatching(call.name))) continue;
339
- matches.push({ file: relFile, name: call.name, kind: "call", line: call.startLine });
340
- }
341
- return;
342
- }
343
-
344
- const outline = await structural.outline(relFile);
345
- if (!handleStructuralResult(outline, recordFailure)) return;
346
- for (const item of flattenOutlineItems(outline.data)) {
347
- if (kind === "type" && !TYPE_KIND.test(item.kind.toLowerCase())) continue;
348
- if (kind === "interface" && item.kind.toLowerCase() !== "interface") continue;
349
- if (kind === "class" && item.kind.toLowerCase() !== "class") continue;
350
- if (kind === "method" && item.kind.toLowerCase() !== "method") continue;
351
- if (kind === "enum" && item.kind.toLowerCase() !== "enum") continue;
352
- if (!matcher(item.name)) continue;
353
- matches.push({ file: relFile, name: item.name, kind: item.kind, line: item.startLine });
354
- }
355
- }
356
-
357
- /** Flatten provider outlines so nested class/interface/enum declarations remain searchable. */
358
- function flattenOutlineItems(items: readonly OutlineData[]): OutlineData[] {
359
- return items.flatMap((item) => [item, ...flattenOutlineItems(item.children ?? [])]);
360
- }
361
-
362
- function handleStructuralResult<T>(
363
- result: CodeResult<T>,
364
- recordFailure: (kind: StructuredFailureKind, reason: string) => void,
365
- ): result is { kind: "success"; data: T } {
366
- if (result.kind === "success") return true;
367
- recordFailure(result.kind, result.message);
368
- return false;
369
- }
370
-
371
- const TYPE_KIND = /^(?:class|interface|type|enum|struct|union|record|object|concept)$/;
372
-
373
184
  const AST_KIND_OPERATIONS = {
374
185
  definition: "outline",
375
186
  import: "imports",
@@ -385,16 +196,3 @@ const AST_KIND_OPERATIONS = {
385
196
  function structuralOperationForKind(kind: CodeFindAstKind): StructuralSearchOperation {
386
197
  return AST_KIND_OPERATIONS[kind];
387
198
  }
388
-
389
- function createStructuredMatcher(pattern: string): (value: string) => boolean {
390
- const ignoreCase = !/[A-Z]/.test(pattern);
391
- const needle = ignoreCase ? pattern.toLowerCase() : pattern;
392
- return (value: string) => {
393
- const haystack = ignoreCase ? value.toLowerCase() : value;
394
- return haystack.includes(needle);
395
- };
396
- }
397
-
398
- function errorMessage(error: unknown): string {
399
- return error instanceof Error ? error.message : "Structural provider failed.";
400
- }
package/src/config.ts CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
4
  import { loadSupiConfig } from "@mrclrchtr/supi-core/config";
5
- import { registerDeclarativeSettings } from "@mrclrchtr/supi-core/settings";
5
+ import { defineConfigSettings, registerSettings } from "@mrclrchtr/supi-core/settings";
6
6
 
7
7
  const CODE_INTELLIGENCE_SECTION = "code-intelligence";
8
8
 
@@ -24,19 +24,22 @@ export function loadCodeIntelligenceConfig(cwd: string, homeDir?: string): CodeI
24
24
 
25
25
  /** Register code-intelligence settings with the shared SuPi settings registry. */
26
26
  export function registerCodeIntelligenceSettings(pi: ExtensionAPI, homeDir?: string): void {
27
- registerDeclarativeSettings(pi, {
28
- id: CODE_INTELLIGENCE_SECTION,
29
- label: "Code Intelligence",
30
- section: CODE_INTELLIGENCE_SECTION,
31
- defaults: CODE_INTELLIGENCE_DEFAULTS,
32
- fields: [
33
- {
34
- kind: "stringList" as const,
35
- key: "instructionFileNames",
36
- label: "Instruction File Names",
37
- description: "Directory-local instruction file names shown by directory orientation",
38
- },
39
- ],
40
- ...(homeDir ? { homeDir } : {}),
41
- });
27
+ registerSettings(
28
+ pi,
29
+ defineConfigSettings({
30
+ id: CODE_INTELLIGENCE_SECTION,
31
+ label: "Code Intelligence",
32
+ section: CODE_INTELLIGENCE_SECTION,
33
+ defaults: CODE_INTELLIGENCE_DEFAULTS,
34
+ fields: [
35
+ {
36
+ kind: "stringList" as const,
37
+ key: "instructionFileNames",
38
+ label: "Instruction File Names",
39
+ description: "Directory-local instruction file names shown by directory orientation",
40
+ },
41
+ ],
42
+ ...(homeDir ? { homeDir } : {}),
43
+ }),
44
+ );
42
45
  }
@@ -6,7 +6,7 @@
6
6
  //
7
7
  // Registered fields:
8
8
  // - exclude: stringList
9
- // - disabled_servers: custom submenu that writes per-language disable config
9
+ // - disabled_servers: custom submenu whose module action writes per-language disable config
10
10
 
11
11
  import { type ExtensionAPI, getSettingsListTheme } from "@earendil-works/pi-coding-agent";
12
12
  import type { Component, SettingItem } from "@earendil-works/pi-tui";
@@ -14,7 +14,8 @@ import { Container, Key, matchesKey, SettingsList, Text } from "@earendil-works/
14
14
 
15
15
  import { loadSupiConfigSectionForScope, writeSupiConfig } from "@mrclrchtr/supi-core/config";
16
16
  import {
17
- registerDeclarativeSettings,
17
+ defineConfigSettings,
18
+ registerSettings,
18
19
  type SettingsScope,
19
20
  type ValueSource,
20
21
  } from "@mrclrchtr/supi-core/settings";
@@ -94,34 +95,16 @@ function createDisabledServersSubmenu(
94
95
  return {
95
96
  render: (width: number) => container.render(width),
96
97
  invalidate: () => container.invalidate(),
97
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: single event handler for the submenu
98
98
  handleInput: (data: string) => {
99
99
  if (matchesKey(data, Key.escape)) {
100
100
  if (!dirty) {
101
101
  done();
102
102
  return;
103
103
  }
104
- // Write per-language enabled/disabled into lsp.servers
105
- const currentSection = loadSupiConfigSectionForScope("lsp", cwd, { scope });
106
- const servers =
107
- (currentSection?.servers as Record<string, Record<string, unknown>> | undefined) ?? {};
108
-
109
- for (const item of items) {
110
- if (item.currentValue === "disabled") {
111
- servers[item.id] = { ...(servers[item.id] ?? {}), enabled: false };
112
- } else {
113
- const srv = servers[item.id];
114
- if (srv) {
115
- delete srv.enabled;
116
- if (Object.keys(srv).length === 0) {
117
- delete servers[item.id];
118
- }
119
- }
120
- }
121
- }
122
-
123
- writeSupiConfig({ section: "lsp", scope, cwd }, { servers });
124
- done("saved");
104
+ const disabled = items
105
+ .filter((item) => item.currentValue === "disabled")
106
+ .map((item) => item.id);
107
+ done(JSON.stringify(disabled));
125
108
  return;
126
109
  }
127
110
  settingsList.handleInput?.(data);
@@ -129,75 +112,91 @@ function createDisabledServersSubmenu(
129
112
  };
130
113
  }
131
114
 
115
+ /** Persist the complete disabled-server choice through the settings module action path. */
116
+ function persistDisabledServers(
117
+ scope: SettingsScope,
118
+ cwd: string,
119
+ value: string | undefined,
120
+ ): void {
121
+ const selected = value ? JSON.parse(value) : [];
122
+ if (!Array.isArray(selected) || !selected.every((item) => typeof item === "string")) {
123
+ throw new Error("Invalid disabled-server selection");
124
+ }
125
+ const disabled = new Set<string>(selected);
126
+ const currentSection = loadSupiConfigSectionForScope("lsp", cwd, { scope });
127
+ const servers =
128
+ (currentSection?.servers as Record<string, Record<string, unknown>> | undefined) ?? {};
129
+ const names = new Set([...Object.keys(servers), ...getConfiguredServers(cwd)]);
130
+ for (const name of names) {
131
+ if (disabled.has(name)) {
132
+ servers[name] = { ...(servers[name] ?? {}), enabled: false };
133
+ continue;
134
+ }
135
+ const server = servers[name];
136
+ if (!server) continue;
137
+ delete server.enabled;
138
+ if (Object.keys(server).length === 0) delete servers[name];
139
+ }
140
+ writeSupiConfig({ section: "lsp", scope, cwd }, { servers });
141
+ }
142
+
132
143
  export function registerLspSettings(pi: ExtensionAPI): void {
133
- registerDeclarativeSettings(pi, {
134
- id: "lsp",
135
- label: "LSP",
136
- section: "lsp",
137
- defaults: LSP_DEFAULTS,
138
- fields: [
139
- {
140
- kind: "stringList" as const,
141
- key: "exclude",
142
- label: "Exclude Patterns",
143
- description: "Gitignore patterns to suppress LSP diagnostics (comma-separated)",
144
- },
145
- {
146
- kind: "custom" as const,
147
- key: "disabled_servers",
148
- label: "Disabled Servers",
149
- description: "Press Enter to choose which language servers to disable",
150
- resolve: (scope, cwd) => {
151
- const scopedDisabled = getDisabledServersFromConfig(scope, cwd);
152
- const otherScope = scope === "project" ? "global" : "project";
153
- const otherDisabled =
154
- scope === "project" ? getDisabledServersFromConfig("global", cwd) : new Set<string>();
155
-
156
- // Effective disabled servers = union of both scopes (since either disables)
157
- const effectiveDisabled = new Set([...scopedDisabled, ...otherDisabled]);
158
- const label =
159
- effectiveDisabled.size > 0 ? [...effectiveDisabled].sort().join(", ") : "none disabled";
160
-
161
- // Source: where the override comes from
162
- let source: ValueSource;
163
- if (scopedDisabled.size > 0) {
164
- source = scope;
165
- } else if (otherDisabled.size > 0) {
166
- source = otherScope as ValueSource;
167
- } else {
168
- source = "default";
169
- }
170
-
171
- let inheritanceSource: "global" | "default" | undefined;
172
- if (scope === "project" && source === "project") {
173
- inheritanceSource =
174
- getDisabledServersFromConfig("global", cwd).size > 0 ? "global" : "default";
175
- }
176
-
177
- return { displayValue: label, source, inheritanceSource };
144
+ registerSettings(
145
+ pi,
146
+ defineConfigSettings({
147
+ id: "lsp",
148
+ label: "LSP",
149
+ section: "lsp",
150
+ defaults: LSP_DEFAULTS,
151
+ fields: [
152
+ {
153
+ kind: "stringList" as const,
154
+ key: "exclude",
155
+ label: "Exclude Patterns",
156
+ description: "Gitignore patterns to suppress LSP diagnostics (comma-separated)",
178
157
  },
179
- submenu: (_currentValue, done, scope, cwd) =>
180
- createDisabledServersSubmenu(scope, cwd, done),
181
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: custom field persist handler orchestrates nested config writes
182
- persist: (scope, cwd, action, _helpers) => {
183
- if (action.kind === "inherit" || action.kind === "resetToDefault") {
184
- // Clear all per-server enable/disable entries for this scope
185
- const currentSection = loadSupiConfigSectionForScope("lsp", cwd, { scope });
186
- const servers =
187
- (currentSection?.servers as Record<string, Record<string, unknown>> | undefined) ??
188
- {};
189
- for (const name of Object.keys(servers)) {
190
- const srv = servers[name];
191
- if (srv) {
192
- delete srv.enabled;
193
- if (Object.keys(srv).length === 0) delete servers[name];
194
- }
158
+ {
159
+ kind: "custom" as const,
160
+ key: "disabled_servers",
161
+ label: "Disabled Servers",
162
+ description: "Press Enter to choose which language servers to disable",
163
+ resolve: (scope, cwd) => {
164
+ const scopedDisabled = getDisabledServersFromConfig(scope, cwd);
165
+ const otherScope = scope === "project" ? "global" : "project";
166
+ const otherDisabled =
167
+ scope === "project" ? getDisabledServersFromConfig("global", cwd) : new Set<string>();
168
+
169
+ // Effective disabled servers = union of both scopes (since either disables)
170
+ const effectiveDisabled = new Set([...scopedDisabled, ...otherDisabled]);
171
+ const label =
172
+ effectiveDisabled.size > 0
173
+ ? [...effectiveDisabled].sort().join(", ")
174
+ : "none disabled";
175
+
176
+ // Source: where the override comes from
177
+ let source: ValueSource;
178
+ if (scopedDisabled.size > 0) {
179
+ source = scope;
180
+ } else if (otherDisabled.size > 0) {
181
+ source = otherScope as ValueSource;
182
+ } else {
183
+ source = "default";
184
+ }
185
+
186
+ let inheritanceSource: "global" | "default" | undefined;
187
+ if (scope === "project" && source === "project") {
188
+ inheritanceSource =
189
+ getDisabledServersFromConfig("global", cwd).size > 0 ? "global" : "default";
195
190
  }
196
- writeSupiConfig({ section: "lsp", scope, cwd }, { servers });
197
- }
198
- // Explicit set actions are handled entirely inside the submenu
191
+
192
+ return { displayValue: label, source, inheritanceSource };
193
+ },
194
+ submenu: (_currentValue, done, scope, cwd) =>
195
+ createDisabledServersSubmenu(scope, cwd, done),
196
+ persist: (scope, cwd, action) =>
197
+ persistDisabledServers(scope, cwd, action.kind === "set" ? action.value : undefined),
199
198
  },
200
- },
201
- ],
202
- });
199
+ ],
200
+ }),
201
+ );
203
202
  }
@@ -2,8 +2,8 @@
2
2
 
3
3
  import type { FindMode, FindWorkflowInput } from "../../session/find-types.ts";
4
4
  import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
5
- import { unavailableSearchDetails } from "../infra/error-results.ts";
6
5
  import { toWorkflowControl } from "../infra/workflow-control.ts";
6
+ import { searchErrorResult } from "../result/errors.ts";
7
7
  import { assembleFindWorkflowResult } from "../result/find.ts";
8
8
  import type { CodeFindAstKind } from "./ast-kinds.ts";
9
9
  import { renderFindResult } from "./render.ts";
@@ -23,13 +23,10 @@ export async function executeFindTool(
23
23
  const outcome = await ctx.session.find(params as FindWorkflowInput, toWorkflowControl(ctx));
24
24
  if (outcome.kind === "unavailable") throw new Error(outcome.reason);
25
25
  if (outcome.kind === "invalid-input") {
26
- return {
27
- content: `**Error:** ${outcome.message}`,
28
- details: unavailableSearchDetails(
29
- Array.isArray(params?.scope) ? params.scope.join(", ") : null,
30
- ["Fix the search input and retry"],
31
- ),
32
- };
26
+ return searchErrorResult(`**Error:** ${outcome.message}`, {
27
+ scope: Array.isArray(params?.scope) ? params.scope.join(", ") : null,
28
+ nextQueries: ["Fix the search input and retry"],
29
+ });
33
30
  }
34
31
 
35
32
  const assembly = assembleFindWorkflowResult(outcome);
@@ -3,8 +3,8 @@
3
3
  import type { GraphWorkflowInput, RequestedGraphRelation } from "../../session/graph-types.ts";
4
4
  import type { GraphTargetInput } from "../../session/target-input.ts";
5
5
  import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
6
- import { searchErrorResult } from "../infra/error-results.ts";
7
6
  import { toWorkflowControl } from "../infra/workflow-control.ts";
7
+ import { searchErrorResult } from "../result/errors.ts";
8
8
  import { assembleGraphResult } from "../result/graph.ts";
9
9
  import { renderGraphResult } from "./markdown.ts";
10
10
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  import type { HealthSection, HealthWorkflowInput } from "../../session/health-types.ts";
4
4
  import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
5
- import { unavailableHealthDetails } from "../infra/error-results.ts";
6
5
  import { toWorkflowControl } from "../infra/workflow-control.ts";
6
+ import { healthErrorResult } from "../result/errors.ts";
7
7
  import { assembleHealthResult } from "../result/health.ts";
8
8
  import { renderHealthResult } from "./markdown.ts";
9
9
 
@@ -21,10 +21,7 @@ export async function executeHealthTool(
21
21
  const outcome = await ctx.session.health(params as HealthWorkflowInput, toWorkflowControl(ctx));
22
22
  if (outcome.kind === "unavailable") throw new Error(outcome.reason);
23
23
  if (outcome.kind === "invalid-input") {
24
- return {
25
- content: `**Error:** ${outcome.message}`,
26
- details: unavailableHealthDetails("invalid input"),
27
- };
24
+ return healthErrorResult(`**Error:** ${outcome.message}`, "invalid input");
28
25
  }
29
26
 
30
27
  const assembly = assembleHealthResult(outcome.data);
@@ -3,8 +3,8 @@
3
3
  import type { InspectWorkflowInput } from "../../session/inspect-types.ts";
4
4
  import type { SourcePointInput } from "../../session/target-input.ts";
5
5
  import type { CodeIntelResult, CodeIntelToolExecCtx } from "../../types/index.ts";
6
- import { unavailableInspectDetails } from "../infra/error-results.ts";
7
6
  import { toWorkflowControl } from "../infra/workflow-control.ts";
7
+ import { inspectErrorResult } from "../result/errors.ts";
8
8
  import { assembleInspectResult } from "../result/inspect.ts";
9
9
  import { renderInspectResult } from "./markdown.ts";
10
10
 
@@ -20,12 +20,10 @@ export async function executeInspectTool(
20
20
  const outcome = await ctx.session.inspect(params as InspectWorkflowInput, toWorkflowControl(ctx));
21
21
  if (outcome.kind === "unavailable") throw new Error(outcome.reason);
22
22
  if (outcome.kind === "invalid-input") {
23
- return {
24
- content: `**Error:** ${outcome.message}`,
25
- details: unavailableInspectDetails("invalid input", [
26
- "Provide an existing file and exact 1-based point",
27
- ]),
28
- };
23
+ return inspectErrorResult(`**Error:** ${outcome.message}`, {
24
+ focusTarget: "invalid input",
25
+ nextQueries: ["Provide an existing file and exact 1-based point"],
26
+ });
29
27
  }
30
28
 
31
29
  const assembly = assembleInspectResult(outcome.data, outcome.nextQueries);