soloforge 1.4.7 → 1.4.9

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 (51) hide show
  1. package/README.md +4 -0
  2. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/tools.js +69 -9
  4. package/dist/adapters/claude_code/tools.js.map +1 -1
  5. package/dist/bin/soloforge.d.ts.map +1 -1
  6. package/dist/bin/soloforge.js +3 -2
  7. package/dist/bin/soloforge.js.map +1 -1
  8. package/dist/engine/change_coordinator.d.ts.map +1 -1
  9. package/dist/engine/change_coordinator.js +2 -1
  10. package/dist/engine/change_coordinator.js.map +1 -1
  11. package/dist/engine/core_engineering_principles.d.ts.map +1 -1
  12. package/dist/engine/core_engineering_principles.js +2 -1
  13. package/dist/engine/core_engineering_principles.js.map +1 -1
  14. package/dist/engine/enforcement_guard.d.ts.map +1 -1
  15. package/dist/engine/enforcement_guard.js +2 -1
  16. package/dist/engine/enforcement_guard.js.map +1 -1
  17. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  18. package/dist/engine/impact_analyzer.js +5 -23
  19. package/dist/engine/impact_analyzer.js.map +1 -1
  20. package/dist/engine/intent_expander.d.ts.map +1 -1
  21. package/dist/engine/intent_expander.js +9 -46
  22. package/dist/engine/intent_expander.js.map +1 -1
  23. package/dist/engine/onboarding.d.ts.map +1 -1
  24. package/dist/engine/onboarding.js +2 -1
  25. package/dist/engine/onboarding.js.map +1 -1
  26. package/dist/engine/path_scope_utils.d.ts +21 -0
  27. package/dist/engine/path_scope_utils.d.ts.map +1 -0
  28. package/dist/engine/path_scope_utils.js +126 -0
  29. package/dist/engine/path_scope_utils.js.map +1 -0
  30. package/dist/engine/plan_proposal_gate.d.ts.map +1 -1
  31. package/dist/engine/plan_proposal_gate.js +2 -1
  32. package/dist/engine/plan_proposal_gate.js.map +1 -1
  33. package/dist/engine/scope_controller.d.ts.map +1 -1
  34. package/dist/engine/scope_controller.js +5 -7
  35. package/dist/engine/scope_controller.js.map +1 -1
  36. package/dist/engine/scope_lease.d.ts.map +1 -1
  37. package/dist/engine/scope_lease.js +2 -2
  38. package/dist/engine/scope_lease.js.map +1 -1
  39. package/dist/engine/scope_resolver.d.ts +11 -0
  40. package/dist/engine/scope_resolver.d.ts.map +1 -0
  41. package/dist/engine/scope_resolver.js +526 -0
  42. package/dist/engine/scope_resolver.js.map +1 -0
  43. package/dist/engine/workspace_lease.d.ts.map +1 -1
  44. package/dist/engine/workspace_lease.js +6 -5
  45. package/dist/engine/workspace_lease.js.map +1 -1
  46. package/dist/knowledge/index_manager.d.ts.map +1 -1
  47. package/dist/knowledge/index_manager.js +2 -1
  48. package/dist/knowledge/index_manager.js.map +1 -1
  49. package/dist/types.d.ts +33 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,526 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { ensureTrailingSlash, hasGlobPattern, isPathInScope, isSameOrDescendantPath, matchesScopePattern, normalizeScopePattern, toPosixPath, } from "./path_scope_utils.js";
