soloforge 1.3.2 → 1.3.3
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 +5 -0
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +287 -1
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +2 -1
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +231 -1
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/asset_manifest.d.ts.map +1 -1
- package/dist/engine/asset_manifest.js +13 -0
- package/dist/engine/asset_manifest.js.map +1 -1
- package/dist/engine/backend_implementation_contract.d.ts +51 -0
- package/dist/engine/backend_implementation_contract.d.ts.map +1 -0
- package/dist/engine/backend_implementation_contract.js +142 -0
- package/dist/engine/backend_implementation_contract.js.map +1 -0
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
- package/dist/engine/consumable_asset_registry.js +133 -0
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +124 -0
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
- package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
- package/dist/engine/explicit_asset_registry.js +204 -0
- package/dist/engine/explicit_asset_registry.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +68 -2
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
- package/dist/engine/mechanism_contract_registry.js +68 -0
- package/dist/engine/mechanism_contract_registry.js.map +1 -1
- package/dist/engine/next_action_planner.d.ts +19 -0
- package/dist/engine/next_action_planner.d.ts.map +1 -0
- package/dist/engine/next_action_planner.js +453 -0
- package/dist/engine/next_action_planner.js.map +1 -0
- package/dist/engine/ood_solid_contract.d.ts +51 -0
- package/dist/engine/ood_solid_contract.d.ts.map +1 -0
- package/dist/engine/ood_solid_contract.js +115 -0
- package/dist/engine/ood_solid_contract.js.map +1 -0
- package/dist/engine/project_stage_detector.d.ts +17 -0
- package/dist/engine/project_stage_detector.d.ts.map +1 -0
- package/dist/engine/project_stage_detector.js +185 -0
- package/dist/engine/project_stage_detector.js.map +1 -0
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_issue_scenario_registry.js +14 -1
- package/dist/engine/release_issue_scenario_registry.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +149 -3
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/stale_current_task_detector.d.ts +30 -0
- package/dist/engine/stale_current_task_detector.d.ts.map +1 -0
- package/dist/engine/stale_current_task_detector.js +168 -0
- package/dist/engine/stale_current_task_detector.js.map +1 -0
- package/dist/engine/task_stage_detector.d.ts +19 -0
- package/dist/engine/task_stage_detector.d.ts.map +1 -0
- package/dist/engine/task_stage_detector.js +201 -0
- package/dist/engine/task_stage_detector.js.map +1 -0
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.js +10 -0
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
- package/dist/engine/workflow_navigation_contract.d.ts +115 -0
- package/dist/engine/workflow_navigation_contract.d.ts.map +1 -0
- package/dist/engine/workflow_navigation_contract.js +39 -0
- package/dist/engine/workflow_navigation_contract.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/knowledge/acceptance_templates/OOD/350/256/276/350/256/241/346/221/230/350/246/201/346/250/241/347/211/210.md +60 -0
- package/templates/knowledge/acceptance_templates//345/220/216/347/253/257/345/256/236/347/216/260/351/252/214/346/224/266/346/270/205/345/215/225.md +46 -0
- package/templates/knowledge/procedures/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +50 -0
- package/templates/knowledge/procedures//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +100 -0
- package/templates/knowledge/procedures//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260/345/267/245/344/275/234/346/265/201.md +50 -0
- package/templates/knowledge/review_rules/SOLID/344/273/243/347/240/201/345/256/241/346/237/245/350/247/204/345/210/231.md +40 -0
- package/templates/knowledge/review_rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245/350/247/204/345/210/231.md +38 -0
- package/templates/knowledge/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md +62 -0
- package/templates/knowledge/rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246/350/247/204/345/210/231.md +55 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md +113 -0
- package/templates/knowledge/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +43 -0
- package/templates/knowledge/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +44 -0
- package/templates/knowledge/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +47 -0
- package/templates/knowledge/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +46 -0
- package/templates/patterns/SOLID/350/256/276/350/256/241/350/247/204/350/214/203.md +39 -0
- package/templates/patterns//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/350/247/204/350/214/203.md +39 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow_template.d.ts","sourceRoot":"","sources":["../../../src/adapters/shared/workflow_template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow_template.d.ts","sourceRoot":"","sources":["../../../src/adapters/shared/workflow_template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA4CpD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAQtD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC5D,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAiCA;AASD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsBnE"}
|
|
@@ -32,6 +32,7 @@ const WORKFLOW_STEPS = [
|
|
|
32
32
|
{ title: "### 步骤 1.5: 入口裁决", rule_ids: ["wf-routing-gate", "wf-strategy-no-route"] },
|
|
33
33
|
{ title: "### 步骤 1.6: 多阶段拆解", rule_ids: ["wf-multi-stage-loop"] },
|
|
34
34
|
{ title: "### 步骤 2: 执行", rule_ids: ["wf-dispatch-by-route", "wf-command-contract", "wf-tool-contract", "wf-architecture-workshop-first", "wf-design-artifact-pack", "wf-standard-asset-contract", "wf-template-asset-visibility"] },
|
|
35
|
+
{ title: "### 步骤 2.5: 导航", rule_ids: ["wf-navigation-contract"] },
|
|
35
36
|
{ title: "### 步骤 3: 验证", rule_ids: ["wf-verify-after-change", "wf-evidence-grounding"] },
|
|
36
37
|
{ title: "### 步骤 4: 学习", rule_ids: ["wf-learn-after-verify"] },
|
|
37
38
|
{ title: "### 步骤 5: 汇报", rule_ids: ["wf-no-auto-capability-change"] },
|
|
@@ -108,7 +109,7 @@ export function validateWorkflowRuleSources(rootDir) {
|
|
|
108
109
|
};
|
|
109
110
|
}
|
|
110
111
|
/** 当前嵌入的权威规则校验和 — 由 `npm run update-workflow-checksum` 更新。 */
|
|
111
|
-
const EMBEDDED_CHECKSUM = "
|
|
112
|
+
const EMBEDDED_CHECKSUM = "b0a78fd669fd93c5";
|
|
112
113
|
function getEmbeddedChecksum() {
|
|
113
114
|
return EMBEDDED_CHECKSUM;
|
|
114
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow_template.js","sourceRoot":"","sources":["../../../src/adapters/shared/workflow_template.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow_template.js","sourceRoot":"","sources":["../../../src/adapters/shared/workflow_template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";AAwzBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
|
package/dist/bin/soloforge.js
CHANGED
|
@@ -135,6 +135,12 @@ async function main() {
|
|
|
135
135
|
case "status":
|
|
136
136
|
await cmdStatus();
|
|
137
137
|
break;
|
|
138
|
+
case "next":
|
|
139
|
+
await cmdNext();
|
|
140
|
+
break;
|
|
141
|
+
case "stage":
|
|
142
|
+
await cmdStage();
|
|
143
|
+
break;
|
|
138
144
|
case "cleanup":
|
|
139
145
|
await cmdCleanup();
|
|
140
146
|
break;
|
|
@@ -173,6 +179,11 @@ async function main() {
|
|
|
173
179
|
config confirm <field> <value> 确认配置字段(写入 config + evidence)
|
|
174
180
|
config unset <field> 移除确认配置
|
|
175
181
|
status 显示当前项目的 SoloForge 状态
|
|
182
|
+
next 查询下一步操作和可执行工作包(默认只读)
|
|
183
|
+
next --json 纯 JSON 输出(无日志污染)
|
|
184
|
+
next --write-snapshot 将导航快照写入 .soloforge/navigation-snapshot.json
|
|
185
|
+
stage 显示当前项目阶段和任务阶段
|
|
186
|
+
stage --explain 详细解释当前阶段(判断依据、必要条件、下一阶段)
|
|
176
187
|
cleanup 清理过期任务和 evidence(默认 dry-run,--apply 执行实际清理)
|
|
177
188
|
`);
|
|
178
189
|
}
|
|
@@ -1046,6 +1057,18 @@ async function cmdValidate() {
|
|
|
1046
1057
|
hasHardFail = true;
|
|
1047
1058
|
}
|
|
1048
1059
|
} // 双层机制检查结束
|
|
1060
|
+
try {
|
|
1061
|
+
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
1062
|
+
const navigation = await planNextAction(projectPath);
|
|
1063
|
+
userInfo(` 阶段: ${navigation.project_stage}${navigation.task_stage ? ` / ${navigation.task_stage}` : ""}`);
|
|
1064
|
+
if (navigation.blocking_reasons.length > 0) {
|
|
1065
|
+
userInfo(` 导航阻断: ${navigation.blocking_reasons.join("; ")}`);
|
|
1066
|
+
}
|
|
1067
|
+
userInfo(` 下一步: ${navigation.work_package?.goal_zh ?? navigation.recommended_prompt_zh}`);
|
|
1068
|
+
}
|
|
1069
|
+
catch (e) {
|
|
1070
|
+
userInfo(` ⚠ 导航摘要异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1071
|
+
}
|
|
1049
1072
|
if (hasHardFail) {
|
|
1050
1073
|
userError("❌ validate 失败: 配置优先级存在 hard_fail");
|
|
1051
1074
|
process.exit(1);
|
|
@@ -1975,8 +1998,8 @@ async function cmdValidateNewIssue() {
|
|
|
1975
1998
|
async function cmdStatus() {
|
|
1976
1999
|
debug("CLI", "执行 cmdStatus");
|
|
1977
2000
|
const projectPath = resolveProjectPath();
|
|
1978
|
-
userInfo(`SoloForge 状态: ${projectPath}`);
|
|
1979
2001
|
const { config, source } = await resolveProjectConfig(projectPath);
|
|
2002
|
+
userInfo(`SoloForge 状态: ${projectPath}`);
|
|
1980
2003
|
userInfo(` 配置来源: ${source === "config_file" ? "config.yaml" : "自动推断"}`);
|
|
1981
2004
|
userInfo(` 产品: ${config.product_profile}`);
|
|
1982
2005
|
userInfo(` 后端: ${config.tech_stack.backend.framework || "未配置"}`);
|
|
@@ -2029,6 +2052,19 @@ async function cmdStatus() {
|
|
|
2029
2052
|
else {
|
|
2030
2053
|
userInfo(" 知识: 未初始化");
|
|
2031
2054
|
}
|
|
2055
|
+
// 导航摘要(消费同一规划模块,包含阻断项和下一步)
|
|
2056
|
+
try {
|
|
2057
|
+
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
2058
|
+
const navigation = await planNextAction(projectPath);
|
|
2059
|
+
userInfo(` 阶段: ${navigation.project_stage}${navigation.task_stage ? ` / ${navigation.task_stage}` : ""}`);
|
|
2060
|
+
if (navigation.blocking_reasons.length > 0) {
|
|
2061
|
+
userInfo(` 导航阻断: ${navigation.blocking_reasons.join("; ")}`);
|
|
2062
|
+
}
|
|
2063
|
+
userInfo(` 下一步: ${navigation.work_package?.goal_zh ?? navigation.recommended_prompt_zh}`);
|
|
2064
|
+
}
|
|
2065
|
+
catch (e) {
|
|
2066
|
+
userInfo(` ⚠ 导航摘要异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
2067
|
+
}
|
|
2032
2068
|
}
|
|
2033
2069
|
async function interactiveConfig(projectPath) {
|
|
2034
2070
|
debug("CLI", "执行 interactiveConfig");
|
|
@@ -2091,6 +2127,200 @@ function cmdVersion() {
|
|
|
2091
2127
|
userInfo("SoloForge v" + pkg.version);
|
|
2092
2128
|
}
|
|
2093
2129
|
}
|
|
2130
|
+
async function cmdNext() {
|
|
2131
|
+
debug("CLI", "执行 cmdNext");
|
|
2132
|
+
const projectPath = resolveProjectPath();
|
|
2133
|
+
const isJson = args.includes("--json");
|
|
2134
|
+
const writeSnapshot = args.includes("--write-snapshot");
|
|
2135
|
+
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
2136
|
+
const plan = await planNextAction(projectPath);
|
|
2137
|
+
if (isJson) {
|
|
2138
|
+
// JSON 模式: 纯 JSON 到 stdout,无日志污染
|
|
2139
|
+
const wp = plan.work_package;
|
|
2140
|
+
const output = {
|
|
2141
|
+
project_stage: plan.project_stage,
|
|
2142
|
+
task_stage: plan.task_stage,
|
|
2143
|
+
confidence: plan.confidence,
|
|
2144
|
+
stage_evidence: plan.stage_evidence,
|
|
2145
|
+
blocking_reasons: plan.blocking_reasons,
|
|
2146
|
+
recommended_commands: plan.recommended_commands,
|
|
2147
|
+
recommended_prompt: plan.recommended_prompt_zh,
|
|
2148
|
+
disallowed_next_actions: plan.disallowed_actions.map((da) => ({
|
|
2149
|
+
rule_id: da.rule_id,
|
|
2150
|
+
blocked_actions: da.blocked_actions,
|
|
2151
|
+
reason_zh: da.reason_zh,
|
|
2152
|
+
})),
|
|
2153
|
+
work_package: wp ? {
|
|
2154
|
+
id: wp.id,
|
|
2155
|
+
goal: wp.goal_zh,
|
|
2156
|
+
input_files: wp.input_files,
|
|
2157
|
+
must_read: wp.must_read,
|
|
2158
|
+
forbidden_changes: wp.forbidden_changes,
|
|
2159
|
+
expected_outputs: wp.expected_outputs,
|
|
2160
|
+
acceptance_commands: wp.acceptance_commands,
|
|
2161
|
+
user_confirmation_points: wp.user_confirmation_points,
|
|
2162
|
+
rollback_or_fallback: wp.rollback_or_fallback,
|
|
2163
|
+
} : null,
|
|
2164
|
+
};
|
|
2165
|
+
process.stdout.write(JSON.stringify(output, null, 2) + "\n");
|
|
2166
|
+
}
|
|
2167
|
+
else {
|
|
2168
|
+
// 人类可读输出
|
|
2169
|
+
userInfo(`\n项目阶段: ${plan.project_stage}`);
|
|
2170
|
+
if (plan.task_stage) {
|
|
2171
|
+
userInfo(`任务阶段: ${plan.task_stage}`);
|
|
2172
|
+
}
|
|
2173
|
+
else {
|
|
2174
|
+
userInfo("任务阶段: 无活跃任务");
|
|
2175
|
+
}
|
|
2176
|
+
userInfo(`置信度: ${plan.confidence}`);
|
|
2177
|
+
if (plan.stage_evidence.length > 0) {
|
|
2178
|
+
userInfo(`\n判断依据:`);
|
|
2179
|
+
for (const ev of plan.stage_evidence) {
|
|
2180
|
+
userInfo(` - ${ev}`);
|
|
2181
|
+
}
|
|
2182
|
+
}
|
|
2183
|
+
// 陈旧任务
|
|
2184
|
+
if (plan.stale_task?.is_stale) {
|
|
2185
|
+
userInfo(`\n⚠️ 检测到陈旧任务: ${plan.stale_task.reason_zh}`);
|
|
2186
|
+
userInfo(` 任务 ID: ${plan.stale_task.task_id}`);
|
|
2187
|
+
userInfo(` 建议操作: ${plan.stale_task.suggested_resolutions.join(" / ")}`);
|
|
2188
|
+
userInfo(` ⚠️ 不要绕过 SoloForge 状态直接操作`);
|
|
2189
|
+
}
|
|
2190
|
+
// 阻断项
|
|
2191
|
+
if (plan.blocking_reasons.length > 0) {
|
|
2192
|
+
userInfo(`\n阻断项:`);
|
|
2193
|
+
for (const r of plan.blocking_reasons) {
|
|
2194
|
+
userInfo(` - ${r}`);
|
|
2195
|
+
}
|
|
2196
|
+
}
|
|
2197
|
+
// 工作包
|
|
2198
|
+
if (plan.work_package) {
|
|
2199
|
+
const wp = plan.work_package;
|
|
2200
|
+
userInfo(`\n下一步: ${wp.goal_zh}`);
|
|
2201
|
+
userInfo(` 描述: ${wp.description_zh}`);
|
|
2202
|
+
if (wp.tool_name) {
|
|
2203
|
+
userInfo(` 工具: ${wp.tool_name}`);
|
|
2204
|
+
}
|
|
2205
|
+
if (wp.must_read.length > 0) {
|
|
2206
|
+
userInfo(` 必读文件:`);
|
|
2207
|
+
for (const f of wp.must_read)
|
|
2208
|
+
userInfo(` - ${f}`);
|
|
2209
|
+
}
|
|
2210
|
+
if (wp.forbidden_changes.length > 0) {
|
|
2211
|
+
userInfo(` 禁止操作:`);
|
|
2212
|
+
for (const f of wp.forbidden_changes)
|
|
2213
|
+
userInfo(` - ${f}`);
|
|
2214
|
+
}
|
|
2215
|
+
if (wp.expected_outputs.length > 0) {
|
|
2216
|
+
userInfo(` 预期产出:`);
|
|
2217
|
+
for (const e of wp.expected_outputs)
|
|
2218
|
+
userInfo(` - ${e}`);
|
|
2219
|
+
}
|
|
2220
|
+
if (wp.acceptance_commands.length > 0) {
|
|
2221
|
+
userInfo(` 验收命令:`);
|
|
2222
|
+
for (const c of wp.acceptance_commands)
|
|
2223
|
+
userInfo(` - ${c}`);
|
|
2224
|
+
}
|
|
2225
|
+
if (wp.user_confirmation_points.length > 0) {
|
|
2226
|
+
userInfo(` 需用户确认:`);
|
|
2227
|
+
for (const u of wp.user_confirmation_points)
|
|
2228
|
+
userInfo(` - ${u}`);
|
|
2229
|
+
}
|
|
2230
|
+
if (wp.rollback_or_fallback.length > 0) {
|
|
2231
|
+
userInfo(` 失败回退:`);
|
|
2232
|
+
for (const r of wp.rollback_or_fallback)
|
|
2233
|
+
userInfo(` - ${r}`);
|
|
2234
|
+
}
|
|
2235
|
+
}
|
|
2236
|
+
// 推荐命令
|
|
2237
|
+
if (plan.recommended_commands.length > 0) {
|
|
2238
|
+
userInfo(`\n推荐命令:`);
|
|
2239
|
+
for (const c of plan.recommended_commands) {
|
|
2240
|
+
userInfo(` ${c}`);
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
// 禁止动作
|
|
2244
|
+
if (plan.disallowed_actions.length > 0) {
|
|
2245
|
+
userInfo(`\n禁止动作:`);
|
|
2246
|
+
for (const da of plan.disallowed_actions) {
|
|
2247
|
+
userInfo(` [${da.rule_id}] ${da.blocked_actions.join(", ")}: ${da.reason_zh}`);
|
|
2248
|
+
}
|
|
2249
|
+
}
|
|
2250
|
+
// 推荐给 AI 的指令
|
|
2251
|
+
userInfo(`\n推荐指令: ${plan.recommended_prompt_zh}`);
|
|
2252
|
+
}
|
|
2253
|
+
// 写入快照(只在显式 --write-snapshot 时)
|
|
2254
|
+
if (writeSnapshot) {
|
|
2255
|
+
const snapshotPath = path.join(projectPath, ".soloforge", "navigation-snapshot.json");
|
|
2256
|
+
const snapshot = {
|
|
2257
|
+
plan_id: plan.plan_id,
|
|
2258
|
+
generated_at: plan.generated_at,
|
|
2259
|
+
project_stage: plan.project_stage,
|
|
2260
|
+
task_stage: plan.task_stage,
|
|
2261
|
+
current_task_id: plan.current_task_id,
|
|
2262
|
+
work_package: plan.work_package,
|
|
2263
|
+
};
|
|
2264
|
+
fss.mkdirSync(path.join(projectPath, ".soloforge"), { recursive: true });
|
|
2265
|
+
fss.writeFileSync(snapshotPath, JSON.stringify(snapshot, null, 2));
|
|
2266
|
+
if (!isJson) {
|
|
2267
|
+
userInfo(`\n导航快照已写入: ${snapshotPath}`);
|
|
2268
|
+
}
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
async function cmdStage() {
|
|
2272
|
+
debug("CLI", "执行 cmdStage");
|
|
2273
|
+
const projectPath = resolveProjectPath();
|
|
2274
|
+
const explain = args.includes("--explain");
|
|
2275
|
+
const isJson = args.includes("--json");
|
|
2276
|
+
const { detectProjectStage, explainProjectStage } = await import("../engine/project_stage_detector.js");
|
|
2277
|
+
const { detectTaskStage, explainTaskStage } = await import("../engine/task_stage_detector.js");
|
|
2278
|
+
const projectStage = await detectProjectStage(projectPath);
|
|
2279
|
+
// 加载当前任务
|
|
2280
|
+
let taskStage = null;
|
|
2281
|
+
let taskId = null;
|
|
2282
|
+
try {
|
|
2283
|
+
const { TaskContextManager } = await import("../engine/task_context.js");
|
|
2284
|
+
const stateDir = path.join(projectPath, ".soloforge", "state");
|
|
2285
|
+
if (fss.existsSync(stateDir)) {
|
|
2286
|
+
const manager = new TaskContextManager(stateDir);
|
|
2287
|
+
const ctx = await manager.getCurrentTask();
|
|
2288
|
+
if (ctx) {
|
|
2289
|
+
taskStage = detectTaskStage(ctx);
|
|
2290
|
+
taskId = ctx.task_id;
|
|
2291
|
+
}
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
catch { }
|
|
2295
|
+
if (isJson) {
|
|
2296
|
+
const projExplanation = explainProjectStage(projectStage);
|
|
2297
|
+
process.stdout.write(JSON.stringify({
|
|
2298
|
+
project: projExplanation,
|
|
2299
|
+
task: taskStage ? explainTaskStage(taskStage) : null,
|
|
2300
|
+
task_id: taskId,
|
|
2301
|
+
}, null, 2) + "\n");
|
|
2302
|
+
return;
|
|
2303
|
+
}
|
|
2304
|
+
userInfo(`\n项目阶段: ${projectStage}`);
|
|
2305
|
+
if (explain) {
|
|
2306
|
+
const projExplanation = explainProjectStage(projectStage);
|
|
2307
|
+
userInfo(` ${projExplanation.description_zh}`);
|
|
2308
|
+
userInfo(` 必要条件: ${projExplanation.required_evidence.join(", ") || "无"}`);
|
|
2309
|
+
userInfo(` 下一步可能: ${projExplanation.next_possible_stages.join(", ")}`);
|
|
2310
|
+
}
|
|
2311
|
+
if (taskStage) {
|
|
2312
|
+
userInfo(`\n任务阶段: ${taskStage} (${taskId ?? "unknown"})`);
|
|
2313
|
+
if (explain) {
|
|
2314
|
+
const taskExplanation = explainTaskStage(taskStage);
|
|
2315
|
+
userInfo(` ${taskExplanation.description_zh}`);
|
|
2316
|
+
userInfo(` 必要条件: ${taskExplanation.required_evidence.join(", ")}`);
|
|
2317
|
+
userInfo(` 下一步可能: ${taskExplanation.next_possible_stages.join(", ")}`);
|
|
2318
|
+
}
|
|
2319
|
+
}
|
|
2320
|
+
else {
|
|
2321
|
+
userInfo("\n当前无活跃任务");
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2094
2324
|
async function cmdCleanup() {
|
|
2095
2325
|
debug("CLI", "执行 cmdCleanup");
|
|
2096
2326
|
const dryRun = !args.includes("--apply");
|