homegraph 1.5.7 → 1.5.8
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/CHANGELOG.md +21 -0
- package/README.md +2 -2
- package/dist/bin/homegraph.js +16 -14
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +11 -25
- package/dist/db/queries.d.ts +5 -1
- package/dist/db/queries.js +31 -2
- package/dist/db/sqlite-adapter.d.ts +6 -12
- package/dist/db/sqlite-adapter.js +13 -41
- package/dist/directory.d.ts +1 -1
- package/dist/directory.js +25 -1
- package/dist/extraction/grammars.d.ts +2 -0
- package/dist/extraction/grammars.js +7 -7
- package/dist/graph/evidence-paths.d.ts +63 -0
- package/dist/graph/evidence-paths.js +245 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +55 -17
- package/dist/mcp/arkts-evidence-packs.d.ts +67 -0
- package/dist/mcp/arkts-evidence-packs.js +352 -0
- package/dist/mcp/daemon.js +1 -1
- package/dist/mcp/engine.d.ts +20 -7
- package/dist/mcp/engine.js +113 -106
- package/dist/mcp/index-availability.d.ts +23 -0
- package/dist/mcp/index-availability.js +78 -0
- package/dist/mcp/index.js +5 -4
- package/dist/mcp/query-cache.d.ts +1 -1
- package/dist/mcp/query-cache.js +6 -2
- package/dist/mcp/query-worker.d.ts +1 -1
- package/dist/mcp/query-worker.js +1 -1
- package/dist/mcp/server-instructions.d.ts +4 -9
- package/dist/mcp/server-instructions.js +34 -74
- package/dist/mcp/session.js +12 -4
- package/dist/mcp/source-slice-identity.d.ts +3 -0
- package/dist/mcp/source-slice-identity.js +11 -0
- package/dist/mcp/tools.d.ts +24 -6
- package/dist/mcp/tools.js +201 -80
- package/dist/spec/llm/client.js +3 -15
- package/dist/spec/llm/openai-sdk.d.ts +14 -0
- package/dist/spec/llm/openai-sdk.js +37 -0
- package/dist/spec/llm/retry.js +8 -9
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +24 -0
- package/package.json +3 -5
- package/dist/addons/dynamic-import.d.ts.map +0 -1
- package/dist/addons/dynamic-import.js.map +0 -1
- package/dist/addons/init-template.d.ts.map +0 -1
- package/dist/addons/init-template.js.map +0 -1
- package/dist/addons/loader.d.ts.map +0 -1
- package/dist/addons/loader.js.map +0 -1
- package/dist/addons/manager.d.ts.map +0 -1
- package/dist/addons/manager.js.map +0 -1
- package/dist/addons/paths.d.ts.map +0 -1
- package/dist/addons/paths.js.map +0 -1
- package/dist/addons/registry.d.ts.map +0 -1
- package/dist/addons/registry.js.map +0 -1
- package/dist/addons/semver.d.ts.map +0 -1
- package/dist/addons/semver.js.map +0 -1
- package/dist/addons/types.d.ts.map +0 -1
- package/dist/addons/types.js.map +0 -1
- package/dist/addons/validate.d.ts.map +0 -1
- package/dist/addons/validate.js.map +0 -1
- package/dist/arkui/index.d.ts.map +0 -1
- package/dist/arkui/index.js.map +0 -1
- package/dist/arkui/migrate-passage.d.ts.map +0 -1
- package/dist/arkui/migrate-passage.js.map +0 -1
- package/dist/arkui/migrate-semantics.d.ts.map +0 -1
- package/dist/arkui/migrate-semantics.js.map +0 -1
- package/dist/arkui/migrate-snapshot.d.ts.map +0 -1
- package/dist/arkui/migrate-snapshot.js.map +0 -1
- package/dist/bin/addon-commands.d.ts.map +0 -1
- package/dist/bin/addon-commands.js.map +0 -1
- package/dist/bin/command-supervision.d.ts.map +0 -1
- package/dist/bin/command-supervision.js.map +0 -1
- package/dist/bin/fatal-handler.d.ts.map +0 -1
- package/dist/bin/fatal-handler.js.map +0 -1
- package/dist/bin/homegraph.d.ts.map +0 -1
- package/dist/bin/homegraph.js.map +0 -1
- package/dist/bin/node-version-check.d.ts.map +0 -1
- package/dist/bin/node-version-check.js.map +0 -1
- package/dist/bin/uninstall.d.ts.map +0 -1
- package/dist/bin/uninstall.js.map +0 -1
- package/dist/context/formatter.d.ts.map +0 -1
- package/dist/context/formatter.js.map +0 -1
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js.map +0 -1
- package/dist/context/markers.d.ts.map +0 -1
- package/dist/context/markers.js.map +0 -1
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js.map +0 -1
- package/dist/db/migrations.d.ts.map +0 -1
- package/dist/db/migrations.js.map +0 -1
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js.map +0 -1
- package/dist/db/sqlite-adapter.d.ts.map +0 -1
- package/dist/db/sqlite-adapter.js.map +0 -1
- package/dist/db/wal-valve.d.ts.map +0 -1
- package/dist/db/wal-valve.js.map +0 -1
- package/dist/directory.d.ts.map +0 -1
- package/dist/directory.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/extraction/arkts-batch-worker.d.ts.map +0 -1
- package/dist/extraction/arkts-batch-worker.js.map +0 -1
- package/dist/extraction/astro-extractor.d.ts.map +0 -1
- package/dist/extraction/astro-extractor.js.map +0 -1
- package/dist/extraction/cfml-extractor.d.ts.map +0 -1
- package/dist/extraction/cfml-extractor.js.map +0 -1
- package/dist/extraction/context.d.ts.map +0 -1
- package/dist/extraction/context.js.map +0 -1
- package/dist/extraction/default-ignore.d.ts.map +0 -1
- package/dist/extraction/default-ignore.js.map +0 -1
- package/dist/extraction/dfm-extractor.d.ts.map +0 -1
- package/dist/extraction/dfm-extractor.js.map +0 -1
- package/dist/extraction/extraction-version.d.ts.map +0 -1
- package/dist/extraction/extraction-version.js.map +0 -1
- package/dist/extraction/function-ref.d.ts.map +0 -1
- package/dist/extraction/function-ref.js.map +0 -1
- package/dist/extraction/generated-detection.d.ts.map +0 -1
- package/dist/extraction/generated-detection.js.map +0 -1
- package/dist/extraction/grammars.d.ts.map +0 -1
- package/dist/extraction/grammars.js.map +0 -1
- package/dist/extraction/index.d.ts.map +0 -1
- package/dist/extraction/index.js.map +0 -1
- package/dist/extraction/languages/arkts.d.ts.map +0 -1
- package/dist/extraction/languages/arkts.js.map +0 -1
- package/dist/extraction/languages/c-cpp.d.ts.map +0 -1
- package/dist/extraction/languages/c-cpp.js.map +0 -1
- package/dist/extraction/languages/cfquery.d.ts.map +0 -1
- package/dist/extraction/languages/cfquery.js.map +0 -1
- package/dist/extraction/languages/cfscript.d.ts.map +0 -1
- package/dist/extraction/languages/cfscript.js.map +0 -1
- package/dist/extraction/languages/cobol.d.ts.map +0 -1
- package/dist/extraction/languages/cobol.js.map +0 -1
- package/dist/extraction/languages/csharp.d.ts.map +0 -1
- package/dist/extraction/languages/csharp.js.map +0 -1
- package/dist/extraction/languages/dart.d.ts.map +0 -1
- package/dist/extraction/languages/dart.js.map +0 -1
- package/dist/extraction/languages/erlang.d.ts.map +0 -1
- package/dist/extraction/languages/erlang.js.map +0 -1
- package/dist/extraction/languages/go.d.ts.map +0 -1
- package/dist/extraction/languages/go.js.map +0 -1
- package/dist/extraction/languages/index.d.ts.map +0 -1
- package/dist/extraction/languages/index.js.map +0 -1
- package/dist/extraction/languages/java.d.ts.map +0 -1
- package/dist/extraction/languages/java.js.map +0 -1
- package/dist/extraction/languages/javascript.d.ts.map +0 -1
- package/dist/extraction/languages/javascript.js.map +0 -1
- package/dist/extraction/languages/kotlin.d.ts.map +0 -1
- package/dist/extraction/languages/kotlin.js.map +0 -1
- package/dist/extraction/languages/lua.d.ts.map +0 -1
- package/dist/extraction/languages/lua.js.map +0 -1
- package/dist/extraction/languages/luau.d.ts.map +0 -1
- package/dist/extraction/languages/luau.js.map +0 -1
- package/dist/extraction/languages/nix.d.ts.map +0 -1
- package/dist/extraction/languages/nix.js.map +0 -1
- package/dist/extraction/languages/objc.d.ts.map +0 -1
- package/dist/extraction/languages/objc.js.map +0 -1
- package/dist/extraction/languages/pascal.d.ts.map +0 -1
- package/dist/extraction/languages/pascal.js.map +0 -1
- package/dist/extraction/languages/php.d.ts.map +0 -1
- package/dist/extraction/languages/php.js.map +0 -1
- package/dist/extraction/languages/python.d.ts.map +0 -1
- package/dist/extraction/languages/python.js.map +0 -1
- package/dist/extraction/languages/r.d.ts.map +0 -1
- package/dist/extraction/languages/r.js.map +0 -1
- package/dist/extraction/languages/ruby.d.ts.map +0 -1
- package/dist/extraction/languages/ruby.js.map +0 -1
- package/dist/extraction/languages/rust.d.ts.map +0 -1
- package/dist/extraction/languages/rust.js.map +0 -1
- package/dist/extraction/languages/scala.d.ts.map +0 -1
- package/dist/extraction/languages/scala.js.map +0 -1
- package/dist/extraction/languages/solidity.d.ts.map +0 -1
- package/dist/extraction/languages/solidity.js.map +0 -1
- package/dist/extraction/languages/swift.d.ts.map +0 -1
- package/dist/extraction/languages/swift.js.map +0 -1
- package/dist/extraction/languages/terraform.d.ts.map +0 -1
- package/dist/extraction/languages/terraform.js.map +0 -1
- package/dist/extraction/languages/typescript.d.ts.map +0 -1
- package/dist/extraction/languages/typescript.js.map +0 -1
- package/dist/extraction/languages/vbnet.d.ts.map +0 -1
- package/dist/extraction/languages/vbnet.js.map +0 -1
- package/dist/extraction/liquid-extractor.d.ts.map +0 -1
- package/dist/extraction/liquid-extractor.js.map +0 -1
- package/dist/extraction/mybatis-extractor.d.ts.map +0 -1
- package/dist/extraction/mybatis-extractor.js.map +0 -1
- package/dist/extraction/parse-pool.d.ts.map +0 -1
- package/dist/extraction/parse-pool.js.map +0 -1
- package/dist/extraction/parse-worker.d.ts.map +0 -1
- package/dist/extraction/parse-worker.js.map +0 -1
- package/dist/extraction/razor-extractor.d.ts.map +0 -1
- package/dist/extraction/razor-extractor.js.map +0 -1
- package/dist/extraction/store-worker.d.ts.map +0 -1
- package/dist/extraction/store-worker.js.map +0 -1
- package/dist/extraction/store-writer.d.ts.map +0 -1
- package/dist/extraction/store-writer.js.map +0 -1
- package/dist/extraction/svelte-extractor.d.ts.map +0 -1
- package/dist/extraction/svelte-extractor.js.map +0 -1
- package/dist/extraction/tree-sitter-helpers.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-helpers.js.map +0 -1
- package/dist/extraction/tree-sitter-types.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-types.js.map +0 -1
- package/dist/extraction/tree-sitter.d.ts.map +0 -1
- package/dist/extraction/tree-sitter.js.map +0 -1
- package/dist/extraction/vue-extractor.d.ts.map +0 -1
- package/dist/extraction/vue-extractor.js.map +0 -1
- package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
- package/dist/extraction/wasm-runtime-flags.d.ts.map +0 -1
- package/dist/extraction/wasm-runtime-flags.js.map +0 -1
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/queries.d.ts.map +0 -1
- package/dist/graph/queries.js.map +0 -1
- package/dist/graph/traversal.d.ts.map +0 -1
- package/dist/graph/traversal.js.map +0 -1
- package/dist/graph-sources.d.ts.map +0 -1
- package/dist/graph-sources.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/installer/config-writer.d.ts.map +0 -1
- package/dist/installer/config-writer.js.map +0 -1
- package/dist/installer/index.d.ts.map +0 -1
- package/dist/installer/index.js.map +0 -1
- package/dist/installer/instructions-template.d.ts.map +0 -1
- package/dist/installer/instructions-template.js.map +0 -1
- package/dist/installer/targets/antigravity.d.ts.map +0 -1
- package/dist/installer/targets/antigravity.js.map +0 -1
- package/dist/installer/targets/claude.d.ts.map +0 -1
- package/dist/installer/targets/claude.js.map +0 -1
- package/dist/installer/targets/codebuddy.d.ts.map +0 -1
- package/dist/installer/targets/codebuddy.js.map +0 -1
- package/dist/installer/targets/codex.d.ts.map +0 -1
- package/dist/installer/targets/codex.js.map +0 -1
- package/dist/installer/targets/cursor.d.ts.map +0 -1
- package/dist/installer/targets/cursor.js.map +0 -1
- package/dist/installer/targets/deveco.d.ts.map +0 -1
- package/dist/installer/targets/deveco.js.map +0 -1
- package/dist/installer/targets/gemini.d.ts.map +0 -1
- package/dist/installer/targets/gemini.js.map +0 -1
- package/dist/installer/targets/hermes.d.ts.map +0 -1
- package/dist/installer/targets/hermes.js.map +0 -1
- package/dist/installer/targets/kiro.d.ts.map +0 -1
- package/dist/installer/targets/kiro.js.map +0 -1
- package/dist/installer/targets/opencode.d.ts.map +0 -1
- package/dist/installer/targets/opencode.js.map +0 -1
- package/dist/installer/targets/registry.d.ts.map +0 -1
- package/dist/installer/targets/registry.js.map +0 -1
- package/dist/installer/targets/shared.d.ts.map +0 -1
- package/dist/installer/targets/shared.js.map +0 -1
- package/dist/installer/targets/toml.d.ts.map +0 -1
- package/dist/installer/targets/toml.js.map +0 -1
- package/dist/installer/targets/types.d.ts.map +0 -1
- package/dist/installer/targets/types.js.map +0 -1
- package/dist/mcp/daemon-manager.d.ts.map +0 -1
- package/dist/mcp/daemon-manager.js.map +0 -1
- package/dist/mcp/daemon-paths.d.ts.map +0 -1
- package/dist/mcp/daemon-paths.js.map +0 -1
- package/dist/mcp/daemon-registry.d.ts.map +0 -1
- package/dist/mcp/daemon-registry.js.map +0 -1
- package/dist/mcp/daemon.d.ts.map +0 -1
- package/dist/mcp/daemon.js.map +0 -1
- package/dist/mcp/diff-impact.d.ts.map +0 -1
- package/dist/mcp/diff-impact.js.map +0 -1
- package/dist/mcp/dynamic-boundaries.d.ts.map +0 -1
- package/dist/mcp/dynamic-boundaries.js.map +0 -1
- package/dist/mcp/early-ppid.d.ts.map +0 -1
- package/dist/mcp/early-ppid.js.map +0 -1
- package/dist/mcp/engine.d.ts.map +0 -1
- package/dist/mcp/engine.js.map +0 -1
- package/dist/mcp/evidence-rendering.d.ts.map +0 -1
- package/dist/mcp/evidence-rendering.js.map +0 -1
- package/dist/mcp/explore-dedup.d.ts.map +0 -1
- package/dist/mcp/explore-dedup.js.map +0 -1
- package/dist/mcp/explore-repeat-guard.d.ts.map +0 -1
- package/dist/mcp/explore-repeat-guard.js.map +0 -1
- package/dist/mcp/explore-session-state.d.ts.map +0 -1
- package/dist/mcp/explore-session-state.js.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/liveness-watchdog.d.ts.map +0 -1
- package/dist/mcp/liveness-watchdog.js.map +0 -1
- package/dist/mcp/memory-budget.d.ts.map +0 -1
- package/dist/mcp/memory-budget.js.map +0 -1
- package/dist/mcp/ppid-watchdog.d.ts.map +0 -1
- package/dist/mcp/ppid-watchdog.js.map +0 -1
- package/dist/mcp/proxy.d.ts.map +0 -1
- package/dist/mcp/proxy.js.map +0 -1
- package/dist/mcp/query-cache.d.ts.map +0 -1
- package/dist/mcp/query-cache.js.map +0 -1
- package/dist/mcp/query-pool.d.ts.map +0 -1
- package/dist/mcp/query-pool.js.map +0 -1
- package/dist/mcp/query-worker.d.ts.map +0 -1
- package/dist/mcp/query-worker.js.map +0 -1
- package/dist/mcp/server-instructions.d.ts.map +0 -1
- package/dist/mcp/server-instructions.js.map +0 -1
- package/dist/mcp/session.d.ts.map +0 -1
- package/dist/mcp/session.js.map +0 -1
- package/dist/mcp/startup-handshake.d.ts.map +0 -1
- package/dist/mcp/startup-handshake.js.map +0 -1
- package/dist/mcp/stdin-teardown.d.ts.map +0 -1
- package/dist/mcp/stdin-teardown.js.map +0 -1
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js.map +0 -1
- package/dist/mcp/version.d.ts.map +0 -1
- package/dist/mcp/version.js.map +0 -1
- package/dist/project-config.d.ts.map +0 -1
- package/dist/project-config.js.map +0 -1
- package/dist/project-map/index.d.ts.map +0 -1
- package/dist/project-map/index.js.map +0 -1
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +0 -1
- package/dist/resolution/c-fnptr-synthesizer.js.map +0 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +0 -1
- package/dist/resolution/callback-synthesizer.js.map +0 -1
- package/dist/resolution/cooperative-yield.d.ts.map +0 -1
- package/dist/resolution/cooperative-yield.js.map +0 -1
- package/dist/resolution/frameworks/arkts-entry.d.ts.map +0 -1
- package/dist/resolution/frameworks/arkts-entry.js.map +0 -1
- package/dist/resolution/frameworks/arkts-napi.d.ts.map +0 -1
- package/dist/resolution/frameworks/arkts-napi.js.map +0 -1
- package/dist/resolution/frameworks/astro.d.ts.map +0 -1
- package/dist/resolution/frameworks/astro.js.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.js.map +0 -1
- package/dist/resolution/frameworks/cics.d.ts.map +0 -1
- package/dist/resolution/frameworks/cics.js.map +0 -1
- package/dist/resolution/frameworks/csharp.d.ts.map +0 -1
- package/dist/resolution/frameworks/csharp.js.map +0 -1
- package/dist/resolution/frameworks/drupal.d.ts.map +0 -1
- package/dist/resolution/frameworks/drupal.js.map +0 -1
- package/dist/resolution/frameworks/expo-modules.d.ts.map +0 -1
- package/dist/resolution/frameworks/expo-modules.js.map +0 -1
- package/dist/resolution/frameworks/express.d.ts.map +0 -1
- package/dist/resolution/frameworks/express.js.map +0 -1
- package/dist/resolution/frameworks/fabric.d.ts.map +0 -1
- package/dist/resolution/frameworks/fabric.js.map +0 -1
- package/dist/resolution/frameworks/go.d.ts.map +0 -1
- package/dist/resolution/frameworks/go.js.map +0 -1
- package/dist/resolution/frameworks/goframe.d.ts.map +0 -1
- package/dist/resolution/frameworks/goframe.js.map +0 -1
- package/dist/resolution/frameworks/index.d.ts.map +0 -1
- package/dist/resolution/frameworks/index.js.map +0 -1
- package/dist/resolution/frameworks/java.d.ts.map +0 -1
- package/dist/resolution/frameworks/java.js.map +0 -1
- package/dist/resolution/frameworks/laravel.d.ts.map +0 -1
- package/dist/resolution/frameworks/laravel.js.map +0 -1
- package/dist/resolution/frameworks/nestjs.d.ts.map +0 -1
- package/dist/resolution/frameworks/nestjs.js.map +0 -1
- package/dist/resolution/frameworks/play.d.ts.map +0 -1
- package/dist/resolution/frameworks/play.js.map +0 -1
- package/dist/resolution/frameworks/python.d.ts.map +0 -1
- package/dist/resolution/frameworks/python.js.map +0 -1
- package/dist/resolution/frameworks/react-native.d.ts.map +0 -1
- package/dist/resolution/frameworks/react-native.js.map +0 -1
- package/dist/resolution/frameworks/react.d.ts.map +0 -1
- package/dist/resolution/frameworks/react.js.map +0 -1
- package/dist/resolution/frameworks/ruby.d.ts.map +0 -1
- package/dist/resolution/frameworks/ruby.js.map +0 -1
- package/dist/resolution/frameworks/rust.d.ts.map +0 -1
- package/dist/resolution/frameworks/rust.js.map +0 -1
- package/dist/resolution/frameworks/svelte.d.ts.map +0 -1
- package/dist/resolution/frameworks/svelte.js.map +0 -1
- package/dist/resolution/frameworks/swift-objc.d.ts.map +0 -1
- package/dist/resolution/frameworks/swift-objc.js.map +0 -1
- package/dist/resolution/frameworks/swift.d.ts.map +0 -1
- package/dist/resolution/frameworks/swift.js.map +0 -1
- package/dist/resolution/frameworks/terraform.d.ts.map +0 -1
- package/dist/resolution/frameworks/terraform.js.map +0 -1
- package/dist/resolution/frameworks/vue.d.ts.map +0 -1
- package/dist/resolution/frameworks/vue.js.map +0 -1
- package/dist/resolution/go-module.d.ts.map +0 -1
- package/dist/resolution/go-module.js.map +0 -1
- package/dist/resolution/goframe-synthesizer.d.ts.map +0 -1
- package/dist/resolution/goframe-synthesizer.js.map +0 -1
- package/dist/resolution/import-resolver.d.ts.map +0 -1
- package/dist/resolution/import-resolver.js.map +0 -1
- package/dist/resolution/index.d.ts.map +0 -1
- package/dist/resolution/index.js.map +0 -1
- package/dist/resolution/lru-cache.d.ts.map +0 -1
- package/dist/resolution/lru-cache.js.map +0 -1
- package/dist/resolution/memory-budget.d.ts.map +0 -1
- package/dist/resolution/memory-budget.js.map +0 -1
- package/dist/resolution/name-matcher.d.ts.map +0 -1
- package/dist/resolution/name-matcher.js.map +0 -1
- package/dist/resolution/path-aliases.d.ts.map +0 -1
- package/dist/resolution/path-aliases.js.map +0 -1
- package/dist/resolution/resolver-pool.d.ts.map +0 -1
- package/dist/resolution/resolver-pool.js.map +0 -1
- package/dist/resolution/resolver-worker.d.ts.map +0 -1
- package/dist/resolution/resolver-worker.js.map +0 -1
- package/dist/resolution/strip-comments.d.ts.map +0 -1
- package/dist/resolution/strip-comments.js.map +0 -1
- package/dist/resolution/swift-objc-bridge.d.ts.map +0 -1
- package/dist/resolution/swift-objc-bridge.js.map +0 -1
- package/dist/resolution/types.d.ts.map +0 -1
- package/dist/resolution/types.js.map +0 -1
- package/dist/resolution/workspace-packages.d.ts.map +0 -1
- package/dist/resolution/workspace-packages.js.map +0 -1
- package/dist/search/identifier-segments.d.ts.map +0 -1
- package/dist/search/identifier-segments.js.map +0 -1
- package/dist/search/literal-evidence.d.ts.map +0 -1
- package/dist/search/literal-evidence.js.map +0 -1
- package/dist/search/query-parser.d.ts.map +0 -1
- package/dist/search/query-parser.js.map +0 -1
- package/dist/search/query-plan-provider.d.ts.map +0 -1
- package/dist/search/query-plan-provider.js.map +0 -1
- package/dist/search/query-plan.d.ts.map +0 -1
- package/dist/search/query-plan.js.map +0 -1
- package/dist/search/query-utils.d.ts.map +0 -1
- package/dist/search/query-utils.js.map +0 -1
- package/dist/spec/build/diff-parser.d.ts.map +0 -1
- package/dist/spec/build/diff-parser.js.map +0 -1
- package/dist/spec/build/pipeline.d.ts.map +0 -1
- package/dist/spec/build/pipeline.js.map +0 -1
- package/dist/spec/build/scan.d.ts.map +0 -1
- package/dist/spec/build/scan.js.map +0 -1
- package/dist/spec/build/scope-resolver.d.ts.map +0 -1
- package/dist/spec/build/scope-resolver.js.map +0 -1
- package/dist/spec/build/spec-extractor.d.ts.map +0 -1
- package/dist/spec/build/spec-extractor.js.map +0 -1
- package/dist/spec/config.d.ts.map +0 -1
- package/dist/spec/config.js.map +0 -1
- package/dist/spec/db/commit-node.d.ts.map +0 -1
- package/dist/spec/db/commit-node.js.map +0 -1
- package/dist/spec/db/fragment-node.d.ts.map +0 -1
- package/dist/spec/db/fragment-node.js.map +0 -1
- package/dist/spec/db/fts.d.ts.map +0 -1
- package/dist/spec/db/fts.js.map +0 -1
- package/dist/spec/db/index.d.ts.map +0 -1
- package/dist/spec/db/index.js.map +0 -1
- package/dist/spec/db/persist.d.ts.map +0 -1
- package/dist/spec/db/persist.js.map +0 -1
- package/dist/spec/db/relations.d.ts.map +0 -1
- package/dist/spec/db/relations.js.map +0 -1
- package/dist/spec/db/schema.d.ts.map +0 -1
- package/dist/spec/db/schema.js.map +0 -1
- package/dist/spec/db/spec-node.d.ts.map +0 -1
- package/dist/spec/db/spec-node.js.map +0 -1
- package/dist/spec/db/sql-utils.d.ts.map +0 -1
- package/dist/spec/db/sql-utils.js.map +0 -1
- package/dist/spec/evolve/cluster-context.d.ts.map +0 -1
- package/dist/spec/evolve/cluster-context.js.map +0 -1
- package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +0 -1
- package/dist/spec/evolve/commit-spec-analyzer.js.map +0 -1
- package/dist/spec/evolve/commit-spec-persister.d.ts.map +0 -1
- package/dist/spec/evolve/commit-spec-persister.js.map +0 -1
- package/dist/spec/evolve/impact-locator.d.ts.map +0 -1
- package/dist/spec/evolve/impact-locator.js.map +0 -1
- package/dist/spec/evolve/pipeline.d.ts.map +0 -1
- package/dist/spec/evolve/pipeline.js.map +0 -1
- package/dist/spec/evolve/spec-rewriter.d.ts.map +0 -1
- package/dist/spec/evolve/spec-rewriter.js.map +0 -1
- package/dist/spec/git/commits.d.ts.map +0 -1
- package/dist/spec/git/commits.js.map +0 -1
- package/dist/spec/git/exec.d.ts.map +0 -1
- package/dist/spec/git/exec.js.map +0 -1
- package/dist/spec/git/index.d.ts.map +0 -1
- package/dist/spec/git/index.js.map +0 -1
- package/dist/spec/graph/index.d.ts.map +0 -1
- package/dist/spec/graph/index.js.map +0 -1
- package/dist/spec/graph/queries.d.ts.map +0 -1
- package/dist/spec/graph/queries.js.map +0 -1
- package/dist/spec/llm/agent-client.d.ts.map +0 -1
- package/dist/spec/llm/agent-client.js.map +0 -1
- package/dist/spec/llm/agents/claude-code.d.ts.map +0 -1
- package/dist/spec/llm/agents/claude-code.js.map +0 -1
- package/dist/spec/llm/agents/codex.d.ts.map +0 -1
- package/dist/spec/llm/agents/codex.js.map +0 -1
- package/dist/spec/llm/agents/detect-utils.d.ts.map +0 -1
- package/dist/spec/llm/agents/detect-utils.js.map +0 -1
- package/dist/spec/llm/agents/deveco-code.d.ts.map +0 -1
- package/dist/spec/llm/agents/deveco-code.js.map +0 -1
- package/dist/spec/llm/agents/index.d.ts.map +0 -1
- package/dist/spec/llm/agents/index.js.map +0 -1
- package/dist/spec/llm/agents/types.d.ts.map +0 -1
- package/dist/spec/llm/agents/types.js.map +0 -1
- package/dist/spec/llm/client.d.ts.map +0 -1
- package/dist/spec/llm/client.js.map +0 -1
- package/dist/spec/llm/factory.d.ts.map +0 -1
- package/dist/spec/llm/factory.js.map +0 -1
- package/dist/spec/llm/prompts.d.ts.map +0 -1
- package/dist/spec/llm/prompts.js.map +0 -1
- package/dist/spec/llm/retry.d.ts.map +0 -1
- package/dist/spec/llm/retry.js.map +0 -1
- package/dist/spec/mine/addon/adapter.d.ts.map +0 -1
- package/dist/spec/mine/addon/adapter.js.map +0 -1
- package/dist/spec/mine/addon/render.d.ts.map +0 -1
- package/dist/spec/mine/addon/render.js.map +0 -1
- package/dist/spec/mine/addon/types.d.ts.map +0 -1
- package/dist/spec/mine/addon/types.js.map +0 -1
- package/dist/spec/mine/clustering/features.d.ts.map +0 -1
- package/dist/spec/mine/clustering/features.js.map +0 -1
- package/dist/spec/mine/clustering/index.d.ts.map +0 -1
- package/dist/spec/mine/clustering/index.js.map +0 -1
- package/dist/spec/mine/clustering/leiden.d.ts.map +0 -1
- package/dist/spec/mine/clustering/leiden.js.map +0 -1
- package/dist/spec/mine/clustering/text-similarity.d.ts.map +0 -1
- package/dist/spec/mine/clustering/text-similarity.js.map +0 -1
- package/dist/spec/mine/generator.d.ts.map +0 -1
- package/dist/spec/mine/generator.js.map +0 -1
- package/dist/spec/mine/persist.d.ts.map +0 -1
- package/dist/spec/mine/persist.js.map +0 -1
- package/dist/spec/mine/pipeline.d.ts.map +0 -1
- package/dist/spec/mine/pipeline.js.map +0 -1
- package/dist/spec/mine/scanner.d.ts.map +0 -1
- package/dist/spec/mine/scanner.js.map +0 -1
- package/dist/spec/types.d.ts.map +0 -1
- package/dist/spec/types.js.map +0 -1
- package/dist/spec/ui/index.d.ts.map +0 -1
- package/dist/spec/ui/index.js.map +0 -1
- package/dist/spec/ui/progress-handler.d.ts.map +0 -1
- package/dist/spec/ui/progress-handler.js.map +0 -1
- package/dist/spec/ui/progress.d.ts.map +0 -1
- package/dist/spec/ui/progress.js.map +0 -1
- package/dist/spec/utils/fs.d.ts.map +0 -1
- package/dist/spec/utils/fs.js.map +0 -1
- package/dist/spec/utils/index.d.ts.map +0 -1
- package/dist/spec/utils/index.js.map +0 -1
- package/dist/spec/utils/meta.d.ts.map +0 -1
- package/dist/spec/utils/meta.js.map +0 -1
- package/dist/spec/utils/truncate.d.ts.map +0 -1
- package/dist/spec/utils/truncate.js.map +0 -1
- package/dist/sync/git-hooks.d.ts.map +0 -1
- package/dist/sync/git-hooks.js.map +0 -1
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/watch-policy.d.ts.map +0 -1
- package/dist/sync/watch-policy.js.map +0 -1
- package/dist/sync/watcher.d.ts.map +0 -1
- package/dist/sync/watcher.js.map +0 -1
- package/dist/sync/worktree.d.ts.map +0 -1
- package/dist/sync/worktree.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/ui/glyphs.d.ts.map +0 -1
- package/dist/ui/glyphs.js.map +0 -1
- package/dist/ui/shimmer-progress.d.ts.map +0 -1
- package/dist/ui/shimmer-progress.js.map +0 -1
- package/dist/ui/shimmer-worker.d.ts.map +0 -1
- package/dist/ui/shimmer-worker.js.map +0 -1
- package/dist/ui/types.d.ts.map +0 -1
- package/dist/ui/types.js.map +0 -1
- package/dist/upgrade/index.d.ts.map +0 -1
- package/dist/upgrade/index.js.map +0 -1
- package/dist/upgrade/remove-binary.d.ts.map +0 -1
- package/dist/upgrade/remove-binary.js.map +0 -1
- package/dist/upgrade/update-check.d.ts.map +0 -1
- package/dist/upgrade/update-check.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
package/dist/mcp/engine.js
CHANGED
|
@@ -49,7 +49,6 @@ exports.parseFixedWindowEnv = parseFixedWindowEnv;
|
|
|
49
49
|
exports.parseDebounceEnv = parseDebounceEnv;
|
|
50
50
|
const os = __importStar(require("os"));
|
|
51
51
|
const path = __importStar(require("path"));
|
|
52
|
-
const child_process_1 = require("child_process");
|
|
53
52
|
const directory_1 = require("../directory");
|
|
54
53
|
const sync_1 = require("../sync");
|
|
55
54
|
const tools_1 = require("./tools");
|
|
@@ -87,7 +86,7 @@ class MCPEngine {
|
|
|
87
86
|
// project is open — workers each hold their own WAL read connection.
|
|
88
87
|
queryPool = null;
|
|
89
88
|
constructor(opts = {}) {
|
|
90
|
-
this.opts = { watch: opts.watch ?? true, queryPool: opts.queryPool ?? false };
|
|
89
|
+
this.opts = { watch: opts.watch ?? true, queryPool: opts.queryPool ?? false, rootFloor: opts.rootFloor ?? null };
|
|
91
90
|
this.toolHandler = new tools_1.ToolHandler(null);
|
|
92
91
|
}
|
|
93
92
|
/**
|
|
@@ -146,7 +145,7 @@ class MCPEngine {
|
|
|
146
145
|
* subsequent-tool-call semantics; we preserve them by NOT throwing when the
|
|
147
146
|
* search misses (just leaves `cg` null so the next call can retry).
|
|
148
147
|
*/
|
|
149
|
-
async ensureInitialized(searchFrom) {
|
|
148
|
+
async ensureInitialized(searchFrom, floor) {
|
|
150
149
|
if (this.closed)
|
|
151
150
|
return;
|
|
152
151
|
if (this.toolHandler.hasDefaultHomeGraph())
|
|
@@ -158,7 +157,7 @@ class MCPEngine {
|
|
|
158
157
|
catch { /* let caller retry */ }
|
|
159
158
|
return;
|
|
160
159
|
}
|
|
161
|
-
this.initPromise = this.doInitialize(searchFrom).finally(() => {
|
|
160
|
+
this.initPromise = this.doInitialize(searchFrom, floor).finally(() => {
|
|
162
161
|
this.initPromise = null;
|
|
163
162
|
});
|
|
164
163
|
try {
|
|
@@ -174,13 +173,13 @@ class MCPEngine {
|
|
|
174
173
|
* background `ensureInitialized` already finished (or failed) and we need
|
|
175
174
|
* to pick up a project that appeared *after* the engine started.
|
|
176
175
|
*/
|
|
177
|
-
retryInitializeSync(searchFrom) {
|
|
176
|
+
retryInitializeSync(searchFrom, floor) {
|
|
178
177
|
if (this.closed)
|
|
179
178
|
return;
|
|
180
179
|
if (this.toolHandler.hasDefaultHomeGraph())
|
|
181
180
|
return;
|
|
182
181
|
this.toolHandler.setDefaultProjectHint(searchFrom);
|
|
183
|
-
const resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom);
|
|
182
|
+
const resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom, floor ?? this.opts.rootFloor ?? undefined);
|
|
184
183
|
if (!resolvedRoot)
|
|
185
184
|
return;
|
|
186
185
|
try {
|
|
@@ -230,9 +229,9 @@ class MCPEngine {
|
|
|
230
229
|
this.cg = null;
|
|
231
230
|
}
|
|
232
231
|
}
|
|
233
|
-
async doInitialize(searchFrom) {
|
|
232
|
+
async doInitialize(searchFrom, floor) {
|
|
234
233
|
this.toolHandler.setDefaultProjectHint(searchFrom);
|
|
235
|
-
let resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom);
|
|
234
|
+
let resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom, floor ?? this.opts.rootFloor ?? undefined);
|
|
236
235
|
if (!resolvedRoot && autoInitEnabled()) {
|
|
237
236
|
const created = await this.tryAutoInit(searchFrom);
|
|
238
237
|
if (created)
|
|
@@ -280,66 +279,86 @@ class MCPEngine {
|
|
|
280
279
|
process.stderr.write(`[HomeGraph MCP] Auto-init skipped — ${invalid}\n`);
|
|
281
280
|
return false;
|
|
282
281
|
}
|
|
282
|
+
// Race: another process finished init before we entered — open, don't bail
|
|
283
|
+
// (Spec 0032). Returning false here left the session with no cg forever.
|
|
283
284
|
if ((0, directory_1.isInitialized)(root)) {
|
|
284
|
-
|
|
285
|
-
return false;
|
|
285
|
+
return this.openAfterAutoInitRace(root);
|
|
286
286
|
}
|
|
287
287
|
try {
|
|
288
288
|
process.stderr.write(`[HomeGraph MCP] Auto-init at ${root}\n`);
|
|
289
289
|
const HomeGraph = loadHomeGraph();
|
|
290
290
|
// Create DB immediately so tools/open succeed; index in background.
|
|
291
291
|
const cg = await HomeGraph.init(root, { index: false });
|
|
292
|
+
// Pin empty state before returning so the first tool call cannot see `none`
|
|
293
|
+
// while the async fast-map task has not started (Spec 0032).
|
|
294
|
+
cg.setBuildPhase('building_fast');
|
|
292
295
|
this.cg = cg;
|
|
293
296
|
this.projectPath = root;
|
|
294
297
|
this.toolHandler.setDefaultHomeGraph(cg);
|
|
295
|
-
|
|
298
|
+
// Defer watch/catch-up until the full build finishes so auto-sync does not
|
|
299
|
+
// contend with the same-process writer (Spec 0032).
|
|
296
300
|
this.maybeStartPool(root);
|
|
297
|
-
// Fast
|
|
298
|
-
//
|
|
299
|
-
//
|
|
301
|
+
// Fast build in-process (seconds). Full build continues in *this* process
|
|
302
|
+
// as a background task — no sibling CLI (avoids second writer / lock fights).
|
|
303
|
+
// indexAll already yields between batches so MCP stdio can still answer
|
|
304
|
+
// tools with empty/fast/syncing guidance while the full build runs.
|
|
300
305
|
void (async () => {
|
|
301
306
|
try {
|
|
302
307
|
cg.setBuildPhase('building_fast');
|
|
303
308
|
const map = cg.buildProjectMap();
|
|
304
309
|
cg.setBuildPhase('fast');
|
|
305
|
-
process.stderr.write(`[HomeGraph MCP] Fast
|
|
310
|
+
process.stderr.write(`[HomeGraph MCP] Fast build ready — modules=${map.modules.length} files=${map.files.length} (${map.durationMs}ms)\n`);
|
|
306
311
|
}
|
|
307
312
|
catch (err) {
|
|
308
313
|
const msg = err instanceof Error ? err.message : String(err);
|
|
309
|
-
process.stderr.write(`[HomeGraph MCP] Fast
|
|
314
|
+
process.stderr.write(`[HomeGraph MCP] Fast build failed: ${msg}\n`);
|
|
310
315
|
}
|
|
311
|
-
this.
|
|
316
|
+
this.startBackgroundFullBuild(cg);
|
|
312
317
|
})();
|
|
313
318
|
return true;
|
|
314
319
|
}
|
|
315
320
|
catch (err) {
|
|
316
321
|
// Concurrent init from another process — treat as success path via open.
|
|
317
|
-
if (
|
|
318
|
-
|
|
319
|
-
try {
|
|
320
|
-
const mode = (0, graph_sources_1.resolveGraphSources)();
|
|
321
|
-
if (!(0, graph_sources_1.graphSourceFlags)(mode).openProjectDb)
|
|
322
|
-
return false;
|
|
323
|
-
this.cg = await loadHomeGraph().open(root, { sources: mode });
|
|
324
|
-
this.projectPath = root;
|
|
325
|
-
this.toolHandler.setDefaultHomeGraph(this.cg);
|
|
326
|
-
this.healBuildPhase(this.cg);
|
|
327
|
-
this.startWatching();
|
|
328
|
-
this.catchUpSync();
|
|
329
|
-
this.maybeStartPool(root);
|
|
330
|
-
return true;
|
|
331
|
-
}
|
|
332
|
-
catch (openErr) {
|
|
333
|
-
const msg = openErr instanceof Error ? openErr.message : String(openErr);
|
|
334
|
-
process.stderr.write(`[HomeGraph MCP] Auto-init open-after-race failed: ${msg}\n`);
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
322
|
+
if (await this.openAfterAutoInitRace(root)) {
|
|
323
|
+
return true;
|
|
337
324
|
}
|
|
338
325
|
const msg = err instanceof Error ? err.message : String(err);
|
|
339
326
|
process.stderr.write(`[HomeGraph MCP] Auto-init failed: ${msg}\n`);
|
|
340
327
|
return false;
|
|
341
328
|
}
|
|
342
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* Open an index another process just created (Spec 0032 cold-start race).
|
|
332
|
+
* Brief retries cover the window between mkdir and db file create.
|
|
333
|
+
*/
|
|
334
|
+
async openAfterAutoInitRace(root) {
|
|
335
|
+
const mode = (0, graph_sources_1.resolveGraphSources)();
|
|
336
|
+
if (!(0, graph_sources_1.graphSourceFlags)(mode).openProjectDb)
|
|
337
|
+
return false;
|
|
338
|
+
for (let i = 0; i < 25; i++) {
|
|
339
|
+
if (!(0, directory_1.isInitialized)(root)) {
|
|
340
|
+
await new Promise((r) => setTimeout(r, 40));
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
process.stderr.write(`[HomeGraph MCP] Auto-init raced; opening existing index at ${root}\n`);
|
|
345
|
+
this.cg = await loadHomeGraph().open(root, { sources: mode });
|
|
346
|
+
this.projectPath = root;
|
|
347
|
+
this.toolHandler.setDefaultHomeGraph(this.cg);
|
|
348
|
+
this.healBuildPhase(this.cg);
|
|
349
|
+
this.startWatching();
|
|
350
|
+
this.catchUpSync();
|
|
351
|
+
this.maybeStartPool(root);
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
catch (openErr) {
|
|
355
|
+
const msg = openErr instanceof Error ? openErr.message : String(openErr);
|
|
356
|
+
process.stderr.write(`[HomeGraph MCP] Auto-init open-after-race retry: ${msg}\n`);
|
|
357
|
+
await new Promise((r) => setTimeout(r, 40));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
343
362
|
/**
|
|
344
363
|
* If a previous auto-init child finished indexing but never flipped
|
|
345
364
|
* build_phase (MCP died mid-flight), heal so deep tools unlock.
|
|
@@ -355,10 +374,18 @@ class MCPEngine {
|
|
|
355
374
|
process.stderr.write(`[HomeGraph MCP] Healed build_phase → full (index_state=${state})\n`);
|
|
356
375
|
return;
|
|
357
376
|
}
|
|
358
|
-
//
|
|
359
|
-
|
|
377
|
+
// Symbols present after a full-build attempt — unlock deep tools even if
|
|
378
|
+
// metadata stayed on indexing/fast (crash mid-flight or soft fail).
|
|
379
|
+
let nodes = 0;
|
|
380
|
+
try {
|
|
381
|
+
nodes = cg.getStats().nodeCount;
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
if (nodes > 0 && state !== 'failed' && (phase === 'indexing' || phase === 'fast')) {
|
|
360
387
|
cg.setBuildPhase('full');
|
|
361
|
-
process.stderr.write(`[HomeGraph MCP] Healed build_phase → full (nodes
|
|
388
|
+
process.stderr.write(`[HomeGraph MCP] Healed build_phase → full (nodes=${nodes}, index_state=${state ?? 'null'})\n`);
|
|
362
389
|
}
|
|
363
390
|
}
|
|
364
391
|
catch {
|
|
@@ -366,88 +393,68 @@ class MCPEngine {
|
|
|
366
393
|
}
|
|
367
394
|
}
|
|
368
395
|
/**
|
|
369
|
-
*
|
|
370
|
-
*
|
|
396
|
+
* Full symbol build in this MCP/daemon process (Spec 0032).
|
|
397
|
+
* Fire-and-forget: MCP tools keep answering with empty/fast/syncing while
|
|
398
|
+
* indexAll yields between batches. One writer — no sibling CLI process.
|
|
371
399
|
*/
|
|
372
|
-
|
|
373
|
-
cg.setBuildPhase('indexing');
|
|
374
|
-
const scriptPath = process.argv[1];
|
|
375
|
-
if (!scriptPath) {
|
|
376
|
-
process.stderr.write('[HomeGraph MCP] No script path — falling back to in-process indexAll\n');
|
|
377
|
-
this.startInProcessFullIndex(cg);
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
const args = [...process.execArgv, scriptPath, 'index', root];
|
|
381
|
-
const env = { ...process.env };
|
|
382
|
-
delete env.HOMEGRAPH_AUTO_INIT;
|
|
383
|
-
process.stderr.write(`[HomeGraph MCP] Spawning background full index (detached) for ${root}\n`);
|
|
384
|
-
try {
|
|
385
|
-
const child = (0, child_process_1.spawn)(process.execPath, args, {
|
|
386
|
-
detached: true,
|
|
387
|
-
stdio: 'ignore',
|
|
388
|
-
windowsHide: true,
|
|
389
|
-
env,
|
|
390
|
-
});
|
|
391
|
-
child.on('error', (err) => {
|
|
392
|
-
process.stderr.write(`[HomeGraph MCP] Detached index spawn error: ${err.message}; falling back in-process\n`);
|
|
393
|
-
this.startInProcessFullIndex(cg);
|
|
394
|
-
});
|
|
395
|
-
child.unref();
|
|
396
|
-
this.watchIndexCompletion(cg);
|
|
397
|
-
}
|
|
398
|
-
catch (err) {
|
|
399
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
400
|
-
process.stderr.write(`[HomeGraph MCP] Detached index spawn failed (${msg}); falling back in-process\n`);
|
|
401
|
-
this.startInProcessFullIndex(cg);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
startInProcessFullIndex(cg) {
|
|
400
|
+
startBackgroundFullBuild(cg) {
|
|
405
401
|
cg.setBuildPhase('indexing');
|
|
402
|
+
process.stderr.write('[HomeGraph MCP] Full build starting in-process (background)\n');
|
|
406
403
|
void cg
|
|
407
404
|
.indexAll()
|
|
408
405
|
.then((result) => {
|
|
409
|
-
cg.setBuildPhase('full');
|
|
410
406
|
const files = result && typeof result === 'object' && 'filesIndexed' in result
|
|
411
|
-
?
|
|
412
|
-
:
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
.catch((err) => {
|
|
416
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
417
|
-
process.stderr.write(`[HomeGraph MCP] Auto-init index failed: ${msg}\n`);
|
|
407
|
+
? Number(result.filesIndexed ?? 0)
|
|
408
|
+
: 0;
|
|
409
|
+
const ok = !result || result.success !== false;
|
|
410
|
+
let nodes = 0;
|
|
418
411
|
try {
|
|
419
|
-
cg.
|
|
412
|
+
nodes = cg.getStats().nodeCount;
|
|
420
413
|
}
|
|
421
414
|
catch {
|
|
422
|
-
/*
|
|
415
|
+
/* busy */
|
|
423
416
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
417
|
+
// Prefer symbols on disk over a soft failure flag — agents must unlock
|
|
418
|
+
// deep tools once a usable graph exists.
|
|
419
|
+
if (ok || nodes > 0 || files > 0) {
|
|
420
|
+
cg.setBuildPhase('full');
|
|
421
|
+
process.stderr.write(`[HomeGraph MCP] Full build complete — files=${files || '?'} nodes=${nodes}` +
|
|
422
|
+
(ok ? '\n' : ' (soft-fail but symbols present)\n'));
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
cg.setBuildPhase('fast');
|
|
426
|
+
process.stderr.write('[HomeGraph MCP] Full build finished with no symbols — staying on fast map\n');
|
|
427
|
+
}
|
|
428
|
+
this.startWatchingAfterAutoInit();
|
|
429
|
+
})
|
|
430
|
+
.catch((err) => {
|
|
431
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
432
|
+
process.stderr.write(`[HomeGraph MCP] Full build failed: ${msg}\n`);
|
|
430
433
|
try {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
cg.
|
|
434
|
-
clearInterval(timer);
|
|
435
|
-
process.stderr.write(`[HomeGraph MCP] Auto-init index complete — index_state=${state}\n`);
|
|
436
|
-
return;
|
|
434
|
+
let nodes = 0;
|
|
435
|
+
try {
|
|
436
|
+
nodes = cg.getStats().nodeCount;
|
|
437
437
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
438
|
+
catch {
|
|
439
|
+
/* ignore */
|
|
440
|
+
}
|
|
441
|
+
cg.setBuildPhase(nodes > 0 ? 'full' : 'fast');
|
|
442
|
+
if (nodes > 0) {
|
|
443
|
+
process.stderr.write(`[HomeGraph MCP] Full build error after symbols written — phase=full (nodes=${nodes})\n`);
|
|
443
444
|
}
|
|
444
445
|
}
|
|
445
446
|
catch {
|
|
446
|
-
/*
|
|
447
|
+
/* ignore */
|
|
447
448
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
449
|
+
this.startWatchingAfterAutoInit();
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
/** Enable watch + catch-up once auto-init full build is done (or gave up). */
|
|
453
|
+
startWatchingAfterAutoInit() {
|
|
454
|
+
if (this.watcherStarted)
|
|
455
|
+
return;
|
|
456
|
+
this.startWatching();
|
|
457
|
+
this.catchUpSync();
|
|
451
458
|
}
|
|
452
459
|
/**
|
|
453
460
|
* Start file watching on the active HomeGraph instance. Idempotent — the
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product-facing index availability for MCP tool results (Spec 0032).
|
|
3
|
+
*
|
|
4
|
+
* Internal `build_phase` stays as-is; this layer maps it (+ write-lock / busy)
|
|
5
|
+
* to the four states hosts and agents should see in tool text.
|
|
6
|
+
*/
|
|
7
|
+
import type HomeGraph from '../index';
|
|
8
|
+
/** Agent-visible index readiness (tool return copy — not tools/list gating). */
|
|
9
|
+
export type ProductIndexState = 'empty' | 'fast' | 'full' | 'syncing';
|
|
10
|
+
export declare function productIndexGuidance(state: Exclude<ProductIndexState, 'full'>): string;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the product state from a live HomeGraph handle.
|
|
13
|
+
*
|
|
14
|
+
* - empty: fast map not ready (`none` / `building_fast`)
|
|
15
|
+
* - fast: map ready, full index not done (`fast` / `indexing`)
|
|
16
|
+
* - full: symbol index ready
|
|
17
|
+
* - syncing: full (or empty-while-contended-init) and a writer holds the lock /
|
|
18
|
+
* this process is indexing — reads may fail or see a moving target
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveProductIndexState(cg: HomeGraph): ProductIndexState;
|
|
21
|
+
/** True when an error message indicates SQLite writer contention. */
|
|
22
|
+
export declare function isSqliteBusyMessage(message: string): boolean;
|
|
23
|
+
//# sourceMappingURL=index-availability.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Product-facing index availability for MCP tool results (Spec 0032).
|
|
4
|
+
*
|
|
5
|
+
* Internal `build_phase` stays as-is; this layer maps it (+ write-lock / busy)
|
|
6
|
+
* to the four states hosts and agents should see in tool text.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.productIndexGuidance = productIndexGuidance;
|
|
10
|
+
exports.resolveProductIndexState = resolveProductIndexState;
|
|
11
|
+
exports.isSqliteBusyMessage = isSqliteBusyMessage;
|
|
12
|
+
const EMPTY_LINES = [
|
|
13
|
+
'HomeGraph status=empty — project map is not ready yet.',
|
|
14
|
+
'Retry in a few seconds (or call `homegraph_project` once the fast build completes).',
|
|
15
|
+
];
|
|
16
|
+
const FAST_LINES = [
|
|
17
|
+
'HomeGraph status=fast — module/file map is ready; full symbol index is still building.',
|
|
18
|
+
'Use `homegraph_project` for the module/file map now, then retry this tool once indexing finishes.',
|
|
19
|
+
];
|
|
20
|
+
const SYNCING_LINES = [
|
|
21
|
+
'HomeGraph status=syncing — the index is being written (lock held or local index/sync in progress).',
|
|
22
|
+
'Retry this tool shortly; do not busy-loop.',
|
|
23
|
+
];
|
|
24
|
+
function productIndexGuidance(state) {
|
|
25
|
+
switch (state) {
|
|
26
|
+
case 'empty':
|
|
27
|
+
return EMPTY_LINES.join('\n');
|
|
28
|
+
case 'fast':
|
|
29
|
+
return FAST_LINES.join('\n');
|
|
30
|
+
case 'syncing':
|
|
31
|
+
return SYNCING_LINES.join('\n');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the product state from a live HomeGraph handle.
|
|
36
|
+
*
|
|
37
|
+
* - empty: fast map not ready (`none` / `building_fast`)
|
|
38
|
+
* - fast: map ready, full index not done (`fast` / `indexing`)
|
|
39
|
+
* - full: symbol index ready
|
|
40
|
+
* - syncing: full (or empty-while-contended-init) and a writer holds the lock /
|
|
41
|
+
* this process is indexing — reads may fail or see a moving target
|
|
42
|
+
*/
|
|
43
|
+
function resolveProductIndexState(cg) {
|
|
44
|
+
let phase;
|
|
45
|
+
try {
|
|
46
|
+
phase = cg.getBuildPhase();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return 'syncing';
|
|
50
|
+
}
|
|
51
|
+
if (phase === 'building_fast' || phase === 'none') {
|
|
52
|
+
try {
|
|
53
|
+
if (cg.isWriteLockedByOther())
|
|
54
|
+
return 'syncing';
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return 'syncing';
|
|
58
|
+
}
|
|
59
|
+
return 'empty';
|
|
60
|
+
}
|
|
61
|
+
if (phase === 'fast' || phase === 'indexing') {
|
|
62
|
+
return 'fast';
|
|
63
|
+
}
|
|
64
|
+
// full
|
|
65
|
+
try {
|
|
66
|
+
if (cg.isWriteLockedByOther() || cg.isIndexing())
|
|
67
|
+
return 'syncing';
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return 'syncing';
|
|
71
|
+
}
|
|
72
|
+
return 'full';
|
|
73
|
+
}
|
|
74
|
+
/** True when an error message indicates SQLite writer contention. */
|
|
75
|
+
function isSqliteBusyMessage(message) {
|
|
76
|
+
return /SQLITE_BUSY|database is locked/i.test(message);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=index-availability.js.map
|
package/dist/mcp/index.js
CHANGED
|
@@ -142,8 +142,9 @@ function daemonInternalSet() {
|
|
|
142
142
|
* fail to share the daemon.
|
|
143
143
|
*/
|
|
144
144
|
function resolveDaemonRoot(explicitPath) {
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
// An explicit host path is also the walk-up floor (spec 0028): a stray
|
|
146
|
+
// ancestor .homegraph must not redirect the daemon to the wrong tree.
|
|
147
|
+
const root = (0, directory_1.findNearestHomeGraphRoot)(explicitPath ?? process.cwd(), explicitPath ?? undefined);
|
|
147
148
|
if (!root)
|
|
148
149
|
return null;
|
|
149
150
|
try {
|
|
@@ -349,7 +350,7 @@ class MCPServer {
|
|
|
349
350
|
// is a second V8 isolate + a second open of the project DB, and on large
|
|
350
351
|
// indexes (hundreds of MB) that alone pushed process-tree RSS to ~5GB.
|
|
351
352
|
// Soft deadlines + compact-before-pool still run on the warm main connection.
|
|
352
|
-
this.engine = new engine_1.MCPEngine({ queryPool: false });
|
|
353
|
+
this.engine = new engine_1.MCPEngine({ queryPool: false, rootFloor: this.projectPath ?? undefined });
|
|
353
354
|
const transport = new transport_1.StdioTransport();
|
|
354
355
|
this.session = new session_1.MCPSession(transport, this.engine, {
|
|
355
356
|
explicitProjectPath: this.projectPath,
|
|
@@ -471,7 +472,7 @@ class MCPServer {
|
|
|
471
472
|
getDaemonSocket,
|
|
472
473
|
// Daemon-unavailable fallback is one client — same as direct mode: no
|
|
473
474
|
// pool. Duplicating the DB open here blew RSS on large indexes.
|
|
474
|
-
makeEngine: () => new engine_1.MCPEngine({ queryPool: false }),
|
|
475
|
+
makeEngine: () => new engine_1.MCPEngine({ queryPool: false, rootFloor: root ?? undefined }),
|
|
475
476
|
root,
|
|
476
477
|
});
|
|
477
478
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { QueryBuilder } from '../db/queries';
|
|
16
16
|
import type { ToolResult } from './tools';
|
|
17
17
|
/** Bump when cache-key normalization or cached payload shape changes. */
|
|
18
|
-
export declare const QUERY_CACHE_FORMAT_VERSION =
|
|
18
|
+
export declare const QUERY_CACHE_FORMAT_VERSION = 5;
|
|
19
19
|
export declare function isMcpQueryCacheEnabled(): boolean;
|
|
20
20
|
export declare function isCacheableMcpTool(toolName: string): boolean;
|
|
21
21
|
/**
|
package/dist/mcp/query-cache.js
CHANGED
|
@@ -35,7 +35,7 @@ function defaultExploreMaxFiles(fileCount) {
|
|
|
35
35
|
return 8;
|
|
36
36
|
}
|
|
37
37
|
/** Bump when cache-key normalization or cached payload shape changes. */
|
|
38
|
-
exports.QUERY_CACHE_FORMAT_VERSION =
|
|
38
|
+
exports.QUERY_CACHE_FORMAT_VERSION = 5;
|
|
39
39
|
const METADATA_INDEX_STAMP = 'query_cache_index_stamp';
|
|
40
40
|
const METADATA_FORMAT_VERSION = 'query_cache_format_version';
|
|
41
41
|
/** Tools that must stay live — never cached. */
|
|
@@ -144,7 +144,9 @@ function exploreEnvFingerprint() {
|
|
|
144
144
|
: '1';
|
|
145
145
|
const rankMultiterm = process.env.HOMEGRAPH_RANK_NO_MULTITERM === '1' ? '0' : '1';
|
|
146
146
|
const fullSource = process.env.HOMEGRAPH_EXPLORE_FULL_SOURCE === '1' ? '1' : '0';
|
|
147
|
-
|
|
147
|
+
const evidencePacks = process.env.HOMEGRAPH_ARKTS_EVIDENCE_PACKS === '0' ? '0' : '1';
|
|
148
|
+
const queryPaths = process.env.HOMEGRAPH_ARKTS_QUERY_PATHS === '0' ? '0' : '1';
|
|
149
|
+
return `linums:${linums}|adaptive:${adaptive}|rankMultiterm:${rankMultiterm}|fullSource:${fullSource}|arktsEvidence:${evidencePacks}|arktsPaths:${queryPaths}`;
|
|
148
150
|
}
|
|
149
151
|
function normalizeString(value) {
|
|
150
152
|
if (typeof value !== 'string')
|
|
@@ -256,6 +258,8 @@ function buildMcpQueryCacheFingerprint(toolName, args, fileCount) {
|
|
|
256
258
|
}
|
|
257
259
|
case 'homegraph_search': {
|
|
258
260
|
parts.push(`query:${(normalizeString(args.query) ?? '').toLowerCase()}`);
|
|
261
|
+
// Search can reuse the compact ArkTS renderer as an existing fast path.
|
|
262
|
+
parts.push(exploreEnvFingerprint());
|
|
259
263
|
if (args.kind != null) {
|
|
260
264
|
const kind = args.kind === 'type' ? 'type_alias' : String(args.kind);
|
|
261
265
|
parts.push(`kind:${kind}`);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Query worker thread — issue: concurrent MCP tool calls starve the daemon.
|
|
3
3
|
*
|
|
4
4
|
* The shared daemon serves every session on ONE event loop with synchronous
|
|
5
|
-
* SQLite (
|
|
5
|
+
* SQLite (node:sqlite / wasm). `codegraph_explore` is CPU-heavy (FTS + RWR/personalized-
|
|
6
6
|
* PageRank + impact + output building) stitched together by microtask `await`s,
|
|
7
7
|
* so N concurrent explores keep the microtask queue continuously full and
|
|
8
8
|
* starve the macrotask phases — timers AND socket I/O. The transport freezes:
|
package/dist/mcp/query-worker.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Query worker thread — issue: concurrent MCP tool calls starve the daemon.
|
|
4
4
|
*
|
|
5
5
|
* The shared daemon serves every session on ONE event loop with synchronous
|
|
6
|
-
* SQLite (
|
|
6
|
+
* SQLite (node:sqlite / wasm). `codegraph_explore` is CPU-heavy (FTS + RWR/personalized-
|
|
7
7
|
* PageRank + impact + output building) stitched together by microtask `await`s,
|
|
8
8
|
* so N concurrent explores keep the microtask queue continuously full and
|
|
9
9
|
* starve the macrotask phases — timers AND socket I/O. The transport freezes:
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Single source of truth for agent-facing tool guidance (issue #529).
|
|
5
|
-
* Edit here — not installer prompts or eval harness prompts.
|
|
6
|
-
*
|
|
7
|
-
* Keep this short: long essays are low-salience and rarely change tool choice.
|
|
8
|
-
* Prefer concrete habits (query shape, which tool, when to stop).
|
|
2
|
+
* MCP initialize 中的统一工具指引;工具描述必须遵守相同的按需策略。
|
|
3
|
+
* 仅调整检索选择,不改变索引、查询语义或编码任务的验收要求。
|
|
9
4
|
*/
|
|
10
|
-
export declare const SERVER_INSTRUCTIONS = "# HomeGraph \u2014 structural
|
|
11
|
-
export declare const SERVER_INSTRUCTIONS_NO_ROOT_INDEX = "# HomeGraph \u2014 per-project
|
|
5
|
+
export declare const SERVER_INSTRUCTIONS = "# HomeGraph \u2014 optional structural evidence for this repo\n\n## When to call (path-first, bash-first)\n\nUse ordinary bash/search/read tools first for repository paths, symbols, literal strings and local changes. Skip HomeGraph when those tools provide sufficient evidence, including for difficult implementation tasks. A known path can be read directly; an adequate source result does not need a second graph lookup.\n\nHomeGraph is optional. Use it only for a concrete unresolved relationship that benefits from graph evidence: cross-file state/event propagation, callers/callees, module dependencies or ArkTS-to-native registration. Name the missing relation and use anchors from the current task or source. There is no mandatory number of bash searches before a useful graph query.\n\nChoose the smallest available tool for that gap:\n- Exact usage/reference locations \u2192 `homegraph_usages`; callers/callees \u2192 the corresponding tool.\n- Named module dependencies/cycles \u2192 `homegraph_modules`; native exports/registration \u2192 `homegraph_native`.\n- One missing symbol body \u2192 `homegraph_node`; prefer direct read if its path is already known.\n- An unresolved cross-symbol mechanism \u2192 `homegraph_explore`. Do not use it for routine pre-edit orientation, a literal search, or to re-confirm source already found with bash.\n- ArkUI migration analysis \u2192 `homegraph_arkui_migrate` when that analysis is needed; SDK contracts \u2192 project declarations or SDK documentation.\n\nDo not call explore after a focused tool already answered the relation. Keep working directly once the edit location and affected behavior are sufficiently supported. Task difficulty and file count alone do not require graph use.\n\n## Query and recovery\n\nWrite one focused sentence: requested action + target + known anchors + unresolved relation + preservation constraints. Use the full public task as `taskContext` when needed. Keep UI labels verbatim; use exact symbols from the task or source instead of inventing names or piling up generic keywords. Use returned repository-relative paths without reconstructing an experiment directory; a path refusal requires valid in-repo relocation, not broader permissions.\n\nA project map is navigation, not proof of a located feature. Preserve requested product/module scope and verify each candidate before editing. Start with one focused graph request; recover only a named missing body/relation. Budget: \u22642 `homegraph_explore` attempts per project, \u22641 focused depth recovery; existing runtime budgets may be tighter. These are ceilings, never a required sequence. If evidence is still missing, use targeted bash/search/read and continue implementation. Do not expand into unrelated files merely to exhaust a budget.\n\n\n- ArkTS evidence packs keep complete declarations and the source dependencies of displayed static relations together. Gaps identify omitted, stale or unindexed evidence; inspect only a gap relevant to the task. A static link does not prove runtime ordering or value propagation, and a complete declaration does not prove its enclosing call conditions.\n- ArkTS path evidence follows typed, directed relations between named anchors within a bounded search. A provided path includes intermediate declarations and registration sites. Check its goal and stop reason; no path in scope does not prove no relationship. Qualify ambiguous symbols with their owning type or file.\n- Reuse complete, unchanged, line-numbered source ranges already visible. An outline, path list, truncated body or SDK declaration cannot replace missing implementation evidence. A slice hash identifies that excerpt, not the whole file. Refresh affected ranges after edits.\n- An empty edge set means the relation may be unindexed, not absent. For partial, stale or irrelevant results, inspect the exact missing source with scoped search/read. After a query adds no evidence, change the method or scope rather than paraphrasing the same explore.\n- Retrieval completion is not task completion. Continue the requested edits and validation; check the original task's behavior and preservation constraints. Build success alone does not establish functional correctness.\n\nNo index \u2192 use ordinary tools; indexing is managed by the host. Do not run HomeGraph initialization as part of solving the task.\n";
|
|
6
|
+
export declare const SERVER_INSTRUCTIONS_NO_ROOT_INDEX = "# HomeGraph \u2014 optional per-project evidence\n\nPass `projectPath` to an already indexed folder with `.homegraph/`. No index \u2192 use ordinary tools; indexing is managed by the host.\n\n## When to call (path-first, bash-first)\n\nUse ordinary bash/search/read tools first for repository paths, symbols, literal strings and local changes. Skip HomeGraph when those tools provide sufficient evidence, including for difficult implementation tasks. A known path can be read directly; an adequate source result does not need a second graph lookup.\n\nHomeGraph is optional. Use it only for a concrete unresolved relationship that benefits from graph evidence: cross-file state/event propagation, callers/callees, module dependencies or ArkTS-to-native registration. Name the missing relation and use anchors from the current task or source. There is no mandatory number of bash searches before a useful graph query.\n\nChoose the smallest available tool for that gap:\n- Exact usage/reference locations \u2192 `homegraph_usages`; callers/callees \u2192 the corresponding tool.\n- Named module dependencies/cycles \u2192 `homegraph_modules`; native exports/registration \u2192 `homegraph_native`.\n- One missing symbol body \u2192 `homegraph_node`; prefer direct read if its path is already known.\n- An unresolved cross-symbol mechanism \u2192 `homegraph_explore`. Do not use it for routine pre-edit orientation, a literal search, or to re-confirm source already found with bash.\n- ArkUI migration analysis \u2192 `homegraph_arkui_migrate` when that analysis is needed; SDK contracts \u2192 project declarations or SDK documentation.\n\nDo not call explore after a focused tool already answered the relation. Keep working directly once the edit location and affected behavior are sufficiently supported. Task difficulty and file count alone do not require graph use.\n\n## Query and recovery\n\nWrite one focused sentence: requested action + target + known anchors + unresolved relation + preservation constraints. Use the full public task as `taskContext` when needed. Keep UI labels verbatim; use exact symbols from the task or source instead of inventing names or piling up generic keywords. Use returned repository-relative paths without reconstructing an experiment directory; a path refusal requires valid in-repo relocation, not broader permissions.\n\nA project map is navigation, not proof of a located feature. Preserve requested product/module scope and verify each candidate before editing. Start with one focused graph request; recover only a named missing body/relation. Budget: \u22642 `homegraph_explore` attempts per project, \u22641 focused depth recovery; existing runtime budgets may be tighter. These are ceilings, never a required sequence. If evidence is still missing, use targeted bash/search/read and continue implementation. Do not expand into unrelated files merely to exhaust a budget.\n\n\n- ArkTS evidence packs keep complete declarations and the source dependencies of displayed static relations together. Gaps identify omitted, stale or unindexed evidence; inspect only a gap relevant to the task. A static link does not prove runtime ordering or value propagation, and a complete declaration does not prove its enclosing call conditions.\n- ArkTS path evidence follows typed, directed relations between named anchors within a bounded search. A provided path includes intermediate declarations and registration sites. Check its goal and stop reason; no path in scope does not prove no relationship. Qualify ambiguous symbols with their owning type or file.\n- Reuse complete, unchanged, line-numbered source ranges already visible. An outline, path list, truncated body or SDK declaration cannot replace missing implementation evidence. A slice hash identifies that excerpt, not the whole file. Refresh affected ranges after edits.\n- An empty edge set means the relation may be unindexed, not absent. For partial, stale or irrelevant results, inspect the exact missing source with scoped search/read. After a query adds no evidence, change the method or scope rather than paraphrasing the same explore.\n- Retrieval completion is not task completion. Continue the requested edits and validation; check the original task's behavior and preservation constraints. Build success alone does not establish functional correctness.\n\n";
|
|
12
7
|
//# sourceMappingURL=server-instructions.d.ts.map
|