openfeel 1.1.6 → 1.2.0

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 (97) hide show
  1. package/README.en.md +25 -6
  2. package/README.md +17 -2
  3. package/README.zh-CN.md +25 -6
  4. package/dist/cli/index.d.ts.map +1 -1
  5. package/dist/cli/index.js +2 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/commands/config.d.ts.map +1 -1
  8. package/dist/commands/config.js +85 -4
  9. package/dist/commands/config.js.map +1 -1
  10. package/dist/commands/flow.d.ts +8 -0
  11. package/dist/commands/flow.d.ts.map +1 -1
  12. package/dist/commands/flow.js +447 -15
  13. package/dist/commands/flow.js.map +1 -1
  14. package/dist/commands/plan.d.ts.map +1 -1
  15. package/dist/commands/plan.js +71 -7
  16. package/dist/commands/plan.js.map +1 -1
  17. package/dist/commands/req.d.ts +14 -0
  18. package/dist/commands/req.d.ts.map +1 -0
  19. package/dist/commands/req.js +562 -0
  20. package/dist/commands/req.js.map +1 -0
  21. package/dist/commands/stage.d.ts.map +1 -1
  22. package/dist/commands/stage.js +56 -2
  23. package/dist/commands/stage.js.map +1 -1
  24. package/dist/core/config.d.ts +17 -2
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +21 -6
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/flow-archive/archive-file.d.ts +35 -0
  29. package/dist/core/flow-archive/archive-file.d.ts.map +1 -0
  30. package/dist/core/flow-archive/archive-file.js +3 -0
  31. package/dist/core/flow-archive/archive-file.js.map +1 -0
  32. package/dist/core/flow-archive/archive-health.d.ts +34 -0
  33. package/dist/core/flow-archive/archive-health.d.ts.map +1 -0
  34. package/dist/core/flow-archive/archive-health.js +76 -0
  35. package/dist/core/flow-archive/archive-health.js.map +1 -0
  36. package/dist/core/flow-archive/archive-ops.d.ts +68 -0
  37. package/dist/core/flow-archive/archive-ops.d.ts.map +1 -0
  38. package/dist/core/flow-archive/archive-ops.js +184 -0
  39. package/dist/core/flow-archive/archive-ops.js.map +1 -0
  40. package/dist/core/flow-archive/grouping.d.ts +58 -0
  41. package/dist/core/flow-archive/grouping.d.ts.map +1 -0
  42. package/dist/core/flow-archive/grouping.js +153 -0
  43. package/dist/core/flow-archive/grouping.js.map +1 -0
  44. package/dist/core/flow-manager.d.ts +78 -14
  45. package/dist/core/flow-manager.d.ts.map +1 -1
  46. package/dist/core/flow-manager.js +311 -55
  47. package/dist/core/flow-manager.js.map +1 -1
  48. package/dist/core/i18n-data/en.d.ts +1 -0
  49. package/dist/core/i18n-data/en.d.ts.map +1 -1
  50. package/dist/core/i18n-data/en.js +159 -3
  51. package/dist/core/i18n-data/en.js.map +1 -1
  52. package/dist/core/i18n-data/zh-CN.d.ts +1 -0
  53. package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
  54. package/dist/core/i18n-data/zh-CN.js +161 -3
  55. package/dist/core/i18n-data/zh-CN.js.map +1 -1
  56. package/dist/core/i18n.js +4 -4
  57. package/dist/core/i18n.js.map +1 -1
  58. package/dist/core/pipeline-schema.d.ts +5 -0
  59. package/dist/core/pipeline-schema.d.ts.map +1 -1
  60. package/dist/core/pipeline-schema.js +5 -0
  61. package/dist/core/pipeline-schema.js.map +1 -1
  62. package/dist/core/plan/path.d.ts +17 -0
  63. package/dist/core/plan/path.d.ts.map +1 -1
  64. package/dist/core/plan/path.js +31 -0
  65. package/dist/core/plan/path.js.map +1 -1
  66. package/dist/core/plan/scheme.d.ts +22 -0
  67. package/dist/core/plan/scheme.d.ts.map +1 -1
  68. package/dist/core/plan/scheme.js +71 -2
  69. package/dist/core/plan/scheme.js.map +1 -1
  70. package/dist/core/plan/stage.d.ts +2 -0
  71. package/dist/core/plan/stage.d.ts.map +1 -1
  72. package/dist/core/plan/stage.js +8 -0
  73. package/dist/core/plan/stage.js.map +1 -1
  74. package/dist/core/req/aggregate.d.ts +61 -0
  75. package/dist/core/req/aggregate.d.ts.map +1 -0
  76. package/dist/core/req/aggregate.js +134 -0
  77. package/dist/core/req/aggregate.js.map +1 -0
  78. package/dist/core/req/body-file.d.ts +16 -0
  79. package/dist/core/req/body-file.d.ts.map +1 -0
  80. package/dist/core/req/body-file.js +80 -0
  81. package/dist/core/req/body-file.js.map +1 -0
  82. package/dist/core/req/requirement-ops.d.ts +74 -0
  83. package/dist/core/req/requirement-ops.d.ts.map +1 -0
  84. package/dist/core/req/requirement-ops.js +290 -0
  85. package/dist/core/req/requirement-ops.js.map +1 -0
  86. package/dist/core/req/types.d.ts +40 -0
  87. package/dist/core/req/types.d.ts.map +1 -0
  88. package/dist/core/req/types.js +13 -0
  89. package/dist/core/req/types.js.map +1 -0
  90. package/dist/core/setup.js +4 -4
  91. package/dist/core/template-loader.d.ts.map +1 -1
  92. package/dist/core/template-loader.js +649 -65
  93. package/dist/core/template-loader.js.map +1 -1
  94. package/dist/core/update.d.ts.map +1 -1
  95. package/dist/core/update.js +131 -15
  96. package/dist/core/update.js.map +1 -1
  97. package/package.json +1 -1
