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.
- package/README.md +4 -0
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +69 -9
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +3 -2
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +2 -1
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/core_engineering_principles.d.ts.map +1 -1
- package/dist/engine/core_engineering_principles.js +2 -1
- package/dist/engine/core_engineering_principles.js.map +1 -1
- package/dist/engine/enforcement_guard.d.ts.map +1 -1
- package/dist/engine/enforcement_guard.js +2 -1
- package/dist/engine/enforcement_guard.js.map +1 -1
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js +5 -23
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +9 -46
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +2 -1
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/path_scope_utils.d.ts +21 -0
- package/dist/engine/path_scope_utils.d.ts.map +1 -0
- package/dist/engine/path_scope_utils.js +126 -0
- package/dist/engine/path_scope_utils.js.map +1 -0
- package/dist/engine/plan_proposal_gate.d.ts.map +1 -1
- package/dist/engine/plan_proposal_gate.js +2 -1
- package/dist/engine/plan_proposal_gate.js.map +1 -1
- package/dist/engine/scope_controller.d.ts.map +1 -1
- package/dist/engine/scope_controller.js +5 -7
- package/dist/engine/scope_controller.js.map +1 -1
- package/dist/engine/scope_lease.d.ts.map +1 -1
- package/dist/engine/scope_lease.js +2 -2
- package/dist/engine/scope_lease.js.map +1 -1
- package/dist/engine/scope_resolver.d.ts +11 -0
- package/dist/engine/scope_resolver.d.ts.map +1 -0
- package/dist/engine/scope_resolver.js +526 -0
- package/dist/engine/scope_resolver.js.map +1 -0
- package/dist/engine/workspace_lease.d.ts.map +1 -1
- package/dist/engine/workspace_lease.js +6 -5
- package/dist/engine/workspace_lease.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +2 -1
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,6 +67,8 @@ soloforge init --adapter all # 同时生成所有适配器配置
|
|
|
67
67
|
|
|
68
68
|
`config.yaml` 是可选文件。没有它时,SoloForge 会根据 `package.json`、`pom.xml`、`go.mod` 等文件在运行时推断项目类型;只有高置信度或你手动确认时,才会把配置写入 `.soloforge/config.yaml`。
|
|
69
69
|
|
|
70
|
+
配置里的 scope、仓库路径和产物路径都按项目相对路径理解和存储,适配 Windows、macOS、Linux 时不要手写宿主机绝对路径。
|
|
71
|
+
|
|
70
72
|
## 生成文件
|
|
71
73
|
|
|
72
74
|
| 位置 | 用途 |
|
|
@@ -107,6 +109,8 @@ soloforge doctor
|
|
|
107
109
|
soloforge audit-design-artifacts
|
|
108
110
|
```
|
|
109
111
|
|
|
112
|
+
如果你只是升级 CLI,不需要重新 `init` 旧项目。`soloforge init` 只用于新项目首次接入,或者项目里根本还没有 `.soloforge/`。
|
|
113
|
+
|
|
110
114
|
存量设计产物需要升级到当前标准时,单独使用设计产物升级命令:
|
|
111
115
|
|
|
112
116
|
```bash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { normalizePathCandidate } from "../../engine/input_material_extractor.js
|
|
|
7
7
|
import { archiveStaleCurrentPointer, detectStaleCurrentTask } from "../../engine/stale_current_task_detector.js";
|
|
8
8
|
import { verifyArtifact } from "../../engine/artifact_contract_registry.js";
|
|
9
9
|
import { verifyRouteDecisionContract } from "../../engine/route_decision_contract_verifier.js";
|
|
10
|
+
import { isSameOrDescendantPath } from "../../engine/path_scope_utils.js";
|
|
10
11
|
import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, hasWriteSideEffect, } from "../../engine/tool_invocation_contract_registry.js";
|
|
11
12
|
import { TOOL_DIAGNOSTIC_CODES } from "../../engine/diagnostic_registry.js";
|
|
12
13
|
function createLazy(loader) {
|
|
@@ -93,6 +94,29 @@ function stripPathLikeReferences(text) {
|
|
|
93
94
|
function hasArchitectureIntentSignal(intent) {
|
|
94
95
|
return ARCHITECTURE_CONTEXT_PATTERN.test(stripPathLikeReferences(intent ?? ""));
|
|
95
96
|
}
|
|
97
|
+
function decodeIndexedJsonString(value) {
|
|
98
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
99
|
+
return value;
|
|
100
|
+
const entries = Object.entries(value);
|
|
101
|
+
if (entries.length === 0)
|
|
102
|
+
return value;
|
|
103
|
+
const isIndexedChars = entries.every(([key, entryValue]) => /^\d+$/.test(key) && typeof entryValue === "string" && entryValue.length <= 1);
|
|
104
|
+
if (!isIndexedChars)
|
|
105
|
+
return value;
|
|
106
|
+
const serialized = entries
|
|
107
|
+
.sort(([a], [b]) => Number(a) - Number(b))
|
|
108
|
+
.map(([, entryValue]) => entryValue)
|
|
109
|
+
.join("")
|
|
110
|
+
.trim();
|
|
111
|
+
if (!serialized.startsWith("{"))
|
|
112
|
+
return value;
|
|
113
|
+
try {
|
|
114
|
+
return JSON.parse(serialized);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
/**
|
|
97
121
|
* 解析 MCP 输入中的契约对象。
|
|
98
122
|
* @description 部分 MCP 客户端会把 z.unknown() 对象参数序列化为 JSON 字符串;
|
|
@@ -101,7 +125,7 @@ function hasArchitectureIntentSignal(intent) {
|
|
|
101
125
|
function parseContractObject(value, fieldName) {
|
|
102
126
|
if (value === undefined || value === null)
|
|
103
127
|
return {};
|
|
104
|
-
const candidate = typeof value === "string"
|
|
128
|
+
const candidate = decodeIndexedJsonString(typeof value === "string"
|
|
105
129
|
? (() => {
|
|
106
130
|
try {
|
|
107
131
|
return JSON.parse(value);
|
|
@@ -110,7 +134,7 @@ function parseContractObject(value, fieldName) {
|
|
|
110
134
|
return undefined;
|
|
111
135
|
}
|
|
112
136
|
})()
|
|
113
|
-
: value;
|
|
137
|
+
: value);
|
|
114
138
|
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
|
|
115
139
|
return { error: `${fieldName} 必须是对象或可解析为对象的 JSON 字符串` };
|
|
116
140
|
}
|
|
@@ -1492,6 +1516,22 @@ export async function registerTools(server, deps) {
|
|
|
1492
1516
|
if (existingBrainstormSession.error) {
|
|
1493
1517
|
return { result: { error: existingBrainstormSession.error, status: "invalid_input" } };
|
|
1494
1518
|
}
|
|
1519
|
+
const existingDesignArtifactPack = parseContractObject(ctx.design_artifact_pack, "design_artifact_pack");
|
|
1520
|
+
if (existingDesignArtifactPack.error) {
|
|
1521
|
+
return { result: { error: existingDesignArtifactPack.error, status: "invalid_input" } };
|
|
1522
|
+
}
|
|
1523
|
+
const existingOodSolidSummary = parseContractObject(ctx.ood_solid_summary, "ood_solid_summary");
|
|
1524
|
+
if (existingOodSolidSummary.error) {
|
|
1525
|
+
return { result: { error: existingOodSolidSummary.error, status: "invalid_input" } };
|
|
1526
|
+
}
|
|
1527
|
+
const existingBackendImplementationWorkPackage = parseContractObject(ctx.backend_implementation_work_package, "backend_implementation_work_package");
|
|
1528
|
+
if (existingBackendImplementationWorkPackage.error) {
|
|
1529
|
+
return { result: { error: existingBackendImplementationWorkPackage.error, status: "invalid_input" } };
|
|
1530
|
+
}
|
|
1531
|
+
const existingCodeObservabilityWorkPackage = parseContractObject(ctx.code_observability_work_package, "code_observability_work_package");
|
|
1532
|
+
if (existingCodeObservabilityWorkPackage.error) {
|
|
1533
|
+
return { result: { error: existingCodeObservabilityWorkPackage.error, status: "invalid_input" } };
|
|
1534
|
+
}
|
|
1495
1535
|
if (existingArchitectureWorkshop.value)
|
|
1496
1536
|
ctx.architecture_decision_workshop = existingArchitectureWorkshop.value;
|
|
1497
1537
|
if (existingDecisionWorkshop.value) {
|
|
@@ -1509,6 +1549,14 @@ export async function registerTools(server, deps) {
|
|
|
1509
1549
|
ctx.first_principles_frame = existingFirstPrinciplesFrame.value;
|
|
1510
1550
|
if (existingBrainstormSession.value)
|
|
1511
1551
|
ctx.brainstorm_session = existingBrainstormSession.value;
|
|
1552
|
+
if (existingDesignArtifactPack.value)
|
|
1553
|
+
ctx.design_artifact_pack = existingDesignArtifactPack.value;
|
|
1554
|
+
if (existingOodSolidSummary.value)
|
|
1555
|
+
ctx.ood_solid_summary = existingOodSolidSummary.value;
|
|
1556
|
+
if (existingBackendImplementationWorkPackage.value)
|
|
1557
|
+
ctx.backend_implementation_work_package = existingBackendImplementationWorkPackage.value;
|
|
1558
|
+
if (existingCodeObservabilityWorkPackage.value)
|
|
1559
|
+
ctx.code_observability_work_package = existingCodeObservabilityWorkPackage.value;
|
|
1512
1560
|
if (args.architecture_decision_workshop) {
|
|
1513
1561
|
const parsed = parseContractObject(args.architecture_decision_workshop, "architecture_decision_workshop");
|
|
1514
1562
|
if (parsed.error)
|
|
@@ -1558,16 +1606,28 @@ export async function registerTools(server, deps) {
|
|
|
1558
1606
|
ctx.brainstorm_session = parsed.value;
|
|
1559
1607
|
}
|
|
1560
1608
|
if (args.design_artifact_pack) {
|
|
1561
|
-
|
|
1609
|
+
const parsed = parseContractObject(args.design_artifact_pack, "design_artifact_pack");
|
|
1610
|
+
if (parsed.error)
|
|
1611
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1612
|
+
ctx.design_artifact_pack = parsed.value;
|
|
1562
1613
|
}
|
|
1563
1614
|
if (args.ood_solid_summary) {
|
|
1564
|
-
|
|
1615
|
+
const parsed = parseContractObject(args.ood_solid_summary, "ood_solid_summary");
|
|
1616
|
+
if (parsed.error)
|
|
1617
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1618
|
+
ctx.ood_solid_summary = parsed.value;
|
|
1565
1619
|
}
|
|
1566
1620
|
if (args.backend_implementation_work_package) {
|
|
1567
|
-
|
|
1621
|
+
const parsed = parseContractObject(args.backend_implementation_work_package, "backend_implementation_work_package");
|
|
1622
|
+
if (parsed.error)
|
|
1623
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1624
|
+
ctx.backend_implementation_work_package = parsed.value;
|
|
1568
1625
|
}
|
|
1569
1626
|
if (args.code_observability_work_package) {
|
|
1570
|
-
|
|
1627
|
+
const parsed = parseContractObject(args.code_observability_work_package, "code_observability_work_package");
|
|
1628
|
+
if (parsed.error)
|
|
1629
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1630
|
+
ctx.code_observability_work_package = parsed.value;
|
|
1571
1631
|
}
|
|
1572
1632
|
if (args.architecture_decision_workshop || args.decision_workshop
|
|
1573
1633
|
|| args.technology_decision_contract || args.technology_decision_record
|
|
@@ -1664,7 +1724,7 @@ export async function registerTools(server, deps) {
|
|
|
1664
1724
|
.map((materialPath) => path.resolve(projectRoot, normalizePathCandidate(materialPath))));
|
|
1665
1725
|
const confirmedProjectSourcePaths = (args.input_material_confirmations ?? [])
|
|
1666
1726
|
.map((materialPath) => path.resolve(projectRoot, normalizePathCandidate(materialPath)))
|
|
1667
|
-
.filter((absolutePath) => absolutePath
|
|
1727
|
+
.filter((absolutePath) => isSameOrDescendantPath(absolutePath, projectRoot, { caseSensitive: false }))
|
|
1668
1728
|
.filter((absolutePath) => referencedMaterialPaths.has(absolutePath))
|
|
1669
1729
|
.filter((absolutePath) => {
|
|
1670
1730
|
try {
|
|
@@ -2318,7 +2378,7 @@ export async function registerTools(server, deps) {
|
|
|
2318
2378
|
for (const changedFile of implementationFiles) {
|
|
2319
2379
|
const absoluteFile = path.resolve(projectPath, changedFile);
|
|
2320
2380
|
try {
|
|
2321
|
-
if (absoluteFile
|
|
2381
|
+
if (isSameOrDescendantPath(absoluteFile, path.resolve(projectPath), { caseSensitive: false }) && fss.statSync(absoluteFile).isFile()) {
|
|
2322
2382
|
implementationContents[changedFile] = fss.readFileSync(absoluteFile, "utf-8");
|
|
2323
2383
|
}
|
|
2324
2384
|
}
|
|
@@ -3245,7 +3305,7 @@ export async function registerTools(server, deps) {
|
|
|
3245
3305
|
continue;
|
|
3246
3306
|
const absoluteFile = path.resolve(projectPath, changedFile);
|
|
3247
3307
|
try {
|
|
3248
|
-
if (absoluteFile
|
|
3308
|
+
if (isSameOrDescendantPath(absoluteFile, path.resolve(projectPath), { caseSensitive: false }) && fss.statSync(absoluteFile).isFile()) {
|
|
3249
3309
|
contractContents[changedFile] = fss.readFileSync(absoluteFile, "utf-8");
|
|
3250
3310
|
}
|
|
3251
3311
|
}
|