homegraph 0.9.10 → 1.1.1
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/LICENSE +21 -21
- package/README.md +243 -193
- package/dist/bin/fatal-handler.d.ts +20 -0
- package/dist/bin/fatal-handler.d.ts.map +1 -0
- package/dist/bin/fatal-handler.js +118 -0
- package/dist/bin/fatal-handler.js.map +1 -0
- package/dist/bin/homegraph.d.ts +6 -6
- package/dist/bin/homegraph.js +532 -109
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/bin/node-version-check.d.ts +4 -4
- package/dist/bin/node-version-check.js +12 -12
- package/dist/bin/uninstall.d.ts +1 -1
- package/dist/bin/uninstall.js +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +8 -1
- package/dist/context/index.js.map +1 -1
- package/dist/db/index.d.ts +22 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +48 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +26 -17
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +21 -1
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +180 -137
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +152 -151
- package/dist/db/sqlite-adapter.d.ts +1 -1
- package/dist/db/sqlite-adapter.js +3 -3
- package/dist/directory.d.ts +87 -6
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +319 -57
- package/dist/directory.js.map +1 -1
- package/dist/errors.d.ts +15 -15
- package/dist/errors.js +20 -20
- package/dist/extraction/astro-extractor.d.ts +79 -0
- package/dist/extraction/astro-extractor.d.ts.map +1 -0
- package/dist/extraction/astro-extractor.js +320 -0
- package/dist/extraction/astro-extractor.js.map +1 -0
- package/dist/extraction/context.d.ts +1 -1
- package/dist/extraction/context.js +1 -1
- package/dist/extraction/extraction-version.d.ts +2 -2
- package/dist/extraction/extraction-version.d.ts.map +1 -1
- package/dist/extraction/extraction-version.js +2 -2
- package/dist/extraction/extraction-version.js.map +1 -1
- package/dist/extraction/function-ref.d.ts +118 -0
- package/dist/extraction/function-ref.d.ts.map +1 -0
- package/dist/extraction/function-ref.js +727 -0
- package/dist/extraction/function-ref.js.map +1 -0
- package/dist/extraction/generated-detection.d.ts.map +1 -1
- package/dist/extraction/generated-detection.js +3 -0
- package/dist/extraction/generated-detection.js.map +1 -1
- package/dist/extraction/grammars.d.ts +15 -5
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +44 -10
- package/dist/extraction/grammars.js.map +1 -1
- package/dist/extraction/index.d.ts +37 -0
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +562 -70
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts-viewtree.d.ts +22 -0
- package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -0
- package/dist/extraction/languages/arkts-viewtree.js +133 -0
- package/dist/extraction/languages/arkts-viewtree.js.map +1 -0
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +211 -20
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts +8 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/dist/extraction/languages/c-cpp.js +104 -2
- package/dist/extraction/languages/c-cpp.js.map +1 -1
- package/dist/extraction/languages/csharp.d.ts.map +1 -1
- package/dist/extraction/languages/csharp.js +58 -3
- package/dist/extraction/languages/csharp.js.map +1 -1
- package/dist/extraction/languages/dart.d.ts.map +1 -1
- package/dist/extraction/languages/dart.js +183 -1
- package/dist/extraction/languages/dart.js.map +1 -1
- package/dist/extraction/languages/go.d.ts.map +1 -1
- package/dist/extraction/languages/go.js +37 -0
- package/dist/extraction/languages/go.js.map +1 -1
- package/dist/extraction/languages/index.d.ts.map +1 -1
- package/dist/extraction/languages/index.js +2 -0
- package/dist/extraction/languages/index.js.map +1 -1
- package/dist/extraction/languages/java.d.ts.map +1 -1
- package/dist/extraction/languages/java.js +241 -0
- package/dist/extraction/languages/java.js.map +1 -1
- package/dist/extraction/languages/javascript.d.ts.map +1 -1
- package/dist/extraction/languages/javascript.js +16 -0
- package/dist/extraction/languages/javascript.js.map +1 -1
- package/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/dist/extraction/languages/kotlin.js +94 -0
- package/dist/extraction/languages/kotlin.js.map +1 -1
- package/dist/extraction/languages/objc.d.ts.map +1 -1
- package/dist/extraction/languages/objc.js +42 -0
- package/dist/extraction/languages/objc.js.map +1 -1
- package/dist/extraction/languages/pascal.d.ts.map +1 -1
- package/dist/extraction/languages/pascal.js +11 -0
- package/dist/extraction/languages/pascal.js.map +1 -1
- package/dist/extraction/languages/php.d.ts.map +1 -1
- package/dist/extraction/languages/php.js +77 -1
- package/dist/extraction/languages/php.js.map +1 -1
- package/dist/extraction/languages/r.d.ts +3 -0
- package/dist/extraction/languages/r.d.ts.map +1 -0
- package/dist/extraction/languages/r.js +314 -0
- package/dist/extraction/languages/r.js.map +1 -0
- package/dist/extraction/languages/rust.d.ts.map +1 -1
- package/dist/extraction/languages/rust.js +29 -0
- package/dist/extraction/languages/rust.js.map +1 -1
- package/dist/extraction/languages/scala.d.ts.map +1 -1
- package/dist/extraction/languages/scala.js +44 -9
- package/dist/extraction/languages/scala.js.map +1 -1
- package/dist/extraction/languages/swift.d.ts.map +1 -1
- package/dist/extraction/languages/swift.js +61 -0
- package/dist/extraction/languages/swift.js.map +1 -1
- package/dist/extraction/languages/typescript.d.ts +13 -0
- package/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/dist/extraction/languages/typescript.js +38 -0
- package/dist/extraction/languages/typescript.js.map +1 -1
- package/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/dist/extraction/liquid-extractor.js +4 -1
- package/dist/extraction/liquid-extractor.js.map +1 -1
- package/dist/extraction/parse-worker.js +4 -1
- package/dist/extraction/parse-worker.js.map +1 -1
- package/dist/extraction/svelte-extractor.d.ts.map +1 -1
- package/dist/extraction/svelte-extractor.js +6 -3
- package/dist/extraction/svelte-extractor.js.map +1 -1
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/dist/extraction/tree-sitter-helpers.js +59 -10
- package/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/dist/extraction/tree-sitter-types.d.ts +29 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.d.ts +192 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +1553 -45
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/vue-extractor.d.ts.map +1 -1
- package/dist/extraction/vue-extractor.js +6 -3
- package/dist/extraction/vue-extractor.js.map +1 -1
- package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +11 -2
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +64 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +137 -41
- package/dist/index.js.map +1 -1
- package/dist/installer/config-writer.d.ts +1 -1
- package/dist/installer/config-writer.js +1 -1
- package/dist/installer/index.d.ts +4 -4
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +100 -73
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +34 -11
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +44 -12
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/antigravity.d.ts +6 -6
- package/dist/installer/targets/antigravity.js +14 -14
- package/dist/installer/targets/claude.d.ts +19 -13
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +97 -29
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/installer/targets/codebuddy.d.ts +17 -0
- package/dist/installer/targets/codebuddy.d.ts.map +1 -0
- package/dist/installer/targets/codebuddy.js +150 -0
- package/dist/installer/targets/codebuddy.js.map +1 -0
- package/dist/installer/targets/codex.js +5 -7
- package/dist/installer/targets/codex.js.map +1 -1
- package/dist/installer/targets/cursor.d.ts +1 -1
- package/dist/installer/targets/cursor.js +7 -7
- package/dist/installer/targets/deveco.d.ts +23 -0
- package/dist/installer/targets/deveco.d.ts.map +1 -0
- package/dist/installer/targets/deveco.js +217 -0
- package/dist/installer/targets/deveco.js.map +1 -0
- package/dist/installer/targets/gemini.js +5 -7
- package/dist/installer/targets/gemini.js.map +1 -1
- package/dist/installer/targets/hermes.js +15 -15
- package/dist/installer/targets/kiro.d.ts +1 -1
- package/dist/installer/targets/kiro.js +4 -4
- package/dist/installer/targets/opencode.d.ts +9 -1
- package/dist/installer/targets/opencode.d.ts.map +1 -1
- package/dist/installer/targets/opencode.js +92 -41
- package/dist/installer/targets/opencode.js.map +1 -1
- package/dist/installer/targets/registry.d.ts.map +1 -1
- package/dist/installer/targets/registry.js +4 -0
- package/dist/installer/targets/registry.js.map +1 -1
- package/dist/installer/targets/shared.d.ts +28 -4
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +32 -15
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/installer/targets/types.d.ts +9 -2
- package/dist/installer/targets/types.d.ts.map +1 -1
- package/dist/mcp/daemon-manager.d.ts +42 -0
- package/dist/mcp/daemon-manager.d.ts.map +1 -0
- package/dist/mcp/daemon-manager.js +129 -0
- package/dist/mcp/daemon-manager.js.map +1 -0
- package/dist/mcp/daemon-paths.d.ts +1 -1
- package/dist/mcp/daemon-paths.js +3 -3
- package/dist/mcp/daemon-registry.d.ts +47 -0
- package/dist/mcp/daemon-registry.d.ts.map +1 -0
- package/dist/mcp/daemon-registry.js +229 -0
- package/dist/mcp/daemon-registry.js.map +1 -0
- package/dist/mcp/daemon.d.ts.map +1 -1
- package/dist/mcp/daemon.js +27 -6
- package/dist/mcp/daemon.js.map +1 -1
- package/dist/mcp/dynamic-boundaries.d.ts +41 -0
- package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
- package/dist/mcp/dynamic-boundaries.js +359 -0
- package/dist/mcp/dynamic-boundaries.js.map +1 -0
- package/dist/mcp/engine.d.ts +4 -4
- package/dist/mcp/engine.d.ts.map +1 -1
- package/dist/mcp/engine.js +32 -24
- package/dist/mcp/engine.js.map +1 -1
- package/dist/mcp/index.d.ts +8 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +39 -18
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/liveness-watchdog.d.ts +18 -0
- package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
- package/dist/mcp/liveness-watchdog.js +207 -0
- package/dist/mcp/liveness-watchdog.js.map +1 -0
- package/dist/mcp/proxy.d.ts +6 -0
- package/dist/mcp/proxy.d.ts.map +1 -1
- package/dist/mcp/proxy.js +75 -18
- package/dist/mcp/proxy.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +22 -7
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +91 -59
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/session.d.ts +3 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +43 -7
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/stdin-teardown.d.ts +27 -0
- package/dist/mcp/stdin-teardown.d.ts.map +1 -0
- package/dist/mcp/stdin-teardown.js +49 -0
- package/dist/mcp/stdin-teardown.js.map +1 -0
- package/dist/mcp/tools.d.ts +137 -16
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1271 -219
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/transport.d.ts +1 -1
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +20 -4
- package/dist/mcp/transport.js.map +1 -1
- package/dist/mcp/version.d.ts +1 -1
- package/dist/mcp/version.js +2 -2
- package/dist/project-config.d.ts +36 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +235 -0
- package/dist/project-config.js.map +1 -0
- package/dist/reasoning/config.d.ts +45 -0
- package/dist/reasoning/config.d.ts.map +1 -0
- package/dist/reasoning/config.js +171 -0
- package/dist/reasoning/config.js.map +1 -0
- package/dist/reasoning/credentials.d.ts +5 -0
- package/dist/reasoning/credentials.d.ts.map +1 -0
- package/dist/reasoning/credentials.js +83 -0
- package/dist/reasoning/credentials.js.map +1 -0
- package/dist/reasoning/login.d.ts +21 -0
- package/dist/reasoning/login.d.ts.map +1 -0
- package/dist/reasoning/login.js +85 -0
- package/dist/reasoning/login.js.map +1 -0
- package/dist/reasoning/reasoner.d.ts +43 -0
- package/dist/reasoning/reasoner.d.ts.map +1 -0
- package/dist/reasoning/reasoner.js +308 -0
- package/dist/reasoning/reasoner.js.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts +33 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.js +352 -0
- package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
- package/dist/resolution/callback-synthesizer.d.ts +6 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +1197 -1
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/frameworks/arkts-entry.d.ts +12 -0
- package/dist/resolution/frameworks/arkts-entry.d.ts.map +1 -0
- package/dist/resolution/frameworks/arkts-entry.js +214 -0
- package/dist/resolution/frameworks/arkts-entry.js.map +1 -0
- package/dist/resolution/frameworks/arkts-napi.d.ts +3 -0
- package/dist/resolution/frameworks/arkts-napi.d.ts.map +1 -0
- package/dist/resolution/frameworks/arkts-napi.js +166 -0
- package/dist/resolution/frameworks/arkts-napi.js.map +1 -0
- package/dist/resolution/frameworks/astro.d.ts +9 -0
- package/dist/resolution/frameworks/astro.d.ts.map +1 -0
- package/dist/resolution/frameworks/astro.js +169 -0
- package/dist/resolution/frameworks/astro.js.map +1 -0
- package/dist/resolution/frameworks/goframe.d.ts +41 -0
- package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
- package/dist/resolution/frameworks/goframe.js +112 -0
- package/dist/resolution/frameworks/goframe.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +3 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/dist/resolution/frameworks/index.js +17 -1
- package/dist/resolution/frameworks/index.js.map +1 -1
- package/dist/resolution/frameworks/java.js +6 -1
- package/dist/resolution/frameworks/java.js.map +1 -1
- package/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/dist/resolution/frameworks/react.js +32 -63
- package/dist/resolution/frameworks/react.js.map +1 -1
- package/dist/resolution/frameworks/svelte.js +6 -2
- package/dist/resolution/frameworks/svelte.js.map +1 -1
- package/dist/resolution/frameworks/vue.js +24 -27
- package/dist/resolution/frameworks/vue.js.map +1 -1
- package/dist/resolution/goframe-synthesizer.d.ts +28 -0
- package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
- package/dist/resolution/goframe-synthesizer.js +158 -0
- package/dist/resolution/goframe-synthesizer.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +10 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +125 -2
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +37 -0
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +306 -3
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/name-matcher.d.ts +41 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +519 -14
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/strip-comments.d.ts +1 -1
- package/dist/resolution/strip-comments.d.ts.map +1 -1
- package/dist/resolution/strip-comments.js +2 -0
- package/dist/resolution/strip-comments.js.map +1 -1
- package/dist/resolution/types.d.ts +20 -3
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/search/query-utils.d.ts +17 -1
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +79 -10
- package/dist/search/query-utils.js.map +1 -1
- package/dist/sync/git-hooks.d.ts +4 -4
- package/dist/sync/git-hooks.js +5 -5
- package/dist/sync/watcher.d.ts +69 -2
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +226 -21
- package/dist/sync/watcher.js.map +1 -1
- package/dist/sync/worktree.d.ts +3 -3
- package/dist/sync/worktree.js +5 -5
- package/dist/telemetry/index.d.ts +143 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +541 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types.d.ts +18 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/upgrade/index.d.ts.map +1 -1
- package/dist/upgrade/index.js +46 -10
- package/dist/upgrade/index.js.map +1 -1
- package/dist/utils.d.ts +46 -27
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +87 -53
- package/dist/utils.js.map +1 -1
- package/package.json +57 -57
- package/scripts/add-lang/bench.sh +60 -60
- package/scripts/add-lang/check-grammar.mjs +75 -75
- package/scripts/add-lang/dump-ast.mjs +103 -103
- package/scripts/add-lang/verify-extraction.mjs +70 -70
- package/scripts/agent-eval/ab-adoption.sh +91 -0
- package/scripts/agent-eval/ab-hook.sh +86 -0
- package/scripts/agent-eval/ab-impl.sh +78 -0
- package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -0
- package/scripts/agent-eval/ab-sufficiency.sh +78 -0
- package/scripts/agent-eval/arms-F.sh +21 -21
- package/scripts/agent-eval/arms-matrix.sh +37 -37
- package/scripts/agent-eval/audit.sh +68 -68
- package/scripts/agent-eval/bench-readme.sh +28 -28
- package/scripts/agent-eval/bench-why-repo.sh +22 -22
- package/scripts/agent-eval/block-read-hook.sh +19 -19
- package/scripts/agent-eval/hook-settings.json +15 -15
- package/scripts/agent-eval/itrun.sh +120 -120
- package/scripts/agent-eval/offload-eval-3arm.sh +72 -0
- package/scripts/agent-eval/offload-eval-cost.mjs +133 -0
- package/scripts/agent-eval/offload-eval-effort.mjs +108 -0
- package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -0
- package/scripts/agent-eval/offload-eval-frontload.sh +47 -0
- package/scripts/agent-eval/offload-eval-ground-truth.json +18 -0
- package/scripts/agent-eval/offload-eval-hook.mjs +84 -0
- package/scripts/agent-eval/offload-eval-judge.mjs +103 -0
- package/scripts/agent-eval/offload-eval-matrix.sh +20 -0
- package/scripts/agent-eval/offload-eval-metrics.mjs +94 -0
- package/scripts/agent-eval/offload-eval-refs1.sh +50 -0
- package/scripts/agent-eval/offload-eval-setup.sh +24 -0
- package/scripts/agent-eval/offload-eval-styles.sh +72 -0
- package/scripts/agent-eval/offload-eval-summarize.mjs +68 -0
- package/scripts/agent-eval/offload-eval.md +76 -0
- package/scripts/agent-eval/parse-arms.mjs +116 -116
- package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
- package/scripts/agent-eval/parse-run.mjs +45 -45
- package/scripts/agent-eval/parse-session.mjs +93 -93
- package/scripts/agent-eval/probe-context.mjs +21 -21
- package/scripts/agent-eval/probe-explore.mjs +40 -40
- package/scripts/agent-eval/probe-node.mjs +20 -20
- package/scripts/agent-eval/probe-sweep.mjs +119 -119
- package/scripts/agent-eval/probe-trace.mjs +20 -20
- package/scripts/agent-eval/redirect-read-hook.sh +38 -0
- package/scripts/agent-eval/run-agent.sh +34 -34
- package/scripts/agent-eval/run-all.sh +69 -67
- package/scripts/agent-eval/run-arms.sh +56 -56
- package/scripts/agent-eval/seq-matrix.mjs +137 -137
- package/scripts/build-bundle.sh +118 -118
- package/scripts/extract-release-notes.mjs +130 -130
- package/scripts/local-install.sh +41 -41
- package/scripts/npm-sdk.js +75 -75
- package/scripts/npm-shim.js +246 -246
- package/scripts/pack-npm.sh +119 -119
- package/scripts/prepare-release.mjs +270 -270
- package/scripts/qa_eval/README.md +400 -0
- package/scripts/qa_eval/agent_runner.py +526 -0
- package/scripts/qa_eval/data/.gitignore +4 -0
- package/scripts/qa_eval/data/test-set.jsonl +22 -0
- package/scripts/qa_eval/eval_metrics.py +233 -0
- package/scripts/qa_eval/external_agent.py +577 -0
- package/scripts/qa_eval/llm_config.py +92 -0
- package/scripts/qa_eval/memory_monitor.py +132 -0
- package/scripts/qa_eval/my_answer_accuracy.py +187 -0
- package/scripts/qa_eval/requirements.txt +2 -0
- package/scripts/qa_eval/run_pipeline.py +702 -0
- package/scripts/qa_eval/stats_efficiency.py +279 -0
- package/scripts/qa_eval/stats_scores.py +207 -0
- package/dist/bin/codegraph.d.ts +0 -26
- package/dist/bin/codegraph.d.ts.map +0 -1
- package/dist/bin/codegraph.js +0 -1572
- package/dist/bin/codegraph.js.map +0 -1
- package/dist/extraction/arkanalyzer-extractor.d.ts +0 -6
- package/dist/extraction/arkanalyzer-extractor.d.ts.map +0 -1
- package/dist/extraction/arkanalyzer-extractor.js +0 -11
- package/dist/extraction/arkanalyzer-extractor.js.map +0 -1
- package/dist/extraction/arkanalyzer-project.d.ts +0 -20
- package/dist/extraction/arkanalyzer-project.d.ts.map +0 -1
- package/dist/extraction/arkanalyzer-project.js +0 -596
- package/dist/extraction/arkanalyzer-project.js.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface BoundaryMatch {
|
|
2
|
+
/** Stable form id, e.g. 'computed-call' — used for per-form dedupe. */
|
|
3
|
+
form: string;
|
|
4
|
+
/** Human label for the dispatch form, e.g. 'computed member call'. */
|
|
5
|
+
label: string;
|
|
6
|
+
/** One-line source snippet of the site (from the original, untrimmed text). */
|
|
7
|
+
snippet: string;
|
|
8
|
+
/** 1-based line within the scanned body's FILE (absolute, ready to print). */
|
|
9
|
+
line: number;
|
|
10
|
+
/**
|
|
11
|
+
* Statically-visible dispatch key, when one exists: the string literal in
|
|
12
|
+
* `handlers['save']`, the `:symbol` in ruby `send`, the type name in
|
|
13
|
+
* `Send(new CreateCmd(...))`. Drives candidate lookup. Undefined when the
|
|
14
|
+
* key is a runtime value (variable, computed expression).
|
|
15
|
+
*/
|
|
16
|
+
key?: string;
|
|
17
|
+
/** For typed-bus matches the key is a TYPE name (candidates ~ `${key}Handler`). */
|
|
18
|
+
keyIsType?: boolean;
|
|
19
|
+
/** Additional sites of the same form+key in this body beyond the reported one. */
|
|
20
|
+
moreSites?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Blank the CONTENTS of string literals (quotes preserved, offsets preserved)
|
|
24
|
+
* so dispatch-shaped prose — docs, error messages, template text — can't fire
|
|
25
|
+
* a matcher. Run AFTER comment stripping (comments are already spaces).
|
|
26
|
+
* Backslash escapes are honored; `'`/`"` strings end at a newline (treated as
|
|
27
|
+
* unterminated, matching the comment stripper); backticks span lines, and
|
|
28
|
+
* `${...}` interpolations inside them are blanked too — missing a dispatch
|
|
29
|
+
* inside a template literal is acceptable, false-firing on prose is not.
|
|
30
|
+
*/
|
|
31
|
+
export declare function blankStringContents(text: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Scan one symbol's body for dynamic-dispatch sites.
|
|
34
|
+
*
|
|
35
|
+
* @param body the symbol's source text (sliced from the file)
|
|
36
|
+
* @param language Node.language of the symbol
|
|
37
|
+
* @param fileStartLine 1-based line where `body` starts in its file — returned
|
|
38
|
+
* line numbers are absolute file lines.
|
|
39
|
+
*/
|
|
40
|
+
export declare function scanDynamicDispatch(body: string, language: string, fileStartLine: number): BoundaryMatch[];
|
|
41
|
+
//# sourceMappingURL=dynamic-boundaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-boundaries.d.ts","sourceRoot":"","sources":["../../src/mcp/dynamic-boundaries.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkLD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BxD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE,CA4C1G"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blankStringContents = blankStringContents;
|
|
4
|
+
exports.scanDynamicDispatch = scanDynamicDispatch;
|
|
5
|
+
/**
|
|
6
|
+
* Dynamic-dispatch boundary detection for homegraph_explore (#687).
|
|
7
|
+
*
|
|
8
|
+
* When the flow an agent asked about does NOT connect statically, the cause is
|
|
9
|
+
* almost always a dynamic-dispatch site: a computed member call, getattr,
|
|
10
|
+
* reflection, a string-keyed bus, a typed command/mediator dispatch. Guessing
|
|
11
|
+
* the missing edge was rejected (silent beats wrong — a wrong edge poisons the
|
|
12
|
+
* map and teaches abandonment). Instead, explore ANNOUNCES the boundary
|
|
13
|
+
* honestly: the exact site where the static path ends, the dispatch form, and
|
|
14
|
+
* — when a key is statically visible (string literal, `:symbol`, `new Type`)
|
|
15
|
+
* — that key, so the caller can shortlist candidate targets.
|
|
16
|
+
*
|
|
17
|
+
* Detection is deterministic regex over the comment/string-stripped bodies of
|
|
18
|
+
* the symbols the agent named, at QUERY TIME only. The graph is never mutated;
|
|
19
|
+
* an unbroken flow never triggers a scan. Matching runs on the stripped text
|
|
20
|
+
* (so commented-out / string-embedded code can't fire) but snippets and keys
|
|
21
|
+
* are sliced from the ORIGINAL source at the same offsets — both strippers
|
|
22
|
+
* blank contents in place, preserving offsets, precisely for this.
|
|
23
|
+
* (`stripCommentsForRegex` blanks comments but deliberately KEEPS string
|
|
24
|
+
* contents — framework extractors need route literals; here a dispatch shape
|
|
25
|
+
* inside a string is a false positive, so {@link blankStringContents} blanks
|
|
26
|
+
* them too, quotes preserved.)
|
|
27
|
+
*/
|
|
28
|
+
const strip_comments_1 = require("../resolution/strip-comments");
|
|
29
|
+
const JS_FAMILY = new Set(['typescript', 'javascript', 'tsx', 'jsx', 'vue', 'svelte', 'astro']);
|
|
30
|
+
const PY = new Set(['python']);
|
|
31
|
+
const RB = new Set(['ruby']);
|
|
32
|
+
const PHP = new Set(['php']);
|
|
33
|
+
const JVM_CS_GO = new Set(['java', 'kotlin', 'scala', 'csharp', 'go']);
|
|
34
|
+
const SWIFT_OBJC = new Set(['swift', 'objc', 'objcpp', 'objective-c']);
|
|
35
|
+
/** Exactly one quoted literal and no concatenation → that literal is the key. */
|
|
36
|
+
function singleStringLiteral(text) {
|
|
37
|
+
const m = text.match(/^[^'"`]*(['"`])([\w.:-]{2,64})\1[^'"`]*$/);
|
|
38
|
+
return m ? m[2] : undefined;
|
|
39
|
+
}
|
|
40
|
+
const FORMS = [
|
|
41
|
+
{
|
|
42
|
+
// handlers[action.type](payload) / registry[key](args) / table[k](...) —
|
|
43
|
+
// the `](` adjacency is the gate; a word/`)`/`]` char must precede `[` so
|
|
44
|
+
// array literals and markdown-ish text in prose can't fire.
|
|
45
|
+
form: 'computed-call',
|
|
46
|
+
label: 'computed member call',
|
|
47
|
+
re: /[\w$)\]]\s*\[([^[\]\n]{1,80})\]\s*\(/g,
|
|
48
|
+
keyFrom: (orig) => {
|
|
49
|
+
const inner = orig.match(/\[([^[\]\n]{1,80})\]\s*\($/);
|
|
50
|
+
const key = inner ? singleStringLiteral(inner[1]) : undefined;
|
|
51
|
+
return key ? { key } : undefined;
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
// import(expr) / require(expr) with a NON-literal argument → runtime module
|
|
56
|
+
// choice. Literal imports are ordinary edges and never reach this scanner.
|
|
57
|
+
form: 'dynamic-import',
|
|
58
|
+
label: 'dynamic import',
|
|
59
|
+
langs: JS_FAMILY,
|
|
60
|
+
re: /\b(?:import|require)\s*\(\s*(?![\s'"`)])/g,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
form: 'dynamic-import',
|
|
64
|
+
label: 'dynamic import',
|
|
65
|
+
langs: PY,
|
|
66
|
+
re: /\bimportlib\.import_module\s*\(|\b__import__\s*\(/g,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
// obj.send(:method_name) / public_send / method(:name) — ruby metaprogramming.
|
|
70
|
+
form: 'ruby-send',
|
|
71
|
+
label: 'send dispatch',
|
|
72
|
+
langs: RB,
|
|
73
|
+
re: /\.(?:public_)?send\s*\(\s*:?\w+|\bmethod\s*\(\s*:\w+\s*\)/g,
|
|
74
|
+
keyFrom: (orig) => {
|
|
75
|
+
const m = orig.match(/:(\w+)/);
|
|
76
|
+
return m ? { key: m[1] } : undefined;
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
// call_user_func([$this, 'method']) / $this->$method() / $callback() —
|
|
81
|
+
// PHP variable functions and callables.
|
|
82
|
+
form: 'php-dynamic',
|
|
83
|
+
label: 'dynamic call',
|
|
84
|
+
langs: PHP,
|
|
85
|
+
re: /\bcall_user_func(?:_array)?\s*\(|\$this\s*->\s*\$\w+\s*\(|\$\w+\s*\(/g,
|
|
86
|
+
keyWindow: 80,
|
|
87
|
+
keyFrom: (orig) => {
|
|
88
|
+
const key = singleStringLiteral(orig);
|
|
89
|
+
return key ? { key } : undefined;
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
// Reflection: Method.invoke / getMethod("x") / Class.forName / Go
|
|
94
|
+
// reflect MethodByName / C# Activator.CreateInstance, GetMethod.
|
|
95
|
+
form: 'reflection',
|
|
96
|
+
label: 'reflective dispatch',
|
|
97
|
+
langs: JVM_CS_GO,
|
|
98
|
+
re: /\.invoke\s*\(|\.get(?:Declared)?Method\s*\(|\.GetMethod\s*\(|MethodByName\s*\(|Activator\.CreateInstance|Class\.forName\s*\(/g,
|
|
99
|
+
keyWindow: 80,
|
|
100
|
+
keyFrom: (orig) => {
|
|
101
|
+
const key = singleStringLiteral(orig);
|
|
102
|
+
return key ? { key } : undefined;
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
// new Proxy(target, handler) / Reflect.get|apply — JS metaobject dispatch.
|
|
107
|
+
form: 'proxy-reflect',
|
|
108
|
+
label: 'Proxy/Reflect dispatch',
|
|
109
|
+
langs: JS_FAMILY,
|
|
110
|
+
re: /\bnew\s+Proxy\s*\(|\bReflect\.(?:get|apply|construct)\s*\(/g,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
// mediator.Send(new CreateTodoItemCommand(...)) / bus.publish(new OrderEvent(...))
|
|
114
|
+
// — typed message dispatch (MediatR/CQRS/event-bus). The request TYPE is the
|
|
115
|
+
// key; the conventional target is `<Type>Handler`.
|
|
116
|
+
form: 'typed-bus',
|
|
117
|
+
label: 'typed message dispatch',
|
|
118
|
+
re: /\.(?:[Ss]end|[Pp]ublish|[Dd]ispatch|[Ee]xecute|[Pp]ost|[Ee]mit)(?:Async)?\s*(?:<[^<>\n]{0,80}>)?\s*\(\s*new\s+([A-Z]\w*)/g,
|
|
119
|
+
keyFrom: (orig) => {
|
|
120
|
+
const m = orig.match(/new\s+([A-Z]\w*)$/);
|
|
121
|
+
return m ? { key: m[1], keyIsType: true } : undefined;
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
// emitter.emit(eventVar, ...) / store.dispatch(action) — string-keyed
|
|
126
|
+
// dispatch where the key is a RUNTIME value. (Literal-keyed emits are the
|
|
127
|
+
// synthesizer's territory and connect statically when a handler matches.)
|
|
128
|
+
form: 'var-key-dispatch',
|
|
129
|
+
label: 'string-keyed dispatch (runtime key)',
|
|
130
|
+
re: /\.(?:emit|dispatch|trigger|fire|publish|broadcast)\s*\(\s*[A-Za-z_$][\w$]*(?:\.[\w$]+){0,3}\s*[,)]/g,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
// Swift/ObjC: #selector(name) / NSClassFromString — runtime selector dispatch.
|
|
134
|
+
form: 'selector',
|
|
135
|
+
label: 'selector dispatch',
|
|
136
|
+
langs: SWIFT_OBJC,
|
|
137
|
+
re: /#selector\s*\(\s*([\w.]+)|NSClassFromString\s*\(/g,
|
|
138
|
+
keyFrom: (orig) => {
|
|
139
|
+
const m = orig.match(/#selector\s*\(\s*([\w.]+)/);
|
|
140
|
+
if (!m)
|
|
141
|
+
return undefined;
|
|
142
|
+
const segs = m[1].split('.');
|
|
143
|
+
return { key: segs[segs.length - 1] };
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
/** Map a Node.language to the comment-stripper's language set. */
|
|
148
|
+
function commentLang(language) {
|
|
149
|
+
switch (language) {
|
|
150
|
+
case 'python': return 'python';
|
|
151
|
+
case 'ruby': return 'ruby';
|
|
152
|
+
case 'rust': return 'rust';
|
|
153
|
+
case 'php': return 'php';
|
|
154
|
+
case 'go': return 'go';
|
|
155
|
+
case 'javascript':
|
|
156
|
+
case 'jsx':
|
|
157
|
+
return 'javascript';
|
|
158
|
+
case 'typescript':
|
|
159
|
+
case 'tsx':
|
|
160
|
+
case 'vue':
|
|
161
|
+
case 'svelte':
|
|
162
|
+
case 'astro':
|
|
163
|
+
return 'typescript';
|
|
164
|
+
case 'java':
|
|
165
|
+
case 'kotlin':
|
|
166
|
+
case 'scala':
|
|
167
|
+
case 'dart':
|
|
168
|
+
return 'java';
|
|
169
|
+
case 'csharp': return 'csharp';
|
|
170
|
+
case 'swift': return 'swift';
|
|
171
|
+
case 'c':
|
|
172
|
+
case 'cpp':
|
|
173
|
+
case 'objc':
|
|
174
|
+
case 'objcpp':
|
|
175
|
+
return 'java'; // C-style comments + double-quoted strings — close enough for blanking
|
|
176
|
+
default: return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const MAX_MATCHES_PER_BODY = 3;
|
|
180
|
+
const MAX_BODY_CHARS = 60_000; // a god-function tail is still scannable; beyond this, truncate
|
|
181
|
+
/**
|
|
182
|
+
* Blank the CONTENTS of string literals (quotes preserved, offsets preserved)
|
|
183
|
+
* so dispatch-shaped prose — docs, error messages, template text — can't fire
|
|
184
|
+
* a matcher. Run AFTER comment stripping (comments are already spaces).
|
|
185
|
+
* Backslash escapes are honored; `'`/`"` strings end at a newline (treated as
|
|
186
|
+
* unterminated, matching the comment stripper); backticks span lines, and
|
|
187
|
+
* `${...}` interpolations inside them are blanked too — missing a dispatch
|
|
188
|
+
* inside a template literal is acceptable, false-firing on prose is not.
|
|
189
|
+
*/
|
|
190
|
+
function blankStringContents(text) {
|
|
191
|
+
const out = text.split('');
|
|
192
|
+
let i = 0;
|
|
193
|
+
const n = text.length;
|
|
194
|
+
while (i < n) {
|
|
195
|
+
const c = text[i];
|
|
196
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
197
|
+
const quote = c;
|
|
198
|
+
i++;
|
|
199
|
+
while (i < n && text[i] !== quote) {
|
|
200
|
+
if (text[i] === '\\' && i + 1 < n) {
|
|
201
|
+
out[i] = ' ';
|
|
202
|
+
out[i + 1] = ' ';
|
|
203
|
+
i += 2;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (quote !== '`' && text[i] === '\n')
|
|
207
|
+
break; // unterminated — stop blanking
|
|
208
|
+
if (text[i] !== '\n')
|
|
209
|
+
out[i] = ' '; // keep newlines for line math
|
|
210
|
+
i++;
|
|
211
|
+
}
|
|
212
|
+
if (i < n && text[i] === quote)
|
|
213
|
+
i++;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
i++;
|
|
217
|
+
}
|
|
218
|
+
return out.join('');
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Scan one symbol's body for dynamic-dispatch sites.
|
|
222
|
+
*
|
|
223
|
+
* @param body the symbol's source text (sliced from the file)
|
|
224
|
+
* @param language Node.language of the symbol
|
|
225
|
+
* @param fileStartLine 1-based line where `body` starts in its file — returned
|
|
226
|
+
* line numbers are absolute file lines.
|
|
227
|
+
*/
|
|
228
|
+
function scanDynamicDispatch(body, language, fileStartLine) {
|
|
229
|
+
const original = body.length > MAX_BODY_CHARS ? body.slice(0, MAX_BODY_CHARS) : body;
|
|
230
|
+
const lang = commentLang(language);
|
|
231
|
+
const stripped = blankStringContents(lang ? (0, strip_comments_1.stripCommentsForRegex)(original, lang) : original);
|
|
232
|
+
const out = [];
|
|
233
|
+
const seen = new Map(); // form+key → first match (counts extras)
|
|
234
|
+
if (language === 'python')
|
|
235
|
+
scanPythonGetattr(stripped, original, fileStartLine, out, seen);
|
|
236
|
+
for (const spec of FORMS) {
|
|
237
|
+
if (out.length >= MAX_MATCHES_PER_BODY)
|
|
238
|
+
break;
|
|
239
|
+
if (spec.langs && !spec.langs.has(language))
|
|
240
|
+
continue;
|
|
241
|
+
spec.re.lastIndex = 0;
|
|
242
|
+
let m;
|
|
243
|
+
while ((m = spec.re.exec(stripped)) !== null) {
|
|
244
|
+
let sliceEnd = m.index + m[0].length;
|
|
245
|
+
if (spec.keyWindow) {
|
|
246
|
+
const windowEnd = Math.min(original.length, sliceEnd + spec.keyWindow);
|
|
247
|
+
const nl = original.indexOf('\n', sliceEnd);
|
|
248
|
+
sliceEnd = nl !== -1 && nl < windowEnd ? nl : windowEnd;
|
|
249
|
+
}
|
|
250
|
+
const origSlice = original.slice(m.index, sliceEnd);
|
|
251
|
+
const derived = spec.keyFrom?.(origSlice);
|
|
252
|
+
const dedupeKey = `${spec.form}|${derived?.key ?? ''}`;
|
|
253
|
+
const prior = seen.get(dedupeKey);
|
|
254
|
+
if (prior) {
|
|
255
|
+
prior.moreSites = (prior.moreSites ?? 0) + 1;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const line = fileStartLine + countNewlines(original, m.index);
|
|
259
|
+
const match = {
|
|
260
|
+
form: spec.form,
|
|
261
|
+
label: spec.label,
|
|
262
|
+
snippet: snippetAround(original, m.index),
|
|
263
|
+
line,
|
|
264
|
+
...(derived ?? {}),
|
|
265
|
+
};
|
|
266
|
+
seen.set(dedupeKey, match);
|
|
267
|
+
out.push(match);
|
|
268
|
+
if (out.length >= MAX_MATCHES_PER_BODY)
|
|
269
|
+
return out;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return out;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Python getattr dispatch — handled in code, not the FORMS table, because real
|
|
276
|
+
* getattr calls have nested-call arguments spanning lines
|
|
277
|
+
* (`getattr(self, request.method.lower(),\n self.http_method_not_allowed)` —
|
|
278
|
+
* DRF's APIView.dispatch) that a regex argument class can't bound. Two shapes:
|
|
279
|
+
* getattr(obj, name)(args) → immediate call
|
|
280
|
+
* handler = getattr(obj, name) ... handler(...) → assigned, called later
|
|
281
|
+
*/
|
|
282
|
+
const GETATTR_RE = /\bgetattr\s*\(/g;
|
|
283
|
+
const MAX_GETATTR_ARGS = 300;
|
|
284
|
+
function scanPythonGetattr(stripped, original, fileStartLine, out, seen) {
|
|
285
|
+
GETATTR_RE.lastIndex = 0;
|
|
286
|
+
let m;
|
|
287
|
+
while ((m = GETATTR_RE.exec(stripped)) !== null && out.length < MAX_MATCHES_PER_BODY) {
|
|
288
|
+
const open = m.index + m[0].length - 1;
|
|
289
|
+
const close = matchBalancedParen(stripped, open);
|
|
290
|
+
if (close === -1)
|
|
291
|
+
continue;
|
|
292
|
+
let form;
|
|
293
|
+
let label = '';
|
|
294
|
+
// Immediate call: getattr(...)(
|
|
295
|
+
const after = stripped.slice(close + 1, close + 8);
|
|
296
|
+
if (/^\s*\(/.test(after)) {
|
|
297
|
+
form = 'getattr-call';
|
|
298
|
+
label = 'getattr dispatch';
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
// Assigned form: look back for `name =` and forward for `name(`.
|
|
302
|
+
const lineStart = stripped.lastIndexOf('\n', m.index) + 1;
|
|
303
|
+
const before = stripped.slice(lineStart, m.index);
|
|
304
|
+
const assign = before.match(/(\w+)\s*=\s*$/);
|
|
305
|
+
if (assign && new RegExp(`\\b${assign[1]}\\s*\\(`).test(stripped.slice(close + 1))) {
|
|
306
|
+
form = 'getattr-assign';
|
|
307
|
+
label = 'getattr dispatch (assigned, called later)';
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (!form)
|
|
311
|
+
continue;
|
|
312
|
+
const key = singleStringLiteral(original.slice(open + 1, close));
|
|
313
|
+
const dedupeKey = `${form}|${key ?? ''}`;
|
|
314
|
+
const prior = seen.get(dedupeKey);
|
|
315
|
+
if (prior) {
|
|
316
|
+
prior.moreSites = (prior.moreSites ?? 0) + 1;
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
const match = {
|
|
320
|
+
form,
|
|
321
|
+
label,
|
|
322
|
+
snippet: snippetAround(original, m.index),
|
|
323
|
+
line: fileStartLine + countNewlines(original, m.index),
|
|
324
|
+
...(key ? { key } : {}),
|
|
325
|
+
};
|
|
326
|
+
seen.set(dedupeKey, match);
|
|
327
|
+
out.push(match);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/** Index of the `)` balancing `text[open]`, or -1 (cap: MAX_GETATTR_ARGS chars). */
|
|
331
|
+
function matchBalancedParen(text, open) {
|
|
332
|
+
let depth = 0;
|
|
333
|
+
const end = Math.min(text.length, open + MAX_GETATTR_ARGS);
|
|
334
|
+
for (let i = open; i < end; i++) {
|
|
335
|
+
const c = text[i];
|
|
336
|
+
if (c === '(')
|
|
337
|
+
depth++;
|
|
338
|
+
else if (c === ')' && --depth === 0)
|
|
339
|
+
return i;
|
|
340
|
+
}
|
|
341
|
+
return -1;
|
|
342
|
+
}
|
|
343
|
+
function countNewlines(text, end) {
|
|
344
|
+
let n = 0;
|
|
345
|
+
for (let i = 0; i < end; i++)
|
|
346
|
+
if (text.charCodeAt(i) === 10)
|
|
347
|
+
n++;
|
|
348
|
+
return n;
|
|
349
|
+
}
|
|
350
|
+
/** The full source line containing `index`, trimmed and capped for display. */
|
|
351
|
+
function snippetAround(text, index) {
|
|
352
|
+
const lineStart = text.lastIndexOf('\n', index) + 1;
|
|
353
|
+
let lineEnd = text.indexOf('\n', index);
|
|
354
|
+
if (lineEnd === -1)
|
|
355
|
+
lineEnd = text.length;
|
|
356
|
+
const line = text.slice(lineStart, lineEnd).trim();
|
|
357
|
+
return line.length > 120 ? line.slice(0, 117) + '...' : line;
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=dynamic-boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-boundaries.js","sourceRoot":"","sources":["../../src/mcp/dynamic-boundaries.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/engine.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP shared engine — the heavyweight, *shared* state for an MCP server:
|
|
3
|
-
* the project's {@link
|
|
3
|
+
* the project's {@link HomeGraph} instance, file watcher, and the
|
|
4
4
|
* {@link ToolHandler} cache for cross-project queries.
|
|
5
5
|
*
|
|
6
6
|
* One engine, many sessions:
|
|
@@ -44,8 +44,8 @@ export declare class MCPEngine {
|
|
|
44
44
|
getProjectPath(): string | null;
|
|
45
45
|
/** Shared ToolHandler — sessions delegate tool dispatch through this. */
|
|
46
46
|
getToolHandler(): ToolHandler;
|
|
47
|
-
/** Whether the default project's
|
|
48
|
-
|
|
47
|
+
/** Whether the default project's HomeGraph is open. */
|
|
48
|
+
hasDefaultHomeGraph(): boolean;
|
|
49
49
|
/**
|
|
50
50
|
* Walk up from `searchFrom` to find the nearest `.homegraph/` and open it.
|
|
51
51
|
* Idempotent: concurrent callers share one in-flight init; subsequent
|
|
@@ -69,7 +69,7 @@ export declare class MCPEngine {
|
|
|
69
69
|
stop(): void;
|
|
70
70
|
private doInitialize;
|
|
71
71
|
/**
|
|
72
|
-
* Start file watching on the active
|
|
72
|
+
* Start file watching on the active HomeGraph instance. Idempotent — the
|
|
73
73
|
* watcher is per-engine, not per-session, which is why the daemon path
|
|
74
74
|
* collapses N inotify sets to one. The wording of the disabled-reason log
|
|
75
75
|
* exactly matches the prior in-tree implementation so log-driven dashboards
|
package/dist/mcp/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/mcp/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAWtC,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IAIjC,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,GAAE,gBAAqB;IAKvC;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7C,0EAA0E;IAC1E,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,yEAAyE;IACzE,cAAc,IAAI,WAAW;IAI7B,uDAAuD;IACvD,mBAAmB,IAAI,OAAO;IAI9B;;;;;;;;OAQG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D;;;;OAIG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAsB7C;;;OAGG;IACH,IAAI,IAAI,IAAI;YAUE,YAAY;IAsB1B;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/mcp/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAWtC,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IAIjC,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,GAAE,gBAAqB;IAKvC;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7C,0EAA0E;IAC1E,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,yEAAyE;IACzE,cAAc,IAAI,WAAW;IAI7B,uDAAuD;IACvD,mBAAmB,IAAI,OAAO;IAI9B;;;;;;;;OAQG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D;;;;OAIG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAsB7C;;;OAGG;IACH,IAAI,IAAI,IAAI;YAUE,YAAY;IAsB1B;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAuDrB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;CAiBpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM5E"}
|
package/dist/mcp/engine.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* MCP shared engine — the heavyweight, *shared* state for an MCP server:
|
|
4
|
-
* the project's {@link
|
|
4
|
+
* the project's {@link HomeGraph} instance, file watcher, and the
|
|
5
5
|
* {@link ToolHandler} cache for cross-project queries.
|
|
6
6
|
*
|
|
7
7
|
* One engine, many sessions:
|
|
@@ -16,13 +16,13 @@ exports.parseDebounceEnv = parseDebounceEnv;
|
|
|
16
16
|
const directory_1 = require("../directory");
|
|
17
17
|
const sync_1 = require("../sync");
|
|
18
18
|
const tools_1 = require("./tools");
|
|
19
|
-
// Lazy-load the heavy
|
|
19
|
+
// Lazy-load the heavy HomeGraph chain (sqlite + query/graph/context layers) OFF
|
|
20
20
|
// the MCP startup path. It's only needed once a tool actually opens a project —
|
|
21
21
|
// not to answer initialize/tools-list — so deferring it lets `serve --mcp` (and
|
|
22
22
|
// the daemon it spawns) bind + register tools in ~Node-startup time instead of
|
|
23
23
|
// ~800ms, closing the "No such tool available" cold-start race that made headless
|
|
24
24
|
// agents flounder. require() is sync + cached on the CommonJS build.
|
|
25
|
-
const
|
|
25
|
+
const loadHomeGraph = () => require('../index').default;
|
|
26
26
|
/**
|
|
27
27
|
* Shared MCP engine. Thread-safe in the sense that multiple sessions can
|
|
28
28
|
* call its methods concurrently — internally it serializes initialization
|
|
@@ -63,9 +63,9 @@ class MCPEngine {
|
|
|
63
63
|
getToolHandler() {
|
|
64
64
|
return this.toolHandler;
|
|
65
65
|
}
|
|
66
|
-
/** Whether the default project's
|
|
67
|
-
|
|
68
|
-
return this.toolHandler.
|
|
66
|
+
/** Whether the default project's HomeGraph is open. */
|
|
67
|
+
hasDefaultHomeGraph() {
|
|
68
|
+
return this.toolHandler.hasDefaultHomeGraph();
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* Walk up from `searchFrom` to find the nearest `.homegraph/` and open it.
|
|
@@ -79,7 +79,7 @@ class MCPEngine {
|
|
|
79
79
|
async ensureInitialized(searchFrom) {
|
|
80
80
|
if (this.closed)
|
|
81
81
|
return;
|
|
82
|
-
if (this.toolHandler.
|
|
82
|
+
if (this.toolHandler.hasDefaultHomeGraph())
|
|
83
83
|
return;
|
|
84
84
|
if (this.initPromise) {
|
|
85
85
|
try {
|
|
@@ -107,10 +107,10 @@ class MCPEngine {
|
|
|
107
107
|
retryInitializeSync(searchFrom) {
|
|
108
108
|
if (this.closed)
|
|
109
109
|
return;
|
|
110
|
-
if (this.toolHandler.
|
|
110
|
+
if (this.toolHandler.hasDefaultHomeGraph())
|
|
111
111
|
return;
|
|
112
112
|
this.toolHandler.setDefaultProjectHint(searchFrom);
|
|
113
|
-
const resolvedRoot = (0, directory_1.
|
|
113
|
+
const resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom);
|
|
114
114
|
if (!resolvedRoot)
|
|
115
115
|
return;
|
|
116
116
|
try {
|
|
@@ -122,9 +122,9 @@ class MCPEngine {
|
|
|
122
122
|
catch { /* ignore */ }
|
|
123
123
|
this.cg = null;
|
|
124
124
|
}
|
|
125
|
-
this.cg =
|
|
125
|
+
this.cg = loadHomeGraph().openSync(resolvedRoot);
|
|
126
126
|
this.projectPath = resolvedRoot;
|
|
127
|
-
this.toolHandler.
|
|
127
|
+
this.toolHandler.setDefaultHomeGraph(this.cg);
|
|
128
128
|
this.startWatching();
|
|
129
129
|
this.catchUpSync();
|
|
130
130
|
}
|
|
@@ -151,7 +151,7 @@ class MCPEngine {
|
|
|
151
151
|
}
|
|
152
152
|
async doInitialize(searchFrom) {
|
|
153
153
|
this.toolHandler.setDefaultProjectHint(searchFrom);
|
|
154
|
-
const resolvedRoot = (0, directory_1.
|
|
154
|
+
const resolvedRoot = (0, directory_1.findNearestHomeGraphRoot)(searchFrom);
|
|
155
155
|
if (!resolvedRoot) {
|
|
156
156
|
// No .homegraph/ above searchFrom. Sessions may still discover one later via roots/list
|
|
157
157
|
this.projectPath = searchFrom;
|
|
@@ -159,18 +159,18 @@ class MCPEngine {
|
|
|
159
159
|
}
|
|
160
160
|
this.projectPath = resolvedRoot;
|
|
161
161
|
try {
|
|
162
|
-
this.cg = await
|
|
163
|
-
this.toolHandler.
|
|
162
|
+
this.cg = await loadHomeGraph().open(resolvedRoot);
|
|
163
|
+
this.toolHandler.setDefaultHomeGraph(this.cg);
|
|
164
164
|
this.startWatching();
|
|
165
165
|
this.catchUpSync();
|
|
166
166
|
}
|
|
167
167
|
catch (err) {
|
|
168
168
|
const msg = err instanceof Error ? err.message : String(err);
|
|
169
|
-
process.stderr.write(`[
|
|
169
|
+
process.stderr.write(`[HomeGraph MCP] Failed to open project at ${resolvedRoot}: ${msg}\n`);
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
|
-
* Start file watching on the active
|
|
173
|
+
* Start file watching on the active HomeGraph instance. Idempotent — the
|
|
174
174
|
* watcher is per-engine, not per-session, which is why the daemon path
|
|
175
175
|
* collapses N inotify sets to one. The wording of the disabled-reason log
|
|
176
176
|
* exactly matches the prior in-tree implementation so log-driven dashboards
|
|
@@ -181,7 +181,7 @@ class MCPEngine {
|
|
|
181
181
|
return;
|
|
182
182
|
const disabledReason = (0, sync_1.watchDisabledReason)(this.projectPath ?? process.cwd());
|
|
183
183
|
if (disabledReason) {
|
|
184
|
-
process.stderr.write(`[
|
|
184
|
+
process.stderr.write(`[HomeGraph MCP] File watcher disabled — ${disabledReason}. ` +
|
|
185
185
|
`The graph will not auto-update; run \`homegraph sync\` (or install the git sync hooks via \`homegraph init\`) to refresh.\n`);
|
|
186
186
|
this.watcherStarted = true;
|
|
187
187
|
return;
|
|
@@ -193,25 +193,33 @@ class MCPEngine {
|
|
|
193
193
|
// FileWatcher default. We log the active value so it's discoverable.
|
|
194
194
|
const debounceMs = parseDebounceEnv(process.env.HOMEGRAPH_WATCH_DEBOUNCE_MS);
|
|
195
195
|
if (debounceMs !== undefined) {
|
|
196
|
-
process.stderr.write(`[
|
|
196
|
+
process.stderr.write(`[HomeGraph MCP] File watcher debounce: ${debounceMs}ms (HOMEGRAPH_WATCH_DEBOUNCE_MS)\n`);
|
|
197
197
|
}
|
|
198
198
|
const started = this.cg.watch({
|
|
199
199
|
debounceMs,
|
|
200
200
|
onSyncComplete: (result) => {
|
|
201
201
|
if (result.filesChanged > 0) {
|
|
202
|
-
process.stderr.write(`[
|
|
202
|
+
process.stderr.write(`[HomeGraph MCP] Auto-synced ${result.filesChanged} file(s) in ${result.durationMs}ms\n`);
|
|
203
203
|
}
|
|
204
204
|
},
|
|
205
205
|
onSyncError: (err) => {
|
|
206
|
-
process.stderr.write(`[
|
|
206
|
+
process.stderr.write(`[HomeGraph MCP] Auto-sync error: ${err.message}\n`);
|
|
207
|
+
},
|
|
208
|
+
onDegraded: (reason) => {
|
|
209
|
+
// Live watching gave up permanently (watch-resource exhaustion or a
|
|
210
|
+
// write lock held past the retry budget). Say so loudly and ONCE — the
|
|
211
|
+
// graph will no longer auto-update, so a long-running MCP session must
|
|
212
|
+
// not keep assuming it's fresh. The reason already names the remedy
|
|
213
|
+
// (`homegraph sync` / git sync hooks).
|
|
214
|
+
process.stderr.write(`[HomeGraph MCP] File watcher degraded — ${reason}\n`);
|
|
207
215
|
},
|
|
208
216
|
});
|
|
209
217
|
this.watcherStarted = true;
|
|
210
218
|
if (started) {
|
|
211
|
-
process.stderr.write('[
|
|
219
|
+
process.stderr.write('[HomeGraph MCP] File watcher active — graph will auto-sync on changes\n');
|
|
212
220
|
}
|
|
213
221
|
else {
|
|
214
|
-
process.stderr.write('[
|
|
222
|
+
process.stderr.write('[HomeGraph MCP] File watcher unavailable on this platform — run `homegraph sync` to refresh the graph after changes.\n');
|
|
215
223
|
}
|
|
216
224
|
}
|
|
217
225
|
/**
|
|
@@ -233,12 +241,12 @@ class MCPEngine {
|
|
|
233
241
|
.then((result) => {
|
|
234
242
|
const changed = result.filesAdded + result.filesModified + result.filesRemoved;
|
|
235
243
|
if (changed > 0) {
|
|
236
|
-
process.stderr.write(`[
|
|
244
|
+
process.stderr.write(`[HomeGraph MCP] Caught up ${changed} file(s) changed since last run\n`);
|
|
237
245
|
}
|
|
238
246
|
})
|
|
239
247
|
.catch((err) => {
|
|
240
248
|
const msg = err instanceof Error ? err.message : String(err);
|
|
241
|
-
process.stderr.write(`[
|
|
249
|
+
process.stderr.write(`[HomeGraph MCP] Catch-up sync failed: ${msg}\n`);
|
|
242
250
|
});
|
|
243
251
|
this.toolHandler.setCatchUpGate(p);
|
|
244
252
|
}
|
package/dist/mcp/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/mcp/engine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/mcp/engine.ts"],"names":[],"mappings":"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"}
|