@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
|
@@ -1,76 +1,143 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Architecture model types and query helpers.
|
|
3
|
-
*
|
|
4
|
-
* Discovery logic lives in {@link ./discovery.ts}.
|
|
5
|
-
*/
|
|
1
|
+
/** Direct manifest and workspace-configuration facts for Orientation and the session overview. */
|
|
6
2
|
|
|
7
3
|
import * as path from "node:path";
|
|
8
4
|
import { isWithinOrEqual } from "@mrclrchtr/supi-core/project";
|
|
9
5
|
|
|
10
|
-
|
|
6
|
+
/** Completion state for one directly observed architecture collection. */
|
|
7
|
+
export type ArchitectureObservationStatus = "complete" | "partial" | "unavailable";
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
/** Manifest fields whose values are surfaced without assigning a derived role. */
|
|
10
|
+
export interface ManifestField {
|
|
11
|
+
/** Exact field path in the package manifest, such as `exports` or `pi.extensions`. */
|
|
12
|
+
readonly field: string;
|
|
13
|
+
/** JSON value declared at that field. */
|
|
14
|
+
readonly value: unknown;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** One dependency declaration from an exact package-manifest section. */
|
|
18
|
+
export interface ManifestDependency {
|
|
19
|
+
/** Source package.json field. */
|
|
20
|
+
readonly field: ManifestDependencyField;
|
|
21
|
+
/** Dependency name as declared in the manifest object key. */
|
|
22
|
+
readonly name: string;
|
|
23
|
+
/** Version/range value as declared in the manifest object value. */
|
|
24
|
+
readonly specifier: unknown;
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
/** Dependency-map fields whose entries may declare package relationships. */
|
|
28
|
+
export type ManifestDependencyField =
|
|
29
|
+
| "dependencies"
|
|
30
|
+
| "devDependencies"
|
|
31
|
+
| "optionalDependencies"
|
|
32
|
+
| "peerDependencies";
|
|
33
|
+
|
|
34
|
+
/** One dependency-map field retained with its source field name. */
|
|
35
|
+
export interface ManifestDependencySection {
|
|
36
|
+
/** Source package.json field. */
|
|
37
|
+
readonly field: ManifestDependencyField;
|
|
38
|
+
/** Every directly declared dependency entry in the section. */
|
|
39
|
+
readonly entries: readonly ManifestDependency[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Facts from one successfully parsed package.json file. */
|
|
25
43
|
export interface ModuleInfo {
|
|
26
|
-
/** Package
|
|
27
|
-
name: string;
|
|
28
|
-
/**
|
|
29
|
-
description: string | null;
|
|
30
|
-
/** Absolute
|
|
31
|
-
root: string;
|
|
32
|
-
/**
|
|
33
|
-
relativePath: string;
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
/** Package name from package.json; null when the manifest omits a string name. */
|
|
45
|
+
readonly name: string | null;
|
|
46
|
+
/** Package description from package.json when it is a string. */
|
|
47
|
+
readonly description: string | null;
|
|
48
|
+
/** Absolute package directory. */
|
|
49
|
+
readonly root: string;
|
|
50
|
+
/** Package directory relative to the orientation root. */
|
|
51
|
+
readonly relativePath: string;
|
|
52
|
+
/** Package manifest path relative to the orientation root. */
|
|
53
|
+
readonly manifestPath: string;
|
|
54
|
+
/** Directly declared non-dependency manifest fields. */
|
|
55
|
+
readonly fields: readonly ManifestField[];
|
|
56
|
+
/** Directly declared dependency-map sections. */
|
|
57
|
+
readonly dependencySections: readonly ManifestDependencySection[];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Result of reading the root package manifest. */
|
|
61
|
+
export interface PackageManifestObservation {
|
|
62
|
+
/** Whether the root package manifest was read and parsed. */
|
|
63
|
+
readonly status: ArchitectureObservationStatus;
|
|
64
|
+
/** Root-relative path of the expected manifest. */
|
|
65
|
+
readonly path: string;
|
|
66
|
+
/** Failure explanation when the manifest is partial or unavailable. */
|
|
67
|
+
readonly reason: string | null;
|
|
68
|
+
/** Parsed package facts when available. */
|
|
69
|
+
readonly package: ModuleInfo | null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Configuration file and field that declared workspace membership. */
|
|
73
|
+
export interface WorkspaceTopologySource {
|
|
74
|
+
/** Root-relative configuration file path. */
|
|
75
|
+
readonly path: string;
|
|
76
|
+
/** Exact configuration field. */
|
|
77
|
+
readonly field: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Directly observed package-topology collection state. */
|
|
81
|
+
export interface WorkspaceTopology {
|
|
82
|
+
/** Whether this is a workspace declaration, one root package, or unavailable metadata. */
|
|
83
|
+
readonly kind: "workspace" | "single-package" | "unavailable";
|
|
84
|
+
/** Collection completion state. */
|
|
85
|
+
readonly status: ArchitectureObservationStatus;
|
|
86
|
+
/** Configuration source that declared workspace membership, when applicable. */
|
|
87
|
+
readonly source: WorkspaceTopologySource | null;
|
|
88
|
+
/** Failure explanation when discovery was partial or unavailable. */
|
|
89
|
+
readonly reason: string | null;
|
|
90
|
+
/** Package manifests matched by configuration but not successfully parsed. */
|
|
91
|
+
readonly failedPackageManifestCount: number;
|
|
42
92
|
}
|
|
43
93
|
|
|
94
|
+
/** One manifest-declared dependency whose name matches exactly one discovered package. */
|
|
44
95
|
export interface DependencyEdge {
|
|
45
|
-
/**
|
|
46
|
-
from: string;
|
|
47
|
-
/**
|
|
48
|
-
to: string;
|
|
96
|
+
/** Declaring package name. */
|
|
97
|
+
readonly from: string;
|
|
98
|
+
/** Declared package name that identifies one discovered package. */
|
|
99
|
+
readonly to: string;
|
|
100
|
+
/** Exact dependency-map field that declared the relationship. */
|
|
101
|
+
readonly field: ManifestDependencyField;
|
|
102
|
+
/** Declared version/range value. */
|
|
103
|
+
readonly specifier: unknown;
|
|
104
|
+
/** Root-relative manifest that declared the relationship. */
|
|
105
|
+
readonly manifestPath: string;
|
|
49
106
|
}
|
|
50
107
|
|
|
51
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Factual package and workspace observations.
|
|
110
|
+
*
|
|
111
|
+
* `modules` and `edges` describe manifest declarations only; they are not a
|
|
112
|
+
* runtime architecture graph.
|
|
113
|
+
*/
|
|
114
|
+
export interface ArchitectureModel {
|
|
115
|
+
/** Absolute supported workspace root, or the requested cwd when no supported metadata exists. */
|
|
116
|
+
readonly root: string;
|
|
117
|
+
/** Root package manifest observation. */
|
|
118
|
+
readonly rootManifest: PackageManifestObservation;
|
|
119
|
+
/** Workspace membership observation. */
|
|
120
|
+
readonly topology: WorkspaceTopology;
|
|
121
|
+
/** Parsed package manifests declared by the selected topology. */
|
|
122
|
+
readonly modules: readonly ModuleInfo[];
|
|
123
|
+
/** Manifest-declared dependencies between uniquely discovered packages. */
|
|
124
|
+
readonly edges: readonly DependencyEdge[];
|
|
125
|
+
/** Root package name when directly declared. */
|
|
126
|
+
readonly name: string | null;
|
|
127
|
+
/** Root package description when directly declared. */
|
|
128
|
+
readonly description: string | null;
|
|
129
|
+
}
|
|
52
130
|
|
|
131
|
+
/** Find the most specific discovered package containing a filesystem path. */
|
|
53
132
|
export function findModuleForPath(model: ArchitectureModel, filePath: string): ModuleInfo | null {
|
|
54
133
|
const resolved = path.resolve(filePath);
|
|
55
134
|
let best: ModuleInfo | null = null;
|
|
56
135
|
|
|
57
136
|
for (const mod of model.modules) {
|
|
58
|
-
if (isWithinOrEqual(mod.root, resolved)) {
|
|
59
|
-
|
|
60
|
-
best = mod;
|
|
61
|
-
}
|
|
137
|
+
if (isWithinOrEqual(mod.root, resolved) && (!best || mod.root.length > best.root.length)) {
|
|
138
|
+
best = mod;
|
|
62
139
|
}
|
|
63
140
|
}
|
|
64
141
|
|
|
65
142
|
return best;
|
|
66
143
|
}
|
|
67
|
-
|
|
68
|
-
export function getDependents(model: ArchitectureModel, moduleName: string): ModuleInfo[] {
|
|
69
|
-
return model.modules.filter((m) => m.internalDeps.includes(moduleName));
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function getDependencies(model: ArchitectureModel, moduleName: string): ModuleInfo[] {
|
|
73
|
-
const mod = model.modules.find((m) => m.name === moduleName);
|
|
74
|
-
if (!mod) return [];
|
|
75
|
-
return model.modules.filter((m) => mod.internalDeps.includes(m.name));
|
|
76
|
-
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/** Supported workspace-configuration parsing and pattern validation. */
|
|
2
|
+
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { parseDocument } from "yaml";
|
|
6
|
+
import { errorMessage, isRecord, type PackageJsonRead, readPackageJson } from "./manifest.ts";
|
|
7
|
+
import type { WorkspaceTopologySource } from "./model.ts";
|
|
8
|
+
|
|
9
|
+
export const PNPM_WORKSPACE = "pnpm-workspace.yaml";
|
|
10
|
+
|
|
11
|
+
/** Parsed supported workspace membership declaration. */
|
|
12
|
+
export type WorkspaceDeclaration =
|
|
13
|
+
| {
|
|
14
|
+
readonly kind: "workspace";
|
|
15
|
+
readonly source: WorkspaceTopologySource;
|
|
16
|
+
readonly patterns: string[];
|
|
17
|
+
}
|
|
18
|
+
| { readonly kind: "single-package" }
|
|
19
|
+
| { readonly kind: "unavailable"; readonly reason: string };
|
|
20
|
+
|
|
21
|
+
type PatternValidation =
|
|
22
|
+
| { readonly kind: "complete"; readonly patterns: string[] }
|
|
23
|
+
| { readonly kind: "unavailable"; readonly reason: string };
|
|
24
|
+
|
|
25
|
+
type ParsedPattern =
|
|
26
|
+
| {
|
|
27
|
+
readonly kind: "complete";
|
|
28
|
+
readonly pattern: { readonly value: string; readonly negative: boolean };
|
|
29
|
+
}
|
|
30
|
+
| { readonly kind: "unavailable"; readonly reason: string };
|
|
31
|
+
|
|
32
|
+
/** Prefer an enclosing workspace declaration, then the nearest package manifest. */
|
|
33
|
+
export function findArchitectureRoot(cwd: string): string {
|
|
34
|
+
const directories = ancestors(path.resolve(cwd));
|
|
35
|
+
const pnpmRoot = directories.find((directory) =>
|
|
36
|
+
fs.existsSync(path.join(directory, PNPM_WORKSPACE)),
|
|
37
|
+
);
|
|
38
|
+
if (pnpmRoot) return pnpmRoot;
|
|
39
|
+
|
|
40
|
+
const packageWorkspaceRoot = directories.find((directory) => {
|
|
41
|
+
const manifest = readPackageJson(directory);
|
|
42
|
+
return manifest.kind === "complete" && Object.hasOwn(manifest.value, "workspaces");
|
|
43
|
+
});
|
|
44
|
+
if (packageWorkspaceRoot) return packageWorkspaceRoot;
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
directories.find((directory) => fs.existsSync(path.join(directory, "package.json"))) ?? cwd
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Read only the supported package.json/pnpm workspace membership declarations. */
|
|
52
|
+
export function readWorkspaceDeclaration(
|
|
53
|
+
root: string,
|
|
54
|
+
rootRead: PackageJsonRead,
|
|
55
|
+
): WorkspaceDeclaration {
|
|
56
|
+
const pnpmPath = path.join(root, PNPM_WORKSPACE);
|
|
57
|
+
if (fs.existsSync(pnpmPath)) return readPnpmWorkspaceDeclaration(pnpmPath);
|
|
58
|
+
|
|
59
|
+
if (rootRead.kind !== "complete") {
|
|
60
|
+
return {
|
|
61
|
+
kind: "unavailable",
|
|
62
|
+
reason:
|
|
63
|
+
"No supported workspace configuration is available because the root package manifest could not be read.",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!Object.hasOwn(rootRead.value, "workspaces")) return { kind: "single-package" };
|
|
68
|
+
const workspaces = rootRead.value.workspaces;
|
|
69
|
+
const patterns = Array.isArray(workspaces)
|
|
70
|
+
? workspaces
|
|
71
|
+
: isRecord(workspaces) && Array.isArray(workspaces.packages)
|
|
72
|
+
? workspaces.packages
|
|
73
|
+
: null;
|
|
74
|
+
if (!patterns) {
|
|
75
|
+
return {
|
|
76
|
+
kind: "unavailable",
|
|
77
|
+
reason:
|
|
78
|
+
"package.json#workspaces must be a string array or an object with a string packages array.",
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const validated = validateWorkspacePatterns(patterns);
|
|
83
|
+
if (validated.kind === "unavailable") return validated;
|
|
84
|
+
if (validated.patterns.length === 0) return { kind: "single-package" };
|
|
85
|
+
return {
|
|
86
|
+
kind: "workspace",
|
|
87
|
+
source: {
|
|
88
|
+
path: "package.json",
|
|
89
|
+
field: Array.isArray(workspaces) ? "workspaces" : "workspaces.packages",
|
|
90
|
+
},
|
|
91
|
+
patterns: validated.patterns,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function readPnpmWorkspaceDeclaration(workspacePath: string): WorkspaceDeclaration {
|
|
96
|
+
let raw: string;
|
|
97
|
+
try {
|
|
98
|
+
raw = fs.readFileSync(workspacePath, "utf-8");
|
|
99
|
+
} catch (error) {
|
|
100
|
+
return {
|
|
101
|
+
kind: "unavailable",
|
|
102
|
+
reason: `Could not read ${PNPM_WORKSPACE}: ${errorMessage(error)}`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
let value: unknown;
|
|
107
|
+
try {
|
|
108
|
+
const document = parseDocument(raw);
|
|
109
|
+
if (document.errors.length > 0) {
|
|
110
|
+
return {
|
|
111
|
+
kind: "unavailable",
|
|
112
|
+
reason: `Could not parse ${PNPM_WORKSPACE}: ${document.errors[0]?.message ?? "invalid YAML"}`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
value = document.toJS();
|
|
116
|
+
} catch (error) {
|
|
117
|
+
return {
|
|
118
|
+
kind: "unavailable",
|
|
119
|
+
reason: `Could not parse ${PNPM_WORKSPACE}: ${errorMessage(error)}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!isRecord(value)) {
|
|
124
|
+
return { kind: "unavailable", reason: `${PNPM_WORKSPACE} must contain a YAML mapping.` };
|
|
125
|
+
}
|
|
126
|
+
if (!Object.hasOwn(value, "packages")) return { kind: "single-package" };
|
|
127
|
+
if (!Array.isArray(value.packages)) {
|
|
128
|
+
return { kind: "unavailable", reason: `${PNPM_WORKSPACE}#packages must be a string array.` };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const validated = validateWorkspacePatterns(value.packages);
|
|
132
|
+
if (validated.kind === "unavailable") return validated;
|
|
133
|
+
if (validated.patterns.length === 0) return { kind: "single-package" };
|
|
134
|
+
return {
|
|
135
|
+
kind: "workspace",
|
|
136
|
+
source: { path: PNPM_WORKSPACE, field: "packages" },
|
|
137
|
+
patterns: validated.patterns,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function validateWorkspacePatterns(values: unknown[]): PatternValidation {
|
|
142
|
+
const parsed = values.map(parseWorkspacePattern);
|
|
143
|
+
const invalid = parsed.find(
|
|
144
|
+
(entry): entry is Extract<PatternValidation, { kind: "unavailable" }> =>
|
|
145
|
+
entry.kind === "unavailable",
|
|
146
|
+
);
|
|
147
|
+
if (invalid) return invalid;
|
|
148
|
+
|
|
149
|
+
const patterns = parsed
|
|
150
|
+
.filter(
|
|
151
|
+
(entry): entry is Extract<ParsedPattern, { kind: "complete" }> => entry.kind === "complete",
|
|
152
|
+
)
|
|
153
|
+
.map((entry) => entry.pattern);
|
|
154
|
+
if (patterns.length > 0 && patterns.every((pattern) => pattern.negative)) {
|
|
155
|
+
return {
|
|
156
|
+
kind: "unavailable",
|
|
157
|
+
reason:
|
|
158
|
+
"Workspace configuration contains only exclusion patterns and cannot establish package membership.",
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if (reincludesAfterExclusion(patterns)) {
|
|
162
|
+
return {
|
|
163
|
+
kind: "unavailable",
|
|
164
|
+
reason:
|
|
165
|
+
"Workspace patterns that re-include a path after an exclusion are unsupported; module discovery is unavailable rather than approximated.",
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return { kind: "complete", patterns: patterns.map(({ value }) => value) };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function parseWorkspacePattern(value: unknown): ParsedPattern {
|
|
172
|
+
if (typeof value !== "string" || value.trim() !== value || value.length === 0) {
|
|
173
|
+
return {
|
|
174
|
+
kind: "unavailable",
|
|
175
|
+
reason: "Workspace patterns must be non-empty strings without surrounding whitespace.",
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const negative = value.startsWith("!");
|
|
180
|
+
const normalized = normalizeWorkspacePattern(negative ? value.slice(1) : value);
|
|
181
|
+
if (!normalized) {
|
|
182
|
+
return {
|
|
183
|
+
kind: "unavailable",
|
|
184
|
+
reason: `Unsupported workspace pattern: \`${value}\`. Supported patterns use literal path segments, \`*\`, \`**\`, and an optional leading \`!\`.`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
kind: "complete",
|
|
189
|
+
pattern: { value: `${negative ? "!" : ""}${normalized}`, negative },
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function reincludesAfterExclusion(patterns: readonly { readonly negative: boolean }[]): boolean {
|
|
194
|
+
let sawExclusion = false;
|
|
195
|
+
for (const pattern of patterns) {
|
|
196
|
+
if (!pattern.negative && sawExclusion) return true;
|
|
197
|
+
if (pattern.negative) sawExclusion = true;
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** Normalize only path spelling; matching itself remains owned by Node's native glob. */
|
|
203
|
+
function normalizeWorkspacePattern(pattern: string): string | null {
|
|
204
|
+
const withoutDotPrefix = pattern.replace(/^\.\//, "").replace(/\/$/, "");
|
|
205
|
+
if (!withoutDotPrefix || path.isAbsolute(withoutDotPrefix) || withoutDotPrefix.includes("\\")) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
if (withoutDotPrefix.split("/").some((segment) => segment === ".." || segment.length === 0)) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
if (
|
|
212
|
+
["?", "[", "]", "{", "}", "(", ")", "!"].some((token) => withoutDotPrefix.includes(token)) ||
|
|
213
|
+
withoutDotPrefix.includes("***")
|
|
214
|
+
) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
return withoutDotPrefix;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function ancestors(start: string): string[] {
|
|
221
|
+
const directories: string[] = [];
|
|
222
|
+
let current = start;
|
|
223
|
+
while (true) {
|
|
224
|
+
directories.push(current);
|
|
225
|
+
const parent = path.dirname(current);
|
|
226
|
+
if (parent === current) return directories;
|
|
227
|
+
current = parent;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Capability Warning evaluation for reduced semantic and structural analysis.
|
|
3
3
|
*
|
|
4
4
|
* Normalizes LSP startup state, Tree-sitter health, and deprecated config keys
|
|
5
|
-
* into a structured
|
|
5
|
+
* into a structured report consumed by the startup notice, /supi-ci-status,
|
|
6
6
|
* and code_health.
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -10,42 +10,37 @@ import { getDefaultWorkspaceRuntime } from "@mrclrchtr/supi-code-runtime/api";
|
|
|
10
10
|
import { loadSupiConfigForScope } from "@mrclrchtr/supi-core/config";
|
|
11
11
|
import { getDeprecatedLspKeys, loadConfig, scanMissingServers } from "@mrclrchtr/supi-lsp/api";
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/** One actionable warning about reduced Code intelligence capability. */
|
|
14
|
+
export interface CapabilityWarning {
|
|
14
15
|
type: "deprecated-key" | "language-disabled" | "missing-server" | "structural-unavailable";
|
|
15
16
|
message: string;
|
|
16
17
|
language?: string;
|
|
17
18
|
detail?: string;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
/** Current Capability Warnings and their aggregate presence flag. */
|
|
22
|
+
export interface CapabilityWarningReport {
|
|
21
23
|
hasWarnings: boolean;
|
|
22
|
-
warnings:
|
|
24
|
+
warnings: CapabilityWarning[];
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
/** Minimal LSP-controller surface needed to discover missing servers. */
|
|
28
|
+
export interface CapabilityWarningMissingServerSource {
|
|
26
29
|
getMissingServers(): Array<{ name: string; command: string; foundExtensions?: string[] }>;
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
/**
|
|
30
|
-
export interface
|
|
32
|
+
/** Current runtime/config facts needed to evaluate Capability Warnings. */
|
|
33
|
+
export interface CapabilityWarningInput {
|
|
31
34
|
deprecatedKeys: ReturnType<typeof getDeprecatedLspKeys>;
|
|
32
35
|
explicitlyDisabledLanguages: string[];
|
|
33
36
|
missingServers: Array<{ name: string; command: string; foundExtensions: string[] }>;
|
|
34
37
|
structuralState: { kind: string; reason?: string };
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
/** Evaluate current capability/configuration facts into a structured warning report. */
|
|
41
|
+
export function evaluateCapabilityWarnings(input: CapabilityWarningInput): CapabilityWarningReport {
|
|
42
|
+
const warnings: CapabilityWarning[] = [];
|
|
38
43
|
|
|
39
|
-
/**
|
|
40
|
-
* Evaluate the current coverage state and return a structured warning report.
|
|
41
|
-
*
|
|
42
|
-
* Does not handle deduplication or grace period — callers are responsible
|
|
43
|
-
* for managing emission timing through CoverageWarningState.
|
|
44
|
-
*/
|
|
45
|
-
export function evaluateCoverageWarnings(input: CoverageEvalInput): CoverageWarningReport {
|
|
46
|
-
const warnings: CoverageWarning[] = [];
|
|
47
|
-
|
|
48
|
-
// 1. Deprecated keys
|
|
49
44
|
if (input.deprecatedKeys.projectEnabled || input.deprecatedKeys.globalEnabled) {
|
|
50
45
|
warnings.push({
|
|
51
46
|
type: "deprecated-key",
|
|
@@ -61,16 +56,14 @@ export function evaluateCoverageWarnings(input: CoverageEvalInput): CoverageWarn
|
|
|
61
56
|
});
|
|
62
57
|
}
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
for (const lang of input.explicitlyDisabledLanguages) {
|
|
59
|
+
for (const language of input.explicitlyDisabledLanguages) {
|
|
66
60
|
warnings.push({
|
|
67
61
|
type: "language-disabled",
|
|
68
|
-
language
|
|
69
|
-
message: `Semantic
|
|
62
|
+
language,
|
|
63
|
+
message: `Semantic capability reduced: "${language}" servers are disabled via lsp.servers.${language}.enabled: false`,
|
|
70
64
|
});
|
|
71
65
|
}
|
|
72
66
|
|
|
73
|
-
// 3. Missing server binaries
|
|
74
67
|
for (const server of input.missingServers) {
|
|
75
68
|
warnings.push({
|
|
76
69
|
type: "missing-server",
|
|
@@ -83,102 +76,73 @@ export function evaluateCoverageWarnings(input: CoverageEvalInput): CoverageWarn
|
|
|
83
76
|
});
|
|
84
77
|
}
|
|
85
78
|
|
|
86
|
-
// 4. Structural (Tree-sitter) failure
|
|
87
79
|
if (input.structuralState.kind === "unavailable") {
|
|
88
80
|
warnings.push({
|
|
89
81
|
type: "structural-unavailable",
|
|
90
|
-
message: `Structural
|
|
82
|
+
message: `Structural capability unavailable: ${input.structuralState.reason ?? "Tree-sitter initialization failed"}`,
|
|
91
83
|
});
|
|
92
84
|
}
|
|
93
85
|
|
|
94
86
|
return { hasWarnings: warnings.length > 0, warnings };
|
|
95
87
|
}
|
|
96
88
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Per-session state for managing warning emission timing and deduplication.
|
|
101
|
-
*/
|
|
102
|
-
export class CoverageWarningState {
|
|
89
|
+
/** Per-session state for warning grace-period timing and deduplication. */
|
|
90
|
+
export class CapabilityWarningState {
|
|
103
91
|
private lastWarningsHash: string | null = null;
|
|
104
92
|
private forceEmitted = false;
|
|
105
|
-
private readonly startedAt
|
|
106
|
-
|
|
107
|
-
constructor() {
|
|
108
|
-
this.startedAt = Date.now();
|
|
109
|
-
}
|
|
93
|
+
private readonly startedAt = Date.now();
|
|
110
94
|
|
|
111
95
|
/**
|
|
112
|
-
* Return warnings that should be emitted
|
|
96
|
+
* Return warnings that should be emitted now.
|
|
113
97
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* new warnings are emitted. Identical sets are suppressed.
|
|
117
|
-
* - Respects grace period (no warnings before `gracePeriodMs` has elapsed)
|
|
118
|
-
* - An empty report (no warnings) does not consume emission state
|
|
98
|
+
* Changed warning sets may emit again; identical sets are suppressed. Empty
|
|
99
|
+
* reports do not consume emission state, and startup honors a grace period.
|
|
119
100
|
*/
|
|
120
101
|
getPendingWarnings(
|
|
121
|
-
report:
|
|
102
|
+
report: CapabilityWarningReport,
|
|
122
103
|
gracePeriodMs: number = 5_000,
|
|
123
|
-
):
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
return [];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (!report.hasWarnings || report.warnings.length === 0) {
|
|
130
|
-
return [];
|
|
131
|
-
}
|
|
132
|
-
|
|
104
|
+
): CapabilityWarning[] {
|
|
105
|
+
if (Date.now() - this.startedAt < gracePeriodMs) return [];
|
|
106
|
+
if (!report.hasWarnings || report.warnings.length === 0) return [];
|
|
133
107
|
if (this.forceEmitted) return [];
|
|
134
108
|
|
|
135
109
|
const nextHash = this.computeHash(report);
|
|
136
|
-
if (nextHash === this.lastWarningsHash)
|
|
137
|
-
return [];
|
|
138
|
-
}
|
|
110
|
+
if (nextHash === this.lastWarningsHash) return [];
|
|
139
111
|
|
|
140
112
|
this.lastWarningsHash = nextHash;
|
|
141
113
|
return report.warnings;
|
|
142
114
|
}
|
|
143
115
|
|
|
144
|
-
/**
|
|
116
|
+
/** Whether any warning set has been emitted in this session. */
|
|
145
117
|
get hasEmitted(): boolean {
|
|
146
118
|
return this.lastWarningsHash !== null;
|
|
147
119
|
}
|
|
148
120
|
|
|
149
|
-
/** Force
|
|
121
|
+
/** Force warnings to be considered emitted. Useful for tests. */
|
|
150
122
|
markEmitted(): void {
|
|
151
123
|
this.forceEmitted = true;
|
|
152
124
|
this.lastWarningsHash = "emitted";
|
|
153
125
|
}
|
|
154
126
|
|
|
155
|
-
/** Reset
|
|
127
|
+
/** Reset warning emission state. */
|
|
156
128
|
reset(): void {
|
|
157
129
|
this.forceEmitted = false;
|
|
158
130
|
this.lastWarningsHash = null;
|
|
159
131
|
}
|
|
160
132
|
|
|
161
|
-
private computeHash(report:
|
|
133
|
+
private computeHash(report: CapabilityWarningReport): string {
|
|
162
134
|
return report.warnings
|
|
163
|
-
.map((
|
|
164
|
-
.sort((
|
|
135
|
+
.map((warning) => `${warning.type}:${warning.language ?? ""}:${warning.message}`)
|
|
136
|
+
.sort((left, right) => left.localeCompare(right))
|
|
165
137
|
.join("|");
|
|
166
138
|
}
|
|
167
139
|
}
|
|
168
140
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Gather the coverage evaluation input from current runtime state.
|
|
173
|
-
*
|
|
174
|
-
* Reads deprecated keys from supi-lsp, structural state from the
|
|
175
|
-
* workspace runtime, and explicitly disabled languages / missing server
|
|
176
|
-
* info from the LSP controller or a config-based fallback scan.
|
|
177
|
-
*/
|
|
178
|
-
export function gatherCoverageEvalInput(
|
|
141
|
+
/** Gather current runtime/config facts for Capability Warning evaluation. */
|
|
142
|
+
export function gatherCapabilityWarningInput(
|
|
179
143
|
cwd: string,
|
|
180
|
-
lspController:
|
|
181
|
-
):
|
|
144
|
+
lspController: CapabilityWarningMissingServerSource | null,
|
|
145
|
+
): CapabilityWarningInput {
|
|
182
146
|
const deprecatedKeys = getDeprecatedLspKeys(cwd);
|
|
183
147
|
const structuralState = getDefaultWorkspaceRuntime().getWorkspace(cwd).structural.state;
|
|
184
148
|
const explicitlyDisabledLanguages = detectExplicitlyDisabledLanguages(cwd);
|
|
@@ -204,7 +168,6 @@ function normalizeMissingServers(
|
|
|
204
168
|
}));
|
|
205
169
|
}
|
|
206
170
|
|
|
207
|
-
/** Read raw scoped config to find languages with `servers.<lang>.enabled: false`. */
|
|
208
171
|
function detectExplicitlyDisabledLanguages(cwd: string): string[] {
|
|
209
172
|
const disabled = new Set<string>();
|
|
210
173
|
for (const scope of ["project", "global"] as const) {
|
|
@@ -216,8 +179,8 @@ function detectExplicitlyDisabledLanguages(cwd: string): string[] {
|
|
|
216
179
|
);
|
|
217
180
|
const servers = (raw as { servers?: Record<string, { enabled?: boolean }> }).servers;
|
|
218
181
|
if (!servers) continue;
|
|
219
|
-
for (const [name,
|
|
220
|
-
if (
|
|
182
|
+
for (const [name, server] of Object.entries(servers)) {
|
|
183
|
+
if (server.enabled === false) disabled.add(name);
|
|
221
184
|
}
|
|
222
185
|
}
|
|
223
186
|
return [...disabled].sort();
|