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.
Files changed (84) hide show
  1. package/README.md +5 -0
  2. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/tools.js +287 -1
  4. package/dist/adapters/claude_code/tools.js.map +1 -1
  5. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  6. package/dist/adapters/shared/workflow_template.js +2 -1
  7. package/dist/adapters/shared/workflow_template.js.map +1 -1
  8. package/dist/bin/soloforge.d.ts.map +1 -1
  9. package/dist/bin/soloforge.js +231 -1
  10. package/dist/bin/soloforge.js.map +1 -1
  11. package/dist/engine/asset_manifest.d.ts.map +1 -1
  12. package/dist/engine/asset_manifest.js +13 -0
  13. package/dist/engine/asset_manifest.js.map +1 -1
  14. package/dist/engine/backend_implementation_contract.d.ts +51 -0
  15. package/dist/engine/backend_implementation_contract.d.ts.map +1 -0
  16. package/dist/engine/backend_implementation_contract.js +142 -0
  17. package/dist/engine/backend_implementation_contract.js.map +1 -0
  18. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  19. package/dist/engine/consumable_asset_registry.js +133 -0
  20. package/dist/engine/consumable_asset_registry.js.map +1 -1
  21. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  22. package/dist/engine/dual_layer_mechanism_registry.js +124 -0
  23. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  24. package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
  25. package/dist/engine/explicit_asset_registry.js +204 -0
  26. package/dist/engine/explicit_asset_registry.js.map +1 -1
  27. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  28. package/dist/engine/implementation_roadmap_registry.js +68 -2
  29. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  30. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  31. package/dist/engine/mechanism_contract_registry.js +68 -0
  32. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  33. package/dist/engine/next_action_planner.d.ts +19 -0
  34. package/dist/engine/next_action_planner.d.ts.map +1 -0
  35. package/dist/engine/next_action_planner.js +453 -0
  36. package/dist/engine/next_action_planner.js.map +1 -0
  37. package/dist/engine/ood_solid_contract.d.ts +51 -0
  38. package/dist/engine/ood_solid_contract.d.ts.map +1 -0
  39. package/dist/engine/ood_solid_contract.js +115 -0
  40. package/dist/engine/ood_solid_contract.js.map +1 -0
  41. package/dist/engine/project_stage_detector.d.ts +17 -0
  42. package/dist/engine/project_stage_detector.d.ts.map +1 -0
  43. package/dist/engine/project_stage_detector.js +185 -0
  44. package/dist/engine/project_stage_detector.js.map +1 -0
  45. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
  46. package/dist/engine/release_issue_scenario_registry.js +14 -1
  47. package/dist/engine/release_issue_scenario_registry.js.map +1 -1
  48. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  49. package/dist/engine/release_readiness_gate.js +149 -3
  50. package/dist/engine/release_readiness_gate.js.map +1 -1
  51. package/dist/engine/stale_current_task_detector.d.ts +30 -0
  52. package/dist/engine/stale_current_task_detector.d.ts.map +1 -0
  53. package/dist/engine/stale_current_task_detector.js +168 -0
  54. package/dist/engine/stale_current_task_detector.js.map +1 -0
  55. package/dist/engine/task_stage_detector.d.ts +19 -0
  56. package/dist/engine/task_stage_detector.d.ts.map +1 -0
  57. package/dist/engine/task_stage_detector.js +201 -0
  58. package/dist/engine/task_stage_detector.js.map +1 -0
  59. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  60. package/dist/engine/tool_invocation_contract_registry.js +10 -0
  61. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  62. package/dist/engine/workflow_navigation_contract.d.ts +115 -0
  63. package/dist/engine/workflow_navigation_contract.d.ts.map +1 -0
  64. package/dist/engine/workflow_navigation_contract.js +39 -0
  65. package/dist/engine/workflow_navigation_contract.js.map +1 -0
  66. package/dist/types.d.ts +8 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +1 -1
  69. 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
  70. 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
  71. package/templates/knowledge/procedures/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +50 -0
  72. 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
  73. 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
  74. 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
  75. 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
  76. package/templates/knowledge/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md +62 -0
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. package/templates/patterns/SOLID/350/256/276/350/256/241/350/247/204/350/214/203.md +39 -0
  84. 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;AA2CpD;;;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"}
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 = "a875189c510913ff";
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":";AA6yBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
1
+ {"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";AAwzBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
@@ -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");