homegraph 1.1.2 → 1.2.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/LICENSE +21 -21
- package/README.md +268 -243
- package/dist/arkts/ohos-api-index.d.ts +15 -0
- package/dist/arkts/ohos-api-index.d.ts.map +1 -0
- package/dist/arkts/ohos-api-index.js +190 -0
- package/dist/arkts/ohos-api-index.js.map +1 -0
- package/dist/arkts/ohos-sdk-input.d.ts +36 -0
- package/dist/arkts/ohos-sdk-input.d.ts.map +1 -0
- package/dist/arkts/ohos-sdk-input.js +214 -0
- package/dist/arkts/ohos-sdk-input.js.map +1 -0
- package/dist/bin/command-supervision.d.ts +12 -0
- package/dist/bin/command-supervision.d.ts.map +1 -0
- package/dist/bin/command-supervision.js +86 -0
- package/dist/bin/command-supervision.js.map +1 -0
- package/dist/bin/homegraph.d.ts +1 -1
- package/dist/bin/homegraph.js +971 -71
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/db/index.d.ts +20 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +39 -0
- 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 +58 -19
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +14 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +314 -143
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +172 -152
- package/dist/directory.d.ts +32 -0
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +88 -5
- package/dist/directory.js.map +1 -1
- package/dist/extraction/arkts-batch-worker.d.ts +2 -0
- package/dist/extraction/arkts-batch-worker.d.ts.map +1 -0
- package/dist/extraction/arkts-batch-worker.js +28 -0
- package/dist/extraction/arkts-batch-worker.js.map +1 -0
- package/dist/extraction/context.d.ts +11 -0
- package/dist/extraction/context.d.ts.map +1 -1
- package/dist/extraction/context.js +20 -0
- package/dist/extraction/context.js.map +1 -1
- package/dist/extraction/index.d.ts +16 -2
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +619 -380
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts-state-decorators.d.ts +13 -0
- package/dist/extraction/languages/arkts-state-decorators.d.ts.map +1 -0
- package/dist/extraction/languages/arkts-state-decorators.js +26 -0
- package/dist/extraction/languages/arkts-state-decorators.js.map +1 -0
- package/dist/extraction/languages/arkts-viewtree.d.ts +4 -2
- package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
- package/dist/extraction/languages/arkts-viewtree.js +21 -6
- package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
- package/dist/extraction/languages/arkts.d.ts +98 -2
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +1290 -61
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts +56 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/dist/extraction/languages/c-cpp.js +198 -1
- package/dist/extraction/languages/c-cpp.js.map +1 -1
- package/dist/extraction/languages/ohos-api-consumer.d.ts +34 -0
- package/dist/extraction/languages/ohos-api-consumer.d.ts.map +1 -0
- package/dist/extraction/languages/ohos-api-consumer.js +283 -0
- package/dist/extraction/languages/ohos-api-consumer.js.map +1 -0
- package/dist/extraction/parse-pool.d.ts +126 -0
- package/dist/extraction/parse-pool.d.ts.map +1 -0
- package/dist/extraction/parse-pool.js +319 -0
- package/dist/extraction/parse-pool.js.map +1 -0
- package/dist/extraction/tree-sitter-types.d.ts +17 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.d.ts +21 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +198 -27
- package/dist/extraction/tree-sitter.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/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +76 -17
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -4
- package/dist/index.js.map +1 -1
- package/dist/installer/instructions-template.js +9 -9
- package/dist/installer/targets/shared.d.ts +5 -6
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +5 -6
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/mcp/daemon-paths.d.ts +30 -3
- package/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/dist/mcp/daemon-paths.js +50 -10
- package/dist/mcp/daemon-paths.js.map +1 -1
- package/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/dist/mcp/daemon-registry.js +7 -3
- package/dist/mcp/daemon-registry.js.map +1 -1
- package/dist/mcp/daemon.d.ts +48 -0
- package/dist/mcp/daemon.d.ts.map +1 -1
- package/dist/mcp/daemon.js +196 -32
- package/dist/mcp/daemon.js.map +1 -1
- package/dist/mcp/engine.d.ts +17 -0
- package/dist/mcp/engine.d.ts.map +1 -1
- package/dist/mcp/engine.js +73 -1
- package/dist/mcp/engine.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +25 -43
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/liveness-watchdog.js +16 -16
- package/dist/mcp/ppid-watchdog.d.ts +18 -0
- package/dist/mcp/ppid-watchdog.d.ts.map +1 -1
- package/dist/mcp/ppid-watchdog.js +37 -0
- package/dist/mcp/ppid-watchdog.js.map +1 -1
- package/dist/mcp/query-cache.d.ts +25 -0
- package/dist/mcp/query-cache.d.ts.map +1 -0
- package/dist/mcp/query-cache.js +191 -0
- package/dist/mcp/query-cache.js.map +1 -0
- package/dist/mcp/query-pool.d.ts +94 -0
- package/dist/mcp/query-pool.d.ts.map +1 -0
- package/dist/mcp/query-pool.js +297 -0
- package/dist/mcp/query-pool.js.map +1 -0
- package/dist/mcp/query-worker.d.ts +24 -0
- package/dist/mcp/query-worker.d.ts.map +1 -0
- package/dist/mcp/query-worker.js +87 -0
- package/dist/mcp/query-worker.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +5 -7
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +72 -74
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/tools.d.ts +94 -4
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +877 -71
- package/dist/mcp/tools.js.map +1 -1
- package/dist/project-config.d.ts +20 -0
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +42 -2
- package/dist/project-config.js.map +1 -1
- package/dist/reasoning/login.js +1 -1
- package/dist/reasoning/login.js.map +1 -1
- package/dist/reasoning/reasoner.js +32 -32
- package/dist/resolution/c-fnptr-synthesizer.d.ts +0 -28
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/dist/resolution/c-fnptr-synthesizer.js +765 -79
- package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/dist/resolution/callback-synthesizer.d.ts +1 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +72 -11
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/cooperative-yield.d.ts +32 -0
- package/dist/resolution/cooperative-yield.d.ts.map +1 -0
- package/dist/resolution/cooperative-yield.js +42 -0
- package/dist/resolution/cooperative-yield.js.map +1 -0
- package/dist/resolution/index.d.ts +11 -2
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +72 -4
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/name-matcher.d.ts +22 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +317 -20
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/spec/config.d.ts +39 -0
- package/dist/spec/config.d.ts.map +1 -0
- package/dist/spec/config.js +304 -0
- package/dist/spec/config.js.map +1 -0
- package/dist/spec/db/commit-node.d.ts +23 -0
- package/dist/spec/db/commit-node.d.ts.map +1 -0
- package/dist/spec/db/commit-node.js +62 -0
- package/dist/spec/db/commit-node.js.map +1 -0
- package/dist/spec/db/fragment-node.d.ts +24 -0
- package/dist/spec/db/fragment-node.d.ts.map +1 -0
- package/dist/spec/db/fragment-node.js +128 -0
- package/dist/spec/db/fragment-node.js.map +1 -0
- package/dist/spec/db/fts.d.ts +74 -0
- package/dist/spec/db/fts.d.ts.map +1 -0
- package/dist/spec/db/fts.js +324 -0
- package/dist/spec/db/fts.js.map +1 -0
- package/dist/spec/db/index.d.ts +13 -0
- package/dist/spec/db/index.d.ts.map +1 -0
- package/dist/spec/db/index.js +50 -0
- package/dist/spec/db/index.js.map +1 -0
- package/dist/spec/db/relations.d.ts +55 -0
- package/dist/spec/db/relations.d.ts.map +1 -0
- package/dist/spec/db/relations.js +158 -0
- package/dist/spec/db/relations.js.map +1 -0
- package/dist/spec/db/schema.d.ts +33 -0
- package/dist/spec/db/schema.d.ts.map +1 -0
- package/dist/spec/db/schema.js +119 -0
- package/dist/spec/db/schema.js.map +1 -0
- package/dist/spec/db/schema.sql +117 -0
- package/dist/spec/db/spec-node.d.ts +41 -0
- package/dist/spec/db/spec-node.d.ts.map +1 -0
- package/dist/spec/db/spec-node.js +114 -0
- package/dist/spec/db/spec-node.js.map +1 -0
- package/dist/spec/evolve/impact-locator.d.ts +13 -0
- package/dist/spec/evolve/impact-locator.d.ts.map +1 -0
- package/dist/spec/evolve/impact-locator.js +25 -0
- package/dist/spec/evolve/impact-locator.js.map +1 -0
- package/dist/spec/evolve/llm-client.d.ts +50 -0
- package/dist/spec/evolve/llm-client.d.ts.map +1 -0
- package/dist/spec/evolve/llm-client.js +176 -0
- package/dist/spec/evolve/llm-client.js.map +1 -0
- package/dist/spec/evolve/logic-checker.d.ts +12 -0
- package/dist/spec/evolve/logic-checker.d.ts.map +1 -0
- package/dist/spec/evolve/logic-checker.js +24 -0
- package/dist/spec/evolve/logic-checker.js.map +1 -0
- package/dist/spec/evolve/pipeline.d.ts +42 -0
- package/dist/spec/evolve/pipeline.d.ts.map +1 -0
- package/dist/spec/evolve/pipeline.js +567 -0
- package/dist/spec/evolve/pipeline.js.map +1 -0
- package/dist/spec/evolve/spec-rewriter.d.ts +42 -0
- package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -0
- package/dist/spec/evolve/spec-rewriter.js +230 -0
- package/dist/spec/evolve/spec-rewriter.js.map +1 -0
- package/dist/spec/graph/queries.d.ts +155 -0
- package/dist/spec/graph/queries.d.ts.map +1 -0
- package/dist/spec/graph/queries.js +440 -0
- package/dist/spec/graph/queries.js.map +1 -0
- package/dist/spec/llm/client.d.ts +29 -0
- package/dist/spec/llm/client.d.ts.map +1 -0
- package/dist/spec/llm/client.js +123 -0
- package/dist/spec/llm/client.js.map +1 -0
- package/dist/spec/llm/index.d.ts +3 -0
- package/dist/spec/llm/index.d.ts.map +1 -0
- package/dist/spec/llm/index.js +11 -0
- package/dist/spec/llm/index.js.map +1 -0
- package/dist/spec/llm/prompts.d.ts +13 -0
- package/dist/spec/llm/prompts.d.ts.map +1 -0
- package/dist/spec/llm/prompts.js +75 -0
- package/dist/spec/llm/prompts.js.map +1 -0
- package/dist/spec/mining/diff-parser.d.ts +33 -0
- package/dist/spec/mining/diff-parser.d.ts.map +1 -0
- package/dist/spec/mining/diff-parser.js +166 -0
- package/dist/spec/mining/diff-parser.js.map +1 -0
- package/dist/spec/mining/git-scanner.d.ts +103 -0
- package/dist/spec/mining/git-scanner.d.ts.map +1 -0
- package/dist/spec/mining/git-scanner.js +307 -0
- package/dist/spec/mining/git-scanner.js.map +1 -0
- package/dist/spec/mining/pipeline.d.ts +53 -0
- package/dist/spec/mining/pipeline.d.ts.map +1 -0
- package/dist/spec/mining/pipeline.js +178 -0
- package/dist/spec/mining/pipeline.js.map +1 -0
- package/dist/spec/mining/scope-resolver.d.ts +45 -0
- package/dist/spec/mining/scope-resolver.d.ts.map +1 -0
- package/dist/spec/mining/scope-resolver.js +103 -0
- package/dist/spec/mining/scope-resolver.js.map +1 -0
- package/dist/spec/mining/spec-extractor.d.ts +69 -0
- package/dist/spec/mining/spec-extractor.d.ts.map +1 -0
- package/dist/spec/mining/spec-extractor.js +369 -0
- package/dist/spec/mining/spec-extractor.js.map +1 -0
- package/dist/spec/types.d.ts +149 -0
- package/dist/spec/types.d.ts.map +1 -0
- package/dist/spec/types.js +15 -0
- package/dist/spec/types.js.map +1 -0
- package/dist/spec/utils.d.ts +167 -0
- package/dist/spec/utils.d.ts.map +1 -0
- package/dist/spec/utils.js +463 -0
- package/dist/spec/utils.js.map +1 -0
- package/dist/sync/worktree.d.ts +9 -0
- package/dist/sync/worktree.d.ts.map +1 -1
- package/dist/sync/worktree.js +40 -0
- package/dist/sync/worktree.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/shimmer-progress.d.ts +2 -0
- package/dist/ui/shimmer-progress.d.ts.map +1 -1
- package/dist/ui/shimmer-progress.js +19 -2
- package/dist/ui/shimmer-progress.js.map +1 -1
- package/dist/upgrade/index.js +1 -1
- package/dist/upgrade/index.js.map +1 -1
- package/package.json +58 -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 -91
- package/scripts/agent-eval/ab-hook.sh +86 -86
- package/scripts/agent-eval/ab-impl.sh +78 -78
- package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
- package/scripts/agent-eval/ab-sufficiency.sh +78 -78
- 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 -72
- package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
- package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
- package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
- package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
- package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
- package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
- package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
- package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
- package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
- package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
- package/scripts/agent-eval/offload-eval-setup.sh +24 -24
- package/scripts/agent-eval/offload-eval-styles.sh +71 -71
- package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
- package/scripts/agent-eval/offload-eval.md +76 -76
- 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 -38
- package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
- package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
- package/scripts/agent-eval/run-agent.sh +34 -34
- package/scripts/agent-eval/run-all.sh +69 -69
- 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/exp_boundary_eval/README.md +247 -0
- 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/_test_mcp_chain.py +78 -0
- package/scripts/exp_boundary_eval/_test_stdin.py +8 -0
- package/scripts/exp_boundary_eval/_utils.py +1116 -0
- package/scripts/exp_boundary_eval/analyze.py +1313 -0
- package/scripts/exp_boundary_eval/data/agents.json +109 -0
- package/scripts/exp_boundary_eval/data/experiments.json +140 -0
- package/scripts/exp_boundary_eval/deveco_arm.py +519 -0
- package/scripts/exp_boundary_eval/run_all.py +378 -0
- package/scripts/exp_boundary_eval/run_one.py +165 -0
- package/scripts/exp_boundary_eval/run_session.py +158 -0
- package/scripts/exp_boundary_eval/setup.py +120 -0
- package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -0
- package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -0
- package/scripts/exp_boundary_eval/win_node_launcher.py +24 -0
- 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 +268 -246
- package/scripts/ohos-sdk-publish.mjs +133 -0
- package/scripts/pack-npm.sh +119 -119
- package/scripts/prepare-release.mjs +270 -270
- package/scripts/qa_eval/README.md +407 -404
- package/scripts/qa_eval/_test_deveco_probe.py +41 -41
- package/scripts/qa_eval/agent_runner.py +526 -526
- package/scripts/qa_eval/data/.gitignore +4 -4
- package/scripts/qa_eval/data/test-set.jsonl +2 -22
- package/scripts/qa_eval/eval_metrics.py +274 -233
- package/scripts/qa_eval/external_agent.py +976 -671
- package/scripts/qa_eval/llm_config.py +92 -92
- package/scripts/qa_eval/memory_monitor.py +132 -132
- package/scripts/qa_eval/my_answer_accuracy.py +187 -187
- package/scripts/qa_eval/requirements.txt +2 -2
- package/scripts/qa_eval/run_pipeline.py +804 -711
- package/scripts/qa_eval/stats_efficiency.py +279 -279
- package/scripts/qa_eval/stats_scores.py +207 -207
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { LLMConfig } from '../config';
|
|
2
|
+
export interface ChatResult {
|
|
3
|
+
content: string;
|
|
4
|
+
json: Record<string, unknown> | null;
|
|
5
|
+
}
|
|
6
|
+
export declare class LLMClient {
|
|
7
|
+
private config;
|
|
8
|
+
private mockResponses;
|
|
9
|
+
constructor(config: LLMConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Append a mock response to the FIFO queue.
|
|
12
|
+
*
|
|
13
|
+
* When provider is `"mock"`, `chat()` dequeues the first response.
|
|
14
|
+
* Responses are consumed in insertion order; each call to `chat()` removes
|
|
15
|
+
* and returns the front element.
|
|
16
|
+
*/
|
|
17
|
+
setMockResponse(_key: string, response: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Clear all mock responses.
|
|
20
|
+
*/
|
|
21
|
+
clearMockResponses(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Send a chat completion request and return the message content string.
|
|
24
|
+
*
|
|
25
|
+
* **Mock mode** (`provider === "mock"`):
|
|
26
|
+
* 1. If mockResponses has entries, consumes the first one (FIFO).
|
|
27
|
+
* 2. Otherwise matches `userPrompt` against known patterns (case-insensitive):
|
|
28
|
+
* - `"logic change"` or `"logic_change"` → no-op JSON.
|
|
29
|
+
* - `"spec evolution"` or `"evolve"` → UNCHANGED JSON.
|
|
30
|
+
* - Default → UNCHANGED JSON.
|
|
31
|
+
*
|
|
32
|
+
* **OpenAI / Anthropic mode**:
|
|
33
|
+
* Calls the OpenAI-compatible chat completions API and returns
|
|
34
|
+
* `choices[0].message.content`. On any error, returns an empty string.
|
|
35
|
+
*/
|
|
36
|
+
chat(systemPrompt: string, userPrompt: string): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Same as `chat()`, but parses the response as JSON.
|
|
39
|
+
*
|
|
40
|
+
* Parsing strategy (tried in order):
|
|
41
|
+
* 1. Direct `JSON.parse(content)`.
|
|
42
|
+
* 2. Extract from `` ```json ... ``` `` fenced block.
|
|
43
|
+
* 3. Extract from `` ``` ... ``` `` fenced block.
|
|
44
|
+
* 4. Fallback: log a debug warning and return `{}`.
|
|
45
|
+
*
|
|
46
|
+
* Empty or null content from `chat()` also returns `{}`.
|
|
47
|
+
*/
|
|
48
|
+
chatJson(systemPrompt: string, userPrompt: string): Promise<Record<string, unknown>>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../../src/spec/evolve/llm-client.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACtC;AAMD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,aAAa,CAAW;gBAEpB,MAAM,EAAE,SAAS;IAK7B;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAQ1B;;;;;;;;;;;;;OAaG;IACG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DrE;;;;;;;;;;OAUG;IACG,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA+CpC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LLMClient = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Provider-agnostic LLM client for spec self-evolution.
|
|
9
|
+
*
|
|
10
|
+
* Replaces `commit4spec/utils/llm_client.py`. Supports OpenAI-compatible chat
|
|
11
|
+
* completions API with mock mode for testing. Mock responses are consumed
|
|
12
|
+
* FIFO: each `setMockResponse` call adds one response, each `chat` call
|
|
13
|
+
* consumes one. When the mock queue is empty, pattern-based fallback responses
|
|
14
|
+
* are returned.
|
|
15
|
+
*
|
|
16
|
+
* @module spec/evolve/llm-client
|
|
17
|
+
*/
|
|
18
|
+
const openai_1 = __importDefault(require("openai"));
|
|
19
|
+
const errors_1 = require("../../errors");
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// LLMClient
|
|
22
|
+
// =============================================================================
|
|
23
|
+
class LLMClient {
|
|
24
|
+
config;
|
|
25
|
+
mockResponses;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.mockResponses = [];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Append a mock response to the FIFO queue.
|
|
32
|
+
*
|
|
33
|
+
* When provider is `"mock"`, `chat()` dequeues the first response.
|
|
34
|
+
* Responses are consumed in insertion order; each call to `chat()` removes
|
|
35
|
+
* and returns the front element.
|
|
36
|
+
*/
|
|
37
|
+
setMockResponse(_key, response) {
|
|
38
|
+
this.mockResponses.push(response);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Clear all mock responses.
|
|
42
|
+
*/
|
|
43
|
+
clearMockResponses() {
|
|
44
|
+
this.mockResponses = [];
|
|
45
|
+
}
|
|
46
|
+
// ===========================================================================
|
|
47
|
+
// chat
|
|
48
|
+
// ===========================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Send a chat completion request and return the message content string.
|
|
51
|
+
*
|
|
52
|
+
* **Mock mode** (`provider === "mock"`):
|
|
53
|
+
* 1. If mockResponses has entries, consumes the first one (FIFO).
|
|
54
|
+
* 2. Otherwise matches `userPrompt` against known patterns (case-insensitive):
|
|
55
|
+
* - `"logic change"` or `"logic_change"` → no-op JSON.
|
|
56
|
+
* - `"spec evolution"` or `"evolve"` → UNCHANGED JSON.
|
|
57
|
+
* - Default → UNCHANGED JSON.
|
|
58
|
+
*
|
|
59
|
+
* **OpenAI / Anthropic mode**:
|
|
60
|
+
* Calls the OpenAI-compatible chat completions API and returns
|
|
61
|
+
* `choices[0].message.content`. On any error, returns an empty string.
|
|
62
|
+
*/
|
|
63
|
+
async chat(systemPrompt, userPrompt) {
|
|
64
|
+
// --- Mock mode -------------------------------------------------------
|
|
65
|
+
if (this.config.provider === 'mock') {
|
|
66
|
+
if (this.mockResponses.length > 0) {
|
|
67
|
+
return this.mockResponses.shift();
|
|
68
|
+
}
|
|
69
|
+
const lower = userPrompt.toLowerCase();
|
|
70
|
+
if (lower.includes('logic change') || lower.includes('logic_change')) {
|
|
71
|
+
return JSON.stringify({
|
|
72
|
+
is_logic_change: false,
|
|
73
|
+
reason: 'Mock: no logic change detected',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (lower.includes('spec evolution') || lower.includes('evolve')) {
|
|
77
|
+
return JSON.stringify({
|
|
78
|
+
action: 'UNCHANGED',
|
|
79
|
+
reason: 'Mock: no changes needed',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return JSON.stringify({
|
|
83
|
+
action: 'UNCHANGED',
|
|
84
|
+
reason: 'Mock: default no-op response',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// --- OpenAI / Anthropic mode -----------------------------------------
|
|
88
|
+
const baseURL = this.config.baseUrl
|
|
89
|
+
? this.config.baseUrl
|
|
90
|
+
: this.config.provider === 'anthropic'
|
|
91
|
+
? 'https://api.anthropic.com/v1'
|
|
92
|
+
: undefined;
|
|
93
|
+
const client = new openai_1.default({
|
|
94
|
+
apiKey: this.config.apiKey || 'sk-placeholder',
|
|
95
|
+
baseURL,
|
|
96
|
+
});
|
|
97
|
+
try {
|
|
98
|
+
const completion = await client.chat.completions.create({
|
|
99
|
+
model: this.config.model,
|
|
100
|
+
temperature: this.config.temperature,
|
|
101
|
+
max_tokens: this.config.maxTokens,
|
|
102
|
+
messages: [
|
|
103
|
+
{ role: 'system', content: systemPrompt },
|
|
104
|
+
{ role: 'user', content: userPrompt },
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
const content = completion.choices[0]?.message?.content;
|
|
108
|
+
return content ?? '';
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ===========================================================================
|
|
115
|
+
// chatJson
|
|
116
|
+
// ===========================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Same as `chat()`, but parses the response as JSON.
|
|
119
|
+
*
|
|
120
|
+
* Parsing strategy (tried in order):
|
|
121
|
+
* 1. Direct `JSON.parse(content)`.
|
|
122
|
+
* 2. Extract from `` ```json ... ``` `` fenced block.
|
|
123
|
+
* 3. Extract from `` ``` ... ``` `` fenced block.
|
|
124
|
+
* 4. Fallback: log a debug warning and return `{}`.
|
|
125
|
+
*
|
|
126
|
+
* Empty or null content from `chat()` also returns `{}`.
|
|
127
|
+
*/
|
|
128
|
+
async chatJson(systemPrompt, userPrompt) {
|
|
129
|
+
const raw = await this.chat(systemPrompt, userPrompt);
|
|
130
|
+
if (!raw)
|
|
131
|
+
return {};
|
|
132
|
+
// 1. Direct parse
|
|
133
|
+
try {
|
|
134
|
+
const parsed = JSON.parse(raw);
|
|
135
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
136
|
+
return parsed;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Fall through to fence extraction
|
|
141
|
+
}
|
|
142
|
+
// 2. ```json ... ``` fence
|
|
143
|
+
const jsonFenceMatch = /```json\s*([\s\S]*?)```/.exec(raw);
|
|
144
|
+
if (jsonFenceMatch) {
|
|
145
|
+
try {
|
|
146
|
+
const parsed = JSON.parse(jsonFenceMatch[1].trim());
|
|
147
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
148
|
+
return parsed;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Fall through
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// 3. ``` ... ``` fence
|
|
156
|
+
const fenceMatch = /```\s*([\s\S]*?)```/.exec(raw);
|
|
157
|
+
if (fenceMatch) {
|
|
158
|
+
try {
|
|
159
|
+
const parsed = JSON.parse(fenceMatch[1].trim());
|
|
160
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
161
|
+
return parsed;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Fall through
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 4. Fallback
|
|
169
|
+
(0, errors_1.logDebug)('chatJson: could not parse response as JSON', {
|
|
170
|
+
raw: raw.length > 200 ? raw.slice(0, 200) + '…' : raw,
|
|
171
|
+
});
|
|
172
|
+
return {};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.LLMClient = LLMClient;
|
|
176
|
+
//# sourceMappingURL=llm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../../src/spec/evolve/llm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LlmClient } from '../llm/client';
|
|
2
|
+
export interface LogicCheckResult {
|
|
3
|
+
isLogic: boolean;
|
|
4
|
+
reason: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Determine if a commit represents a business-logic change.
|
|
8
|
+
* Uses LLM to analyze the commit message and diff.
|
|
9
|
+
* If no LLM client is available, returns false.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isLogicChange(commitMessage: string, commitDiff: string, client?: LlmClient): Promise<LogicCheckResult>;
|
|
12
|
+
//# sourceMappingURL=logic-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic-checker.d.ts","sourceRoot":"","sources":["../../../src/spec/evolve/logic-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAgB3B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLogicChange = isLogicChange;
|
|
4
|
+
const prompts_1 = require("../llm/prompts");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
/**
|
|
7
|
+
* Determine if a commit represents a business-logic change.
|
|
8
|
+
* Uses LLM to analyze the commit message and diff.
|
|
9
|
+
* If no LLM client is available, returns false.
|
|
10
|
+
*/
|
|
11
|
+
async function isLogicChange(commitMessage, commitDiff, client) {
|
|
12
|
+
if (!client) {
|
|
13
|
+
return { isLogic: false, reason: 'LLM unavailable' };
|
|
14
|
+
}
|
|
15
|
+
// Truncate diff to 6000 chars for prompt budget
|
|
16
|
+
const truncatedDiff = (0, utils_1.truncateText)(commitDiff, 6000);
|
|
17
|
+
const userPrompt = (0, prompts_1.buildLogicCheckUserPrompt)(commitMessage, truncatedDiff);
|
|
18
|
+
const result = await client.chatJson(prompts_1.LOGIC_CHECK_SYSTEM_PROMPT, userPrompt);
|
|
19
|
+
return {
|
|
20
|
+
isLogic: result.is_logic_change === true,
|
|
21
|
+
reason: typeof result.reason === 'string' ? result.reason : '',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=logic-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic-checker.js","sourceRoot":"","sources":["../../../src/spec/evolve/logic-checker.ts"],"names":[],"mappings":";;AAcA,sCAoBC;AAjCD,4CAAsF;AACtF,oCAAwC;AAOxC;;;;GAIG;AACI,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,UAAkB,EAClB,MAAkB;IAElB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACvD,CAAC;IAED,gDAAgD;IAChD,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,IAAA,mCAAyB,EAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,mCAAyB,EAAE,UAAU,CAAC,CAAC;IAE5E,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,eAAe,KAAK,IAAI;QACxC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SqliteDatabase } from '../../db/sqlite-adapter';
|
|
2
|
+
import { LLMConfig } from '../config';
|
|
3
|
+
export interface EvolvedSpec {
|
|
4
|
+
specId: string;
|
|
5
|
+
action: 'UPDATE' | 'DEPRECATE' | 'UNCHANGED';
|
|
6
|
+
newVersion?: number;
|
|
7
|
+
newSpecId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface EvolveResult {
|
|
10
|
+
commitHash: string;
|
|
11
|
+
generateSpecId?: string;
|
|
12
|
+
generateRelationCreated: boolean;
|
|
13
|
+
isLogicChange: boolean;
|
|
14
|
+
logicCheckReason: string;
|
|
15
|
+
affectedSpecCount: number;
|
|
16
|
+
evolvedSpecs: EvolvedSpec[];
|
|
17
|
+
fragmentsCount: number;
|
|
18
|
+
relationsCreated: number;
|
|
19
|
+
persisted: boolean;
|
|
20
|
+
/** True when the commit was skipped because LLM is not available. */
|
|
21
|
+
skipped: boolean;
|
|
22
|
+
/** Human-readable reason for skipping, if skipped is true. */
|
|
23
|
+
skipReason?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface BatchEvolveResult {
|
|
26
|
+
/** The last evolved commit hash from meta.json (null if never evolved). */
|
|
27
|
+
fromCommit: string | null;
|
|
28
|
+
/** The commit hash that was just evolved up to (usually HEAD). */
|
|
29
|
+
toCommit: string;
|
|
30
|
+
/** Number of commits in the range (including skipped). */
|
|
31
|
+
commitsProcessed: number;
|
|
32
|
+
/** Per-commit results. */
|
|
33
|
+
perCommitResults: EvolveResult[];
|
|
34
|
+
/** Whether meta.json was updated at the end. */
|
|
35
|
+
metaUpdated: boolean;
|
|
36
|
+
/** Number of commits skipped (no LLM, did not match Path A). */
|
|
37
|
+
skippedCommits: number;
|
|
38
|
+
/** Number of commits that threw an error during evolve. */
|
|
39
|
+
failures: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function runBatchEvolvePipeline(repoPath: string, db: SqliteDatabase, llmConfig?: LLMConfig): Promise<BatchEvolveResult>;
|
|
42
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/spec/evolve/pipeline.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAkB,MAAM,WAAW,CAAC;AA6BtD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA4XD,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB,0BAA0B;IAC1B,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,gDAAgD;IAChD,WAAW,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoDD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,cAAc,EAClB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,iBAAiB,CAAC,CA8B5B"}
|