4
+ const IGNORED_DIRS = new Set([
5
+ ".claude",
6
+ ".codex",
7
+ ".git",
8
+ ".soloforge",
9
+ ".trae",
10
+ "build",
11
+ "coverage",
12
+ "dist",
13
+ "node_modules",
14
+ "out",
15
+ "target",
16
+ ]);
17
+ const BACKEND_HINTS = [
18
+ "backend",
19
+ "server",
20
+ "service",
21
+ "services",
22
+ "api",
23
+ "web",
24
+ "model",
25
+ "dao",
26
+ "repository",
27
+ ];
28
+ const FRONTEND_HINTS = [
29
+ "frontend",
30
+ "client",
31
+ "webapp",
32
+ "ui",
33
+ "portal",
34
+ "platform",
35
+ "institution",
36
+ ];
37
+ const KNOWN_SOURCE_ROOT_PATTERN = /^(?:src|[^/]+\/src|[^/]+\/[^/]+\/src|[^/]+\/[^/]+\/[^/]+\/src)\/$/;
38
+ const PATH_CASE_SENSITIVE = process.platform !== "win32" && process.platform !== "darwin";
39
+ function pathExists(projectPath, relativePath) {
40
+ try {
41
+ return fs.existsSync(path.join(projectPath, relativePath));
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ function isDirectory(projectPath, relativePath) {
48
+ try {
49
+ return fs.statSync(path.join(projectPath, relativePath)).isDirectory();
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ function readDirSafe(projectPath, relativePath) {
56
+ try {
57
+ return fs.readdirSync(path.join(projectPath, relativePath), { withFileTypes: true });
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
63
+ function normalizeRelPath(rawPath, basePath) {
64
+ const normalized = String(rawPath ?? "").replace(/\\/g, "/").trim();
65
+ if (!normalized || normalized === ".")
66
+ return normalizeScopePattern(basePath ?? ".");
67
+ const combined = basePath && basePath !== "."
68
+ ? path.posix.normalize(path.posix.join(toPosixPath(basePath), normalized))
69
+ : path.posix.normalize(normalized);
70
+ return normalizeScopePattern(combined);
71
+ }
72
+ function dedupePreserveOrder(paths) {
73
+ const seen = new Set();
74
+ const result = [];
75
+ for (const raw of paths) {
76
+ const normalized = normalizeScopePattern(raw);
77
+ if (!normalized || seen.has(normalized))
78
+ continue;
79
+ seen.add(normalized);
80
+ result.push(normalized);
81
+ }
82
+ return result;
83
+ }
84
+ function removeNestedBroadDuplicates(paths) {
85
+ const sorted = dedupePreserveOrder(paths).sort((a, b) => a.length - b.length);
86
+ const result = [];
87
+ for (const candidate of sorted) {
88
+ if (hasGlobPattern(candidate)) {
89
+ result.push(candidate);
90
+ continue;
91
+ }
92
+ if (KNOWN_SOURCE_ROOT_PATTERN.test(candidate)) {
93
+ for (let i = result.length - 1; i >= 0; i -= 1) {
94
+ const existing = result[i];
95
+ if (!hasGlobPattern(existing)
96
+ && KNOWN_SOURCE_ROOT_PATTERN.test(existing)
97
+ && isSameOrDescendantPath(candidate, existing, { caseSensitive: PATH_CASE_SENSITIVE })) {
98
+ result.splice(i, 1);
99
+ }
100
+ }
101
+ }
102
+ if (result.some((existing) => !hasGlobPattern(existing)
103
+ && isSameOrDescendantPath(candidate, existing, { caseSensitive: PATH_CASE_SENSITIVE }))) {
104
+ continue;
105
+ }
106
+ result.push(candidate);
107
+ }
108
+ return result;
109
+ }
110
+ function getAffectedRepos(classification) {
111
+ return Array.isArray(classification?.affected_repos)
112
+ ? classification.affected_repos.filter((repo) => typeof repo === "string" && repo.length > 0)
113
+ : [];
114
+ }
115
+ function taskNeedsBackend(input) {
116
+ const affected = getAffectedRepos(input.classification).join(" ").toLowerCase();
117
+ const intent = `${input.classification.task_type} ${input.routeDecision?.workflow_intent ?? ""} ${affected}`;
118
+ if (/backend|server|api|java|spring|数据库|接口|后端|服务|mapper|controller|service/i.test(intent))
119
+ return true;
120
+ if (input.config.tech_stack.backend?.framework && input.config.tech_stack.backend.framework !== "unknown") {
121
+ return affected.length === 0 || /backend|server|api|service|web|model/.test(affected);
122
+ }
123
+ return false;
124
+ }
125
+ function taskNeedsFrontend(input) {
126
+ const affected = getAffectedRepos(input.classification).join(" ").toLowerCase();
127
+ const intent = `${input.classification.task_type} ${input.routeDecision?.workflow_intent ?? ""} ${affected}`;
128
+ if (/frontend|client|react|vue|页面|前端|component|route|ui/i.test(intent))
129
+ return true;
130
+ if (input.config.tech_stack.frontend?.framework && input.config.tech_stack.frontend.framework !== "unknown") {
131
+ return affected.length === 0 || /frontend|client|ui|app|web|platform|institution/.test(affected);
132
+ }
133
+ return false;
134
+ }
135
+ function roleFromPath(relativePath) {
136
+ const lower = relativePath.toLowerCase();
137
+ if (FRONTEND_HINTS.some((hint) => lower.split("/").includes(hint) || lower.includes(`/${hint}/`)))
138
+ return "frontend";
139
+ if (BACKEND_HINTS.some((hint) => lower.split("/").includes(hint) || lower.includes(`/${hint}/`)))
140
+ return "backend";
141
+ if (/(?:^|\/)src\/main\/(?:java|kotlin|scala)(?:\/|$)/.test(lower))
142
+ return "backend";
143
+ if (/(?:^|\/)(?:src|app)\/(?:pages|components|views|router|routes)(?:\/|$)/.test(lower))
144
+ return "frontend";
145
+ return "shared";
146
+ }
147
+ function addSourceRoot(roots, root) {
148
+ const normalized = ensureTrailingSlash(root.path);
149
+ if (!normalized || normalized === "./")
150
+ return;
151
+ const existing = roots.get(normalized);
152
+ if (existing) {
153
+ existing.evidence.push(...root.evidence.filter((item) => !existing.evidence.includes(item)));
154
+ if (existing.role === "shared" && root.role !== "shared")
155
+ existing.role = root.role;
156
+ return;
157
+ }
158
+ roots.set(normalized, { ...root, path: normalized });
159
+ }
160
+ function discoverMavenRoots(projectPath, roots) {
161
+ const stack = [""];
162
+ while (stack.length > 0) {
163
+ const current = stack.pop();
164
+ const entries = readDirSafe(projectPath, current);
165
+ for (const entry of entries) {
166
+ if (!entry.isDirectory() || IGNORED_DIRS.has(entry.name))
167
+ continue;
168
+ const child = current ? `${current}/${entry.name}` : entry.name;
169
+ const depth = child.split("/").length;
170
+ if (depth <= 4)
171
+ stack.push(child);
172
+ }
173
+ const hasJavaSource = isDirectory(projectPath, path.posix.join(current, "src/main/java"))
174
+ || isDirectory(projectPath, path.posix.join(current, "src/main/kotlin"));
175
+ const hasBuildFile = pathExists(projectPath, path.posix.join(current, "pom.xml"))
176
+ || pathExists(projectPath, path.posix.join(current, "build.gradle"))
177
+ || pathExists(projectPath, path.posix.join(current, "build.gradle.kts"));
178
+ const currentIsSourceLayer = /(?:^|\/)src(?:\/main)?$/i.test(current);
179
+ if (!currentIsSourceLayer && (hasJavaSource || (hasBuildFile && isDirectory(projectPath, path.posix.join(current, "src"))))) {
180
+ addSourceRoot(roots, {
181
+ path: current ? `${current}/src/` : "src/",
182
+ role: "backend",
183
+ evidence: [
184
+ hasJavaSource ? "detected src/main Java/Kotlin source tree" : "detected JVM build file with src directory",
185
+ ],
186
+ });
187
+ }
188
+ }
189
+ }
190
+ function discoverFrontendRoots(projectPath, roots) {
191
+ const containerNames = new Set(["apps", "packages", "modules", "services", "clients", "frontends", "workspaces"]);
192
+ const stack = [""];
193
+ while (stack.length > 0) {
194
+ const current = stack.pop();
195
+ for (const entry of readDirSafe(projectPath, current)) {
196
+ if (!entry.isDirectory() || IGNORED_DIRS.has(entry.name))
197
+ continue;
198
+ const child = current ? `${current}/${entry.name}` : entry.name;
199
+ const depth = child.split("/").length;
200
+ if (depth <= 3)
201
+ stack.push(child);
202
+ }
203
+ const srcCandidate = current ? `${current}/src` : "src";
204
+ if (isDirectory(projectPath, srcCandidate)) {
205
+ addSourceRoot(roots, {
206
+ path: `${srcCandidate}/`,
207
+ role: roleFromPath(srcCandidate),
208
+ evidence: ["detected frontend source directory candidate"],
209
+ });
210
+ }
211
+ if (containerNames.has(path.posix.basename(current))) {
212
+ for (const entry of readDirSafe(projectPath, current)) {
213
+ if (!entry.isDirectory() || IGNORED_DIRS.has(entry.name))
214
+ continue;
215
+ const src = current ? `${current}/${entry.name}/src` : `${entry.name}/src`;
216
+ if (!isDirectory(projectPath, src))
217
+ continue;
218
+ addSourceRoot(roots, {
219
+ path: `${src}/`,
220
+ role: "frontend",
221
+ evidence: [`detected workspace package source: ${current || "."}/*/src`],
222
+ });
223
+ }
224
+ }
225
+ }
226
+ }
227
+ function discoverSourceRoots(projectPath) {
228
+ const roots = new Map();
229
+ discoverMavenRoots(projectPath, roots);
230
+ discoverFrontendRoots(projectPath, roots);
231
+ for (const topLevel of readDirSafe(projectPath, "")) {
232
+ if (!topLevel.isDirectory() || IGNORED_DIRS.has(topLevel.name))
233
+ continue;
234
+ const directSrc = `${topLevel.name}/src`;
235
+ if (isDirectory(projectPath, directSrc)) {
236
+ addSourceRoot(roots, {
237
+ path: `${directSrc}/`,
238
+ role: roleFromPath(directSrc),
239
+ evidence: ["detected top-level module src directory"],
240
+ });
241
+ }
242
+ }
243
+ return [...roots.values()].sort((a, b) => a.path.localeCompare(b.path));
244
+ }
245
+ function expandWeakPath(projectPath, declaredPath, role, discoveredRoots, warnings) {
246
+ const normalized = normalizeRelPath(declaredPath);
247
+ if (pathExists(projectPath, normalized))
248
+ return [normalized];
249
+ const basename = normalized.replace(/\/$/, "");
250
+ if (basename === "src" || basename.endsWith("/src")) {
251
+ const matchingRoots = discoveredRoots
252
+ .filter((root) => role === "shared" || root.role === role || root.role === "shared")
253
+ .map((root) => root.path);
254
+ if (matchingRoots.length > 0) {
255
+ warnings.push(`scope ${declaredPath} 在项目根不存在,已按真实多模块源码树展开为 ${matchingRoots.join(", ")}`);
256
+ return matchingRoots;
257
+ }
258
+ }
259
+ warnings.push(`配置 scope ${declaredPath} 在项目中不存在,保留为声明路径但标记为低置信`);
260
+ return [normalized];
261
+ }
262
+ function addCandidate(candidates, candidate) {
263
+ for (const resolved of candidate.evidence.length > 0 ? [candidate] : [candidate]) {
264
+ candidates.push({
265
+ ...resolved,
266
+ path: normalizeScopePattern(resolved.path),
267
+ });
268
+ }
269
+ }
270
+ function addConfigScopeCandidates(input, discoveredRoots, candidates, warnings) {
271
+ const needsBackend = taskNeedsBackend(input);
272
+ const needsFrontend = taskNeedsFrontend(input);
273
+ if (needsBackend) {
274
+ for (const declared of input.config.scope?.backend ?? []) {
275
+ for (const expanded of expandWeakPath(input.projectPath, declared, "backend", discoveredRoots, warnings)) {
276
+ addCandidate(candidates, {
277
+ path: expanded,
278
+ source: "config.scope.backend",
279
+ confidence: pathExists(input.projectPath, expanded) ? "high" : "low",
280
+ role: "backend",
281
+ declared_path: declared,
282
+ evidence: ["configured backend scope"],
283
+ });
284
+ }
285
+ }
286
+ }
287
+ if (needsFrontend) {
288
+ for (const declared of input.config.scope?.frontend ?? []) {
289
+ for (const expanded of expandWeakPath(input.projectPath, declared, "frontend", discoveredRoots, warnings)) {
290
+ addCandidate(candidates, {
291
+ path: expanded,
292
+ source: "config.scope.frontend",
293
+ confidence: pathExists(input.projectPath, expanded) ? "high" : "low",
294
+ role: "frontend",
295
+ declared_path: declared,
296
+ evidence: ["configured frontend scope"],
297
+ });
298
+ }
299
+ }
300
+ }
301
+ }
302
+ function repoMatches(repo, affectedRepos) {
303
+ if (affectedRepos.length === 0)
304
+ return true;
305
+ const name = repo.name.toLowerCase();
306
+ const repoPath = repo.path.toLowerCase();
307
+ return affectedRepos.some((affected) => {
308
+ const normalized = affected.toLowerCase();
309
+ return normalized === name
310
+ || name.includes(normalized)
311
+ || normalized.includes(name)
312
+ || repoPath.includes(normalized);
313
+ });
314
+ }
315
+ function repoRole(repo) {
316
+ const combined = `${repo.name} ${repo.path} ${repo.lang} ${repo.framework}`.toLowerCase();
317
+ if (/react|vue|angular|frontend|client|ui|typescript/.test(combined))
318
+ return "frontend";
319
+ if (/spring|java|backend|server|api|service|go|python|node/.test(combined))
320
+ return "backend";
321
+ return "shared";
322
+ }
323
+ function addRepoCandidates(input, discoveredRoots, candidates, warnings) {
324
+ const affectedRepos = getAffectedRepos(input.classification);
325
+ for (const repo of input.config.repos ?? []) {
326
+ if (!repoMatches(repo, affectedRepos))
327
+ continue;
328
+ const role = repoRole(repo);
329
+ for (const declaredScope of repo.scope ?? []) {
330
+ const scopeLooksProjectRelative = declaredScope.replace(/\\/g, "/").startsWith(`${repo.path.replace(/\\/g, "/").replace(/\/$/, "")}/`);
331
+ const declared = scopeLooksProjectRelative
332
+ ? normalizeRelPath(declaredScope)
333
+ : normalizeRelPath(declaredScope, repo.path);
334
+ const expandedPaths = pathExists(input.projectPath, declared)
335
+ ? [declared]
336
+ : expandWeakPath(input.projectPath, declared, role, discoveredRoots, warnings);
337
+ for (const expanded of expandedPaths) {
338
+ addCandidate(candidates, {
339
+ path: expanded,
340
+ source: "config.repos.scope",
341
+ confidence: pathExists(input.projectPath, expanded) ? "high" : "medium",
342
+ role,
343
+ repo_name: repo.name,
344
+ base_path: normalizeRelPath(repo.path),
345
+ declared_path: declaredScope,
346
+ evidence: [`repo ${repo.name} scope`],
347
+ });
348
+ }
349
+ }
350
+ }
351
+ }
352
+ function addRouteCandidates(input, candidates) {
353
+ for (const routePath of input.routeDecision?.scope?.allowed_paths ?? []) {
354
+ addCandidate(candidates, {
355
+ path: normalizeRelPath(routePath),
356
+ source: "route_decision.scope.allowed_paths",
357
+ confidence: "high",
358
+ role: "shared",
359
+ declared_path: routePath,
360
+ evidence: ["explicit route scope"],
361
+ });
362
+ }
363
+ }
364
+ function addFingerprintCandidates(input, discoveredRoots, candidates) {
365
+ const needsBackend = taskNeedsBackend(input);
366
+ const needsFrontend = taskNeedsFrontend(input);
367
+ for (const root of discoveredRoots) {
368
+ if ((root.role === "backend" && !needsBackend) || (root.role === "frontend" && !needsFrontend))
369
+ continue;
370
+ addCandidate(candidates, {
371
+ path: root.path,
372
+ source: "project_fingerprint.source_roots",
373
+ confidence: "medium",
374
+ role: root.role,
375
+ evidence: root.evidence,
376
+ });
377
+ }
378
+ }
379
+ function buildSources(candidates, selectedPaths) {
380
+ const grouped = new Map();
381
+ for (const candidate of candidates) {
382
+ if (!selectedPaths.includes(candidate.path))
383
+ continue;
384
+ const key = [
385
+ candidate.source,
386
+ candidate.role,
387
+ candidate.repo_name ?? "",
388
+ candidate.base_path ?? "",
389
+ candidate.declared_path ?? candidate.path,
390
+ ].join("|");
391
+ const current = grouped.get(key);
392
+ if (current) {
393
+ if (!current.resolved_paths.includes(candidate.path))
394
+ current.resolved_paths.push(candidate.path);
395
+ current.evidence.push(...candidate.evidence.filter((item) => !current.evidence.includes(item)));
396
+ }
397
+ else {
398
+ grouped.set(key, {
399
+ source: candidate.source,
400
+ confidence: candidate.confidence,
401
+ role: candidate.role,
402
+ repo_name: candidate.repo_name,
403
+ base_path: candidate.base_path,
404
+ declared_paths: [candidate.declared_path ?? candidate.path],
405
+ resolved_paths: [candidate.path],
406
+ evidence: [...candidate.evidence],
407
+ });
408
+ }
409
+ }
410
+ return [...grouped.values()];
411
+ }
412
+ function readonlyFromRepos(input) {
413
+ const affected = getAffectedRepos(input.classification);
414
+ const readonly = [];
415
+ for (const repo of input.config.repos ?? []) {
416
+ if (repoMatches(repo, affected))
417
+ continue;
418
+ for (const scope of repo.scope ?? []) {
419
+ readonly.push(normalizeRelPath(scope, repo.path));
420
+ }
421
+ }
422
+ return dedupePreserveOrder(readonly);
423
+ }
424
+ function isBroadRootOnly(paths) {
425
+ return paths.length === 1 && (paths[0] === "." || paths[0] === "./");
426
+ }
427
+ function buildReport(input, allowedPaths, readonlyPaths, newFilesAllowed, candidates, discoveredRoots, warnings, conflicts, status) {
428
+ return {
429
+ status,
430
+ project_root: input.projectPath,
431
+ path_semantics: {
432
+ storage_format: "project_relative_posix",
433
+ host_platform: process.platform,
434
+ case_sensitive: process.platform !== "win32" && process.platform !== "darwin",
435
+ },
436
+ allowed_paths: allowedPaths,
437
+ readonly_paths: readonlyPaths,
438
+ new_files_allowed: newFilesAllowed,
439
+ sources: buildSources(candidates, allowedPaths),
440
+ discovered_source_roots: discoveredRoots.map((root) => root.path),
441
+ warnings: [...new Set(warnings)],
442
+ conflicts: [...new Set(conflicts)],
443
+ recovery_commands: [
444
+ "soloforge doctor",
445
+ "soloforge config repair --dry-run",
446
+ "soloforge init --interactive",
447
+ "soloforge sync-templates",
448
+ "soloforge sync-adapters",
449
+ ],
450
+ };
451
+ }
452
+ export function resolveTaskScope(input) {
453
+ if (input.routeDecision && !input.routeDecision.mutation_allowed) {
454
+ const outputArtifact = input.routeDecision.output_artifact;
455
+ const allowedPaths = [];
456
+ if (outputArtifact?.path) {
457
+ const dir = outputArtifact.path.replace(/\\/g, "/").replace(/\/[^/]+$/, "");
458
+ allowedPaths.push(ensureTrailingSlash(dir || "."));
459
+ }
460
+ else {
461
+ allowedPaths.push(".soloforge/output/");
462
+ }
463
+ const readonlyPaths = dedupePreserveOrder(input.config.repos.flatMap((repo) => (repo.scope ?? []).map((scope) => normalizeRelPath(scope, repo.path))));
464
+ const candidates = allowedPaths.map((allowed) => ({
465
+ path: allowed,
466
+ source: "route_decision.output_artifact",
467
+ confidence: "high",
468
+ role: "output",
469
+ evidence: ["read-only route may only write declared output artifact directory"],
470
+ }));
471
+ return {
472
+ allowed_paths: allowedPaths,
473
+ readonly_paths: readonlyPaths,
474
+ new_files_allowed: true,
475
+ new_file_patterns: ["*.md"],
476
+ resolution: buildReport(input, allowedPaths, readonlyPaths, true, candidates, [], [], [], "resolved"),
477
+ };
478
+ }
479
+ const warnings = [];
480
+ const conflicts = [];
481
+ const candidates = [];
482
+ const discoveredRoots = discoverSourceRoots(input.projectPath);
483
+ addRouteCandidates(input, candidates);
484
+ addRepoCandidates(input, discoveredRoots, candidates, warnings);
485
+ addConfigScopeCandidates(input, discoveredRoots, candidates, warnings);
486
+ addFingerprintCandidates(input, discoveredRoots, candidates);
487
+ const selected = removeNestedBroadDuplicates(candidates
488
+ .filter((candidate) => candidate.confidence !== "low" || pathExists(input.projectPath, candidate.path))
489
+ .map((candidate) => candidate.path));
490
+ let allowedPaths = selected;
491
+ let status = "resolved";
492
+ if (allowedPaths.length === 0) {
493
+ allowedPaths = discoveredRoots.map((root) => root.path);
494
+ if (allowedPaths.length > 0) {
495
+ status = "fallback";
496
+ warnings.push("未从配置得到可信 scope,已退回真实项目源码树;建议运行 soloforge doctor 并修复 config scope。");
497
+ }
498
+ else {
499
+ allowedPaths = ["."];
500
+ status = "blocked";
501
+ conflicts.push("无法从配置或项目指纹推断源码 scope;请运行 soloforge init --interactive 确认项目结构。");
502
+ }
503
+ }
504
+ if (isBroadRootOnly(allowedPaths) && discoveredRoots.length > 0) {
505
+ allowedPaths = discoveredRoots.map((root) => root.path);
506
+ status = "fallback";
507
+ warnings.push("scope 仅为项目根,已收窄为真实源码根,避免过宽写入范围。");
508
+ }
509
+ const readonlyPaths = readonlyFromRepos(input)
510
+ .filter((readonly) => !allowedPaths.some((allowed) => matchesScopePattern(readonly, allowed)
511
+ || matchesScopePattern(allowed, readonly)
512
+ || isPathInScope(readonly, allowed, { caseSensitive: PATH_CASE_SENSITIVE })
513
+ || isPathInScope(allowed, readonly, { caseSensitive: PATH_CASE_SENSITIVE })));
514
+ const newFilesAllowed = !input.degraded && status !== "blocked";
515
+ const report = buildReport(input, allowedPaths, readonlyPaths, newFilesAllowed, candidates, discoveredRoots, warnings, conflicts, status);
516
+ return {
517
+ allowed_paths: allowedPaths,
518
+ readonly_paths: readonlyPaths,
519
+ new_files_allowed: newFilesAllowed,
520
+ new_file_patterns: newFilesAllowed && input.classification.strategy === "full_pipeline"
521
+ ? ["**/*"]
522
+ : undefined,
523
+ resolution: report,
524
+ };
525
+ }
526
+ //# sourceMappingURL=scope_resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope_resolver.js","sourceRoot":"","sources":["../../src/engine/scope_resolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace_lease.d.ts","sourceRoot":"","sources":["../../src/engine/workspace_lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,iBAAiB,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,mBAAmB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,eAAe,GAAG,kBAAkB,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,eAAe;AACf,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpE;AAED,mBAAmB;AACnB,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAAE,GACnB;IAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAqE9D;AAED,eAAe;AACf,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASvC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAyChF;AAED,uBAAuB;AACvB,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
1
+ {"version":3,"file":"workspace_lease.d.ts","sourceRoot":"","sources":["../../src/engine/workspace_lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGvF,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,iBAAiB,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,mBAAmB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,eAAe,GAAG,kBAAkB,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,eAAe;AACf,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpE;AAED,mBAAmB;AACnB,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAAE,GACnB;IAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAqE9D;AAED,eAAe;AACf,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASvC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAyChF;AAED,uBAAuB;AACvB,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -8,6 +8,7 @@
8
8
  * - out-of-scope write 必须 blocked
9
9
  */
10
10
  import { createDiagnosticEvent } from "./diagnostic_registry.js";
11
+ import { isPathInScope } from "./path_scope_utils.js";
11
12
  /** 内存存储 */
12
13
  const leaseStore = new Map();
13
14
  /** 获取 lease */
@@ -31,14 +32,14 @@ export function acquireLease(taskId, leaseType, scopePaths) {
31
32
  if (existing.task_id === taskId)
32
33
  continue;
33
34
  // 同 scope 重叠检查
34
- const overlap = existing.scope_paths.some((p) => scopePaths.some((sp) => p === sp || p.startsWith(sp + "/") || sp.startsWith(p + "/")));
35
+ const overlap = existing.scope_paths.some((p) => scopePaths.some((sp) => isPathInScope(p, sp, { caseSensitive: true }) || isPathInScope(sp, p, { caseSensitive: true })));
35
36
  if (overlap) {
36
37
  if (leaseType === "delivery" || existing.lease_type === "delivery") {
37
38
  // delivery 必须互斥
38
39
  conflicts.push({
39
40
  lease_a_id: existing.lease_id,
40
41
  lease_b_id: leaseId,
41
- conflict_path: existing.scope_paths.find((p) => scopePaths.some((sp) => p === sp || p.startsWith(sp + "/"))) ?? "unknown",
42
+ conflict_path: existing.scope_paths.find((p) => scopePaths.some((sp) => isPathInScope(p, sp, { caseSensitive: true }))) ?? "unknown",
42
43
  conflict_type: "delivery_overlap",
43
44
  resolved: false,
44
45
  });
@@ -48,7 +49,7 @@ export function acquireLease(taskId, leaseType, scopePaths) {
48
49
  conflicts.push({
49
50
  lease_a_id: existing.lease_id,
50
51
  lease_b_id: leaseId,
51
- conflict_path: existing.scope_paths.find((p) => scopePaths.some((sp) => p === sp)) ?? "unknown",
52
+ conflict_path: existing.scope_paths.find((p) => scopePaths.some((sp) => isPathInScope(p, sp, { caseSensitive: true }))) ?? "unknown",
52
53
  conflict_type: "scope_overlap",
53
54
  resolved: false,
54
55
  });
@@ -99,7 +100,7 @@ export function releaseLease(leaseId) {
99
100
  * 检查是否超出 scope 写入。
100
101
  */
101
102
  export function checkOutOfScopeWrite(taskId, targetPath, allowedPaths) {
102
- const inScope = allowedPaths.some((p) => targetPath === p || targetPath.startsWith(p + "/"));
103
+ const inScope = allowedPaths.some((p) => isPathInScope(targetPath, p, { caseSensitive: true }));
103
104
  if (!inScope) {
104
105
  return {
105
106
  allowed: false,
@@ -121,7 +122,7 @@ export function generateIsolationReport(taskId) {
121
122
  const b = activeLeases[j];
122
123
  if (a.task_id === b.task_id)
123
124
  continue;
124
- const overlap = a.scope_paths.some((p) => b.scope_paths.some((bp) => p === bp || p.startsWith(bp + "/") || bp.startsWith(p + "/")));
125
+ const overlap = a.scope_paths.some((p) => b.scope_paths.some((bp) => isPathInScope(p, bp, { caseSensitive: true }) || isPathInScope(bp, p, { caseSensitive: true })));
125
126
  if (overlap) {
126
127
  conflicts.push({
127
128
  lease_a_id: a.lease_id,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace_lease.js","sourceRoot":"","sources":["../../src/engine/workspace_lease.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace_lease.js","sourceRoot":"","sources":["../../src/engine/workspace_lease.ts"],"names":[],"mappings":"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"}