@mrclrchtr/supi-code-intelligence 3.2.0 → 4.0.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.
- package/README.md +154 -435
- package/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
- package/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
- package/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
- package/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
- package/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-lsp/README.md +72 -62
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-lsp/package.json +4 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +9 -9
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +70 -41
- package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +16 -13
- package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +2 -2
- package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +0 -2
- package/node_modules/@mrclrchtr/supi-lsp/src/index.ts +6 -6
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-diagnostics.ts +5 -95
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-recovery.ts +4 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-symbol.ts +44 -6
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +47 -65
- package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +132 -79
- package/node_modules/@mrclrchtr/supi-lsp/src/provider/refactor-planning.ts +6 -14
- package/node_modules/@mrclrchtr/supi-lsp/src/session/readiness.ts +38 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +87 -75
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +5 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/session/{service-registry.ts → runtime-registry.ts} +163 -71
- package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +4 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +8 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/api.ts +10 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +19 -29
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/index.ts +7 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/query-result.ts +42 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/types.ts +15 -10
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +2 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/api.ts +0 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/evidence-badge.ts +3 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/index.ts +0 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/llm.ts +0 -10
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/path-utils.ts +19 -15
- package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +4 -21
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/bash/tree-sitter-bash.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/c/tree-sitter-c.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/go/tree-sitter-go.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/javascript/tree-sitter-javascript.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/python/tree-sitter-python.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/r/tree-sitter-r.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/rust/tree-sitter-rust.wasm.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +3 -3
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-kotlin-wasm.mjs +6 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-sql-wasm.mjs +18 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/vendor-wasm.mjs +17 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +2 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/coordinates.ts +20 -41
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +2 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +7 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/operation-support.ts +40 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +9 -7
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +6 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +76 -37
- package/node_modules/yaml/LICENSE +13 -0
- package/node_modules/yaml/README.md +172 -0
- package/node_modules/yaml/bin.mjs +11 -0
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/node_modules/yaml/browser/dist/errors.js +57 -0
- package/node_modules/yaml/browser/dist/index.js +17 -0
- package/node_modules/yaml/browser/dist/log.js +11 -0
- package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/node_modules/yaml/browser/dist/util.js +11 -0
- package/node_modules/yaml/browser/dist/visit.js +233 -0
- package/node_modules/yaml/browser/index.js +5 -0
- package/node_modules/yaml/browser/package.json +3 -0
- package/node_modules/yaml/dist/cli.d.ts +8 -0
- package/node_modules/yaml/dist/cli.mjs +201 -0
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/node_modules/yaml/dist/compose/composer.js +224 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/node_modules/yaml/dist/doc/Document.js +337 -0
- package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/node_modules/yaml/dist/doc/directives.js +178 -0
- package/node_modules/yaml/dist/errors.d.ts +21 -0
- package/node_modules/yaml/dist/errors.js +62 -0
- package/node_modules/yaml/dist/index.d.ts +25 -0
- package/node_modules/yaml/dist/index.js +50 -0
- package/node_modules/yaml/dist/log.d.ts +3 -0
- package/node_modules/yaml/dist/log.js +19 -0
- package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/node_modules/yaml/dist/options.d.ts +350 -0
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/node_modules/yaml/dist/parse/cst.js +112 -0
- package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/node_modules/yaml/dist/parse/parser.js +980 -0
- package/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/node_modules/yaml/dist/public-api.js +107 -0
- package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/node_modules/yaml/dist/schema/tags.js +99 -0
- package/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/node_modules/yaml/dist/test-events.js +134 -0
- package/node_modules/yaml/dist/util.d.ts +16 -0
- package/node_modules/yaml/dist/util.js +28 -0
- package/node_modules/yaml/dist/visit.d.ts +102 -0
- package/node_modules/yaml/dist/visit.js +236 -0
- package/node_modules/yaml/package.json +97 -0
- package/node_modules/yaml/util.js +2 -0
- package/package.json +9 -8
- package/src/analysis/architecture/discovery.ts +213 -227
- package/src/analysis/architecture/manifest.ts +147 -0
- package/src/analysis/architecture/model.ts +119 -52
- package/src/analysis/architecture/workspace-config.ts +229 -0
- package/src/analysis/{coverage/coverage-warnings.ts → capability/capability-warnings.ts} +41 -78
- package/src/analysis/evidence.ts +22 -5
- package/src/analysis/health/diagnostics.ts +183 -0
- package/src/analysis/health/recovery.ts +39 -0
- package/src/analysis/health/signals.ts +20 -0
- package/src/analysis/instruction-files.ts +60 -48
- package/src/analysis/provider.ts +31 -12
- package/src/analysis/readiness.ts +29 -9
- package/src/{tool/refactor-apply → analysis/refactor}/apply.ts +120 -26
- package/src/analysis/refactor/position.ts +6 -0
- package/src/analysis/refactor/safety.ts +4 -11
- package/src/analysis/references/locations.ts +20 -0
- package/src/analysis/references/semantic-refs.ts +21 -11
- package/src/{tool/graph → analysis/relations}/implementations.ts +27 -23
- package/src/analysis/relations/provider-locations.ts +179 -0
- package/src/{tool/graph → analysis/relations}/references.ts +25 -21
- package/src/{tool/graph → analysis/relations}/types.ts +4 -19
- package/src/analysis/search/ast-scan.ts +376 -0
- package/src/analysis/search/call-name.ts +68 -0
- package/src/analysis/search/deadline.ts +84 -0
- package/src/analysis/search/paths.ts +88 -0
- package/src/analysis/search/pattern.ts +290 -246
- package/src/analysis/target/anchored.ts +72 -27
- package/src/analysis/target/file.ts +292 -132
- package/src/analysis/target/identity.ts +237 -0
- package/src/analysis/target/symbol.ts +169 -86
- package/src/analysis/target/types.ts +36 -4
- package/src/api.ts +21 -4
- package/src/app/app.ts +53 -46
- package/src/extension.ts +68 -66
- package/src/session/capability-adapter.ts +26 -118
- package/src/session/find-types.ts +38 -0
- package/src/session/find-workflow.ts +141 -0
- package/src/session/graph/collect.ts +181 -0
- package/src/session/graph-types.ts +77 -0
- package/src/session/graph-workflow.ts +152 -0
- package/src/session/health-types.ts +134 -0
- package/src/session/health-workflow.ts +341 -0
- package/src/session/input/common.ts +216 -0
- package/src/session/input/health-refactor.ts +169 -0
- package/src/session/input/workflows.ts +211 -0
- package/src/session/inspect/collect.ts +304 -0
- package/src/session/inspect/file-point.ts +69 -0
- package/src/session/inspect-types.ts +78 -0
- package/src/session/inspect-workflow.ts +157 -0
- package/src/session/orientation/collect.ts +718 -0
- package/src/session/orientation/context-facts.ts +319 -0
- package/src/session/orientation/context-sections.ts +352 -0
- package/src/session/orientation-types.ts +97 -0
- package/src/session/orientation-workflow.ts +307 -0
- package/src/session/refactor-plans.ts +1 -1
- package/src/session/refactor-types.ts +51 -0
- package/src/session/refactor-workflow.ts +263 -0
- package/src/session/session.ts +263 -234
- package/src/session/target-candidates.ts +60 -0
- package/src/session/target-input.ts +98 -0
- package/src/session/target-store.ts +132 -29
- package/src/session/target-workflow.ts +254 -302
- package/src/session/workflow-control.ts +35 -0
- package/src/substrate/lsp/lifecycle.ts +9 -22
- package/src/substrate/lsp/maintenance.ts +75 -0
- package/src/substrate/lsp/recovery.ts +41 -25
- package/src/substrate/lsp/settings.ts +1 -10
- package/src/substrate/lsp/state.ts +2 -13
- package/src/tool/find/ast-kinds.ts +35 -0
- package/src/tool/find/execute.ts +22 -113
- package/src/tool/find/markdown.ts +85 -221
- package/src/tool/find/modes.ts +5 -0
- package/src/tool/find/render.ts +57 -0
- package/src/tool/find/tui.ts +1 -1
- package/src/tool/graph/calls-md.ts +17 -30
- package/src/tool/graph/execute.ts +42 -103
- package/src/tool/graph/implementations-md.ts +32 -54
- package/src/tool/graph/markdown-base.ts +73 -196
- package/src/tool/graph/provider-location-md.ts +9 -0
- package/src/tool/graph/references-md.ts +34 -27
- package/src/tool/graph/tui.ts +8 -26
- package/src/tool/guidance.ts +31 -48
- package/src/tool/health/execute.ts +15 -56
- package/src/tool/health/markdown.ts +199 -148
- package/src/tool/health/semantic-state.ts +24 -0
- package/src/tool/health/tui.ts +262 -36
- package/src/tool/infra/error-results.ts +0 -2
- package/src/tool/infra/progress.ts +2 -2
- package/src/tool/infra/workflow-control.ts +11 -0
- package/src/tool/inspect/execute.ts +23 -63
- package/src/tool/inspect/markdown.ts +114 -95
- package/src/tool/inspect/tui.ts +7 -7
- package/src/tool/orientation/execute.ts +50 -37
- package/src/tool/orientation/markdown.ts +26 -31
- package/src/tool/orientation/tui.ts +41 -39
- package/src/tool/refactor-apply/execute.ts +23 -9
- package/src/tool/refactor-apply/tui.ts +7 -3
- package/src/tool/refactor-plan/execute.ts +44 -61
- package/src/tool/refactor-plan/markdown.ts +33 -56
- package/src/tool/refactor-plan/tui.ts +10 -11
- package/src/tool/register.ts +6 -5
- package/src/tool/resolve/execute.ts +23 -69
- package/src/tool/resolve/markdown.ts +125 -114
- package/src/tool/resolve/tui.ts +11 -9
- package/src/tool/result/assembly.ts +125 -0
- package/src/tool/result/errors.ts +20 -34
- package/src/tool/result/find.ts +107 -21
- package/src/tool/result/graph.ts +163 -64
- package/src/tool/result/health.ts +170 -73
- package/src/tool/result/inspect.ts +183 -41
- package/src/tool/result/orientation.ts +118 -16
- package/src/tool/result/refactor.ts +101 -21
- package/src/tool/result/resolve.ts +243 -80
- package/src/tool/result/types.ts +100 -56
- package/src/tool/schemas.ts +160 -231
- package/src/tool/specs.ts +57 -168
- package/src/types/details.ts +2 -4
- package/src/types/execution.ts +6 -15
- package/src/types/index.ts +2 -4
- package/src/types/tool-names.ts +1 -2
- package/src/ui/footer.ts +3 -3
- package/src/ui/markdown/gather.ts +17 -65
- package/src/ui/markdown/overview-data.ts +143 -21
- package/src/ui/markdown/overview.ts +27 -8
- package/src/ui/markdown/types.ts +12 -16
- package/src/ui/status-command.ts +39 -31
- package/src/ui/status-overlay.ts +23 -15
- package/src/ui/tui/common.ts +121 -74
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-augmentation.ts +0 -82
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-context.ts +0 -116
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-display.ts +0 -69
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/capability-index.ts +0 -24
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/client-pool.ts +0 -33
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/diagnostic-store.ts +0 -51
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-stale-resync.ts +0 -47
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/recovery-coordinator.ts +0 -37
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/workspace-router.ts +0 -44
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/abort-utils.ts +0 -31
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/substrate-types.ts +0 -11
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/types.ts +0 -2
- package/src/analysis/brief/directory.ts +0 -324
- package/src/analysis/brief/enrich.ts +0 -157
- package/src/analysis/brief/file.ts +0 -84
- package/src/analysis/brief/inventory.ts +0 -177
- package/src/analysis/brief/main.ts +0 -176
- package/src/analysis/brief/models.ts +0 -75
- package/src/analysis/brief/public-brief.ts +0 -179
- package/src/analysis/brief/summarize.ts +0 -208
- package/src/analysis/brief/types.ts +0 -27
- package/src/analysis/brief/use-case.ts +0 -264
- package/src/analysis/search/ripgrep.ts +0 -558
- package/src/analysis/signals/git.ts +0 -89
- package/src/analysis/signals/project.ts +0 -189
- package/src/analysis/target/bridge.ts +0 -152
- package/src/analysis/target/file-resolution.ts +0 -125
- package/src/analysis/target/planner.ts +0 -92
- package/src/analysis/target/query.ts +0 -74
- package/src/analysis/target/resolve-common.ts +0 -115
- package/src/analysis/target/service.ts +0 -229
- package/src/analysis/tests/likely-tests.ts +0 -174
- package/src/analysis/tests/test-discovery.ts +0 -540
- package/src/analysis/tests/vitest.ts +0 -87
- package/src/app/manager.ts +0 -65
- package/src/substrate/lsp/diagnostic-injection.ts +0 -203
- package/src/substrate/lsp/overrides.ts +0 -132
- package/src/tool/find/orchestrate.ts +0 -317
- package/src/tool/find/semantic-search.ts +0 -128
- package/src/tool/graph/collect-relation.ts +0 -372
- package/src/tool/graph/orchestrate.ts +0 -259
- package/src/tool/health/orchestrate.ts +0 -151
- package/src/tool/health/sections/diagnostics.ts +0 -182
- package/src/tool/health/sections/recovery.ts +0 -89
- package/src/tool/health/sections/signals.ts +0 -89
- package/src/tool/impact/analysis.ts +0 -220
- package/src/tool/impact/change-set-impact.ts +0 -152
- package/src/tool/impact/execute.ts +0 -125
- package/src/tool/impact/file-level-impact.ts +0 -82
- package/src/tool/impact/markdown.ts +0 -283
- package/src/tool/impact/orchestrate.ts +0 -97
- package/src/tool/impact/result.ts +0 -2
- package/src/tool/impact/single-impact.ts +0 -90
- package/src/tool/impact/tui.ts +0 -39
- package/src/tool/impact/types.ts +0 -34
- package/src/tool/infra/cross-field.ts +0 -335
- package/src/tool/infra/pipeline.ts +0 -334
- package/src/tool/infra/readiness-message.ts +0 -5
- package/src/tool/inspect/orchestrate.ts +0 -154
- package/src/tool/orientation/deps.ts +0 -63
- package/src/tool/orientation/mode.ts +0 -139
- package/src/tool/orientation/orchestrate.ts +0 -475
- package/src/tool/orientation/precise-target.ts +0 -253
- package/src/tool/params.ts +0 -15
- package/src/tool/refactor-apply/markdown.ts +0 -118
- package/src/tool/refactor-apply/orchestrate.ts +0 -84
- package/src/tool/refactor-plan/orchestrate.ts +0 -355
- package/src/tool/resolve/orchestrate.ts +0 -38
- package/src/tool/result/impact.ts +0 -50
- package/src/ui/markdown/brief.ts +0 -218
- package/src/ui/message-renderer.ts +0 -121
- package/src/ui/tui/index.ts +0 -37
- /package/src/{tool/graph → analysis/relations}/callees.ts +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import type { CodeSymbol, StructuralProvider } from "@mrclrchtr/supi-code-runtime/api";
|
|
3
|
+
import type { ResolvedTargetData, TargetOutcome } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalize provider-specific declaration kinds into stable identity families.
|
|
7
|
+
* Display kinds remain untouched; this value is used only for matching and
|
|
8
|
+
* target-handle identity across semantic/structural observations.
|
|
9
|
+
*/
|
|
10
|
+
export function canonicalDeclarationKind(kind: string | null): string {
|
|
11
|
+
const normalized = (kind ?? "").toLowerCase();
|
|
12
|
+
if (
|
|
13
|
+
["function", "variable", "constant", "field", "field-function", "property"].includes(normalized)
|
|
14
|
+
) {
|
|
15
|
+
return "value";
|
|
16
|
+
}
|
|
17
|
+
if (["method", "constructor"].includes(normalized)) return "member";
|
|
18
|
+
return normalized;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Exact declaration-name observation used to derive provider-independent identity. */
|
|
22
|
+
export interface DeclarationIdentityObservation {
|
|
23
|
+
readonly file: string;
|
|
24
|
+
readonly name: string | null;
|
|
25
|
+
readonly providerKind: string | null;
|
|
26
|
+
readonly nameAnchor: { readonly line: number; readonly character: number } | null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Evidence-backed canonical kind and whether structural syntax established it. */
|
|
30
|
+
export interface DeclarationIdentityResult {
|
|
31
|
+
readonly identityKind: string;
|
|
32
|
+
readonly structuralEvidence: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Canonical identity plus the same-line occurrence used by Target handles. */
|
|
36
|
+
export interface DeclarationOccurrenceIdentity extends DeclarationIdentityResult {
|
|
37
|
+
readonly declarationOccurrence: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Resolve an identity kind without rewriting the provider-reported display kind.
|
|
42
|
+
* An LSP `Variable` becomes `type` only when Tree-sitter reports the exact name
|
|
43
|
+
* anchor inside a type-alias declaration.
|
|
44
|
+
*/
|
|
45
|
+
export async function resolveDeclarationIdentityKind(
|
|
46
|
+
observation: DeclarationIdentityObservation,
|
|
47
|
+
structural: Pick<StructuralProvider, "nodeAt"> | undefined,
|
|
48
|
+
): Promise<DeclarationIdentityResult> {
|
|
49
|
+
const identityKind = canonicalDeclarationKind(observation.providerKind);
|
|
50
|
+
if (
|
|
51
|
+
!structural ||
|
|
52
|
+
observation.providerKind?.toLowerCase() !== "variable" ||
|
|
53
|
+
!observation.nameAnchor
|
|
54
|
+
) {
|
|
55
|
+
return { identityKind, structuralEvidence: false };
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const { line, character } = observation.nameAnchor;
|
|
59
|
+
const result = await structural.nodeAt(observation.file, line, character);
|
|
60
|
+
if (result.kind !== "success") return { identityKind, structuralEvidence: false };
|
|
61
|
+
const node = result.data;
|
|
62
|
+
const exactNameAnchor =
|
|
63
|
+
node.text === observation.name &&
|
|
64
|
+
node.startLine === line &&
|
|
65
|
+
node.startCharacter === character;
|
|
66
|
+
const isTypeAlias =
|
|
67
|
+
node.type === "type_identifier" &&
|
|
68
|
+
node.ancestry.some((ancestor) => ancestor.type === "type_alias_declaration");
|
|
69
|
+
return exactNameAnchor && isTypeAlias
|
|
70
|
+
? { identityKind: "type", structuralEvidence: true }
|
|
71
|
+
: { identityKind, structuralEvidence: false };
|
|
72
|
+
} catch {
|
|
73
|
+
return { identityKind, structuralEvidence: false };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Build an evidence-backed identity resolver for one semantic declaration set.
|
|
79
|
+
* Results are cached so disambiguation candidates share structural observations.
|
|
80
|
+
*/
|
|
81
|
+
export function createCodeSymbolIdentityResolver(
|
|
82
|
+
file: string,
|
|
83
|
+
allSymbols: readonly CodeSymbol[],
|
|
84
|
+
structural: Pick<StructuralProvider, "nodeAt"> | undefined,
|
|
85
|
+
): (symbol: CodeSymbol) => Promise<DeclarationOccurrenceIdentity> {
|
|
86
|
+
const identities = new Map<CodeSymbol, Promise<DeclarationIdentityResult>>();
|
|
87
|
+
const occurrences = new Map<CodeSymbol, Promise<DeclarationOccurrenceIdentity>>();
|
|
88
|
+
|
|
89
|
+
const resolveIdentity = (symbol: CodeSymbol): Promise<DeclarationIdentityResult> => {
|
|
90
|
+
const existing = identities.get(symbol);
|
|
91
|
+
if (existing) return existing;
|
|
92
|
+
const identity = resolveDeclarationIdentityKind(
|
|
93
|
+
{
|
|
94
|
+
file,
|
|
95
|
+
name: symbol.name,
|
|
96
|
+
providerKind: symbol.kind,
|
|
97
|
+
nameAnchor: symbol.nameAnchor ?? null,
|
|
98
|
+
},
|
|
99
|
+
structural,
|
|
100
|
+
);
|
|
101
|
+
identities.set(symbol, identity);
|
|
102
|
+
return identity;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
return (symbol) => {
|
|
106
|
+
const existing = occurrences.get(symbol);
|
|
107
|
+
if (existing) return existing;
|
|
108
|
+
const occurrence = resolveCodeSymbolOccurrence(symbol, allSymbols, resolveIdentity);
|
|
109
|
+
occurrences.set(symbol, occurrence);
|
|
110
|
+
return occurrence;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async function resolveCodeSymbolOccurrence(
|
|
115
|
+
symbol: CodeSymbol,
|
|
116
|
+
allSymbols: readonly CodeSymbol[],
|
|
117
|
+
resolveIdentity: (symbol: CodeSymbol) => Promise<DeclarationIdentityResult>,
|
|
118
|
+
): Promise<DeclarationOccurrenceIdentity> {
|
|
119
|
+
const peers = allSymbols.filter(
|
|
120
|
+
(candidate) =>
|
|
121
|
+
candidate.name === symbol.name &&
|
|
122
|
+
(candidate.container ?? null) === (symbol.container ?? null) &&
|
|
123
|
+
candidate.declarationAnchor.line === symbol.declarationAnchor.line,
|
|
124
|
+
);
|
|
125
|
+
const observed = await Promise.all(
|
|
126
|
+
peers.map(async (candidate) => ({ candidate, identity: await resolveIdentity(candidate) })),
|
|
127
|
+
);
|
|
128
|
+
const selectedIdentity = await resolveIdentity(symbol);
|
|
129
|
+
const matching = observed
|
|
130
|
+
.filter(({ identity }) => identity.identityKind === selectedIdentity.identityKind)
|
|
131
|
+
.map(({ candidate }) => candidate)
|
|
132
|
+
.sort(compareCodeSymbolDeclarations);
|
|
133
|
+
return {
|
|
134
|
+
...selectedIdentity,
|
|
135
|
+
declarationOccurrence: Math.max(0, matching.indexOf(symbol)),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function compareCodeSymbolDeclarations(left: CodeSymbol, right: CodeSymbol): number {
|
|
140
|
+
return (
|
|
141
|
+
left.declarationAnchor.character - right.declarationAnchor.character ||
|
|
142
|
+
(left.nameAnchor?.character ?? 0) - (right.nameAnchor?.character ?? 0)
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Refine one semantic target with exact structural type-alias evidence. */
|
|
147
|
+
export async function refineTypeAliasIdentity(
|
|
148
|
+
target: ResolvedTargetData,
|
|
149
|
+
structural: Pick<StructuralProvider, "nodeAt"> | undefined,
|
|
150
|
+
): Promise<ResolvedTargetData> {
|
|
151
|
+
if (target.identityKind !== undefined) return target;
|
|
152
|
+
const identity = await resolveDeclarationIdentityKind(
|
|
153
|
+
{
|
|
154
|
+
file: target.file,
|
|
155
|
+
name: target.name,
|
|
156
|
+
providerKind: target.kind,
|
|
157
|
+
nameAnchor:
|
|
158
|
+
target.anchorKind === "name"
|
|
159
|
+
? { line: target.displayLine, character: target.displayCharacter }
|
|
160
|
+
: null,
|
|
161
|
+
},
|
|
162
|
+
structural,
|
|
163
|
+
);
|
|
164
|
+
return {
|
|
165
|
+
...target,
|
|
166
|
+
identityKind: identity.identityKind,
|
|
167
|
+
provenance: identity.structuralEvidence ? ["semantic", "structural"] : target.provenance,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Refine resolved and candidate identities before Target-handle registration. */
|
|
172
|
+
export async function refineTargetOutcomeIdentity(
|
|
173
|
+
outcome: TargetOutcome,
|
|
174
|
+
cwd: string,
|
|
175
|
+
structural: Pick<StructuralProvider, "nodeAt"> | undefined,
|
|
176
|
+
): Promise<TargetOutcome> {
|
|
177
|
+
if (outcome.kind === "resolved") {
|
|
178
|
+
return { kind: "resolved", target: await refineTypeAliasIdentity(outcome.target, structural) };
|
|
179
|
+
}
|
|
180
|
+
if (outcome.kind !== "disambiguation" && outcome.kind !== "kind-mismatch") return outcome;
|
|
181
|
+
|
|
182
|
+
const observations = await Promise.all(
|
|
183
|
+
outcome.candidates.map(async (candidate) => {
|
|
184
|
+
if (candidate.identityKind !== undefined) {
|
|
185
|
+
return { candidate, identityRefined: false };
|
|
186
|
+
}
|
|
187
|
+
const identity = await resolveDeclarationIdentityKind(
|
|
188
|
+
{
|
|
189
|
+
file: resolve(cwd, candidate.file),
|
|
190
|
+
name: candidate.name,
|
|
191
|
+
providerKind: candidate.kind,
|
|
192
|
+
nameAnchor:
|
|
193
|
+
candidate.anchorKind === "name"
|
|
194
|
+
? { line: candidate.line, character: candidate.character }
|
|
195
|
+
: null,
|
|
196
|
+
},
|
|
197
|
+
structural,
|
|
198
|
+
);
|
|
199
|
+
return {
|
|
200
|
+
candidate: {
|
|
201
|
+
...candidate,
|
|
202
|
+
identityKind: identity.identityKind,
|
|
203
|
+
provenance: identity.structuralEvidence
|
|
204
|
+
? (["semantic", "structural"] as const)
|
|
205
|
+
: (["semantic"] as const),
|
|
206
|
+
},
|
|
207
|
+
identityRefined: true,
|
|
208
|
+
};
|
|
209
|
+
}),
|
|
210
|
+
);
|
|
211
|
+
const candidates = observations.map(({ candidate }) => candidate);
|
|
212
|
+
return {
|
|
213
|
+
...outcome,
|
|
214
|
+
candidates: observations.some(({ identityRefined }) => identityRefined)
|
|
215
|
+
? assignCandidateOccurrences(candidates, cwd)
|
|
216
|
+
: candidates,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function assignCandidateOccurrences(
|
|
221
|
+
candidates: Extract<TargetOutcome, { kind: "disambiguation" | "kind-mismatch" }>["candidates"],
|
|
222
|
+
cwd: string,
|
|
223
|
+
): Extract<TargetOutcome, { kind: "disambiguation" | "kind-mismatch" }>["candidates"] {
|
|
224
|
+
const occurrences = new Map<string, number>();
|
|
225
|
+
return candidates.map((candidate) => {
|
|
226
|
+
const key = [
|
|
227
|
+
resolve(cwd, candidate.file),
|
|
228
|
+
candidate.declarationAnchor.line,
|
|
229
|
+
candidate.name,
|
|
230
|
+
candidate.identityKind ?? canonicalDeclarationKind(candidate.kind),
|
|
231
|
+
candidate.container ?? "",
|
|
232
|
+
].join("\0");
|
|
233
|
+
const declarationOccurrence = occurrences.get(key) ?? 0;
|
|
234
|
+
occurrences.set(key, declarationOccurrence + 1);
|
|
235
|
+
return { ...candidate, declarationOccurrence };
|
|
236
|
+
});
|
|
237
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Symbol target resolution — discovers symbols via the semantic substrate
|
|
3
|
-
* and returns typed outcomes (resolved, disambiguation, or error).
|
|
3
|
+
* and returns typed outcomes (resolved, disambiguation, kind mismatch, or error).
|
|
4
4
|
*
|
|
5
5
|
* This resolver is semantic-only: it does not fall back to text search
|
|
6
6
|
* or heuristic guessing. Ambiguous matches produce explicit disambiguation.
|
|
@@ -12,8 +12,9 @@ import type {
|
|
|
12
12
|
SemanticProvider as SemanticSubstrate,
|
|
13
13
|
} from "@mrclrchtr/supi-code-runtime/api";
|
|
14
14
|
import { isWithinOrEqual } from "@mrclrchtr/supi-core/project";
|
|
15
|
+
import type { TargetSymbolKind } from "../../session/target-input.ts";
|
|
15
16
|
import type { AnchorKind } from "../../session/target-store.ts";
|
|
16
|
-
import { normalizePath } from "../search/
|
|
17
|
+
import { normalizePath } from "../search/paths.ts";
|
|
17
18
|
import type { DisambiguationCandidateData, TargetOutcome } from "./types.ts";
|
|
18
19
|
|
|
19
20
|
const MAX_CANDIDATES = 8; // default fallback when maxResults is not provided
|
|
@@ -31,6 +32,13 @@ function isExactDocumentSymbolMatch(candidate: CodeSymbol, workspaceSymbol: Code
|
|
|
31
32
|
);
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
function hasSameDeclarationAnchor(candidate: CodeSymbol, workspaceSymbol: CodeSymbol): boolean {
|
|
36
|
+
return (
|
|
37
|
+
candidate.declarationAnchor.line === workspaceSymbol.declarationAnchor.line &&
|
|
38
|
+
candidate.declarationAnchor.character === workspaceSymbol.declarationAnchor.character
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
34
42
|
/**
|
|
35
43
|
* The preferred anchor for resolution/downstream: the name (identifier) anchor
|
|
36
44
|
* when the provider derived it, else the declaration anchor. Strict consumers
|
|
@@ -53,19 +61,23 @@ async function refineResolvedSymbolAnchor(
|
|
|
53
61
|
semantic: SemanticSubstrate,
|
|
54
62
|
): Promise<CodeSymbol> {
|
|
55
63
|
try {
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
return workspaceSymbol;
|
|
59
|
-
}
|
|
64
|
+
const result = await semantic.documentSymbols(workspaceSymbol.file);
|
|
65
|
+
if (result.kind === "unavailable" || result.data.length === 0) return workspaceSymbol;
|
|
60
66
|
|
|
61
|
-
const exactMatches =
|
|
67
|
+
const exactMatches = result.data.filter((candidate) =>
|
|
62
68
|
isExactDocumentSymbolMatch(candidate, workspaceSymbol),
|
|
63
69
|
);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
const declarationMatches = exactMatches.filter((candidate) =>
|
|
71
|
+
hasSameDeclarationAnchor(candidate, workspaceSymbol),
|
|
72
|
+
);
|
|
73
|
+
const refined =
|
|
74
|
+
declarationMatches.length === 1
|
|
75
|
+
? declarationMatches[0]
|
|
76
|
+
: exactMatches.length === 1
|
|
77
|
+
? exactMatches[0]
|
|
78
|
+
: undefined;
|
|
79
|
+
if (!refined) return workspaceSymbol;
|
|
67
80
|
|
|
68
|
-
const refined = exactMatches[0];
|
|
69
81
|
const a = anchorOf(refined);
|
|
70
82
|
if (a.line <= 0 && a.character <= 0) {
|
|
71
83
|
return workspaceSymbol;
|
|
@@ -84,7 +96,7 @@ async function refineResolvedSymbolAnchor(
|
|
|
84
96
|
* @param cwd - session working directory
|
|
85
97
|
* @param semantic - the semantic substrate (LSP-backed)
|
|
86
98
|
* @param options - optional filters: path scope, kind filter, exported-only
|
|
87
|
-
* @returns Typed outcome: resolved, disambiguation, or error
|
|
99
|
+
* @returns Typed outcome: resolved, disambiguation, kind mismatch, or error
|
|
88
100
|
*/
|
|
89
101
|
export async function resolveSymbolTarget(
|
|
90
102
|
symbol: string,
|
|
@@ -92,105 +104,176 @@ export async function resolveSymbolTarget(
|
|
|
92
104
|
semantic: SemanticSubstrate,
|
|
93
105
|
options?: {
|
|
94
106
|
path?: string;
|
|
95
|
-
kind?:
|
|
107
|
+
kind?: TargetSymbolKind;
|
|
96
108
|
exportedOnly?: boolean;
|
|
97
109
|
maxResults?: number;
|
|
98
110
|
},
|
|
99
111
|
): Promise<TargetOutcome> {
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
112
|
+
const result = await semantic.workspaceSymbols(symbol);
|
|
113
|
+
if (result.kind === "unavailable") {
|
|
102
114
|
return {
|
|
103
115
|
kind: "error",
|
|
104
|
-
message: `Symbol discovery for \`${symbol}\`
|
|
116
|
+
message: `Symbol discovery for \`${symbol}\` is unavailable: ${result.reason}`,
|
|
105
117
|
};
|
|
106
118
|
}
|
|
107
|
-
if (
|
|
119
|
+
if (result.data.length === 0) {
|
|
108
120
|
return { kind: "error", message: `Symbol not found: \`${symbol}\`` };
|
|
109
121
|
}
|
|
110
122
|
|
|
111
|
-
// Filter by path scope. Tool paths may include pi's leading `@` prefix;
|
|
112
|
-
// normalize through the shared path helper so every caller gets the same
|
|
113
|
-
// scope semantics.
|
|
114
123
|
const scopePath = options?.path ? normalizePath(options.path, cwd) : null;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
const scoped = result.data.filter((candidate) =>
|
|
125
|
+
scopePath ? isWithinOrEqual(scopePath, candidate.file) : true,
|
|
126
|
+
);
|
|
127
|
+
const eligible = options?.exportedOnly
|
|
128
|
+
? scoped.filter((candidate) => !NON_EXPORTED_KINDS.has(candidate.kind))
|
|
129
|
+
: scoped;
|
|
130
|
+
if (eligible.length === 0) {
|
|
131
|
+
return {
|
|
132
|
+
kind: "error",
|
|
133
|
+
message: `Symbol not found: \`${symbol}\`${scopePath ? ` in path \`${options?.path}\`` : ""}`,
|
|
134
|
+
};
|
|
124
135
|
}
|
|
125
136
|
|
|
126
|
-
|
|
127
|
-
if (
|
|
128
|
-
|
|
137
|
+
const requestedKind = options?.kind;
|
|
138
|
+
if (requestedKind) {
|
|
139
|
+
const exactKind = eligible.filter((candidate) =>
|
|
140
|
+
providerKindMatches(candidate.kind, requestedKind),
|
|
141
|
+
);
|
|
142
|
+
if (exactKind.length === 0) {
|
|
143
|
+
return buildCandidateOutcome({
|
|
144
|
+
kind: "kind-mismatch",
|
|
145
|
+
candidates: eligible,
|
|
146
|
+
semantic,
|
|
147
|
+
cwd,
|
|
148
|
+
maxResults: options.maxResults,
|
|
149
|
+
requestedKind,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return resolveCandidates(exactKind, semantic, cwd, options.maxResults);
|
|
129
153
|
}
|
|
130
154
|
|
|
131
|
-
|
|
132
|
-
|
|
155
|
+
return resolveCandidates(eligible, semantic, cwd, options?.maxResults);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function providerKindMatches(reported: string, requested: TargetSymbolKind): boolean {
|
|
159
|
+
return normalizeProviderKind(reported) === normalizeProviderKind(requested);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function normalizeProviderKind(kind: string): string {
|
|
163
|
+
return kind.replace(/[\s_-]/g, "").toLowerCase();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
async function resolveCandidates(
|
|
167
|
+
candidates: readonly CodeSymbol[],
|
|
168
|
+
semantic: SemanticSubstrate,
|
|
169
|
+
cwd: string,
|
|
170
|
+
maxResults?: number,
|
|
171
|
+
): Promise<TargetOutcome> {
|
|
133
172
|
const ranged = candidates.filter(
|
|
134
|
-
(
|
|
173
|
+
(candidate) =>
|
|
174
|
+
candidate.declarationAnchor.line > 0 || candidate.declarationAnchor.character > 0,
|
|
135
175
|
);
|
|
136
|
-
|
|
137
176
|
if (ranged.length === 1) {
|
|
138
|
-
|
|
139
|
-
const a = anchorOf(c);
|
|
140
|
-
return {
|
|
141
|
-
kind: "resolved",
|
|
142
|
-
target: {
|
|
143
|
-
file: c.file,
|
|
144
|
-
position: { line: a.line - 1, character: a.character - 1 },
|
|
145
|
-
displayLine: a.line,
|
|
146
|
-
displayCharacter: a.character,
|
|
147
|
-
name: c.name,
|
|
148
|
-
kind: c.kind,
|
|
149
|
-
confidence: "semantic",
|
|
150
|
-
anchorKind: (c.nameAnchor ? "name" : "declaration") as AnchorKind,
|
|
151
|
-
container: c.container ?? null,
|
|
152
|
-
},
|
|
153
|
-
};
|
|
177
|
+
return resolvedTarget(await refineResolvedSymbolAnchor(ranged[0], semantic));
|
|
154
178
|
}
|
|
179
|
+
return buildCandidateOutcome({
|
|
180
|
+
kind: "disambiguation",
|
|
181
|
+
candidates,
|
|
182
|
+
semantic,
|
|
183
|
+
cwd,
|
|
184
|
+
maxResults,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
155
187
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
188
|
+
function resolvedTarget(candidate: CodeSymbol): TargetOutcome {
|
|
189
|
+
const anchor = anchorOf(candidate);
|
|
190
|
+
return {
|
|
191
|
+
kind: "resolved",
|
|
192
|
+
target: {
|
|
193
|
+
file: candidate.file,
|
|
194
|
+
position: { line: anchor.line - 1, character: anchor.character - 1 },
|
|
195
|
+
displayLine: anchor.line,
|
|
196
|
+
displayCharacter: anchor.character,
|
|
197
|
+
declarationAnchor: { ...candidate.declarationAnchor },
|
|
198
|
+
declarationOccurrence: 0,
|
|
199
|
+
name: candidate.name,
|
|
200
|
+
kind: candidate.kind,
|
|
201
|
+
confidence: "semantic",
|
|
202
|
+
provenance: ["semantic"],
|
|
203
|
+
anchorKind: (candidate.nameAnchor ? "name" : "declaration") as AnchorKind,
|
|
204
|
+
container: candidate.container ?? null,
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
interface CandidateOutcomeBase {
|
|
210
|
+
candidates: readonly CodeSymbol[];
|
|
211
|
+
semantic: SemanticSubstrate;
|
|
212
|
+
cwd: string;
|
|
213
|
+
maxResults?: number;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
type CandidateOutcomeOptions = CandidateOutcomeBase &
|
|
217
|
+
(
|
|
218
|
+
| { kind: "disambiguation"; requestedKind?: never }
|
|
219
|
+
| { kind: "kind-mismatch"; requestedKind: TargetSymbolKind }
|
|
220
|
+
);
|
|
163
221
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
222
|
+
/**
|
|
223
|
+
* Refine only bounded visible candidates to name anchors while retaining the
|
|
224
|
+
* exact provider result count for omission disclosure. No candidate is
|
|
225
|
+
* promoted when the requested provider kind did not match.
|
|
226
|
+
*/
|
|
227
|
+
async function buildCandidateOutcome(
|
|
228
|
+
options: CandidateOutcomeOptions,
|
|
229
|
+
): Promise<Extract<TargetOutcome, { kind: "disambiguation" | "kind-mismatch" }>> {
|
|
230
|
+
const cap = options.maxResults ?? MAX_CANDIDATES;
|
|
172
231
|
const refined = await Promise.all(
|
|
173
|
-
candidates
|
|
232
|
+
options.candidates
|
|
233
|
+
.slice(0, cap)
|
|
234
|
+
.map((candidate) => refineResolvedSymbolAnchor(candidate, options.semantic)),
|
|
174
235
|
);
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
236
|
+
const common = {
|
|
237
|
+
candidates: toDisambiguationCandidates(refined, options.cwd),
|
|
238
|
+
omittedCount: Math.max(0, options.candidates.length - cap),
|
|
239
|
+
};
|
|
240
|
+
return options.kind === "kind-mismatch"
|
|
241
|
+
? {
|
|
242
|
+
kind: options.kind,
|
|
243
|
+
requestedKind: options.requestedKind,
|
|
244
|
+
...common,
|
|
245
|
+
}
|
|
246
|
+
: { kind: options.kind, ...common };
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function toDisambiguationCandidates(
|
|
250
|
+
candidates: readonly CodeSymbol[],
|
|
251
|
+
cwd: string,
|
|
252
|
+
): DisambiguationCandidateData[] {
|
|
253
|
+
const occurrences = new Map<string, number>();
|
|
254
|
+
return candidates.map((candidate, index) => {
|
|
255
|
+
const relFile = path.relative(cwd, candidate.file);
|
|
256
|
+
const anchor = anchorOf(candidate);
|
|
257
|
+
const occurrenceKey = [
|
|
258
|
+
relFile,
|
|
259
|
+
candidate.declarationAnchor.line,
|
|
260
|
+
candidate.name,
|
|
261
|
+
candidate.kind,
|
|
262
|
+
candidate.container ?? "",
|
|
263
|
+
].join("\0");
|
|
264
|
+
const declarationOccurrence = occurrences.get(occurrenceKey) ?? 0;
|
|
265
|
+
occurrences.set(occurrenceKey, declarationOccurrence + 1);
|
|
178
266
|
return {
|
|
179
|
-
name:
|
|
180
|
-
kind:
|
|
181
|
-
container:
|
|
267
|
+
name: candidate.name,
|
|
268
|
+
kind: candidate.kind,
|
|
269
|
+
container: candidate.container ?? null,
|
|
182
270
|
file: relFile,
|
|
183
|
-
line:
|
|
184
|
-
character:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
271
|
+
line: anchor.line,
|
|
272
|
+
character: anchor.character,
|
|
273
|
+
declarationAnchor: { ...candidate.declarationAnchor },
|
|
274
|
+
declarationOccurrence,
|
|
275
|
+
rank: index + 1,
|
|
276
|
+
anchorKind: (candidate.nameAnchor ? "name" : "declaration") as AnchorKind,
|
|
188
277
|
};
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
return {
|
|
192
|
-
kind: "disambiguation",
|
|
193
|
-
candidates: candidatesOut,
|
|
194
|
-
omittedCount: Math.max(0, candidates.length - cap),
|
|
195
|
-
};
|
|
278
|
+
});
|
|
196
279
|
}
|
|
@@ -10,7 +10,10 @@ import type {
|
|
|
10
10
|
SemanticProvider as SemanticSubstrate,
|
|
11
11
|
StructuralProvider as StructuralSubstrate,
|
|
12
12
|
} from "@mrclrchtr/supi-code-runtime/api";
|
|
13
|
-
import type {
|
|
13
|
+
import type { TargetSymbolKind } from "../../session/target-input.ts";
|
|
14
|
+
import type { AnchorKind, TargetProviderProvenance } from "../../session/target-store.ts";
|
|
15
|
+
|
|
16
|
+
export type { TargetProviderProvenance } from "../../session/target-store.ts";
|
|
14
17
|
|
|
15
18
|
// ── Normalized query ──────────────────────────────────────────────────
|
|
16
19
|
|
|
@@ -69,12 +72,23 @@ export interface ResolvedTargetData {
|
|
|
69
72
|
/** 1-based position for user display */
|
|
70
73
|
displayLine: number;
|
|
71
74
|
displayCharacter: number;
|
|
75
|
+
/**
|
|
76
|
+
* Stable 1-based declaration occurrence used for target identity. Unlike
|
|
77
|
+
* the preferred display anchor, this does not move during name refinement.
|
|
78
|
+
*/
|
|
79
|
+
declarationAnchor: { line: number; character: number };
|
|
80
|
+
/** Zero-based occurrence among otherwise-identical declarations on that line. */
|
|
81
|
+
declarationOccurrence: number;
|
|
72
82
|
name: string | null;
|
|
73
83
|
kind: string | null;
|
|
84
|
+
/** Evidence-backed provider-independent kind used for matching and handle identity. */
|
|
85
|
+
identityKind?: string;
|
|
74
86
|
confidence: "semantic" | "structural" | "heuristic" | "unavailable";
|
|
87
|
+
/** Provider families that established this declaration, strongest first. */
|
|
88
|
+
provenance: readonly TargetProviderProvenance[];
|
|
75
89
|
/** Which anchor this target carries — drives strict-consumer enforcement (ADR 0003). */
|
|
76
90
|
anchorKind: AnchorKind;
|
|
77
|
-
/**
|
|
91
|
+
/** Named symbolic container, or null when no container name was reported. */
|
|
78
92
|
container: string | null;
|
|
79
93
|
/**
|
|
80
94
|
* Resolution provenance — present when the target was resolved from
|
|
@@ -85,13 +99,18 @@ export interface ResolvedTargetData {
|
|
|
85
99
|
}
|
|
86
100
|
|
|
87
101
|
/**
|
|
88
|
-
* A file-
|
|
102
|
+
* A file-derived Target group with zero or more evidence-backed declarations.
|
|
89
103
|
*/
|
|
90
104
|
export interface ResolvedTargetGroupData {
|
|
91
105
|
file: string;
|
|
92
106
|
displayName: string;
|
|
93
107
|
targets: ResolvedTargetData[];
|
|
108
|
+
/** Providers that successfully enumerated the selected file. */
|
|
109
|
+
discoveryProvenance: readonly TargetProviderProvenance[];
|
|
110
|
+
/** Conservative confidence across the complete group, before display capping. */
|
|
94
111
|
confidence: "semantic" | "structural" | "heuristic" | "unavailable";
|
|
112
|
+
/** Complete-group declarations whose provider observations could not establish hierarchy. */
|
|
113
|
+
unknownNestingCount: number;
|
|
95
114
|
}
|
|
96
115
|
|
|
97
116
|
/**
|
|
@@ -100,11 +119,18 @@ export interface ResolvedTargetGroupData {
|
|
|
100
119
|
export interface DisambiguationCandidateData {
|
|
101
120
|
name: string;
|
|
102
121
|
kind: string | null;
|
|
122
|
+
/** Evidence-backed provider-independent kind used for handle identity. */
|
|
123
|
+
identityKind?: string;
|
|
124
|
+
/** Provider families that established this candidate declaration. */
|
|
125
|
+
provenance?: readonly TargetProviderProvenance[];
|
|
103
126
|
container: string | null;
|
|
104
127
|
file: string;
|
|
105
128
|
line: number;
|
|
106
129
|
character: number;
|
|
107
|
-
|
|
130
|
+
/** Stable 1-based declaration occurrence for target identity. */
|
|
131
|
+
declarationAnchor: { line: number; character: number };
|
|
132
|
+
/** Zero-based occurrence among otherwise-identical declarations on that line. */
|
|
133
|
+
declarationOccurrence: number;
|
|
108
134
|
rank: number;
|
|
109
135
|
/** Which anchor this candidate carries (ADR 0003). */
|
|
110
136
|
anchorKind: AnchorKind;
|
|
@@ -124,4 +150,10 @@ export type TargetOutcome =
|
|
|
124
150
|
candidates: DisambiguationCandidateData[];
|
|
125
151
|
omittedCount: number;
|
|
126
152
|
}
|
|
153
|
+
| {
|
|
154
|
+
kind: "kind-mismatch";
|
|
155
|
+
requestedKind: TargetSymbolKind;
|
|
156
|
+
candidates: DisambiguationCandidateData[];
|
|
157
|
+
omittedCount: number;
|
|
158
|
+
}
|
|
127
159
|
| { kind: "error"; message: string };
|