homegraph 1.5.0 → 1.5.2

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.
Files changed (213) hide show
  1. package/dist/bin/command-supervision.d.ts.map +1 -1
  2. package/dist/bin/command-supervision.js +7 -4
  3. package/dist/bin/command-supervision.js.map +1 -1
  4. package/dist/extraction/index.d.ts +1 -1
  5. package/dist/extraction/index.d.ts.map +1 -1
  6. package/dist/extraction/index.js +54 -43
  7. package/dist/extraction/index.js.map +1 -1
  8. package/dist/extraction/languages/arkts.d.ts +69 -12
  9. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  10. package/dist/extraction/languages/arkts.js +739 -86
  11. package/dist/extraction/languages/arkts.js.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/mcp/diff-impact.d.ts +131 -0
  16. package/dist/mcp/diff-impact.d.ts.map +1 -0
  17. package/dist/mcp/diff-impact.js +385 -0
  18. package/dist/mcp/diff-impact.js.map +1 -0
  19. package/dist/mcp/liveness-watchdog.d.ts +18 -0
  20. package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  21. package/dist/mcp/liveness-watchdog.js +134 -22
  22. package/dist/mcp/liveness-watchdog.js.map +1 -1
  23. package/dist/mcp/server-instructions.d.ts +1 -1
  24. package/dist/mcp/server-instructions.d.ts.map +1 -1
  25. package/dist/mcp/server-instructions.js +2 -0
  26. package/dist/mcp/server-instructions.js.map +1 -1
  27. package/dist/mcp/tools.d.ts +21 -5
  28. package/dist/mcp/tools.d.ts.map +1 -1
  29. package/dist/mcp/tools.js +305 -55
  30. package/dist/mcp/tools.js.map +1 -1
  31. package/dist/resolution/callback-synthesizer.d.ts +2 -1
  32. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  33. package/dist/resolution/callback-synthesizer.js +153 -53
  34. package/dist/resolution/callback-synthesizer.js.map +1 -1
  35. package/dist/resolution/frameworks/arkts-entry.d.ts.map +1 -1
  36. package/dist/resolution/frameworks/arkts-entry.js +20 -9
  37. package/dist/resolution/frameworks/arkts-entry.js.map +1 -1
  38. package/dist/resolution/index.d.ts.map +1 -1
  39. package/dist/resolution/index.js +1 -1
  40. package/dist/resolution/index.js.map +1 -1
  41. package/dist/resolution/memory-budget.d.ts +33 -0
  42. package/dist/resolution/memory-budget.d.ts.map +1 -1
  43. package/dist/resolution/memory-budget.js +58 -0
  44. package/dist/resolution/memory-budget.js.map +1 -1
  45. package/dist/resolution/resolver-pool.d.ts +2 -0
  46. package/dist/resolution/resolver-pool.d.ts.map +1 -1
  47. package/dist/resolution/resolver-pool.js +4 -0
  48. package/dist/resolution/resolver-pool.js.map +1 -1
  49. package/dist/ui/shimmer-progress.d.ts.map +1 -1
  50. package/dist/ui/shimmer-progress.js +4 -1
  51. package/dist/ui/shimmer-progress.js.map +1 -1
  52. package/package.json +4 -5
  53. package/dist/arkts/ohos-api-index.d.ts +0 -15
  54. package/dist/arkts/ohos-api-index.d.ts.map +0 -1
  55. package/dist/arkts/ohos-api-index.js +0 -190
  56. package/dist/arkts/ohos-api-index.js.map +0 -1
  57. package/dist/arkts/ohos-sdk-input.d.ts +0 -36
  58. package/dist/arkts/ohos-sdk-input.d.ts.map +0 -1
  59. package/dist/arkts/ohos-sdk-input.js +0 -214
  60. package/dist/arkts/ohos-sdk-input.js.map +0 -1
  61. package/dist/extraction/languages/arkts-state-decorators.d.ts +0 -13
  62. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +0 -1
  63. package/dist/extraction/languages/arkts-state-decorators.js +0 -26
  64. package/dist/extraction/languages/arkts-state-decorators.js.map +0 -1
  65. package/dist/extraction/languages/arkts-viewtree.d.ts +0 -24
  66. package/dist/extraction/languages/arkts-viewtree.d.ts.map +0 -1
  67. package/dist/extraction/languages/arkts-viewtree.js +0 -148
  68. package/dist/extraction/languages/arkts-viewtree.js.map +0 -1
  69. package/dist/extraction/languages/ohos-api-consumer.d.ts +0 -34
  70. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +0 -1
  71. package/dist/extraction/languages/ohos-api-consumer.js +0 -283
  72. package/dist/extraction/languages/ohos-api-consumer.js.map +0 -1
  73. package/dist/reasoning/config.d.ts +0 -45
  74. package/dist/reasoning/config.d.ts.map +0 -1
  75. package/dist/reasoning/config.js +0 -171
  76. package/dist/reasoning/config.js.map +0 -1
  77. package/dist/reasoning/credentials.d.ts +0 -5
  78. package/dist/reasoning/credentials.d.ts.map +0 -1
  79. package/dist/reasoning/credentials.js +0 -83
  80. package/dist/reasoning/credentials.js.map +0 -1
  81. package/dist/reasoning/login.d.ts +0 -21
  82. package/dist/reasoning/login.d.ts.map +0 -1
  83. package/dist/reasoning/login.js +0 -85
  84. package/dist/reasoning/login.js.map +0 -1
  85. package/dist/reasoning/reasoner.d.ts +0 -43
  86. package/dist/reasoning/reasoner.d.ts.map +0 -1
  87. package/dist/reasoning/reasoner.js +0 -308
  88. package/dist/reasoning/reasoner.js.map +0 -1
  89. package/dist/spec/build/git-scanner.d.ts +0 -93
  90. package/dist/spec/build/git-scanner.d.ts.map +0 -1
  91. package/dist/spec/build/git-scanner.js +0 -254
  92. package/dist/spec/build/git-scanner.js.map +0 -1
  93. package/dist/spec/evolve/llm-client.d.ts +0 -50
  94. package/dist/spec/evolve/llm-client.d.ts.map +0 -1
  95. package/dist/spec/evolve/llm-client.js +0 -176
  96. package/dist/spec/evolve/llm-client.js.map +0 -1
  97. package/dist/spec/evolve/logic-checker.d.ts +0 -12
  98. package/dist/spec/evolve/logic-checker.d.ts.map +0 -1
  99. package/dist/spec/evolve/logic-checker.js +0 -24
  100. package/dist/spec/evolve/logic-checker.js.map +0 -1
  101. package/dist/spec/git-utils.d.ts +0 -8
  102. package/dist/spec/git-utils.d.ts.map +0 -1
  103. package/dist/spec/git-utils.js +0 -14
  104. package/dist/spec/git-utils.js.map +0 -1
  105. package/dist/spec/llm/index.d.ts +0 -3
  106. package/dist/spec/llm/index.d.ts.map +0 -1
  107. package/dist/spec/llm/index.js +0 -11
  108. package/dist/spec/llm/index.js.map +0 -1
  109. package/dist/spec/mine/clusterer.d.ts +0 -63
  110. package/dist/spec/mine/clusterer.d.ts.map +0 -1
  111. package/dist/spec/mine/clusterer.js +0 -904
  112. package/dist/spec/mine/clusterer.js.map +0 -1
  113. package/dist/spec/mine/progress-handler.d.ts +0 -22
  114. package/dist/spec/mine/progress-handler.d.ts.map +0 -1
  115. package/dist/spec/mine/progress-handler.js +0 -108
  116. package/dist/spec/mine/progress-handler.js.map +0 -1
  117. package/dist/spec/mine/progress.d.ts +0 -23
  118. package/dist/spec/mine/progress.d.ts.map +0 -1
  119. package/dist/spec/mine/progress.js +0 -12
  120. package/dist/spec/mine/progress.js.map +0 -1
  121. package/dist/spec/mining/diff-parser.d.ts +0 -33
  122. package/dist/spec/mining/diff-parser.d.ts.map +0 -1
  123. package/dist/spec/mining/diff-parser.js +0 -166
  124. package/dist/spec/mining/diff-parser.js.map +0 -1
  125. package/dist/spec/mining/git-scanner.d.ts +0 -103
  126. package/dist/spec/mining/git-scanner.d.ts.map +0 -1
  127. package/dist/spec/mining/git-scanner.js +0 -307
  128. package/dist/spec/mining/git-scanner.js.map +0 -1
  129. package/dist/spec/mining/pipeline.d.ts +0 -53
  130. package/dist/spec/mining/pipeline.d.ts.map +0 -1
  131. package/dist/spec/mining/pipeline.js +0 -178
  132. package/dist/spec/mining/pipeline.js.map +0 -1
  133. package/dist/spec/mining/scope-resolver.d.ts +0 -45
  134. package/dist/spec/mining/scope-resolver.d.ts.map +0 -1
  135. package/dist/spec/mining/scope-resolver.js +0 -103
  136. package/dist/spec/mining/scope-resolver.js.map +0 -1
  137. package/dist/spec/mining/spec-extractor.d.ts +0 -69
  138. package/dist/spec/mining/spec-extractor.d.ts.map +0 -1
  139. package/dist/spec/mining/spec-extractor.js +0 -369
  140. package/dist/spec/mining/spec-extractor.js.map +0 -1
  141. package/dist/spec/utils.d.ts +0 -155
  142. package/dist/spec/utils.d.ts.map +0 -1
  143. package/dist/spec/utils.js +0 -411
  144. package/dist/spec/utils.js.map +0 -1
  145. package/scripts/add-lang/bench.sh +0 -60
  146. package/scripts/add-lang/check-grammar.mjs +0 -75
  147. package/scripts/add-lang/dump-ast.mjs +0 -103
  148. package/scripts/add-lang/verify-extraction.mjs +0 -70
  149. package/scripts/agent-eval/ab-adoption.sh +0 -91
  150. package/scripts/agent-eval/ab-hook.sh +0 -86
  151. package/scripts/agent-eval/ab-impl.sh +0 -78
  152. package/scripts/agent-eval/ab-new-vs-baseline.sh +0 -102
  153. package/scripts/agent-eval/ab-sufficiency.sh +0 -78
  154. package/scripts/agent-eval/arms-F.sh +0 -21
  155. package/scripts/agent-eval/arms-matrix.sh +0 -37
  156. package/scripts/agent-eval/audit.sh +0 -68
  157. package/scripts/agent-eval/bench-readme.sh +0 -28
  158. package/scripts/agent-eval/bench-why-repo.sh +0 -22
  159. package/scripts/agent-eval/block-read-hook.sh +0 -19
  160. package/scripts/agent-eval/hook-settings.json +0 -15
  161. package/scripts/agent-eval/itrun.sh +0 -120
  162. package/scripts/agent-eval/offload-eval-3arm.sh +0 -72
  163. package/scripts/agent-eval/offload-eval-cost.mjs +0 -133
  164. package/scripts/agent-eval/offload-eval-effort.mjs +0 -108
  165. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +0 -25
  166. package/scripts/agent-eval/offload-eval-frontload.sh +0 -47
  167. package/scripts/agent-eval/offload-eval-ground-truth.json +0 -18
  168. package/scripts/agent-eval/offload-eval-hook.mjs +0 -84
  169. package/scripts/agent-eval/offload-eval-judge.mjs +0 -103
  170. package/scripts/agent-eval/offload-eval-matrix.sh +0 -20
  171. package/scripts/agent-eval/offload-eval-metrics.mjs +0 -94
  172. package/scripts/agent-eval/offload-eval-refs1.sh +0 -50
  173. package/scripts/agent-eval/offload-eval-setup.sh +0 -24
  174. package/scripts/agent-eval/offload-eval-styles.sh +0 -72
  175. package/scripts/agent-eval/offload-eval-summarize.mjs +0 -68
  176. package/scripts/agent-eval/offload-eval.md +0 -76
  177. package/scripts/agent-eval/parse-arms.mjs +0 -116
  178. package/scripts/agent-eval/parse-bench-readme.mjs +0 -84
  179. package/scripts/agent-eval/parse-run.mjs +0 -45
  180. package/scripts/agent-eval/parse-session.mjs +0 -93
  181. package/scripts/agent-eval/probe-context.mjs +0 -21
  182. package/scripts/agent-eval/probe-explore.mjs +0 -40
  183. package/scripts/agent-eval/probe-node.mjs +0 -20
  184. package/scripts/agent-eval/probe-sweep.mjs +0 -119
  185. package/scripts/agent-eval/probe-trace.mjs +0 -20
  186. package/scripts/agent-eval/redirect-read-hook.sh +0 -38
  187. package/scripts/agent-eval/repro-concurrent-explore.mjs +0 -119
  188. package/scripts/agent-eval/repro-daemon-clients.mjs +0 -125
  189. package/scripts/agent-eval/run-agent.sh +0 -34
  190. package/scripts/agent-eval/run-all.sh +0 -75
  191. package/scripts/agent-eval/run-arms.sh +0 -56
  192. package/scripts/agent-eval/seq-matrix.mjs +0 -137
  193. package/scripts/build-bundle.sh +0 -123
  194. package/scripts/exp_boundary_eval/README.md +0 -247
  195. package/scripts/exp_boundary_eval/_test_mcp_chain.py +0 -78
  196. package/scripts/exp_boundary_eval/_test_stdin.py +0 -8
  197. package/scripts/exp_boundary_eval/_utils.py +0 -1116
  198. package/scripts/exp_boundary_eval/analyze.py +0 -1313
  199. package/scripts/exp_boundary_eval/deveco_arm.py +0 -519
  200. package/scripts/exp_boundary_eval/run_all.py +0 -378
  201. package/scripts/exp_boundary_eval/run_one.py +0 -165
  202. package/scripts/exp_boundary_eval/run_session.py +0 -158
  203. package/scripts/exp_boundary_eval/setup.py +0 -120
  204. package/scripts/exp_boundary_eval/win_mcp_launcher.py +0 -73
  205. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +0 -36
  206. package/scripts/exp_boundary_eval/win_node_launcher.py +0 -24
  207. package/scripts/extract-release-notes.mjs +0 -130
  208. package/scripts/local-install.sh +0 -41
  209. package/scripts/npm-sdk.js +0 -75
  210. package/scripts/npm-shim.js +0 -275
  211. package/scripts/ohos-sdk-publish.mjs +0 -133
  212. package/scripts/pack-npm.sh +0 -119
  213. package/scripts/prepare-release.mjs +0 -270
