homegraph 1.5.6 → 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 +53 -0
- package/README.md +12 -6
- package/dist/bin/homegraph.js +16 -14
- package/dist/context/index.js +120 -15
- 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/extraction/languages/arkts.d.ts +25 -3
- package/dist/extraction/languages/arkts.js +184 -22
- 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/evidence-rendering.d.ts +10 -0
- package/dist/mcp/evidence-rendering.js +71 -0
- package/dist/mcp/explore-repeat-guard.d.ts +8 -13
- package/dist/mcp/explore-repeat-guard.js +54 -114
- package/dist/mcp/explore-session-state.d.ts +26 -4
- package/dist/mcp/explore-session-state.js +50 -4
- 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 +90 -3
- 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 -61
- 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 +43 -9
- package/dist/mcp/tools.js +859 -155
- package/dist/search/literal-evidence.d.ts +44 -0
- package/dist/search/literal-evidence.js +278 -0
- package/dist/search/query-plan-provider.d.ts +6 -0
- package/dist/search/query-plan-provider.js +289 -0
- package/dist/search/query-plan.d.ts +98 -0
- package/dist/search/query-plan.js +334 -0
- package/dist/search/query-utils.d.ts +6 -1
- package/dist/search/query-utils.js +64 -5
- 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/types.d.ts +17 -0
- 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/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/query-parser.d.ts.map +0 -1
- package/dist/search/query-parser.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,10 @@
|
|
|
1
|
+
import type { Node } from '../types';
|
|
2
|
+
/** Multiple parser roles for one source declaration are not overloads. */
|
|
3
|
+
export declare function canonicalSourceDeclarations(nodes: Node[]): Node[];
|
|
4
|
+
/** Guidance describes retrieval; it must never close the host's coding task.
|
|
5
|
+
* Source fences are byte-preserved, including strings that resemble guidance.
|
|
6
|
+
*/
|
|
7
|
+
export declare function neutralRetrievalGuidance(text: string): string;
|
|
8
|
+
/** Preserve complete lines at a shared output limit; never forge a full body. */
|
|
9
|
+
export declare function trimEvidenceAtLine(text: string, limit: number): string;
|
|
10
|
+
//# sourceMappingURL=evidence-rendering.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalSourceDeclarations = canonicalSourceDeclarations;
|
|
4
|
+
exports.neutralRetrievalGuidance = neutralRetrievalGuidance;
|
|
5
|
+
exports.trimEvidenceAtLine = trimEvidenceAtLine;
|
|
6
|
+
/** Multiple parser roles for one source declaration are not overloads. */
|
|
7
|
+
function canonicalSourceDeclarations(nodes) {
|
|
8
|
+
const out = [];
|
|
9
|
+
const roles = new Map();
|
|
10
|
+
const ids = new Set();
|
|
11
|
+
for (const node of nodes) {
|
|
12
|
+
if (ids.has(node.id))
|
|
13
|
+
continue;
|
|
14
|
+
ids.add(node.id);
|
|
15
|
+
if (node.kind !== 'struct' && node.kind !== 'component') {
|
|
16
|
+
out.push(node);
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const key = `${node.filePath}:${node.startLine}:${node.name}`;
|
|
20
|
+
const prior = roles.get(key);
|
|
21
|
+
if (prior === undefined) {
|
|
22
|
+
roles.set(key, out.length);
|
|
23
|
+
out.push(node);
|
|
24
|
+
}
|
|
25
|
+
else if (node.kind === 'component')
|
|
26
|
+
out[prior] = node;
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
/** Guidance describes retrieval; it must never close the host's coding task.
|
|
31
|
+
* Source fences are byte-preserved, including strings that resemble guidance.
|
|
32
|
+
*/
|
|
33
|
+
function neutralRetrievalGuidance(text) {
|
|
34
|
+
let fence = '';
|
|
35
|
+
return text.split('\n').map((line) => {
|
|
36
|
+
const marker = line.match(/^\s*(`{3,}|~{3,})/);
|
|
37
|
+
if (marker) {
|
|
38
|
+
if (!fence)
|
|
39
|
+
fence = marker[1][0];
|
|
40
|
+
else if (marker[1][0] === fence)
|
|
41
|
+
fence = '';
|
|
42
|
+
return line;
|
|
43
|
+
}
|
|
44
|
+
if (fence)
|
|
45
|
+
return line;
|
|
46
|
+
if (/^>\s*\*\*Explore complete/i.test(line)) {
|
|
47
|
+
return '> Retrieval returned the evidence shown above. Check missing requirements, continue the requested edits, and verify the resulting code.';
|
|
48
|
+
}
|
|
49
|
+
if (/^>/.test(line) && /treat as already Read|treat it as already Read/i.test(line)) {
|
|
50
|
+
return '> The displayed source ranges are available as evidence. Inspect omitted ranges or changed files when needed; avoid repeating unchanged ranges.';
|
|
51
|
+
}
|
|
52
|
+
return line
|
|
53
|
+
.replace(/\*{0,2}ANSWER NOW\*{0,2}/g, 'use the evidence shown')
|
|
54
|
+
.replace(/Flow \+ Source above are authoritative for this query\./g, 'Source coverage is limited to the displayed ranges.')
|
|
55
|
+
.replace(/Do \*\*not\*\* grep\/read\/`homegraph_node`\/`homegraph_search`[^.]*\./gi, 'Inspect missing evidence as needed.')
|
|
56
|
+
.replace(/do\s+\*{0,2}not\*{0,2}\s+(?:re-)?(?:grep|read|glob)(?:\/[^.;]+)?[^.;]*[.;]/gi, 'Avoid duplicate reads of unchanged ranges;');
|
|
57
|
+
}).join('\n');
|
|
58
|
+
}
|
|
59
|
+
/** Preserve complete lines at a shared output limit; never forge a full body. */
|
|
60
|
+
function trimEvidenceAtLine(text, limit) {
|
|
61
|
+
if (text.length <= limit)
|
|
62
|
+
return text;
|
|
63
|
+
const note = '\n[Partial source: shared output budget reached; omitted ranges remain available for a focused lookup.]';
|
|
64
|
+
const cut = text.slice(0, Math.max(0, limit - note.length - 5));
|
|
65
|
+
const boundary = cut.lastIndexOf('\n');
|
|
66
|
+
let kept = boundary >= 0 ? cut.slice(0, boundary) : '';
|
|
67
|
+
if ((kept.match(/^\s*```/gm)?.length ?? 0) % 2)
|
|
68
|
+
kept += '\n```';
|
|
69
|
+
return kept + note;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=evidence-rendering.js.map
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session-level explore repeat / partial guidance (generic).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* retry anchors extracted from the query — never an empty 242-char shell.
|
|
8
|
-
*
|
|
9
|
-
* Failure fuse (post A/B): hard-cap explores per session, require tight
|
|
10
|
-
* single-Type follow-ups after 2 calls, and bind Partial → named Next anchor.
|
|
4
|
+
* Repeated evidence is deduplicated; lexical overlap alone cannot prove that a
|
|
5
|
+
* follow-up's evidence obligation is already covered. Incomplete retrieval gets
|
|
6
|
+
* one bounded recovery, including when the first response was short or SDK-only.
|
|
11
7
|
*
|
|
12
8
|
* Shape-driven only — no product nouns.
|
|
13
9
|
*/
|
|
@@ -65,10 +61,10 @@ export declare function latestCountedExplore(prior: ExploreProjectState | null |
|
|
|
65
61
|
* Whether `homegraph_node` / callers / callees should short-refuse after a
|
|
66
62
|
* Partial explore (same failure class as explore×N — depth fan-out).
|
|
67
63
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
64
|
+
* Any one focused depth tool may recover missing evidence. The shared budget
|
|
65
|
+
* prevents fan-out without declaring callers/callees intrinsically invalid.
|
|
70
66
|
*/
|
|
71
|
-
export declare function decideDepthToolFuse(prior: ExploreProjectState | null | undefined, depthCallCount: number,
|
|
67
|
+
export declare function decideDepthToolFuse(prior: ExploreProjectState | null | undefined, depthCallCount: number, _toolName?: string): DepthToolFuseDecision;
|
|
72
68
|
/** Success-shaped refuse when Partial already spent its one depth drill. */
|
|
73
69
|
export declare function formatDepthToolRefuse(decision: DepthToolFuseDecision, toolName: string, symbolHint?: string): string;
|
|
74
70
|
/** Candidate Type for Partial **Next anchor** / digest preference. */
|
|
@@ -92,12 +88,11 @@ export declare function pickBestDomainRoleAnchor(candidates: ReadonlyArray<Domai
|
|
|
92
88
|
/** Format Next anchor caption used in Partial / soft-close footers. */
|
|
93
89
|
export declare function formatNextAnchorCaption(c: DomainRoleAnchorCandidate): string;
|
|
94
90
|
/**
|
|
95
|
-
*
|
|
91
|
+
* Coarse retrieval banner: source reuse is separate from task completion.
|
|
96
92
|
*/
|
|
97
93
|
export declare function formatMechanismSoftCloseHeader(): string;
|
|
98
94
|
/**
|
|
99
|
-
*
|
|
100
|
-
* Must NOT contain "Partial locator" so the session fuse treats the call as closed.
|
|
95
|
+
* Coarse retrieval footer; never claims that an inventory completes the task.
|
|
101
96
|
*/
|
|
102
97
|
export declare function formatMechanismSoftCloseFooter(next?: DomainRoleAnchorCandidate): string;
|
|
103
98
|
/** Honest Partial footer with a single Next anchor + ONE Grep. */
|