homegraph 1.2.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -11
- package/dist/bin/homegraph.js +298 -72
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +117 -11
- package/dist/context/index.js.map +1 -1
- package/dist/db/index.d.ts +207 -6
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +461 -20
- 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 +19 -1
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +157 -3
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +426 -9
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +32 -1
- package/dist/db/sqlite-adapter.d.ts +24 -17
- package/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/dist/db/sqlite-adapter.js +292 -36
- package/dist/db/sqlite-adapter.js.map +1 -1
- package/dist/db/wal-valve.d.ts +119 -0
- package/dist/db/wal-valve.d.ts.map +1 -0
- package/dist/db/wal-valve.js +290 -0
- package/dist/db/wal-valve.js.map +1 -0
- package/dist/directory.d.ts +9 -5
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +210 -19
- package/dist/directory.js.map +1 -1
- package/dist/extraction/arkts-batch-worker.js +3 -2
- package/dist/extraction/arkts-batch-worker.js.map +1 -1
- package/dist/extraction/cfml-extractor.d.ts +107 -0
- package/dist/extraction/cfml-extractor.d.ts.map +1 -0
- package/dist/extraction/cfml-extractor.js +494 -0
- package/dist/extraction/cfml-extractor.js.map +1 -0
- package/dist/extraction/default-ignore.d.ts +39 -0
- package/dist/extraction/default-ignore.d.ts.map +1 -0
- package/dist/extraction/default-ignore.js +221 -0
- package/dist/extraction/default-ignore.js.map +1 -0
- package/dist/extraction/grammars.d.ts +25 -1
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +177 -24
- package/dist/extraction/grammars.js.map +1 -1
- package/dist/extraction/index.d.ts +52 -14
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +521 -314
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts.d.ts +90 -6
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +1579 -128
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts +42 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/dist/extraction/languages/c-cpp.js +369 -4
- package/dist/extraction/languages/c-cpp.js.map +1 -1
- package/dist/extraction/languages/cfquery.d.ts +12 -0
- package/dist/extraction/languages/cfquery.d.ts.map +1 -0
- package/dist/extraction/languages/cfquery.js +28 -0
- package/dist/extraction/languages/cfquery.js.map +1 -0
- package/dist/extraction/languages/cfscript.d.ts +3 -0
- package/dist/extraction/languages/cfscript.d.ts.map +1 -0
- package/dist/extraction/languages/cfscript.js +73 -0
- package/dist/extraction/languages/cfscript.js.map +1 -0
- package/dist/extraction/languages/cobol.d.ts +33 -0
- package/dist/extraction/languages/cobol.d.ts.map +1 -0
- package/dist/extraction/languages/cobol.js +499 -0
- package/dist/extraction/languages/cobol.js.map +1 -0
- package/dist/extraction/languages/erlang.d.ts +3 -0
- package/dist/extraction/languages/erlang.d.ts.map +1 -0
- package/dist/extraction/languages/erlang.js +350 -0
- package/dist/extraction/languages/erlang.js.map +1 -0
- package/dist/extraction/languages/index.d.ts.map +1 -1
- package/dist/extraction/languages/index.js +16 -0
- package/dist/extraction/languages/index.js.map +1 -1
- package/dist/extraction/languages/nix.d.ts +3 -0
- package/dist/extraction/languages/nix.d.ts.map +1 -0
- package/dist/extraction/languages/nix.js +294 -0
- package/dist/extraction/languages/nix.js.map +1 -0
- package/dist/extraction/languages/solidity.d.ts +3 -0
- package/dist/extraction/languages/solidity.d.ts.map +1 -0
- package/dist/extraction/languages/solidity.js +293 -0
- package/dist/extraction/languages/solidity.js.map +1 -0
- package/dist/extraction/languages/terraform.d.ts +3 -0
- package/dist/extraction/languages/terraform.d.ts.map +1 -0
- package/dist/extraction/languages/terraform.js +641 -0
- package/dist/extraction/languages/terraform.js.map +1 -0
- package/dist/extraction/languages/vbnet.d.ts +11 -0
- package/dist/extraction/languages/vbnet.d.ts.map +1 -0
- package/dist/extraction/languages/vbnet.js +141 -0
- package/dist/extraction/languages/vbnet.js.map +1 -0
- package/dist/extraction/mybatis-extractor.d.ts +30 -10
- package/dist/extraction/mybatis-extractor.d.ts.map +1 -1
- package/dist/extraction/mybatis-extractor.js +140 -38
- package/dist/extraction/mybatis-extractor.js.map +1 -1
- package/dist/extraction/parse-pool.d.ts +27 -1
- package/dist/extraction/parse-pool.d.ts.map +1 -1
- package/dist/extraction/parse-pool.js +75 -7
- package/dist/extraction/parse-pool.js.map +1 -1
- package/dist/extraction/parse-worker.js +9 -2
- package/dist/extraction/parse-worker.js.map +1 -1
- package/dist/extraction/store-worker.d.ts +20 -0
- package/dist/extraction/store-worker.d.ts.map +1 -0
- package/dist/extraction/store-worker.js +102 -0
- package/dist/extraction/store-worker.js.map +1 -0
- package/dist/extraction/store-writer.d.ts +48 -0
- package/dist/extraction/store-writer.d.ts.map +1 -0
- package/dist/extraction/store-writer.js +167 -0
- package/dist/extraction/store-writer.js.map +1 -0
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/dist/extraction/tree-sitter-helpers.js +1 -0
- package/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/dist/extraction/tree-sitter-types.d.ts +3 -1
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.d.ts +38 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +801 -10
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
- package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
- package/dist/extraction/wasm-runtime-flags.js +55 -7
- package/dist/extraction/wasm-runtime-flags.js.map +1 -1
- package/dist/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +1 -1
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +74 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +436 -55
- package/dist/index.js.map +1 -1
- package/dist/installer/index.d.ts +42 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +97 -2
- package/dist/installer/index.js.map +1 -1
- package/dist/mcp/daemon.d.ts +25 -3
- package/dist/mcp/daemon.d.ts.map +1 -1
- package/dist/mcp/daemon.js +62 -8
- package/dist/mcp/daemon.js.map +1 -1
- package/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
- package/dist/mcp/dynamic-boundaries.js +2 -1
- package/dist/mcp/dynamic-boundaries.js.map +1 -1
- package/dist/mcp/early-ppid.d.ts +26 -0
- package/dist/mcp/early-ppid.d.ts.map +1 -0
- package/dist/mcp/early-ppid.js +29 -0
- package/dist/mcp/early-ppid.js.map +1 -0
- package/dist/mcp/engine.d.ts +4 -5
- package/dist/mcp/engine.d.ts.map +1 -1
- package/dist/mcp/engine.js +27 -1
- package/dist/mcp/engine.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +41 -6
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/liveness-watchdog.d.ts +18 -1
- package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
- package/dist/mcp/liveness-watchdog.js +73 -13
- package/dist/mcp/liveness-watchdog.js.map +1 -1
- package/dist/mcp/memory-budget.d.ts +30 -0
- package/dist/mcp/memory-budget.d.ts.map +1 -0
- package/dist/mcp/memory-budget.js +123 -0
- package/dist/mcp/memory-budget.js.map +1 -0
- package/dist/mcp/proxy.d.ts.map +1 -1
- package/dist/mcp/proxy.js +88 -4
- package/dist/mcp/proxy.js.map +1 -1
- package/dist/mcp/query-cache.d.ts +35 -4
- package/dist/mcp/query-cache.d.ts.map +1 -1
- package/dist/mcp/query-cache.js +89 -19
- package/dist/mcp/query-cache.js.map +1 -1
- package/dist/mcp/query-pool.d.ts +46 -12
- package/dist/mcp/query-pool.d.ts.map +1 -1
- package/dist/mcp/query-pool.js +100 -23
- package/dist/mcp/query-pool.js.map +1 -1
- package/dist/mcp/query-worker.d.ts +2 -2
- package/dist/mcp/query-worker.js +2 -2
- package/dist/mcp/server-instructions.d.ts +4 -27
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +39 -84
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/session.d.ts +14 -0
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +28 -1
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/startup-handshake.d.ts +44 -0
- package/dist/mcp/startup-handshake.d.ts.map +1 -0
- package/dist/mcp/startup-handshake.js +73 -0
- package/dist/mcp/startup-handshake.js.map +1 -0
- package/dist/mcp/tools.d.ts +104 -4
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2432 -217
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +18 -0
- package/dist/mcp/transport.js.map +1 -1
- package/dist/project-config.d.ts +38 -0
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +101 -2
- package/dist/project-config.js.map +1 -1
- package/dist/resolution/c-fnptr-synthesizer.d.ts +2 -1
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/dist/resolution/c-fnptr-synthesizer.js +178 -146
- package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/dist/resolution/callback-synthesizer.d.ts +54 -10
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +1299 -257
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/cooperative-yield.d.ts +10 -2
- package/dist/resolution/cooperative-yield.d.ts.map +1 -1
- package/dist/resolution/cooperative-yield.js +6 -4
- package/dist/resolution/cooperative-yield.js.map +1 -1
- package/dist/resolution/frameworks/cics.d.ts +20 -0
- package/dist/resolution/frameworks/cics.d.ts.map +1 -0
- package/dist/resolution/frameworks/cics.js +90 -0
- package/dist/resolution/frameworks/cics.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -1
- package/dist/resolution/frameworks/go.js +29 -6
- package/dist/resolution/frameworks/go.js.map +1 -1
- package/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/dist/resolution/frameworks/index.js +3 -0
- package/dist/resolution/frameworks/index.js.map +1 -1
- package/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/dist/resolution/frameworks/java.js +14 -6
- package/dist/resolution/frameworks/java.js.map +1 -1
- package/dist/resolution/frameworks/terraform.d.ts +38 -0
- package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
- package/dist/resolution/frameworks/terraform.js +277 -0
- package/dist/resolution/frameworks/terraform.js.map +1 -0
- package/dist/resolution/goframe-synthesizer.d.ts +2 -1
- package/dist/resolution/goframe-synthesizer.d.ts.map +1 -1
- package/dist/resolution/goframe-synthesizer.js +8 -3
- package/dist/resolution/goframe-synthesizer.js.map +1 -1
- package/dist/resolution/import-resolver.d.ts +9 -3
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +295 -11
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +146 -8
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +1089 -131
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/memory-budget.d.ts +48 -0
- package/dist/resolution/memory-budget.d.ts.map +1 -0
- package/dist/resolution/memory-budget.js +162 -0
- package/dist/resolution/memory-budget.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +12 -4
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +793 -130
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/resolver-pool.d.ts +106 -0
- package/dist/resolution/resolver-pool.d.ts.map +1 -0
- package/dist/resolution/resolver-pool.js +344 -0
- package/dist/resolution/resolver-pool.js.map +1 -0
- package/dist/resolution/resolver-worker.d.ts +17 -0
- package/dist/resolution/resolver-worker.d.ts.map +1 -0
- package/dist/resolution/resolver-worker.js +141 -0
- package/dist/resolution/resolver-worker.js.map +1 -0
- 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 +49 -0
- package/dist/resolution/strip-comments.js.map +1 -1
- package/dist/resolution/types.d.ts +32 -0
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/resolution/workspace-packages.d.ts +10 -0
- package/dist/resolution/workspace-packages.d.ts.map +1 -1
- package/dist/resolution/workspace-packages.js +142 -4
- package/dist/resolution/workspace-packages.js.map +1 -1
- package/dist/search/identifier-segments.d.ts +60 -0
- package/dist/search/identifier-segments.d.ts.map +1 -0
- package/dist/search/identifier-segments.js +176 -0
- package/dist/search/identifier-segments.js.map +1 -0
- package/dist/search/query-utils.d.ts +201 -0
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +919 -2
- package/dist/search/query-utils.js.map +1 -1
- package/dist/spec/build/diff-parser.d.ts +55 -0
- package/dist/spec/build/diff-parser.d.ts.map +1 -0
- package/dist/spec/build/diff-parser.js +205 -0
- package/dist/spec/build/diff-parser.js.map +1 -0
- package/dist/spec/build/git-scanner.d.ts +93 -0
- package/dist/spec/build/git-scanner.d.ts.map +1 -0
- package/dist/spec/build/git-scanner.js +254 -0
- package/dist/spec/build/git-scanner.js.map +1 -0
- package/dist/spec/build/pipeline.d.ts +54 -0
- package/dist/spec/build/pipeline.d.ts.map +1 -0
- package/dist/spec/build/pipeline.js +170 -0
- package/dist/spec/build/pipeline.js.map +1 -0
- package/dist/spec/build/scan.d.ts +48 -0
- package/dist/spec/build/scan.d.ts.map +1 -0
- package/dist/spec/build/scan.js +89 -0
- package/dist/spec/build/scan.js.map +1 -0
- package/dist/spec/build/scope-resolver.d.ts +50 -0
- package/dist/spec/build/scope-resolver.d.ts.map +1 -0
- package/dist/spec/build/scope-resolver.js +105 -0
- package/dist/spec/build/scope-resolver.js.map +1 -0
- package/dist/spec/build/spec-extractor.d.ts +74 -0
- package/dist/spec/build/spec-extractor.d.ts.map +1 -0
- package/dist/spec/build/spec-extractor.js +344 -0
- package/dist/spec/build/spec-extractor.js.map +1 -0
- package/dist/spec/config.d.ts +35 -1
- package/dist/spec/config.d.ts.map +1 -1
- package/dist/spec/config.js +30 -5
- package/dist/spec/config.js.map +1 -1
- package/dist/spec/db/fts.d.ts.map +1 -1
- package/dist/spec/db/fts.js +19 -50
- package/dist/spec/db/fts.js.map +1 -1
- package/dist/spec/db/index.d.ts +5 -3
- package/dist/spec/db/index.d.ts.map +1 -1
- package/dist/spec/db/index.js +16 -1
- package/dist/spec/db/index.js.map +1 -1
- package/dist/spec/db/persist.d.ts +45 -0
- package/dist/spec/db/persist.d.ts.map +1 -0
- package/dist/spec/db/persist.js +66 -0
- package/dist/spec/db/persist.js.map +1 -0
- package/dist/spec/db/relations.d.ts +80 -1
- package/dist/spec/db/relations.d.ts.map +1 -1
- package/dist/spec/db/relations.js +175 -4
- package/dist/spec/db/relations.js.map +1 -1
- package/dist/spec/db/schema.d.ts +4 -0
- package/dist/spec/db/schema.d.ts.map +1 -1
- package/dist/spec/db/schema.js +4 -0
- package/dist/spec/db/schema.js.map +1 -1
- package/dist/spec/db/schema.sql +5 -1
- package/dist/spec/db/spec-node.d.ts +5 -0
- package/dist/spec/db/spec-node.d.ts.map +1 -1
- package/dist/spec/db/spec-node.js +11 -5
- package/dist/spec/db/spec-node.js.map +1 -1
- package/dist/spec/db/sql-utils.d.ts +11 -0
- package/dist/spec/db/sql-utils.d.ts.map +1 -0
- package/dist/spec/db/sql-utils.js +19 -0
- package/dist/spec/db/sql-utils.js.map +1 -0
- package/dist/spec/evolve/cluster-context.d.ts +30 -0
- package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
- package/dist/spec/evolve/cluster-context.js +78 -0
- package/dist/spec/evolve/cluster-context.js.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
- package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
- package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
- package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
- package/dist/spec/evolve/commit-spec-persister.js +93 -0
- package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
- package/dist/spec/evolve/impact-locator.d.ts +23 -7
- package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
- package/dist/spec/evolve/impact-locator.js +58 -14
- package/dist/spec/evolve/impact-locator.js.map +1 -1
- package/dist/spec/evolve/pipeline.d.ts +62 -25
- package/dist/spec/evolve/pipeline.d.ts.map +1 -1
- package/dist/spec/evolve/pipeline.js +436 -457
- package/dist/spec/evolve/pipeline.js.map +1 -1
- package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
- package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
- package/dist/spec/evolve/spec-rewriter.js +45 -45
- package/dist/spec/evolve/spec-rewriter.js.map +1 -1
- package/dist/spec/git/commits.d.ts +85 -0
- package/dist/spec/git/commits.d.ts.map +1 -0
- package/dist/spec/git/commits.js +218 -0
- package/dist/spec/git/commits.js.map +1 -0
- package/dist/spec/git/exec.d.ts +13 -0
- package/dist/spec/git/exec.d.ts.map +1 -0
- package/dist/spec/git/exec.js +19 -0
- package/dist/spec/git/exec.js.map +1 -0
- package/dist/spec/git/index.d.ts +9 -0
- package/dist/spec/git/index.d.ts.map +1 -0
- package/dist/spec/git/index.js +22 -0
- package/dist/spec/git/index.js.map +1 -0
- package/dist/spec/git-utils.d.ts +8 -0
- package/dist/spec/git-utils.d.ts.map +1 -0
- package/dist/spec/git-utils.js +14 -0
- package/dist/spec/git-utils.js.map +1 -0
- package/dist/spec/graph/index.d.ts +8 -0
- package/dist/spec/graph/index.d.ts.map +1 -0
- package/dist/spec/graph/index.js +17 -0
- package/dist/spec/graph/index.js.map +1 -0
- package/dist/spec/graph/queries.d.ts +6 -35
- package/dist/spec/graph/queries.d.ts.map +1 -1
- package/dist/spec/graph/queries.js +71 -248
- package/dist/spec/graph/queries.js.map +1 -1
- package/dist/spec/llm/agent-client.d.ts +59 -0
- package/dist/spec/llm/agent-client.d.ts.map +1 -0
- package/dist/spec/llm/agent-client.js +213 -0
- package/dist/spec/llm/agent-client.js.map +1 -0
- package/dist/spec/llm/agents/claude-code.d.ts +32 -0
- package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/claude-code.js +125 -0
- package/dist/spec/llm/agents/claude-code.js.map +1 -0
- package/dist/spec/llm/agents/codex.d.ts +32 -0
- package/dist/spec/llm/agents/codex.d.ts.map +1 -0
- package/dist/spec/llm/agents/codex.js +145 -0
- package/dist/spec/llm/agents/codex.js.map +1 -0
- package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
- package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
- package/dist/spec/llm/agents/detect-utils.js +91 -0
- package/dist/spec/llm/agents/detect-utils.js.map +1 -0
- package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
- package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
- package/dist/spec/llm/agents/deveco-code.js +165 -0
- package/dist/spec/llm/agents/deveco-code.js.map +1 -0
- package/dist/spec/llm/agents/index.d.ts +31 -0
- package/dist/spec/llm/agents/index.d.ts.map +1 -0
- package/dist/spec/llm/agents/index.js +65 -0
- package/dist/spec/llm/agents/index.js.map +1 -0
- package/dist/spec/llm/agents/types.d.ts +76 -0
- package/dist/spec/llm/agents/types.d.ts.map +1 -0
- package/dist/spec/llm/agents/types.js +15 -0
- package/dist/spec/llm/agents/types.js.map +1 -0
- package/dist/spec/llm/client.d.ts +31 -11
- package/dist/spec/llm/client.d.ts.map +1 -1
- package/dist/spec/llm/client.js +143 -81
- package/dist/spec/llm/client.js.map +1 -1
- package/dist/spec/llm/factory.d.ts +41 -0
- package/dist/spec/llm/factory.d.ts.map +1 -0
- package/dist/spec/llm/factory.js +80 -0
- package/dist/spec/llm/factory.js.map +1 -0
- package/dist/spec/llm/prompts.d.ts +24 -8
- package/dist/spec/llm/prompts.d.ts.map +1 -1
- package/dist/spec/llm/prompts.js +100 -50
- package/dist/spec/llm/prompts.js.map +1 -1
- package/dist/spec/llm/retry.d.ts +53 -0
- package/dist/spec/llm/retry.d.ts.map +1 -0
- package/dist/spec/llm/retry.js +153 -0
- package/dist/spec/llm/retry.js.map +1 -0
- package/dist/spec/mine/clusterer.d.ts +63 -0
- package/dist/spec/mine/clusterer.d.ts.map +1 -0
- package/dist/spec/mine/clusterer.js +904 -0
- package/dist/spec/mine/clusterer.js.map +1 -0
- package/dist/spec/mine/clustering/features.d.ts +38 -0
- package/dist/spec/mine/clustering/features.d.ts.map +1 -0
- package/dist/spec/mine/clustering/features.js +108 -0
- package/dist/spec/mine/clustering/features.js.map +1 -0
- package/dist/spec/mine/clustering/index.d.ts +62 -0
- package/dist/spec/mine/clustering/index.d.ts.map +1 -0
- package/dist/spec/mine/clustering/index.js +259 -0
- package/dist/spec/mine/clustering/index.js.map +1 -0
- package/dist/spec/mine/clustering/leiden.d.ts +61 -0
- package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
- package/dist/spec/mine/clustering/leiden.js +489 -0
- package/dist/spec/mine/clustering/leiden.js.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
- package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
- package/dist/spec/mine/clustering/text-similarity.js +98 -0
- package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
- package/dist/spec/mine/generator.d.ts +54 -0
- package/dist/spec/mine/generator.d.ts.map +1 -0
- package/dist/spec/mine/generator.js +267 -0
- package/dist/spec/mine/generator.js.map +1 -0
- package/dist/spec/mine/persist.d.ts +37 -0
- package/dist/spec/mine/persist.d.ts.map +1 -0
- package/dist/spec/mine/persist.js +170 -0
- package/dist/spec/mine/persist.js.map +1 -0
- package/dist/spec/mine/pipeline.d.ts +41 -0
- package/dist/spec/mine/pipeline.d.ts.map +1 -0
- package/dist/spec/mine/pipeline.js +236 -0
- package/dist/spec/mine/pipeline.js.map +1 -0
- package/dist/spec/mine/progress-handler.d.ts +22 -0
- package/dist/spec/mine/progress-handler.d.ts.map +1 -0
- package/dist/spec/mine/progress-handler.js +108 -0
- package/dist/spec/mine/progress-handler.js.map +1 -0
- package/dist/spec/mine/progress.d.ts +23 -0
- package/dist/spec/mine/progress.d.ts.map +1 -0
- package/dist/spec/mine/progress.js +12 -0
- package/dist/spec/mine/progress.js.map +1 -0
- package/dist/spec/mine/scanner.d.ts +59 -0
- package/dist/spec/mine/scanner.d.ts.map +1 -0
- package/dist/spec/mine/scanner.js +383 -0
- package/dist/spec/mine/scanner.js.map +1 -0
- package/dist/spec/types.d.ts +32 -0
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/spec/ui/index.d.ts +9 -0
- package/dist/spec/ui/index.d.ts.map +1 -0
- package/dist/spec/ui/index.js +16 -0
- package/dist/spec/ui/index.js.map +1 -0
- package/dist/spec/ui/progress-handler.d.ts +33 -0
- package/dist/spec/ui/progress-handler.d.ts.map +1 -0
- package/dist/spec/ui/progress-handler.js +132 -0
- package/dist/spec/ui/progress-handler.js.map +1 -0
- package/dist/spec/ui/progress.d.ts +24 -0
- package/dist/spec/ui/progress.d.ts.map +1 -0
- package/dist/spec/ui/progress.js +13 -0
- package/dist/spec/ui/progress.js.map +1 -0
- package/dist/spec/utils/fs.d.ts +45 -0
- package/dist/spec/utils/fs.d.ts.map +1 -0
- package/dist/spec/utils/fs.js +163 -0
- package/dist/spec/utils/fs.js.map +1 -0
- package/dist/spec/utils/index.d.ts +12 -0
- package/dist/spec/utils/index.d.ts.map +1 -0
- package/dist/spec/utils/index.js +26 -0
- package/dist/spec/utils/index.js.map +1 -0
- package/dist/spec/utils/meta.d.ts +32 -0
- package/dist/spec/utils/meta.d.ts.map +1 -0
- package/dist/spec/utils/meta.js +122 -0
- package/dist/spec/utils/meta.js.map +1 -0
- package/dist/spec/utils/truncate.d.ts +86 -0
- package/dist/spec/utils/truncate.d.ts.map +1 -0
- package/dist/spec/utils/truncate.js +172 -0
- package/dist/spec/utils/truncate.js.map +1 -0
- package/dist/spec/utils.d.ts +4 -16
- package/dist/spec/utils.d.ts.map +1 -1
- package/dist/spec/utils.js +6 -58
- package/dist/spec/utils.js.map +1 -1
- package/dist/sync/git-hooks.d.ts.map +1 -1
- package/dist/sync/git-hooks.js +2 -0
- package/dist/sync/git-hooks.js.map +1 -1
- package/dist/sync/watcher.d.ts +35 -6
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +127 -17
- package/dist/sync/watcher.js.map +1 -1
- package/dist/sync/worktree.d.ts.map +1 -1
- package/dist/sync/worktree.js +5 -0
- package/dist/sync/worktree.js.map +1 -1
- package/dist/telemetry/index.js +3 -3
- package/dist/telemetry/index.js.map +1 -1
- package/dist/types.d.ts +22 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -1
- package/dist/upgrade/index.d.ts +32 -0
- package/dist/upgrade/index.d.ts.map +1 -1
- package/dist/upgrade/index.js +162 -14
- package/dist/upgrade/index.js.map +1 -1
- package/dist/upgrade/remove-binary.d.ts +87 -0
- package/dist/upgrade/remove-binary.d.ts.map +1 -0
- package/dist/upgrade/remove-binary.js +289 -0
- package/dist/upgrade/remove-binary.js.map +1 -0
- package/dist/upgrade/update-check.d.ts +92 -0
- package/dist/upgrade/update-check.d.ts.map +1 -0
- package/dist/upgrade/update-check.js +258 -0
- package/dist/upgrade/update-check.js.map +1 -0
- package/package.json +6 -2
- package/scripts/agent-eval/run-all.sh +6 -0
- package/scripts/build-bundle.sh +5 -0
- package/scripts/npm-shim.js +8 -1
- package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
- package/scripts/exp_boundary_eval/data/agents.json +0 -109
- package/scripts/exp_boundary_eval/data/experiments.json +0 -140
- package/scripts/qa_eval/README.md +0 -407
- package/scripts/qa_eval/_test_deveco_probe.py +0 -41
- package/scripts/qa_eval/agent_runner.py +0 -526
- package/scripts/qa_eval/data/.gitignore +0 -4
- package/scripts/qa_eval/data/test-set.jsonl +0 -2
- package/scripts/qa_eval/eval_metrics.py +0 -274
- package/scripts/qa_eval/external_agent.py +0 -976
- package/scripts/qa_eval/llm_config.py +0 -92
- package/scripts/qa_eval/memory_monitor.py +0 -132
- package/scripts/qa_eval/my_answer_accuracy.py +0 -187
- package/scripts/qa_eval/requirements.txt +0 -2
- package/scripts/qa_eval/run_pipeline.py +0 -804
- package/scripts/qa_eval/stats_efficiency.py +0 -279
- package/scripts/qa_eval/stats_scores.py +0 -207
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex CLI headless adapter (`codex exec`).
|
|
4
|
+
*
|
|
5
|
+
* Invocation design:
|
|
6
|
+
* - `codex exec` — non-interactive one-shot mode
|
|
7
|
+
* - `--sandbox read-only` — no file writes or command side effects
|
|
8
|
+
* - `--skip-git-repo-check` — allow running outside/inside any repo
|
|
9
|
+
* - `--json` — stdout is a JSONL event stream; the final
|
|
10
|
+
* assistant message is the last
|
|
11
|
+
* `item.completed` event whose item type is
|
|
12
|
+
* `agent_message`
|
|
13
|
+
* - `-` — read the prompt from stdin (prompts can
|
|
14
|
+
* reach ~60K chars; stdin avoids OS argv
|
|
15
|
+
* length limits)
|
|
16
|
+
*
|
|
17
|
+
* Codex has no native system-prompt flag, so the system prompt is embedded
|
|
18
|
+
* into the user prompt inside an <instructions> block.
|
|
19
|
+
*
|
|
20
|
+
* @module spec/llm/agents/codex
|
|
21
|
+
*/
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
39
|
+
var ownKeys = function(o) {
|
|
40
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
41
|
+
var ar = [];
|
|
42
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
43
|
+
return ar;
|
|
44
|
+
};
|
|
45
|
+
return ownKeys(o);
|
|
46
|
+
};
|
|
47
|
+
return function (mod) {
|
|
48
|
+
if (mod && mod.__esModule) return mod;
|
|
49
|
+
var result = {};
|
|
50
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
51
|
+
__setModuleDefault(result, mod);
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
54
|
+
})();
|
|
55
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
+
exports.codexAdapter = exports.CodexAdapter = void 0;
|
|
57
|
+
const os = __importStar(require("os"));
|
|
58
|
+
const path = __importStar(require("path"));
|
|
59
|
+
const detect_utils_1 = require("./detect-utils");
|
|
60
|
+
/** Signatures of auth/quota failures — retrying is pointless. */
|
|
61
|
+
const TERMINAL_PATTERNS = [
|
|
62
|
+
/not\s+logged\s+in/i,
|
|
63
|
+
/please\s+(run\s+)?\/?login/i,
|
|
64
|
+
/unauthorized|invalid\s+api\s+key|authentication/i,
|
|
65
|
+
/usage\s+limit|quota\s+(exceeded|exhausted)|rate\s+limit\s+reached/i,
|
|
66
|
+
];
|
|
67
|
+
/** Footer line Codex prints after the final message in plain-text mode. */
|
|
68
|
+
const STDOUT_NOISE = /^tokens used\b/i;
|
|
69
|
+
class CodexAdapter {
|
|
70
|
+
id = 'codex';
|
|
71
|
+
displayName = 'Codex';
|
|
72
|
+
binary = 'codex';
|
|
73
|
+
detect() {
|
|
74
|
+
// Executable-based detection only: an uninstalled Codex leaves
|
|
75
|
+
// ~/.codex behind, so the config directory is NOT a valid signal.
|
|
76
|
+
// Fall back to a well-known manual-install location for setups that
|
|
77
|
+
// never added the binary to PATH.
|
|
78
|
+
return (0, detect_utils_1.isOnPath)(this.binary)
|
|
79
|
+
|| (0, detect_utils_1.isExecutable)(path.join(os.homedir(), '.local', 'bin', 'codex'));
|
|
80
|
+
}
|
|
81
|
+
buildInvocation(systemPrompt, userPrompt) {
|
|
82
|
+
const args = [
|
|
83
|
+
'exec',
|
|
84
|
+
'--sandbox', 'read-only',
|
|
85
|
+
'--skip-git-repo-check',
|
|
86
|
+
'--json',
|
|
87
|
+
'-',
|
|
88
|
+
];
|
|
89
|
+
// No native system-prompt flag — embed it in the prompt body.
|
|
90
|
+
const stdin = systemPrompt
|
|
91
|
+
? `<instructions>\n${systemPrompt}\n</instructions>\n\n${userPrompt}`
|
|
92
|
+
: userPrompt;
|
|
93
|
+
return { args, stdin };
|
|
94
|
+
}
|
|
95
|
+
extractOutput(result) {
|
|
96
|
+
// JSONL event stream (codex exec --json): the model text is the LAST
|
|
97
|
+
// `item.completed` event whose item is an agent message. Verified
|
|
98
|
+
// shape: {"type":"item.completed","item":{"type":"agent_message","text":...}}
|
|
99
|
+
let lastMessage = '';
|
|
100
|
+
let sawEvent = false;
|
|
101
|
+
for (const line of result.stdout.split('\n')) {
|
|
102
|
+
const trimmed = line.trim();
|
|
103
|
+
if (!trimmed.startsWith('{'))
|
|
104
|
+
continue;
|
|
105
|
+
try {
|
|
106
|
+
const event = JSON.parse(trimmed);
|
|
107
|
+
sawEvent = true;
|
|
108
|
+
if (event?.type === 'item.completed'
|
|
109
|
+
&& event?.item?.type === 'agent_message') {
|
|
110
|
+
// `text` is the documented field; tolerate `message` for
|
|
111
|
+
// cross-version robustness at this external boundary.
|
|
112
|
+
const text = event.item.text ?? event.item.message;
|
|
113
|
+
if (typeof text === 'string')
|
|
114
|
+
lastMessage = text;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Non-JSON line — ignore.
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (lastMessage)
|
|
122
|
+
return lastMessage.trim();
|
|
123
|
+
if (sawEvent)
|
|
124
|
+
return ''; // events parsed but no agent message
|
|
125
|
+
// Fallback for CLI versions without JSONL support: strip known noise.
|
|
126
|
+
return result.stdout
|
|
127
|
+
.split('\n')
|
|
128
|
+
.filter((line) => !STDOUT_NOISE.test(line.trim()))
|
|
129
|
+
.join('\n')
|
|
130
|
+
.trim();
|
|
131
|
+
}
|
|
132
|
+
classifyFailure(failure) {
|
|
133
|
+
if (failure.exitCode === null)
|
|
134
|
+
return 'terminal'; // spawn-level failure (e.g. ENOENT)
|
|
135
|
+
// Auth/quota errors surface on stderr (Rust logs) AND as JSONL error
|
|
136
|
+
// events on stdout — check both.
|
|
137
|
+
const haystack = `${failure.stderr}\n${failure.stdout}`;
|
|
138
|
+
if (TERMINAL_PATTERNS.some((re) => re.test(haystack)))
|
|
139
|
+
return 'terminal';
|
|
140
|
+
return 'retryable';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.CodexAdapter = CodexAdapter;
|
|
144
|
+
exports.codexAdapter = new CodexAdapter();
|
|
145
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared detection helpers for coding-agent adapters.
|
|
3
|
+
*
|
|
4
|
+
* Detection philosophy mirrors src/installer/targets (cheap filesystem
|
|
5
|
+
* checks, never spawn the agent), with one crucial difference: installer
|
|
6
|
+
* targets detect WHERE to install hooks (a config directory is a fine
|
|
7
|
+
* signal), while adapters detect WHETHER the agent can run — and an
|
|
8
|
+
* uninstalled agent leaves its config directory behind. Detection must
|
|
9
|
+
* therefore key on executable files only: the binary on PATH, or a
|
|
10
|
+
* well-known install path with the executable bit set.
|
|
11
|
+
*
|
|
12
|
+
* @module spec/llm/agents/detect-utils
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Check whether `binary` resolves to an existing file on PATH.
|
|
16
|
+
*
|
|
17
|
+
* Scans PATH directories directly instead of shelling out to `which` —
|
|
18
|
+
* no child process, no platform-specific locator quirks. Executable-bit
|
|
19
|
+
* verification is POSIX-only; on Windows existence is sufficient.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isOnPath(binary: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Check whether `fullPath` exists and is executable (POSIX) or simply
|
|
24
|
+
* exists (Windows). Used for well-known install locations of agents that
|
|
25
|
+
* are installed but not on PATH.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isExecutable(fullPath: string): boolean;
|
|
28
|
+
//# sourceMappingURL=detect-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-utils.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/detect-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAehD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared detection helpers for coding-agent adapters.
|
|
4
|
+
*
|
|
5
|
+
* Detection philosophy mirrors src/installer/targets (cheap filesystem
|
|
6
|
+
* checks, never spawn the agent), with one crucial difference: installer
|
|
7
|
+
* targets detect WHERE to install hooks (a config directory is a fine
|
|
8
|
+
* signal), while adapters detect WHETHER the agent can run — and an
|
|
9
|
+
* uninstalled agent leaves its config directory behind. Detection must
|
|
10
|
+
* therefore key on executable files only: the binary on PATH, or a
|
|
11
|
+
* well-known install path with the executable bit set.
|
|
12
|
+
*
|
|
13
|
+
* @module spec/llm/agents/detect-utils
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.isOnPath = isOnPath;
|
|
50
|
+
exports.isExecutable = isExecutable;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
/**
|
|
54
|
+
* Check whether `binary` resolves to an existing file on PATH.
|
|
55
|
+
*
|
|
56
|
+
* Scans PATH directories directly instead of shelling out to `which` —
|
|
57
|
+
* no child process, no platform-specific locator quirks. Executable-bit
|
|
58
|
+
* verification is POSIX-only; on Windows existence is sufficient.
|
|
59
|
+
*/
|
|
60
|
+
function isOnPath(binary) {
|
|
61
|
+
const pathEnv = process.env.PATH;
|
|
62
|
+
if (!pathEnv)
|
|
63
|
+
return false;
|
|
64
|
+
const candidates = process.platform === 'win32'
|
|
65
|
+
? [binary, `${binary}.exe`, `${binary}.cmd`, `${binary}.bat`]
|
|
66
|
+
: [binary];
|
|
67
|
+
for (const dir of pathEnv.split(path.delimiter)) {
|
|
68
|
+
if (!dir)
|
|
69
|
+
continue;
|
|
70
|
+
for (const name of candidates) {
|
|
71
|
+
if (isExecutable(path.join(dir, name)))
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check whether `fullPath` exists and is executable (POSIX) or simply
|
|
79
|
+
* exists (Windows). Used for well-known install locations of agents that
|
|
80
|
+
* are installed but not on PATH.
|
|
81
|
+
*/
|
|
82
|
+
function isExecutable(fullPath) {
|
|
83
|
+
try {
|
|
84
|
+
fs.accessSync(fullPath, fs.constants.X_OK);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=detect-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-utils.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/detect-utils.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYH,4BAeC;AAOD,oCAOC;AAvCD,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,MAAc;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC7C,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC7D,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEb,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevEco Code headless adapter (`deveco run`).
|
|
3
|
+
*
|
|
4
|
+
* Invocation design:
|
|
5
|
+
* - `deveco run` — non-interactive one-shot mode, exits when
|
|
6
|
+
* the session goes idle
|
|
7
|
+
* - `--agent explore` — read-only agent: only read/grep/glob/
|
|
8
|
+
* webfetch/websearch are allowed; all write
|
|
9
|
+
* and shell tools are denied at agent level
|
|
10
|
+
* - `--format json` — stdout is a JSONL event stream; model text
|
|
11
|
+
* arrives in `{"type":"text","part":{...}}`
|
|
12
|
+
* events
|
|
13
|
+
* - prompt via stdin — spec prompts can reach ~60K chars; stdin
|
|
14
|
+
* avoids OS argv length limits
|
|
15
|
+
*
|
|
16
|
+
* DevEco Code has no native system-prompt flag on `deveco run`, so the
|
|
17
|
+
* system prompt is embedded into the user prompt inside an <instructions>
|
|
18
|
+
* block — same strategy as the Codex adapter.
|
|
19
|
+
*
|
|
20
|
+
* @module spec/llm/agents/deveco-code
|
|
21
|
+
*/
|
|
22
|
+
import { AgentAdapter, AgentFailure, AgentInvocation, AgentRunResult } from './types';
|
|
23
|
+
export declare class DevecoCodeAdapter implements AgentAdapter {
|
|
24
|
+
readonly id: "deveco-code";
|
|
25
|
+
readonly displayName = "DevEco Code";
|
|
26
|
+
readonly binary = "deveco";
|
|
27
|
+
detect(): boolean;
|
|
28
|
+
buildInvocation(systemPrompt: string, userPrompt: string): AgentInvocation;
|
|
29
|
+
extractOutput(result: AgentRunResult): string;
|
|
30
|
+
classifyFailure(failure: AgentFailure): 'retryable' | 'terminal';
|
|
31
|
+
}
|
|
32
|
+
export declare const devecoCodeAdapter: DevecoCodeAdapter;
|
|
33
|
+
//# sourceMappingURL=deveco-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deveco-code.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/deveco-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAYtF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,MAAM,YAAY;IAE3B,MAAM,IAAI,OAAO;IAkBjB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe;IAoB1E,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAiD7C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU;CAMjE;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DevEco Code headless adapter (`deveco run`).
|
|
4
|
+
*
|
|
5
|
+
* Invocation design:
|
|
6
|
+
* - `deveco run` — non-interactive one-shot mode, exits when
|
|
7
|
+
* the session goes idle
|
|
8
|
+
* - `--agent explore` — read-only agent: only read/grep/glob/
|
|
9
|
+
* webfetch/websearch are allowed; all write
|
|
10
|
+
* and shell tools are denied at agent level
|
|
11
|
+
* - `--format json` — stdout is a JSONL event stream; model text
|
|
12
|
+
* arrives in `{"type":"text","part":{...}}`
|
|
13
|
+
* events
|
|
14
|
+
* - prompt via stdin — spec prompts can reach ~60K chars; stdin
|
|
15
|
+
* avoids OS argv length limits
|
|
16
|
+
*
|
|
17
|
+
* DevEco Code has no native system-prompt flag on `deveco run`, so the
|
|
18
|
+
* system prompt is embedded into the user prompt inside an <instructions>
|
|
19
|
+
* block — same strategy as the Codex adapter.
|
|
20
|
+
*
|
|
21
|
+
* @module spec/llm/agents/deveco-code
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.devecoCodeAdapter = exports.DevecoCodeAdapter = void 0;
|
|
58
|
+
const os = __importStar(require("os"));
|
|
59
|
+
const path = __importStar(require("path"));
|
|
60
|
+
const detect_utils_1 = require("./detect-utils");
|
|
61
|
+
/** stderr signatures of auth/quota failures — retrying is pointless. */
|
|
62
|
+
const TERMINAL_PATTERNS = [
|
|
63
|
+
/not\s+logged\s+in/i,
|
|
64
|
+
/please\s+(run\s+)?\/?login/i,
|
|
65
|
+
/unauthorized|invalid\s+api\s+key|authentication/i,
|
|
66
|
+
/usage\s+limit|quota\s+(exceeded|exhausted)|credit\s+balance/i,
|
|
67
|
+
/rate\s+limit/i,
|
|
68
|
+
];
|
|
69
|
+
class DevecoCodeAdapter {
|
|
70
|
+
id = 'deveco-code';
|
|
71
|
+
displayName = 'DevEco Code';
|
|
72
|
+
binary = 'deveco';
|
|
73
|
+
detect() {
|
|
74
|
+
// Executable-based detection only. DevEco Code config directories
|
|
75
|
+
// (`.deveco/`, `~/.config/deveco/`) persist after uninstall, so they
|
|
76
|
+
// are NOT valid detection signals.
|
|
77
|
+
//
|
|
78
|
+
// DevEco Code is built on OpenCode and follows similar install patterns.
|
|
79
|
+
// Common install paths:
|
|
80
|
+
// - System PATH (via installer)
|
|
81
|
+
// - ~/.local/bin/deveco (manual install, same pattern as codex/claude)
|
|
82
|
+
//
|
|
83
|
+
// DevEco Studio IDE installs its own copy to an IDE-private location;
|
|
84
|
+
// we don't attempt to locate that — PATH + ~/.local/bin covers the
|
|
85
|
+
// CLI-first workflows this adapter targets.
|
|
86
|
+
const home = os.homedir();
|
|
87
|
+
return (0, detect_utils_1.isOnPath)(this.binary)
|
|
88
|
+
|| (0, detect_utils_1.isExecutable)(path.join(home, '.local', 'bin', 'deveco'));
|
|
89
|
+
}
|
|
90
|
+
buildInvocation(systemPrompt, userPrompt) {
|
|
91
|
+
const args = [
|
|
92
|
+
'run',
|
|
93
|
+
'--agent', 'explore', // Read-only: no file writes or shell commands
|
|
94
|
+
'--format', 'json', // JSONL event stream for reliable parsing
|
|
95
|
+
];
|
|
96
|
+
// No native system-prompt flag — embed it in the prompt body, same
|
|
97
|
+
// strategy as Codex. The agent processes the combined prompt as a
|
|
98
|
+
// single user message.
|
|
99
|
+
const prompt = systemPrompt
|
|
100
|
+
? `<instructions>\n${systemPrompt}\n</instructions>\n\n${userPrompt}`
|
|
101
|
+
: userPrompt;
|
|
102
|
+
// Deliver via stdin to avoid OS argv length limits (spec prompts are
|
|
103
|
+
// ~50-60K chars). `deveco run` reads from stdin when no positional
|
|
104
|
+
// message is provided and stdin is not a TTY — both hold when spawned.
|
|
105
|
+
return { args, stdin: prompt };
|
|
106
|
+
}
|
|
107
|
+
extractOutput(result) {
|
|
108
|
+
// JSONL event stream (`deveco run --format json`).
|
|
109
|
+
//
|
|
110
|
+
// Events of interest:
|
|
111
|
+
// {"type":"text","timestamp":...,"sessionID":"...",
|
|
112
|
+
// "part":{"type":"text","text":"actual content","time":{...}}}
|
|
113
|
+
//
|
|
114
|
+
// We extract all `type: "text"` events and concatenate them. Text
|
|
115
|
+
// parts can arrive incrementally (streaming); each event contains the
|
|
116
|
+
// latest content delta.
|
|
117
|
+
//
|
|
118
|
+
// Other event types we ignore:
|
|
119
|
+
// "tool_use" — tool invocations (empty with explore agent anyway)
|
|
120
|
+
// "reasoning" — thinking traces
|
|
121
|
+
// "error" — session errors
|
|
122
|
+
// "step_start" / "step_finish" — turn boundaries
|
|
123
|
+
let output = '';
|
|
124
|
+
let sawJsonlEvent = false;
|
|
125
|
+
for (const line of result.stdout.split('\n')) {
|
|
126
|
+
const trimmed = line.trim();
|
|
127
|
+
if (!trimmed.startsWith('{'))
|
|
128
|
+
continue;
|
|
129
|
+
try {
|
|
130
|
+
const event = JSON.parse(trimmed);
|
|
131
|
+
sawJsonlEvent = true;
|
|
132
|
+
if (event?.type === 'text'
|
|
133
|
+
&& event?.part?.type === 'text'
|
|
134
|
+
&& typeof event.part.text === 'string') {
|
|
135
|
+
output += event.part.text;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Non-JSON line — ignore (diagnostic output, warnings, etc.)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (output)
|
|
143
|
+
return output.trim();
|
|
144
|
+
if (sawJsonlEvent)
|
|
145
|
+
return ''; // events parsed but no text content
|
|
146
|
+
// Fallback for CLI versions that may not produce JSONL (unlikely with
|
|
147
|
+
// --format json, but safe). Strip anything that looks like noise.
|
|
148
|
+
return result.stdout
|
|
149
|
+
.split('\n')
|
|
150
|
+
.filter((line) => !/^(deveco|warning|info)[:\s]/i.test(line.trim()))
|
|
151
|
+
.join('\n')
|
|
152
|
+
.trim();
|
|
153
|
+
}
|
|
154
|
+
classifyFailure(failure) {
|
|
155
|
+
if (failure.exitCode === null)
|
|
156
|
+
return 'terminal'; // spawn-level failure (e.g. ENOENT)
|
|
157
|
+
// Auth/quota errors surface on stderr.
|
|
158
|
+
if (TERMINAL_PATTERNS.some((re) => re.test(failure.stderr)))
|
|
159
|
+
return 'terminal';
|
|
160
|
+
return 'retryable';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.DevecoCodeAdapter = DevecoCodeAdapter;
|
|
164
|
+
exports.devecoCodeAdapter = new DevecoCodeAdapter();
|
|
165
|
+
//# sourceMappingURL=deveco-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deveco-code.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/deveco-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coding-agent registry, installation detection, and resolution.
|
|
3
|
+
*
|
|
4
|
+
* Resolution is fully automatic and deterministic (spec evolve is mostly
|
|
5
|
+
* triggered by git hooks, so interactive selection is impossible):
|
|
6
|
+
*
|
|
7
|
+
* - exactly one agent installed → use it
|
|
8
|
+
* - both installed → prefer Claude Code (registry order)
|
|
9
|
+
* - none installed → null (caller falls back to LLMConfig)
|
|
10
|
+
*
|
|
11
|
+
* There is intentionally no user-facing way to pick an agent. The
|
|
12
|
+
* HOMEGRAPH_SPEC_AGENT environment variable exists ONLY as a test escape
|
|
13
|
+
* hatch ('none' disables agent usage; an adapter id forces that adapter)
|
|
14
|
+
* and is not documented for end users.
|
|
15
|
+
*
|
|
16
|
+
* @module spec/llm/agents
|
|
17
|
+
*/
|
|
18
|
+
import { AgentAdapter } from './types';
|
|
19
|
+
export type { AgentAdapter, AgentInvocation, AgentRunResult } from './types';
|
|
20
|
+
export { claudeCodeAdapter } from './claude-code';
|
|
21
|
+
export { codexAdapter } from './codex';
|
|
22
|
+
export { devecoCodeAdapter } from './deveco-code';
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the coding agent to use for LLM tasks, or null when none is
|
|
25
|
+
* installed. Result is cached for the process lifetime — detection is
|
|
26
|
+
* repeated only after {@link resetAgentResolutionCache} (tests).
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveAgent(): AgentAdapter | null;
|
|
29
|
+
/** Test-only: clear the cached resolution after mutating PATH/HOME/env. */
|
|
30
|
+
export declare function resetAgentResolutionCache(): void;
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/spec/llm/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAWlD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,YAAY,GAAG,IAAI,CAgBlD;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Coding-agent registry, installation detection, and resolution.
|
|
4
|
+
*
|
|
5
|
+
* Resolution is fully automatic and deterministic (spec evolve is mostly
|
|
6
|
+
* triggered by git hooks, so interactive selection is impossible):
|
|
7
|
+
*
|
|
8
|
+
* - exactly one agent installed → use it
|
|
9
|
+
* - both installed → prefer Claude Code (registry order)
|
|
10
|
+
* - none installed → null (caller falls back to LLMConfig)
|
|
11
|
+
*
|
|
12
|
+
* There is intentionally no user-facing way to pick an agent. The
|
|
13
|
+
* HOMEGRAPH_SPEC_AGENT environment variable exists ONLY as a test escape
|
|
14
|
+
* hatch ('none' disables agent usage; an adapter id forces that adapter)
|
|
15
|
+
* and is not documented for end users.
|
|
16
|
+
*
|
|
17
|
+
* @module spec/llm/agents
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.devecoCodeAdapter = exports.codexAdapter = exports.claudeCodeAdapter = void 0;
|
|
21
|
+
exports.resolveAgent = resolveAgent;
|
|
22
|
+
exports.resetAgentResolutionCache = resetAgentResolutionCache;
|
|
23
|
+
const claude_code_1 = require("./claude-code");
|
|
24
|
+
const codex_1 = require("./codex");
|
|
25
|
+
const deveco_code_1 = require("./deveco-code");
|
|
26
|
+
var claude_code_2 = require("./claude-code");
|
|
27
|
+
Object.defineProperty(exports, "claudeCodeAdapter", { enumerable: true, get: function () { return claude_code_2.claudeCodeAdapter; } });
|
|
28
|
+
var codex_2 = require("./codex");
|
|
29
|
+
Object.defineProperty(exports, "codexAdapter", { enumerable: true, get: function () { return codex_2.codexAdapter; } });
|
|
30
|
+
var deveco_code_2 = require("./deveco-code");
|
|
31
|
+
Object.defineProperty(exports, "devecoCodeAdapter", { enumerable: true, get: function () { return deveco_code_2.devecoCodeAdapter; } });
|
|
32
|
+
/**
|
|
33
|
+
* Registry in priority order — the first installed adapter wins.
|
|
34
|
+
* Claude Code ranks first: its headless mode offers native system-prompt
|
|
35
|
+
* support, a clean JSON output envelope, and reliable tool disabling.
|
|
36
|
+
*/
|
|
37
|
+
const REGISTRY = [claude_code_1.claudeCodeAdapter, codex_1.codexAdapter, deveco_code_1.devecoCodeAdapter];
|
|
38
|
+
let cachedResolution;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the coding agent to use for LLM tasks, or null when none is
|
|
41
|
+
* installed. Result is cached for the process lifetime — detection is
|
|
42
|
+
* repeated only after {@link resetAgentResolutionCache} (tests).
|
|
43
|
+
*/
|
|
44
|
+
function resolveAgent() {
|
|
45
|
+
if (cachedResolution !== undefined)
|
|
46
|
+
return cachedResolution;
|
|
47
|
+
const override = process.env.HOMEGRAPH_SPEC_AGENT?.trim().toLowerCase();
|
|
48
|
+
let resolved = null;
|
|
49
|
+
if (override === 'none') {
|
|
50
|
+
resolved = null;
|
|
51
|
+
}
|
|
52
|
+
else if (override) {
|
|
53
|
+
resolved = REGISTRY.find((a) => a.id === override) ?? null;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
resolved = REGISTRY.find((a) => a.detect()) ?? null;
|
|
57
|
+
}
|
|
58
|
+
cachedResolution = resolved;
|
|
59
|
+
return resolved;
|
|
60
|
+
}
|
|
61
|
+
/** Test-only: clear the cached resolution after mutating PATH/HOME/env. */
|
|
62
|
+
function resetAgentResolutionCache() {
|
|
63
|
+
cachedResolution = undefined;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/spec/llm/agents/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AA0BH,oCAgBC;AAGD,8DAEC;AA5CD,+CAAkD;AAClD,mCAAuC;AACvC,+CAAkD;AAGlD,6CAAkD;AAAzC,gHAAA,iBAAiB,OAAA;AAC1B,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,6CAAkD;AAAzC,gHAAA,iBAAiB,OAAA;AAE1B;;;;GAIG;AACH,MAAM,QAAQ,GAAmB,CAAC,+BAAiB,EAAE,oBAAY,EAAE,+BAAiB,CAAC,CAAC;AAEtF,IAAI,gBAAiD,CAAC;AAEtD;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI,QAAQ,GAAwB,IAAI,CAAC;IAEzC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;IAED,gBAAgB,GAAG,QAAQ,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2EAA2E;AAC3E,SAAgB,yBAAyB;IACvC,gBAAgB,GAAG,SAAS,CAAC;AAC/B,CAAC"}
|