@@ -1,254 +0,0 @@
1
- "use strict";
2
- /**
3
- * Git commit history scanning and spec↔commit pairing.
4
- *
5
- * Replaces `commit4spec/reverse_engineer/git_scanner.py` and
6
- * `commit4spec/reverse_engineer/git_utils.py`. Discovers spec↔commit pairs via
7
- * conventional-commit scope extraction: extracts scopes from commit messages
8
- * and resolves them to spec IDs on disk.
9
- *
10
- * All Git operations use `execFileSync` with an args array (never template
11
- * strings) to avoid shell injection risks — matching the HomeGraph convention
12
- * in `src/sync/git-hooks.ts` and `src/sync/worktree.ts`.
13
- *
14
- * @module spec/build/git-scanner
15
- */
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isGitRepo = isGitRepo;
18
- exports.getAllCommits = getAllCommits;
19
- exports.getCommitInfo = getCommitInfo;
20
- exports.getCommitDiff = getCommitDiff;
21
- exports.getCommitRange = getCommitRange;
22
- exports.scan = scan;
23
- const child_process_1 = require("child_process");
24
- const scope_resolver_1 = require("./scope-resolver");
25
- const spec_extractor_1 = require("./spec-extractor");
26
- const errors_1 = require("../../errors");
27
- const git_utils_1 = require("../git-utils");
28
- // ---------------------------------------------------------------------------
29
- // Helpers
30
- // ---------------------------------------------------------------------------
31
- /**
32
- * Convert an ISO-8601 string to Unix epoch milliseconds.
33
- * Returns 0 for invalid or unparseable strings.
34
- */
35
- function parseISOTimestamp(isoString) {
36
- const ts = new Date(isoString).getTime();
37
- return isNaN(ts) ? 0 : ts;
38
- }
39
- // ---------------------------------------------------------------------------
40
- // isGitRepo
41
- // ---------------------------------------------------------------------------
42
- /**
43
- * Check whether `repoPath` is a git repository.
44
- *
45
- * Runs `git rev-parse --git-dir` and returns `true` on success, `false`
46
- * when the command fails (not a repo, git not installed, etc.).
47
- */
48
- function isGitRepo(repoPath) {
49
- try {
50
- (0, child_process_1.execFileSync)('git', ['rev-parse', '--git-dir'], (0, git_utils_1.gitExecOptions)(repoPath));
51
- return true;
52
- }
53
- catch {
54
- return false;
55
- }
56
- }
57
- // ---------------------------------------------------------------------------
58
- // getAllCommits
59
- // ---------------------------------------------------------------------------
60
- /**
61
- * Return every commit in `repoPath` as `CommitInfo` objects.
62
- *
63
- * Runs `git log --format='%H%n%aI%n%an%n%s%n---END---'` and parses the
64
- * output one five-line block per commit. Commits are returned in reverse
65
- * chronological order (most recent first), matching Git's default.
66
- *
67
- * An empty repo yields an empty array.
68
- */
69
- function getAllCommits(repoPath) {
70
- let stdout;
71
- try {
72
- stdout = (0, child_process_1.execFileSync)('git', ['log', "--format=%H%x00%aI%x00%an%x00%s%x00"], (0, git_utils_1.gitExecOptions)(repoPath));
73
- }
74
- catch {
75
- return [];
76
- }
77
- const parts = stdout.replace(/\0+$/, '').trim().split('\0');
78
- const commits = [];
79
- // Each commit occupies 4 NUL-separated fields: hash, timestamp, author, message
80
- for (let i = 0; i + 3 < parts.length; i += 4) {
81
- const hash = parts[i].trim();
82
- const isoString = parts[i + 1].trim();
83
- const author = parts[i + 2].trim();
84
- const message = parts[i + 3].trim();
85
- if (!hash)
86
- continue;
87
- commits.push({
88
- hash,
89
- message,
90
- author,
91
- timestamp: parseISOTimestamp(isoString),
92
- });
93
- }
94
- return commits;
95
- }
96
- // ---------------------------------------------------------------------------
97
- // getCommitInfo
98
- // ---------------------------------------------------------------------------
99
- /**
100
- * Retrieve metadata for a single commit.
101
- *
102
- * Runs `git show -s --format='%H%n%aI%n%an%n%s' <commitHash>`. Returns
103
- * `null` when the command fails (hash not found, invalid repo, etc.).
104
- */
105
- function getCommitInfo(repoPath, commitHash) {
106
- let stdout;
107
- try {
108
- stdout = (0, child_process_1.execFileSync)('git', ['show', '-s', "--format=%H%n%aI%n%an%n%s", commitHash], (0, git_utils_1.gitExecOptions)(repoPath));
109
- }
110
- catch {
111
- return null;
112
- }
113
- const lines = stdout.trim().split('\n');
114
- if (lines.length < 4)
115
- return null;
116
- const hash = lines[0].trim();
117
- const isoString = lines[1].trim();
118
- const author = lines[2].trim();
119
- const message = lines[3].trim();
120
- if (!hash)
121
- return null;
122
- return {
123
- hash,
124
- message,
125
- author,
126
- timestamp: parseISOTimestamp(isoString),
127
- };
128
- }
129
- // ---------------------------------------------------------------------------
130
- // getCommitDiff
131
- // ---------------------------------------------------------------------------
132
- /**
133
- * Return the full unified diff introduced by `commitHash`.
134
- *
135
- * Strategy:
136
- * 1. Query the parent hash(es) via `git log --pretty=%P -n 1 <commitHash>`.
137
- * 2. If a parent exists, diff it against the commit: `git diff <parent> <commitHash>`.
138
- * 3. For an initial (root) commit with no parent, use `git diff <commitHash>`
139
- * which shows all files added in that commit.
140
- *
141
- * Returns an empty string when any Git command fails.
142
- */
143
- function getCommitDiff(repoPath, commitHash) {
144
- // Step 1 — get parent hashes.
145
- let parentStdout;
146
- try {
147
- parentStdout = (0, child_process_1.execFileSync)('git', ['log', '--pretty=%P', '-n', '1', commitHash], (0, git_utils_1.gitExecOptions)(repoPath));
148
- }
149
- catch {
150
- return '';
151
- }
152
- const parents = parentStdout.trim().split(/\s+/).filter(Boolean);
153
- // Step 2 & 3 — run the appropriate diff.
154
- try {
155
- if (parents.length > 0) {
156
- const diffs = [];
157
- for (const parent of parents) {
158
- try {
159
- diffs.push((0, child_process_1.execFileSync)('git', ['diff', parent, commitHash], (0, git_utils_1.gitExecOptions)(repoPath)));
160
- }
161
- catch {
162
- // Skip diffs that fail for an individual parent
163
- }
164
- }
165
- return diffs.join('\n');
166
- }
167
- // Initial commit — no parent.
168
- return (0, child_process_1.execFileSync)('git', ['diff', commitHash], (0, git_utils_1.gitExecOptions)(repoPath));
169
- }
170
- catch {
171
- return '';
172
- }
173
- }
174
- // ---------------------------------------------------------------------------
175
- // getCommitRange
176
- // ---------------------------------------------------------------------------
177
- /**
178
- * Return every commit between `fromHash` (exclusive) and `toHash`
179
- * (inclusive) in chronological order (oldest first).
180
- *
181
- * Runs `git log --reverse --format="..." fromHash..toHash`. Returns an empty
182
- * array when either hash is not found or the range is empty.
183
- *
184
- * Callers should validate that `fromHash` is an ancestor of `toHash` before
185
- * calling this function (use `git merge-base --is-ancestor`). Results are
186
- * undefined when the two hashes are on unrelated branches.
187
- */
188
- function getCommitRange(repoPath, fromHash, toHash) {
189
- let stdout;
190
- try {
191
- stdout = (0, child_process_1.execFileSync)('git', ['log', '--no-merges', '--reverse', `--format=%H%x00%aI%x00%an%x00%s%x00`, `${fromHash}..${toHash}`], (0, git_utils_1.gitExecOptions)(repoPath));
192
- }
193
- catch {
194
- return [];
195
- }
196
- const parts = stdout.replace(/\0+$/, '').trim().split('\0');
197
- const commits = [];
198
- // Each commit occupies 4 NUL-separated fields: hash, timestamp, author, message
199
- for (let i = 0; i + 3 < parts.length; i += 4) {
200
- const hash = parts[i].trim();
201
- const isoString = parts[i + 1].trim();
202
- const author = parts[i + 2].trim();
203
- const message = parts[i + 3].trim();
204
- if (!hash)
205
- continue;
206
- commits.push({
207
- hash,
208
- message,
209
- author,
210
- timestamp: parseISOTimestamp(isoString),
211
- });
212
- }
213
- return commits;
214
- }
215
- // ---------------------------------------------------------------------------
216
- // scan
217
- // ---------------------------------------------------------------------------
218
- /**
219
- * Main scanning function — discovers spec↔commit pairs from commit history.
220
- *
221
- * Iterates every commit in the repo, extracts a conventional-commit scope from
222
- * its message, normalizes it, and checks whether the resulting spec ID exists
223
- * on disk. When a match is found the pair is recorded with full spec and
224
- * commit metadata.
225
- *
226
- * Duplicates (identical specId + commitHash) are de-duplicated via a
227
- * `Map` keyed on `"${specId}|${commitHash}"`.
228
- */
229
- function scan(repoPath, specStoragePath, config) {
230
- const pairs = new Map();
231
- const commits = getAllCommits(repoPath);
232
- for (const commit of commits) {
233
- const specId = (0, scope_resolver_1.resolveScopeToSpec)(commit.message, specStoragePath, config);
234
- if (!specId) {
235
- (0, errors_1.logDebug)('scan: no scope match', {
236
- commitHash: commit.hash.slice(0, 7),
237
- message: commit.message,
238
- });
239
- continue;
240
- }
241
- const specMetadata = (0, spec_extractor_1.extractSpecMetadata)(specStoragePath, specId, config);
242
- const key = `${specId}|${commit.hash}`;
243
- if (!pairs.has(key)) {
244
- pairs.set(key, {
245
- specId,
246
- commitHash: commit.hash,
247
- specMetadata,
248
- commitMetadata: commit,
249
- });
250
- }
251
- }
252
- return Array.from(pairs.values());
253
- }
254
- //# sourceMappingURL=git-scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-scanner.js","sourceRoot":"","sources":["../../../src/spec/build/git-scanner.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,176 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../../src/spec/evolve/llm-client.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,24 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,8 +0,0 @@
1
- /** Shared options for all `execFileSync` Git calls across the spec module. */
2
- export declare function gitExecOptions(repoPath: string): {
3
- cwd: string;
4
- encoding: "utf8";
5
- stdio: (number | import("stream") | import("child_process").IOType | "ipc" | null | undefined)[];
6
- windowsHide: boolean;
7
- };
8
- //# sourceMappingURL=git-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/spec/git-utils.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;;;EAQ9C"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gitExecOptions = gitExecOptions;
4
- /** Shared options for all `execFileSync` Git calls across the spec module. */
5
- function gitExecOptions(repoPath) {
6
- const stdio = ['ignore', 'pipe', 'ignore'];
7
- return {
8
- cwd: repoPath,
9
- encoding: 'utf8',
10
- stdio,
11
- windowsHide: true,
12
- };
13
- }
14
- //# sourceMappingURL=git-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/spec/git-utils.ts"],"names":[],"mappings":";;AAGA,wCAQC;AATD,8EAA8E;AAC9E,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,MAAe;QACzB,KAAK;QACL,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- export { LlmClient, OpenAiLlmClient } from './client';
2
- export { LOGIC_CHECK_SYSTEM_PROMPT, buildLogicCheckUserPrompt, SPEC_EVALUATION_SYSTEM_PROMPT, buildSpecEvaluationUserPrompt, } from './prompts';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spec/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,WAAW,CAAC"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSpecEvaluationUserPrompt = exports.SPEC_EVALUATION_SYSTEM_PROMPT = exports.buildLogicCheckUserPrompt = exports.LOGIC_CHECK_SYSTEM_PROMPT = exports.OpenAiLlmClient = void 0;
4
- var client_1 = require("./client");
5
- Object.defineProperty(exports, "OpenAiLlmClient", { enumerable: true, get: function () { return client_1.OpenAiLlmClient; } });
6
- var prompts_1 = require("./prompts");
7
- Object.defineProperty(exports, "LOGIC_CHECK_SYSTEM_PROMPT", { enumerable: true, get: function () { return prompts_1.LOGIC_CHECK_SYSTEM_PROMPT; } });
8
- Object.defineProperty(exports, "buildLogicCheckUserPrompt", { enumerable: true, get: function () { return prompts_1.buildLogicCheckUserPrompt; } });
9
- Object.defineProperty(exports, "SPEC_EVALUATION_SYSTEM_PROMPT", { enumerable: true, get: function () { return prompts_1.SPEC_EVALUATION_SYSTEM_PROMPT; } });
10
- Object.defineProperty(exports, "buildSpecEvaluationUserPrompt", { enumerable: true, get: function () { return prompts_1.buildSpecEvaluationUserPrompt; } });
11
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/spec/llm/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsD;AAAlC,yGAAA,eAAe,OAAA;AACnC,qCAKmB;AAJjB,oHAAA,yBAAyB,OAAA;AACzB,oHAAA,yBAAyB,OAAA;AACzB,wHAAA,6BAA6B,OAAA;AAC7B,wHAAA,6BAA6B,OAAA"}