soloforge 1.4.5 → 1.4.7
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 +41 -5
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +85 -3
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/bin/soloforge.js +11 -1
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/design_artifact_pack.d.ts.map +1 -1
- package/dist/engine/design_artifact_pack.js +10 -0
- package/dist/engine/design_artifact_pack.js.map +1 -1
- package/dist/engine/design_lifecycle_contract.d.ts +1 -1
- package/dist/engine/design_lifecycle_contract.d.ts.map +1 -1
- package/dist/engine/design_lifecycle_contract.js +3 -1
- package/dist/engine/design_lifecycle_contract.js.map +1 -1
- package/dist/engine/extension_platform_contracts.d.ts +6 -0
- package/dist/engine/extension_platform_contracts.d.ts.map +1 -1
- package/dist/engine/extension_platform_contracts.js.map +1 -1
- package/dist/engine/next_action_planner.d.ts.map +1 -1
- package/dist/engine/next_action_planner.js +87 -18
- package/dist/engine/next_action_planner.js.map +1 -1
- package/dist/engine/project_knowledge_contract.d.ts.map +1 -1
- package/dist/engine/project_knowledge_contract.js +35 -16
- package/dist/engine/project_knowledge_contract.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +15 -0
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +8 -1
- package/dist/engine/traceability.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +18 -16
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -78,7 +78,43 @@ soloforge init --adapter all # 同时生成所有适配器配置
|
|
|
78
78
|
| `.codex/config.toml` / `.codex/hooks.json` / `AGENTS.md` | Codex App 配置 |
|
|
79
79
|
| `.trae/mcp.json` / `.trae/rules/project_rules.md` | Trae IDE 配置 |
|
|
80
80
|
|
|
81
|
-
SoloForge
|
|
81
|
+
SoloForge 不会覆盖已有知识文件。旧项目补齐新模板或适配器时,优先使用 `sync-templates` 和 `sync-adapters`,不要把 `init` 当作升级命令。
|
|
82
|
+
|
|
83
|
+
## 更新与旧项目同步
|
|
84
|
+
|
|
85
|
+
用户升级已发布的全局 CLI:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm update -g soloforge
|
|
89
|
+
# 或强制安装最新发布版
|
|
90
|
+
npm install -g soloforge@latest
|
|
91
|
+
|
|
92
|
+
soloforge --version
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
旧项目补齐新增模板、规则或适配器文件:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cd /path/to/my-project
|
|
99
|
+
|
|
100
|
+
soloforge sync-templates
|
|
101
|
+
soloforge sync-adapters
|
|
102
|
+
|
|
103
|
+
soloforge sync-templates --apply --confirm
|
|
104
|
+
soloforge sync-adapters --apply --confirm
|
|
105
|
+
|
|
106
|
+
soloforge doctor
|
|
107
|
+
soloforge audit-design-artifacts
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
存量设计产物需要升级到当前标准时,单独使用设计产物升级命令:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
soloforge upgrade-design-artifacts
|
|
114
|
+
soloforge upgrade-design-artifacts --apply --confirm
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
只有新项目首次接入 SoloForge 时才运行 `soloforge init`。已经有 `.soloforge/` 的旧项目,优先用同步和审计命令;如果只是 AI 工具配置缺失,可按 `doctor` 输出的恢复命令处理。
|
|
82
118
|
|
|
83
119
|
## 日常命令
|
|
84
120
|
|
|
@@ -158,7 +194,7 @@ soloforge migrate --apply --confirm # 确认后迁移
|
|
|
158
194
|
|
|
159
195
|
- **架构设计** — 让 AI 设计架构时,会生成结构化方案(含架构边界、技术栈、模块关系),输出目录会先征求你确认,不会自作主张写到你不想放的位置。
|
|
160
196
|
- **决策研讨** — 高影响或不确定任务会先进入决策研讨,而不是直接生成方案或代码。架构设计会覆盖业务流程、数据架构、安全架构、后端架构、前端架构、基础设施六类架构决策;技术选型、数据迁移、安全策略、部署、产品范围、重构和第三方集成等任务会展开对应决策包。必要决策未确认时,不会把草案冒充正式结论。
|
|
161
|
-
- **设计产物包** — 架构设计、数据库设计、API 规格不再各自漂移。标准产物包包含 `docs/architecture/00-架构决策记录.md`、`01-架构设计文档.md`、`02-数据库设计文档.md`、`03-API接口规格文档.md`、`04-开发切片计划.md`、`99-设计一致性验收报告.md`、`docs/traceability/01-需求原型设计实现追踪矩阵.md`、`docs/api/openapi.yaml` 和 `db/migration`/`db/migrations`/`db/schema`/`db/changelog` 下的数据库结构资产。`04-详细设计文档.md` 只是旧项目或复杂模块的可选补充,不是必需详细设计载体;旧的 `04-第一阶段开发切片计划.md`
|
|
197
|
+
- **设计产物包** — 架构设计、数据库设计、API 规格不再各自漂移。标准产物包包含 `docs/architecture/00-架构决策记录.md`、`01-架构设计文档.md`、`02-数据库设计文档.md`、`03-API接口规格文档.md`、`04-开发切片计划.md`、`99-设计一致性验收报告.md`、`docs/traceability/01-需求原型设计实现追踪矩阵.md`、`docs/api/openapi.yaml` 和 `db/migration`/`db/migrations`/`db/schema`/`db/changelog` 下的数据库结构资产。`04-详细设计文档.md` 只是旧项目或复杂模块的可选补充,不是必需详细设计载体;旧的 `04-第一阶段开发切片计划.md` 会作为兼容别名读取并给出迁移提示,正式权威路径仍应迁移为 `04-开发切片计划.md`。
|
|
162
198
|
- **全链路追踪矩阵** — 需求、原型、架构、详细设计、阶段、切片、实现、测试和验收使用两位数 ID 绑定,例如 `REQ-01`、`PROTO-01`、`ARCH-01`、`DD-T01`、`DD-A01`、`PHASE-01`、`SLICE-01`、`AC-01`。编码任务必须能绑定 `PHASE-*`、`SLICE-*`、`DD-*` 和 `AC-*`,不能只说“已按设计实现”。
|
|
163
199
|
- **标准资产契约** — 模板、规则、流程、验收清单、审查规则、脚手架和 adapter workflow 不是“参考文件”。SoloForge 会按资产契约检查正式产物的章节、字段表、权威资产、适用技术栈和修复重验状态;API 文档必须有每个接口的请求/响应字段说明表,数据库/API Markdown 必须绑定 SQL/OpenAPI 权威资产。
|
|
164
200
|
- **模板可见性** — 内部治理资产可以随 npm 包发布,供 SoloForge runtime、审计和发布门禁使用,但不会同步到用户项目,也不会注入到 AI prompt。用户项目只获得可见且适用的知识资产;脚手架只由脚手架命令消费,不进入知识索引;不匹配技术栈的内置脚手架不会 fallback 生成。
|
|
@@ -272,13 +308,13 @@ soloforge doctor
|
|
|
272
308
|
|
|
273
309
|
如果 doctor 报告 MCP 配置缺失、hook 漂移、旧任务指针或恢复路径问题,先按输出的恢复命令处理。SoloForge 不建议手动删除 `.soloforge/state`;需要恢复陈旧任务时应使用受控命令或 MCP 工具。
|
|
274
310
|
|
|
275
|
-
###
|
|
311
|
+
### 想补齐或修复配置
|
|
276
312
|
|
|
277
313
|
```bash
|
|
278
|
-
soloforge
|
|
314
|
+
soloforge doctor
|
|
279
315
|
```
|
|
280
316
|
|
|
281
|
-
|
|
317
|
+
先按 `doctor` 输出的恢复命令处理。旧项目需要补齐新增模板或适配器文件时,使用 `sync-templates` / `sync-adapters`;新项目首次接入时才运行 `soloforge init`。
|
|
282
318
|
|
|
283
319
|
如果 `status` 提示 `version` 数字/字符串、`scope` 字符串/数组或 `config.evidence.json` 过期,这属于机械配置问题,不需要逐字段人工确认:
|
|
284
320
|
|
|
@@ -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;AAEvE,OAAO,EAOL,KAAK,UAAU,EAKhB,MAAM,mDAAmD,CAAC;AAmH3D;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc;IACd,cAAc,EAAE,qBAAqB,CAAC;IACtC,eAAe;IACf,WAAW,EAAE,kBAAkB,CAAC;IAChC,yDAAyD;IACzD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,6 +127,12 @@ const ExpandSchema = {
|
|
|
127
127
|
input_material_confirmations: z.array(z.string()).optional().describe("已确认安全的输入材料路径列表"),
|
|
128
128
|
architecture_decision_workshop: z.unknown().optional().describe("架构设计前已讨论并确认的六域决策记录"),
|
|
129
129
|
decision_workshop: z.unknown().optional().describe("通用决策研讨合同(技术选型/数据迁移/安全策略/部署/重构/第三方集成等)"),
|
|
130
|
+
technology_decision_contract: z.unknown().optional().describe("技术决策主权契约,含选项、推荐、证据、回滚计划和 human_gate_evidence"),
|
|
131
|
+
technology_decision_record: z.unknown().optional().describe("技术决策执行记录,记录已批准/已实现等显式决策状态"),
|
|
132
|
+
detail_discipline_contract: z.unknown().optional().describe("细节纪律契约,声明必须覆盖的边界、失败路径、回滚和证据维度"),
|
|
133
|
+
provided_details: z.unknown().optional().describe("细节纪律已提供证据,按 required_dimensions 映射为字符串数组"),
|
|
134
|
+
first_principles_frame: z.unknown().optional().describe("高影响任务的第一性原理框架"),
|
|
135
|
+
brainstorm_session: z.unknown().optional().describe("不确定项/方案选择的脑暴与方案探索会话"),
|
|
130
136
|
design_artifact_pack: z.unknown().optional().describe("设计产物包路径映射或已复验状态"),
|
|
131
137
|
ood_solid_summary: z.unknown().optional().describe("复杂编码任务的 OOD/SOLID 设计摘要"),
|
|
132
138
|
backend_implementation_work_package: z.unknown().optional().describe("后端接口实现的工程工作包"),
|
|
@@ -1462,11 +1468,47 @@ export async function registerTools(server, deps) {
|
|
|
1462
1468
|
if (existingDecisionWorkshop.error) {
|
|
1463
1469
|
return { result: { error: existingDecisionWorkshop.error, status: "invalid_input" } };
|
|
1464
1470
|
}
|
|
1471
|
+
const existingTechnologyDecisionContract = parseContractObject(ctx.technology_decision_contract, "technology_decision_contract");
|
|
1472
|
+
if (existingTechnologyDecisionContract.error) {
|
|
1473
|
+
return { result: { error: existingTechnologyDecisionContract.error, status: "invalid_input" } };
|
|
1474
|
+
}
|
|
1475
|
+
const existingTechnologyDecisionRecord = parseContractObject(ctx.technology_decision_record, "technology_decision_record");
|
|
1476
|
+
if (existingTechnologyDecisionRecord.error) {
|
|
1477
|
+
return { result: { error: existingTechnologyDecisionRecord.error, status: "invalid_input" } };
|
|
1478
|
+
}
|
|
1479
|
+
const existingDetailContract = parseContractObject(ctx.detail_discipline_contract, "detail_discipline_contract");
|
|
1480
|
+
if (existingDetailContract.error) {
|
|
1481
|
+
return { result: { error: existingDetailContract.error, status: "invalid_input" } };
|
|
1482
|
+
}
|
|
1483
|
+
const existingProvidedDetails = parseContractObject(ctx.provided_details, "provided_details");
|
|
1484
|
+
if (existingProvidedDetails.error) {
|
|
1485
|
+
return { result: { error: existingProvidedDetails.error, status: "invalid_input" } };
|
|
1486
|
+
}
|
|
1487
|
+
const existingFirstPrinciplesFrame = parseContractObject(ctx.first_principles_frame, "first_principles_frame");
|
|
1488
|
+
if (existingFirstPrinciplesFrame.error) {
|
|
1489
|
+
return { result: { error: existingFirstPrinciplesFrame.error, status: "invalid_input" } };
|
|
1490
|
+
}
|
|
1491
|
+
const existingBrainstormSession = parseContractObject(ctx.brainstorm_session, "brainstorm_session");
|
|
1492
|
+
if (existingBrainstormSession.error) {
|
|
1493
|
+
return { result: { error: existingBrainstormSession.error, status: "invalid_input" } };
|
|
1494
|
+
}
|
|
1465
1495
|
if (existingArchitectureWorkshop.value)
|
|
1466
1496
|
ctx.architecture_decision_workshop = existingArchitectureWorkshop.value;
|
|
1467
1497
|
if (existingDecisionWorkshop.value) {
|
|
1468
1498
|
ctx.decision_workshop = (await lazyDecisionWorkshop()).normalizeDecisionWorkshopContract(existingDecisionWorkshop.value, args.task_id) ?? existingDecisionWorkshop.value;
|
|
1469
1499
|
}
|
|
1500
|
+
if (existingTechnologyDecisionContract.value)
|
|
1501
|
+
ctx.technology_decision_contract = existingTechnologyDecisionContract.value;
|
|
1502
|
+
if (existingTechnologyDecisionRecord.value)
|
|
1503
|
+
ctx.technology_decision_record = existingTechnologyDecisionRecord.value;
|
|
1504
|
+
if (existingDetailContract.value)
|
|
1505
|
+
ctx.detail_discipline_contract = existingDetailContract.value;
|
|
1506
|
+
if (existingProvidedDetails.value)
|
|
1507
|
+
ctx.provided_details = existingProvidedDetails.value;
|
|
1508
|
+
if (existingFirstPrinciplesFrame.value)
|
|
1509
|
+
ctx.first_principles_frame = existingFirstPrinciplesFrame.value;
|
|
1510
|
+
if (existingBrainstormSession.value)
|
|
1511
|
+
ctx.brainstorm_session = existingBrainstormSession.value;
|
|
1470
1512
|
if (args.architecture_decision_workshop) {
|
|
1471
1513
|
const parsed = parseContractObject(args.architecture_decision_workshop, "architecture_decision_workshop");
|
|
1472
1514
|
if (parsed.error)
|
|
@@ -1479,6 +1521,42 @@ export async function registerTools(server, deps) {
|
|
|
1479
1521
|
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1480
1522
|
ctx.decision_workshop = (await lazyDecisionWorkshop()).normalizeDecisionWorkshopContract(parsed.value, args.task_id) ?? parsed.value;
|
|
1481
1523
|
}
|
|
1524
|
+
if (args.technology_decision_contract) {
|
|
1525
|
+
const parsed = parseContractObject(args.technology_decision_contract, "technology_decision_contract");
|
|
1526
|
+
if (parsed.error)
|
|
1527
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1528
|
+
ctx.technology_decision_contract = parsed.value;
|
|
1529
|
+
}
|
|
1530
|
+
if (args.technology_decision_record) {
|
|
1531
|
+
const parsed = parseContractObject(args.technology_decision_record, "technology_decision_record");
|
|
1532
|
+
if (parsed.error)
|
|
1533
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1534
|
+
ctx.technology_decision_record = parsed.value;
|
|
1535
|
+
}
|
|
1536
|
+
if (args.detail_discipline_contract) {
|
|
1537
|
+
const parsed = parseContractObject(args.detail_discipline_contract, "detail_discipline_contract");
|
|
1538
|
+
if (parsed.error)
|
|
1539
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1540
|
+
ctx.detail_discipline_contract = parsed.value;
|
|
1541
|
+
}
|
|
1542
|
+
if (args.provided_details) {
|
|
1543
|
+
const parsed = parseContractObject(args.provided_details, "provided_details");
|
|
1544
|
+
if (parsed.error)
|
|
1545
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1546
|
+
ctx.provided_details = parsed.value;
|
|
1547
|
+
}
|
|
1548
|
+
if (args.first_principles_frame) {
|
|
1549
|
+
const parsed = parseContractObject(args.first_principles_frame, "first_principles_frame");
|
|
1550
|
+
if (parsed.error)
|
|
1551
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1552
|
+
ctx.first_principles_frame = parsed.value;
|
|
1553
|
+
}
|
|
1554
|
+
if (args.brainstorm_session) {
|
|
1555
|
+
const parsed = parseContractObject(args.brainstorm_session, "brainstorm_session");
|
|
1556
|
+
if (parsed.error)
|
|
1557
|
+
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1558
|
+
ctx.brainstorm_session = parsed.value;
|
|
1559
|
+
}
|
|
1482
1560
|
if (args.design_artifact_pack) {
|
|
1483
1561
|
ctx.design_artifact_pack = args.design_artifact_pack;
|
|
1484
1562
|
}
|
|
@@ -1491,7 +1569,11 @@ export async function registerTools(server, deps) {
|
|
|
1491
1569
|
if (args.code_observability_work_package) {
|
|
1492
1570
|
ctx.code_observability_work_package = args.code_observability_work_package;
|
|
1493
1571
|
}
|
|
1494
|
-
if (args.architecture_decision_workshop || args.decision_workshop
|
|
1572
|
+
if (args.architecture_decision_workshop || args.decision_workshop
|
|
1573
|
+
|| args.technology_decision_contract || args.technology_decision_record
|
|
1574
|
+
|| args.detail_discipline_contract || args.provided_details
|
|
1575
|
+
|| args.first_principles_frame || args.brainstorm_session
|
|
1576
|
+
|| args.design_artifact_pack
|
|
1495
1577
|
|| args.ood_solid_summary || args.backend_implementation_work_package || args.code_observability_work_package) {
|
|
1496
1578
|
await taskContext.save(ctx);
|
|
1497
1579
|
}
|
|
@@ -1648,7 +1730,7 @@ export async function registerTools(server, deps) {
|
|
|
1648
1730
|
});
|
|
1649
1731
|
}
|
|
1650
1732
|
}
|
|
1651
|
-
const tdc = ctx
|
|
1733
|
+
const tdc = ctx.technology_decision_contract;
|
|
1652
1734
|
if (tdc?.human_gate_evidence) {
|
|
1653
1735
|
evg.registry.register({
|
|
1654
1736
|
source_type: "user_confirmation",
|
|
@@ -2083,7 +2165,7 @@ export async function registerTools(server, deps) {
|
|
|
2083
2165
|
}
|
|
2084
2166
|
}
|
|
2085
2167
|
// 技术决策契约含 human_gate_evidence → 注册为 user_confirmation(真实项目证据)
|
|
2086
|
-
const _tdc = ctx
|
|
2168
|
+
const _tdc = ctx.technology_decision_contract;
|
|
2087
2169
|
if (_tdc?.human_gate_evidence) {
|
|
2088
2170
|
_evg.registry.register({
|
|
2089
2171
|
source_type: "user_confirmation",
|