@@ -92,6 +92,32 @@ export const flow = {
92
92
  'phases.transitionsDiffMissing': { key: 'flow.phases.transitionsDiffMissing', zh: '缺失键 {keys}', en: '' },
93
93
  'phases.transitionsDiffExtra': { key: 'flow.phases.transitionsDiffExtra', zh: '新增键 {keys}', en: '' },
94
94
  'phases.transitionsDiffChanged': { key: 'flow.phases.transitionsDiffChanged', zh: '目标集不同 {keys}', en: '' },
95
+ 'phases.modeHint': { key: 'flow.phases.modeHint', zh: '提示:查看模式来源与切换:openfeel flow mode [--stage <id>]', en: '' },
96
+ // flow mode(stage-75 op-002:当前模式与来源,只读)
97
+ 'mode.lineTmpl': { key: 'flow.mode.lineTmpl', zh: '当前模式:{mode} [来源: {source}]', en: '' },
98
+ 'mode.targetsLabel': { key: 'flow.mode.targetsLabel', zh: '可达目标({stage} · {phase}):{targets}', en: '' },
99
+ // flow archive(stage-79 op-001:flow.json 版本分片归档命令面)
100
+ 'archive.doneTmpl': { key: 'flow.archive.doneTmpl', zh: '已归档 {version}:阶段 {stages} / 审查 {reviews} / 日志 {log}', en: '' },
101
+ 'archive.rearchivedTmpl': { key: 'flow.archive.rearchivedTmpl', zh: '{version} 已重新归档(覆盖写;索引已存在,幂等收敛)', en: '' },
102
+ 'archive.previewTmpl': { key: 'flow.archive.previewTmpl', zh: '[dry-run] 将归档 {version}:阶段 {stages} / 审查 {reviews} / 日志 {log}', en: '' },
103
+ 'archive.previewNoWrite': { key: 'flow.archive.previewNoWrite', zh: '(预览模式:未写入任何文件)', en: '' },
104
+ 'archive.invalidVersionTmpl': { key: 'flow.archive.invalidVersionTmpl', zh: '{input} → 非法版本号(应为 vX.Y[.Z] 形式,如 v1.1.7)', en: '' },
105
+ 'archive.versionNotActiveTmpl': { key: 'flow.archive.versionNotActiveTmpl', zh: '版本 {version} 未注册于活跃 flow.json(不存在或已归档);拒绝归档(零写盘)', en: '' },
106
+ 'archive.gateNotDoneTitleTmpl': { key: 'flow.archive.gateNotDoneTitleTmpl', zh: '版本 {version} 存在未完成阶段({n} 个):', en: '' },
107
+ 'archive.gateBlockingRevTitleTmpl': { key: 'flow.archive.gateBlockingRevTitleTmpl', zh: '版本 {version} 存在阻塞 open 审查({n} 条):', en: '' },
108
+ 'archive.gateItemTmpl': { key: 'flow.archive.gateItemTmpl', zh: ' - {item}', en: '' },
109
+ 'archive.gateRejected': { key: 'flow.archive.gateRejected', zh: '归档判据未满足,拒绝执行(零写盘)', en: '' },
110
+ 'archive.pipelineTmpl': { key: 'flow.archive.pipelineTmpl', zh: 'pipeline 处置:current={current},phase={phase}', en: '' },
111
+ 'archive.list.empty': { key: 'flow.archive.list.empty', zh: '暂无归档版本(.openfeel/flow-archive/ 为空或不存在)', en: '' },
112
+ 'archive.list.title': { key: 'flow.archive.list.title', zh: '已归档版本:', en: '' },
113
+ 'archive.list.itemTmpl': { key: 'flow.archive.list.itemTmpl', zh: ' + {version}:阶段 {stages} / 审查 {reviews} / 日志 {log}', en: '' },
114
+ 'archive.list.unreadableTmpl': { key: 'flow.archive.list.unreadableTmpl', zh: ' + {version}:(不可读,文件损坏或非法)', en: '' },
115
+ 'archive.show.notFoundTmpl': { key: 'flow.archive.show.notFoundTmpl', zh: '归档版本 {version} 不存在;可用版本:{versions}', en: '' },
116
+ 'archive.show.titleTmpl': { key: 'flow.archive.show.titleTmpl', zh: '归档版本 {version}(archived_at: {at})', en: '' },
117
+ 'archive.show.countsTmpl': { key: 'flow.archive.show.countsTmpl', zh: '阶段 {stages} / 审查 {reviews} / 日志 {log}', en: '' },
118
+ 'archive.show.stagesLabel': { key: 'flow.archive.show.stagesLabel', zh: '阶段:', en: '' },
119
+ 'archive.show.stageLineTmpl': { key: 'flow.archive.show.stageLineTmpl', zh: ' - {stage} [{phase}]', en: '' },
120
+ 'archive.show.fullHint': { key: 'flow.archive.show.fullHint', zh: '(完整 log / reviews 请用 --json 查看)', en: '' },
95
121
  // flow stage remove
96
122
  'stage.remove.notFoundTmpl': { key: 'flow.stage.remove.notFoundTmpl', zh: '阶段不存在:{stage}', en: '' },
97
123
  'stage.remove.okTmpl': { key: 'flow.stage.remove.okTmpl', zh: '✓ 已移除阶段: {stage}', en: '' },
@@ -170,6 +196,7 @@ export const flow = {
170
196
  'manager.phaseAutoCorrectShortTmpl': { key: 'flow.manager.phaseAutoCorrectShortTmpl', zh: "[WARN] Phase '{to}' 自动修正为 '{corrected}'", en: '' },
171
197
  'manager.advancePhaseNoStageId': { key: 'flow.manager.advancePhaseNoStageId', zh: '[DEPRECATED] advancePhase: 无法解析 stageId,跳过', en: '' },
172
198
  'manager.autoFixPhaseGuardTmpl': { key: 'flow.manager.autoFixPhaseGuardTmpl', zh: '[WARN] addAutoFixReview 仅允许从 review_failed 状态调用,当前 stage {stage} phase 为 {phase}', en: '' },
199
+ 'manager.fastTransitionsInvalid': { key: 'flow.manager.fastTransitionsInvalid', zh: '[WARN] pipeline.yaml 的 fast_transitions 类型非法,已忽略并使用内置快线表', en: '' },
173
200
  // flow log
174
201
  'log.noInit': { key: 'flow.log.noInit', zh: '流水线未初始化,无日志', en: '' },
175
202
  'log.noLogs': { key: 'flow.log.noLogs', zh: '暂无操作日志', en: '' },
@@ -253,6 +280,9 @@ export const flow = {
253
280
  'health.fixSkippedTmpl': { key: 'flow.health.fixSkippedTmpl', zh: '跳过 {n} 个阶段(status.md 中「状态」字段缺失)', en: '' },
254
281
  'health.fixDryRunNote': { key: 'flow.health.fixDryRunNote', zh: '仅预览,未写入任何文件', en: '' },
255
282
  'health.fixOnlyStatusNote': { key: 'flow.health.fixOnlyStatusNote', zh: '仅同步「状态」字段;执行模式/自动推进/当前任务等不受影响', en: '' },
283
+ 'health.reqLinksPassTmpl': { key: 'flow.health.reqLinksPassTmpl', zh: '需求关联一致({n} 个需求,无悬空引用)', en: '' },
284
+ 'health.reqDanglingTmpl': { key: 'flow.health.reqDanglingTmpl', zh: '悬空需求关联:{items}(阶段引用的需求不存在;可经 req link --unlink 解绑)', en: '' },
285
+ 'health.reqDriftTmpl': { key: 'flow.health.reqDriftTmpl', zh: '需求状态漂移:{items}(关联阶段已全部 done 但需求状态非 done)', en: '' },
256
286
  // flow recover
257
287
  'recover.title': { key: 'flow.recover.title', zh: '═══ 跨会话上下文恢复 ═══', en: '' },
258
288
  'recover.globalStatus': { key: 'flow.recover.globalStatus', zh: '全局状态', en: '' },
@@ -294,6 +324,10 @@ export const flow = {
294
324
  'wizard.createEmpty': { key: 'flow.wizard.createEmpty', zh: '阶段 ID 不能为空', en: '' },
295
325
  'wizard.createdTmpl': { key: 'flow.wizard.createdTmpl', zh: '✓ 已创建阶段: {stage},正在进入向导...', en: '' },
296
326
  'wizard.createSkipped': { key: 'flow.wizard.createSkipped', zh: '已跳过阶段创建,退出向导。', en: '' },
327
+ 'wizard.modePrompt': { key: 'flow.wizard.modePrompt', zh: '首次配置:请选择本阶段的工作流模式', en: '' },
328
+ 'wizard.modeFull': { key: 'flow.wizard.modeFull', zh: 'full(完整链路:含计划审查/方案/测试)', en: '' },
329
+ 'wizard.modeFast': { key: 'flow.wizard.modeFast', zh: 'fast(快速迭代:跳过方案/测试;保留计划审查与代码审查单轮)', en: '' },
330
+ 'wizard.modeRememberedTmpl': { key: 'flow.wizard.modeRememberedTmpl', zh: '✓ 已记忆工作流模式:{mode}(写入 status.md 与项目 config.yaml)', en: '' },
297
331
  };
298
332
  /* ==================== init 域:初始化命令 ==================== */
299
333
  export const init = {
@@ -412,12 +446,15 @@ export const stage = {
412
446
  'errorCheckStageId': { key: 'stage.errorCheckStageId', zh: '请确认阶段 ID 是否正确(如 v4-stage-04)', en: '' },
413
447
  'set.errorFieldNotFoundTmpl': { key: 'stage.set.errorFieldNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「{field}」字段', en: '' },
414
448
  'set.updatedTmpl': { key: 'stage.set.updatedTmpl', zh: '✓ 已更新 {stageId} {field}: → {value}', en: '' },
449
+ 'set.insertedTmpl': { key: 'stage.set.insertedTmpl', zh: '✓ 已在 {stageId} 的 status.md 插入「{field}」字段:{value}', en: '' },
450
+ 'set.noAnchorTmpl': { key: 'stage.set.noAnchorTmpl', zh: '{stageId}:status.md 缺少「{field}」插入锚点(「自动推进」/「执行模式」行均缺失),未写入', en: '' },
415
451
  'set.noopTmpl': { key: 'stage.set.noopTmpl', zh: '字段 {field} 已是目标值,未做变更', en: '' },
416
452
  'set.invalidValueTmpl': { key: 'stage.set.invalidValueTmpl', zh: '字段 {field} 的取值非法:{value}(允许:{allowed})', en: '' },
417
453
  'set.multiPartialTmpl': { key: 'stage.set.multiPartialTmpl', zh: '已写入:{done};失败于:{field}', en: '' },
418
- 'set.noOptionTmpl': { key: 'stage.set.noOptionTmpl', zh: '请至少提供一个字段选项(--status/--exec-mode/--auto-advance/--review-agent)', en: '' },
454
+ 'set.noOptionTmpl': { key: 'stage.set.noOptionTmpl', zh: '请至少提供一个字段选项(--status/--exec-mode/--auto-advance/--workflow-mode/--review-agent)', en: '' },
419
455
  'set.depsOkTmpl': { key: 'stage.set.depsOkTmpl', zh: '已更新阶段 {stage} 的依赖:{deps}', en: '' },
420
456
  'set.depsDanglingTmpl': { key: 'stage.set.depsDanglingTmpl', zh: '依赖校验失败:以下阶段不存在 {deps}', en: '' },
457
+ 'set.archivedDepsTmpl': { key: 'stage.set.archivedDepsTmpl', zh: '依赖已归档(视为已满足):{deps}', en: '' },
421
458
  'task.errorMutualExclusive': { key: 'stage.task.errorMutualExclusive', zh: '错误:必须指定 --done 或 --undone(二者互斥)', en: '' },
422
459
  'task.errorInvalidTaskNo': { key: 'stage.task.errorInvalidTaskNo', zh: '错误:任务编号必须为正整数', en: '' },
423
460
  'task.errorTaskNotFoundTmpl': { key: 'stage.task.errorTaskNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「任务{taskNo}」', en: '' },
@@ -438,8 +475,13 @@ export const stage = {
438
475
  export const plan = {
439
476
  'stage.createdTmpl': { key: 'plan.stage.createdTmpl', zh: '已创建阶段: {name}', en: '' },
440
477
  'stage.invalidDepsTmpl': { key: 'plan.stage.invalidDepsTmpl', zh: '依赖阶段不存在:{deps}(已注册阶段:{known})', en: '' },
478
+ 'stage.archivedDepsTmpl': { key: 'plan.stage.archivedDepsTmpl', zh: '依赖已归档(视为已满足):{deps}', en: '' },
441
479
  'stage.empty': { key: 'plan.stage.empty', zh: '暂无工作阶段', en: '' },
442
480
  'scheme.createdTmpl': { key: 'plan.scheme.createdTmpl', zh: '已创建操作方案: {opId}({stage})', en: '' },
481
+ 'scheme.create.titleRequiredTmpl': { key: 'plan.scheme.create.titleRequiredTmpl', zh: '缺少方案标题:请提供 <title>,或改用 --from-tasks 从阶段任务表机械生成', en: '' },
482
+ 'scheme.create.fromTasksMutualTmpl': { key: 'plan.scheme.create.fromTasksMutualTmpl', zh: '--from-tasks 与 <title> 互斥:标题由阶段任务行派生,请勿同时提供', en: '' },
483
+ 'scheme.fromTasks.okTmpl': { key: 'plan.scheme.fromTasks.okTmpl', zh: '已从任务表机械生成 {count} 个 op 骨架:{ops}(阶段 {stage};跳过已铺 {skipped} 个);ops/deps.yaml 缺失时已创建占位', en: '' },
484
+ 'scheme.fromTasks.emptyTmpl': { key: 'plan.scheme.fromTasks.emptyTmpl', zh: '阶段 {stage} 的任务表无待铺任务(已铺任务保持不变);ops/deps.yaml 缺失时已创建占位', en: '' },
443
485
  'scheme.empty': { key: 'plan.scheme.empty', zh: '暂无操作方案', en: '' },
444
486
  'scheme.remove.okTmpl': { key: 'plan.scheme.remove.okTmpl', zh: '已注销操作方案:{opId}(阶段 {stage})', en: '' },
445
487
  'scheme.remove.dryRunTmpl': { key: 'plan.scheme.remove.dryRunTmpl', zh: '已预览注销操作方案:{opId}(阶段 {stage})[DRY-RUN,未写盘]', en: '' },
@@ -576,7 +618,21 @@ export const help = {
576
618
  'flow.metrics': { key: 'help.flow.metrics', zh: '展示 Agent 性能指标', en: '' },
577
619
  'flow.metrics.json': { key: 'help.flow.metrics.json', zh: '以 JSON 输出', en: '' },
578
620
  'flow.phases': { key: 'help.flow.phases', zh: '列出全部合法 phase 及其流转映射(自描述)', en: '' },
579
- 'flow.phases.json': { key: 'help.flow.phases.json', zh: '以 JSON 输出 { phases, transitions, advanceAccepted, transitionsDiff, schemaVersion }(advanceAccepted = 内置 15 phase,即 flow advance 的推进白名单;transitionsDiff = 运行时转移表与内置默认的差异报告)', en: '' },
621
+ 'flow.phases.json': { key: 'help.flow.phases.json', zh: '以 JSON 输出 { phases, transitions, advanceAccepted, transitionsDiff, schemaVersion, workflowMode }(advanceAccepted = 内置 15 phase,即 flow advance 的推进白名单;transitionsDiff = 运行时转移表与内置默认的差异报告;workflowMode = 本次展示所依据的工作流模式)', en: '' },
622
+ 'flow.phases.mode': { key: 'help.flow.phases.mode', zh: '显式指定工作流模式(full | fast;缺省经 --stage / 当前阶段派生)', en: '' },
623
+ 'flow.phases.stage': { key: 'help.flow.phases.stage', zh: '按指定阶段的模式展示转移表(缺省 = 当前阶段)', en: '' },
624
+ 'flow.mode': { key: 'help.flow.mode', zh: '显示当前工作流模式与来源(只读)', en: '' },
625
+ 'flow.mode.stage': { key: 'help.flow.mode.stage', zh: '目标阶段(缺省 = 当前阶段)', en: '' },
626
+ 'flow.mode.json': { key: 'help.flow.mode.json', zh: '以 JSON 输出 { schemaVersion, stage, mode, source, modes }', en: '' },
627
+ 'flow.archive': { key: 'help.flow.archive', zh: 'flow.json 版本分片归档(按版本号归档已收官历史;与顶层 openfeel archive〔阶段摘要归档〕职责分离)', en: '' },
628
+ 'flow.archive.argversion': { key: 'help.flow.archive.argversion', zh: '版本号(如 v1.1.7;前缀 v 可省略)', en: '' },
629
+ 'flow.archive.dryRun': { key: 'help.flow.archive.dryRun', zh: '仅预览(判据门照常校验;零写盘)', en: '' },
630
+ 'flow.archive.json': { key: 'help.flow.archive.json', zh: '以 JSON 输出 { schemaVersion, version, stages, reviews, log, dryRun }', en: '' },
631
+ 'flow.archive.list': { key: 'help.flow.archive.list', zh: '列出已归档版本及计数(只读;引擎字典序)', en: '' },
632
+ 'flow.archive.list.json': { key: 'help.flow.archive.list.json', zh: '以 JSON 输出 { schemaVersion, versions: [{version, counts}] }', en: '' },
633
+ 'flow.archive.show': { key: 'help.flow.archive.show', zh: '查看指定归档版本(只读;人类输出 = counts + 阶段概览)', en: '' },
634
+ 'flow.archive.show.argversion': { key: 'help.flow.archive.show.argversion', zh: '版本号(如 v1.1.7;前缀 v 可省略)', en: '' },
635
+ 'flow.archive.show.json': { key: 'help.flow.archive.show.json', zh: '以 JSON 输出全量归档内容(含 log / reviews + schemaVersion)', en: '' },
580
636
  'flow.stage': { key: 'help.flow.stage', zh: '阶段管理', en: '' },
581
637
  'flow.stage.add': { key: 'help.flow.stage.add', zh: '新增流水线阶段(仅注册 flow.json,不建目录;通常应使用 openfeel plan stage add)', en: '' },
582
638
  'flow.stage.add.argstageId': { key: 'help.flow.stage.add.argstageId', zh: '阶段 ID(如 v1.1.2-stage-41)', en: '' },
@@ -670,8 +726,9 @@ export const help = {
670
726
  'plan.scheme': { key: 'help.plan.scheme', zh: '操作方案管理', en: '' },
671
727
  'plan.scheme.create': { key: 'help.plan.scheme.create', zh: '创建操作方案', en: '' },
672
728
  'plan.scheme.create.argstage': { key: 'help.plan.scheme.create.argstage', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
673
- 'plan.scheme.create.argtitle': { key: 'help.plan.scheme.create.argtitle', zh: '方案标题', en: '' },
729
+ 'plan.scheme.create.argtitle': { key: 'help.plan.scheme.create.argtitle', zh: '方案标题(可选)', en: '' },
674
730
  'plan.scheme.create.draft': { key: 'help.plan.scheme.create.draft', zh: '以 draft(未发布)状态创建;填充后需 plan scheme publish 发布', en: '' },
731
+ 'plan.scheme.create.fromTasks': { key: 'help.plan.scheme.create.fromTasks', zh: '从阶段任务表机械生成 ops/op-NNN.md 骨架 + ops/deps.yaml 占位(不调用任何 Agent)', en: '' },
675
732
  'plan.scheme.list': { key: 'help.plan.scheme.list', zh: '列出操作方案(可选按阶段过滤)', en: '' },
676
733
  'plan.scheme.list.argstage': { key: 'help.plan.scheme.list.argstage', zh: '阶段名(可选)', en: '' },
677
734
  'plan.scheme.remove': { key: 'help.plan.scheme.remove', zh: '注销操作方案(仅从 flow.json 删除注册键,不删除 op 模板文件)', en: '' },
@@ -699,6 +756,7 @@ export const help = {
699
756
  'stage.set.status': { key: 'help.stage.set.status', zh: '状态值(粗粒度:planned/review_failed/review_passed/testing/archiving/done)', en: '' },
700
757
  'stage.set.execMode': { key: 'help.stage.set.execMode', zh: '执行模式(manual | auto)', en: '' },
701
758
  'stage.set.autoAdvance': { key: 'help.stage.set.autoAdvance', zh: '自动推进(enabled | disabled)', en: '' },
759
+ 'stage.set.workflowMode': { key: 'help.stage.set.workflowMode', zh: '工作流模式(full | fast)', en: '' },
702
760
  'stage.set.reviewAgent': { key: 'help.stage.set.reviewAgent', zh: '当前责任 Agent(如 openfeel-executor)', en: '' },
703
761
  'stage.task': { key: 'help.stage.task', zh: '勾选/取消任务 checkbox,或追加任务', en: '' },
704
762
  'stage.task.argstageId': { key: 'help.stage.task.argstageId', zh: '阶段 ID(如 v4-stage-04)', en: '' },
@@ -769,6 +827,45 @@ export const help = {
769
827
  'model.get.scope': { key: 'help.model.get.scope', zh: '层级(缺省展示生效值)', en: '' },
770
828
  'model.list': { key: 'help.model.list', zh: '列出所有 agent 的模型', en: '' },
771
829
  'model.list.scope': { key: 'help.model.list.scope', zh: '层级(缺省展示生效值)', en: '' },
830
+ // req(需求流转命令组)
831
+ 'req': { key: 'help.req', zh: '需求管理(需求流转命令组:添加/列表/详情/认领/推进/看板/推荐)', en: '' },
832
+ 'req.add': { key: 'help.req.add', zh: '创建需求(ID 自动分配;正文骨架铺到 .openfeel/requirements/)', en: '' },
833
+ 'req.add.argtitle': { key: 'help.req.add.argtitle', zh: '需求标题', en: '' },
834
+ 'req.add.targetVersion': { key: 'help.req.add.targetVersion', zh: '预估版本(如 v1.3.0)', en: '' },
835
+ 'req.add.priority': { key: 'help.req.add.priority', zh: '优先级(P0/P1/P2)', en: '' },
836
+ 'req.list': { key: 'help.req.list', zh: '列出需求(可按状态/版本/认领人过滤)', en: '' },
837
+ 'req.list.status': { key: 'help.req.list.status', zh: '按状态过滤(draft/scheduled/in_progress/done/blocked/cancelled/rejected)', en: '' },
838
+ 'req.list.targetVersion': { key: 'help.req.list.targetVersion', zh: '按预估版本过滤', en: '' },
839
+ 'req.list.owner': { key: 'help.req.list.owner', zh: '按认领人过滤', en: '' },
840
+ 'req.list.json': { key: 'help.req.list.json', zh: '以 JSON 输出 { schemaVersion, requirements }', en: '' },
841
+ 'req.show': { key: 'help.req.show', zh: '查看需求详情(关联阶段为原始只读枚举)', en: '' },
842
+ 'req.show.argid': { key: 'help.req.show.argid', zh: '需求 ID(如 REQ-001)', en: '' },
843
+ 'req.show.json': { key: 'help.req.show.json', zh: '以 JSON 输出 { schemaVersion, requirement, stages }', en: '' },
844
+ // req(写命令)
845
+ 'req.claim': { key: 'help.req.claim', zh: '认领需求(占用校验;已被他人认领则拒绝)', en: '' },
846
+ 'req.claim.argid': { key: 'help.req.claim.argid', zh: '需求 ID(如 REQ-001)', en: '' },
847
+ 'req.claim.owner': { key: 'help.req.claim.owner', zh: '认领人(缺省:.openfeel/.info.json user → git config user.name)', en: '' },
848
+ 'req.release': { key: 'help.req.release', zh: '释放认领(未认领为 no-op 成功)', en: '' },
849
+ 'req.release.argid': { key: 'help.req.release.argid', zh: '需求 ID(如 REQ-001)', en: '' },
850
+ 'req.set': { key: 'help.req.set', zh: '更新需求字段(白名单;状态流转合法性由引擎判定)', en: '' },
851
+ 'req.set.argid': { key: 'help.req.set.argid', zh: '需求 ID(如 REQ-001)', en: '' },
852
+ 'req.set.status': { key: 'help.req.set.status', zh: '目标状态(合法性与 done 门由引擎判定)', en: '' },
853
+ 'req.set.title': { key: 'help.req.set.title', zh: '新标题', en: '' },
854
+ 'req.set.targetVersion': { key: 'help.req.set.targetVersion', zh: '新预估版本', en: '' },
855
+ 'req.set.priority': { key: 'help.req.set.priority', zh: '新优先级(P0/P1/P2)', en: '' },
856
+ 'req.link': { key: 'help.req.link', zh: '关联需求到阶段 / 解绑(--requirement 与 --unlink 二选一)', en: '' },
857
+ 'req.link.stage': { key: 'help.req.link.stage', zh: '阶段 ID(stage-NN 或 vX.Y.Z-stage-NN;短名按 v1.0.0 系列解析)', en: '' },
858
+ 'req.link.requirement': { key: 'help.req.link.requirement', zh: '需求 ID(关联用;与 --unlink 互斥)', en: '' },
859
+ 'req.link.unlink': { key: 'help.req.link.unlink', zh: '解除该阶段的需求关联', en: '' },
860
+ 'req.advance': { key: 'help.req.advance', zh: '显式推进需求状态(合法目标由引擎流转表判定;done 须全部关联阶段 done)', en: '' },
861
+ 'req.advance.argid': { key: 'help.req.advance.argid', zh: '需求 ID(如 REQ-001)', en: '' },
862
+ 'req.advance.to': { key: 'help.req.advance.to', zh: '目标状态(合法目标由引擎判定)', en: '' },
863
+ 'req.board': { key: 'help.req.board', zh: '需求看板(按状态分组;7 组固定顺序)', en: '' },
864
+ 'req.board.targetVersion': { key: 'help.req.board.targetVersion', zh: '按预估版本过滤', en: '' },
865
+ 'req.board.json': { key: 'help.req.board.json', zh: '以 JSON 输出 { schemaVersion, groups }', en: '' },
866
+ 'req.next': { key: 'help.req.next', zh: '推荐下一个可接取需求(scheduled 且未认领;按预估版本升序)', en: '' },
867
+ 'req.next.owner': { key: 'help.req.next.owner', zh: '认领人视角(含该认领人已认领的 scheduled 需求)', en: '' },
868
+ 'req.next.json': { key: 'help.req.next.json', zh: '以 JSON 输出 { schemaVersion, requirement }', en: '' },
772
869
  };
773
870
  /* ==================== config 域:配置管理命令 ==================== */
774
871
  export const config = {
@@ -788,6 +885,8 @@ export const config = {
788
885
  'get.globalKeyNotFound': { key: 'config.get.globalKeyNotFound', zh: '{key}:未设置', en: '' },
789
886
  'get.globalResult': { key: 'config.get.globalResult', zh: '{key}: {value}', en: '' },
790
887
  'set.valueOk': { key: 'config.set.valueOk', zh: '{key} 已设置为:{value}', en: '' },
888
+ 'set.syncSummaryTmpl': { key: 'config.set.syncSummaryTmpl', zh: '同步 {updated} / 插入 {inserted} / 跳过 {skipped}', en: '' },
889
+ 'set.syncArchivedStageTmpl': { key: 'config.set.syncArchivedStageTmpl', zh: '已归档阶段仅同步 status.md(跳过 flow.json 冗余):{stages}', en: '' },
791
890
  'set.invalidKey': { key: 'config.set.invalidKey', zh: '无效的配置键 "{val}",当前仅支持:{keys}', en: '' },
792
891
  'set.invalidValue': { key: 'config.set.invalidValue', zh: '无效的值 "{val}"。{key} 仅支持:{values}', en: '' },
793
892
  'set.error': { key: 'config.set.error', zh: '项目配置写入失败:{err}', en: '' },
@@ -891,6 +990,64 @@ export const repl = {
891
990
  'helpTitle': { key: 'repl.helpTitle', zh: '可用命令:', en: '' },
892
991
  'errorPrefix': { key: 'repl.errorPrefix', zh: '错误:', en: '' },
893
992
  };
993
+ /* ==================== req 域:需求流转命令组(stage-82) ==================== */
994
+ export const req = {
995
+ // req add
996
+ 'add.doneTmpl': { key: 'req.add.doneTmpl', zh: '已创建 {id}:{title}(状态 draft)', en: '' },
997
+ 'add.bodyTmpl': { key: 'req.add.bodyTmpl', zh: '正文骨架:{path}', en: '' },
998
+ // 共享校验文案
999
+ 'invalidIdTmpl': { key: 'req.invalidIdTmpl', zh: '{input} → 非法需求 ID(应为 REQ-NNN,如 REQ-001)', en: '' },
1000
+ // req list
1001
+ 'list.empty': { key: 'req.list.empty', zh: '(无匹配需求)', en: '' },
1002
+ 'list.itemTmpl': { key: 'req.list.itemTmpl', zh: ' - {id} [{status}] {title}', en: '' },
1003
+ 'list.invalidStatusTmpl': { key: 'req.list.invalidStatusTmpl', zh: '{value} → 非法状态过滤值(合法值:{allowed})', en: '' },
1004
+ // req show
1005
+ 'show.titleTmpl': { key: 'req.show.titleTmpl', zh: '{id}:{title}', en: '' },
1006
+ 'show.metaTmpl': { key: 'req.show.metaTmpl', zh: '状态: {status} | 预估版本: {targetVersion} | 优先级: {priority}', en: '' },
1007
+ 'show.ownerTmpl': { key: 'req.show.ownerTmpl', zh: '认领人: {owner}(认领于 {claimedAt})', en: '' },
1008
+ 'show.ownerNone': { key: 'req.show.ownerNone', zh: '认领人: (无)', en: '' },
1009
+ 'show.timesTmpl': { key: 'req.show.timesTmpl', zh: '创建: {created} | 更新: {updated}', en: '' },
1010
+ 'show.bodyTmpl': { key: 'req.show.bodyTmpl', zh: '正文: {path}', en: '' },
1011
+ 'show.stagesLabel': { key: 'req.show.stagesLabel', zh: '关联阶段:', en: '' },
1012
+ 'show.stageItemTmpl': { key: 'req.show.stageItemTmpl', zh: ' - {stage}', en: '' },
1013
+ 'show.stagesNone': { key: 'req.show.stagesNone', zh: '关联阶段: (无)', en: '' },
1014
+ // 通用错误
1015
+ 'err.notFoundTmpl': { key: 'req.err.notFoundTmpl', zh: '需求 {id} 不存在', en: '' },
1016
+ // req claim
1017
+ 'claim.doneTmpl': { key: 'req.claim.doneTmpl', zh: '已认领 {id}({owner})', en: '' },
1018
+ 'claim.idempotentTmpl': { key: 'req.claim.idempotentTmpl', zh: '{id} 已由 {owner} 认领(no-op)', en: '' },
1019
+ 'claim.ownerUnresolvedTmpl': { key: 'req.claim.ownerUnresolvedTmpl', zh: '无法解析当前用户名(.openfeel/.info.json 与 git config user.name 均不可用);请显式传入 --owner <name>', en: '' },
1020
+ 'claim.terminalTmpl': { key: 'req.claim.terminalTmpl', zh: '{id} 已是终态({status}),不可认领', en: '' },
1021
+ // req release
1022
+ 'release.doneTmpl': { key: 'req.release.doneTmpl', zh: '已释放 {id}', en: '' },
1023
+ 'release.noopTmpl': { key: 'req.release.noopTmpl', zh: '{id} 未被认领(no-op)', en: '' },
1024
+ // req set
1025
+ 'set.doneTmpl': { key: 'req.set.doneTmpl', zh: '已更新 {id}', en: '' },
1026
+ 'set.noopTmpl': { key: 'req.set.noopTmpl', zh: '{id} 无变更(no-op)', en: '' },
1027
+ 'set.noFieldsTmpl': { key: 'req.set.noFieldsTmpl', zh: '未提供任何字段;至少提供 --status / --title / --target-version / --priority 之一', en: '' },
1028
+ // req link
1029
+ 'link.doneTmpl': { key: 'req.link.doneTmpl', zh: '已将 {stage} 关联到 {id}', en: '' },
1030
+ 'link.unlinkDoneTmpl': { key: 'req.link.unlinkDoneTmpl', zh: '已解除 {stage} 的需求关联', en: '' },
1031
+ 'link.noopTmpl': { key: 'req.link.noopTmpl', zh: '{stage} 关联未变化(no-op)', en: '' },
1032
+ 'link.exclusiveTmpl': { key: 'req.link.exclusiveTmpl', zh: '--requirement 与 --unlink 必须且只能提供一个', en: '' },
1033
+ 'link.terminalTmpl': { key: 'req.link.terminalTmpl', zh: '{id} 已是终态({status}),不可关联', en: '' },
1034
+ // req advance
1035
+ 'advance.doneTmpl': { key: 'req.advance.doneTmpl', zh: '已推进 {id}:{from} → {to}', en: '' },
1036
+ 'advance.noopTmpl': { key: 'req.advance.noopTmpl', zh: '{id} 已是 {to}(no-op)', en: '' },
1037
+ // 错误码映射
1038
+ 'err.stageNotFoundTmpl': { key: 'req.err.stageNotFoundTmpl', zh: '阶段 {stage} 不存在(未注册于 flow.json 的 stages)', en: '' },
1039
+ 'err.alreadyClaimedTmpl': { key: 'req.err.alreadyClaimedTmpl', zh: '{id} 已被他人认领;须先释放:openfeel req release {id}', en: '' },
1040
+ 'err.alreadyLinkedTmpl': { key: 'req.err.alreadyLinkedTmpl', zh: '{stage} 已关联其它需求;须先解绑:openfeel req link --stage {stage} --unlink', en: '' },
1041
+ 'err.invalidFieldTmpl': { key: 'req.err.invalidFieldTmpl', zh: '{id} 字段取值非法(检查 --status / --title / --target-version / --priority)', en: '' },
1042
+ 'err.invalidStatusTmpl': { key: 'req.err.invalidStatusTmpl', zh: '{id} 目标状态 {to} 被拒(当前 {current};合法目标:{targets})', en: '' },
1043
+ // req board
1044
+ 'board.groupTmpl': { key: 'req.board.groupTmpl', zh: '{status}({n})', en: '' },
1045
+ 'board.itemTmpl': { key: 'req.board.itemTmpl', zh: ' - {id} {title}', en: '' },
1046
+ // req next
1047
+ 'next.foundTmpl': { key: 'req.next.foundTmpl', zh: '下一项:{id} [{status}] {title}', en: '' },
1048
+ 'next.ownedSuffixTmpl': { key: 'req.next.ownedSuffixTmpl', zh: '(已认领:{owner})', en: '' },
1049
+ 'next.empty': { key: 'req.next.empty', zh: '(无可接取需求)', en: '' },
1050
+ };
894
1051
  /* ==================== 聚合导出 ==================== */
895
1052
  /** 所有功能域的聚合数组(供 i18n.ts 构建 Map 使用) */
896
1053
  export const allDomains = [
@@ -914,5 +1071,6 @@ export const allDomains = [
914
1071
  { name: 'setup', domain: setup },
915
1072
  { name: 'metrics', domain: metrics },
916
1073
  { name: 'repl', domain: repl },
1074
+ { name: 'req', domain: req },
917
1075
  ];
918
1076
  //# sourceMappingURL=zh-CN.js.map