openfeel 1.0.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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +140 -0
  3. package/README.md +17 -0
  4. package/README.zh-CN.md +140 -0
  5. package/bin/openfeel.js +13 -0
  6. package/dist/cli/index.d.ts +11 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +119 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/repl.d.ts +10 -0
  11. package/dist/cli/repl.d.ts.map +1 -0
  12. package/dist/cli/repl.js +74 -0
  13. package/dist/cli/repl.js.map +1 -0
  14. package/dist/commands/archive.d.ts +7 -0
  15. package/dist/commands/archive.d.ts.map +1 -0
  16. package/dist/commands/archive.js +38 -0
  17. package/dist/commands/archive.js.map +1 -0
  18. package/dist/commands/config.d.ts +15 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +208 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/flow.d.ts +24 -0
  23. package/dist/commands/flow.d.ts.map +1 -0
  24. package/dist/commands/flow.js +1024 -0
  25. package/dist/commands/flow.js.map +1 -0
  26. package/dist/commands/init.d.ts +9 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +62 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/instructions.d.ts +7 -0
  31. package/dist/commands/instructions.d.ts.map +1 -0
  32. package/dist/commands/instructions.js +36 -0
  33. package/dist/commands/instructions.js.map +1 -0
  34. package/dist/commands/knowledge.d.ts +7 -0
  35. package/dist/commands/knowledge.d.ts.map +1 -0
  36. package/dist/commands/knowledge.js +174 -0
  37. package/dist/commands/knowledge.js.map +1 -0
  38. package/dist/commands/lint.d.ts +12 -0
  39. package/dist/commands/lint.d.ts.map +1 -0
  40. package/dist/commands/lint.js +192 -0
  41. package/dist/commands/lint.js.map +1 -0
  42. package/dist/commands/plan.d.ts +7 -0
  43. package/dist/commands/plan.d.ts.map +1 -0
  44. package/dist/commands/plan.js +73 -0
  45. package/dist/commands/plan.js.map +1 -0
  46. package/dist/commands/project.d.ts +7 -0
  47. package/dist/commands/project.d.ts.map +1 -0
  48. package/dist/commands/project.js +189 -0
  49. package/dist/commands/project.js.map +1 -0
  50. package/dist/commands/roadmap.d.ts +7 -0
  51. package/dist/commands/roadmap.d.ts.map +1 -0
  52. package/dist/commands/roadmap.js +26 -0
  53. package/dist/commands/roadmap.js.map +1 -0
  54. package/dist/commands/stage.d.ts +17 -0
  55. package/dist/commands/stage.d.ts.map +1 -0
  56. package/dist/commands/stage.js +291 -0
  57. package/dist/commands/stage.js.map +1 -0
  58. package/dist/commands/update.d.ts +8 -0
  59. package/dist/commands/update.d.ts.map +1 -0
  60. package/dist/commands/update.js +87 -0
  61. package/dist/commands/update.js.map +1 -0
  62. package/dist/commands/view.d.ts +7 -0
  63. package/dist/commands/view.d.ts.map +1 -0
  64. package/dist/commands/view.js +77 -0
  65. package/dist/commands/view.js.map +1 -0
  66. package/dist/core/archive/merge.d.ts +20 -0
  67. package/dist/core/archive/merge.d.ts.map +1 -0
  68. package/dist/core/archive/merge.js +118 -0
  69. package/dist/core/archive/merge.js.map +1 -0
  70. package/dist/core/artifact-graph/graph.d.ts +62 -0
  71. package/dist/core/artifact-graph/graph.d.ts.map +1 -0
  72. package/dist/core/artifact-graph/graph.js +184 -0
  73. package/dist/core/artifact-graph/graph.js.map +1 -0
  74. package/dist/core/artifact-graph/index.d.ts +10 -0
  75. package/dist/core/artifact-graph/index.d.ts.map +1 -0
  76. package/dist/core/artifact-graph/index.js +8 -0
  77. package/dist/core/artifact-graph/index.js.map +1 -0
  78. package/dist/core/artifact-graph/instruction-loader.d.ts +35 -0
  79. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -0
  80. package/dist/core/artifact-graph/instruction-loader.js +358 -0
  81. package/dist/core/artifact-graph/instruction-loader.js.map +1 -0
  82. package/dist/core/artifact-graph/resolver.d.ts +10 -0
  83. package/dist/core/artifact-graph/resolver.d.ts.map +1 -0
  84. package/dist/core/artifact-graph/resolver.js +32 -0
  85. package/dist/core/artifact-graph/resolver.js.map +1 -0
  86. package/dist/core/artifact-graph/state.d.ts +9 -0
  87. package/dist/core/artifact-graph/state.d.ts.map +1 -0
  88. package/dist/core/artifact-graph/state.js +24 -0
  89. package/dist/core/artifact-graph/state.js.map +1 -0
  90. package/dist/core/artifact-graph/types.d.ts +22 -0
  91. package/dist/core/artifact-graph/types.d.ts.map +1 -0
  92. package/dist/core/artifact-graph/types.js +2 -0
  93. package/dist/core/artifact-graph/types.js.map +1 -0
  94. package/dist/core/config.d.ts +256 -0
  95. package/dist/core/config.d.ts.map +1 -0
  96. package/dist/core/config.js +393 -0
  97. package/dist/core/config.js.map +1 -0
  98. package/dist/core/flow-manager.d.ts +492 -0
  99. package/dist/core/flow-manager.d.ts.map +1 -0
  100. package/dist/core/flow-manager.js +2379 -0
  101. package/dist/core/flow-manager.js.map +1 -0
  102. package/dist/core/i18n-data/en.d.ts +26 -0
  103. package/dist/core/i18n-data/en.d.ts.map +1 -0
  104. package/dist/core/i18n-data/en.js +492 -0
  105. package/dist/core/i18n-data/en.js.map +1 -0
  106. package/dist/core/i18n-data/types.d.ts +18 -0
  107. package/dist/core/i18n-data/types.d.ts.map +1 -0
  108. package/dist/core/i18n-data/types.js +8 -0
  109. package/dist/core/i18n-data/types.js.map +1 -0
  110. package/dist/core/i18n-data/zh-CN.d.ts +28 -0
  111. package/dist/core/i18n-data/zh-CN.d.ts.map +1 -0
  112. package/dist/core/i18n-data/zh-CN.js +524 -0
  113. package/dist/core/i18n-data/zh-CN.js.map +1 -0
  114. package/dist/core/i18n.d.ts +40 -0
  115. package/dist/core/i18n.d.ts.map +1 -0
  116. package/dist/core/i18n.js +135 -0
  117. package/dist/core/i18n.js.map +1 -0
  118. package/dist/core/init.d.ts +22 -0
  119. package/dist/core/init.d.ts.map +1 -0
  120. package/dist/core/init.js +292 -0
  121. package/dist/core/init.js.map +1 -0
  122. package/dist/core/metrics.d.ts +60 -0
  123. package/dist/core/metrics.d.ts.map +1 -0
  124. package/dist/core/metrics.js +137 -0
  125. package/dist/core/metrics.js.map +1 -0
  126. package/dist/core/pipeline-schema.d.ts +78 -0
  127. package/dist/core/pipeline-schema.d.ts.map +1 -0
  128. package/dist/core/pipeline-schema.js +57 -0
  129. package/dist/core/pipeline-schema.js.map +1 -0
  130. package/dist/core/plan/roadmap.d.ts +17 -0
  131. package/dist/core/plan/roadmap.d.ts.map +1 -0
  132. package/dist/core/plan/roadmap.js +71 -0
  133. package/dist/core/plan/roadmap.js.map +1 -0
  134. package/dist/core/plan/scheme.d.ts +34 -0
  135. package/dist/core/plan/scheme.d.ts.map +1 -0
  136. package/dist/core/plan/scheme.js +262 -0
  137. package/dist/core/plan/scheme.js.map +1 -0
  138. package/dist/core/plan/stage.d.ts +20 -0
  139. package/dist/core/plan/stage.d.ts.map +1 -0
  140. package/dist/core/plan/stage.js +120 -0
  141. package/dist/core/plan/stage.js.map +1 -0
  142. package/dist/core/public-logger.d.ts +84 -0
  143. package/dist/core/public-logger.d.ts.map +1 -0
  144. package/dist/core/public-logger.js +344 -0
  145. package/dist/core/public-logger.js.map +1 -0
  146. package/dist/core/schema.d.ts +70 -0
  147. package/dist/core/schema.d.ts.map +1 -0
  148. package/dist/core/schema.js +61 -0
  149. package/dist/core/schema.js.map +1 -0
  150. package/dist/core/template-loader.d.ts +22 -0
  151. package/dist/core/template-loader.d.ts.map +1 -0
  152. package/dist/core/template-loader.js +2848 -0
  153. package/dist/core/template-loader.js.map +1 -0
  154. package/dist/core/templates.d.ts +18 -0
  155. package/dist/core/templates.d.ts.map +1 -0
  156. package/dist/core/templates.js +50 -0
  157. package/dist/core/templates.js.map +1 -0
  158. package/dist/core/update.d.ts +40 -0
  159. package/dist/core/update.d.ts.map +1 -0
  160. package/dist/core/update.js +1569 -0
  161. package/dist/core/update.js.map +1 -0
  162. package/dist/core/view/entry.d.ts +37 -0
  163. package/dist/core/view/entry.d.ts.map +1 -0
  164. package/dist/core/view/entry.js +108 -0
  165. package/dist/core/view/entry.js.map +1 -0
  166. package/dist/core/workspace/identity.d.ts +60 -0
  167. package/dist/core/workspace/identity.d.ts.map +1 -0
  168. package/dist/core/workspace/identity.js +169 -0
  169. package/dist/core/workspace/identity.js.map +1 -0
  170. package/dist/core/workspace/knowledge.d.ts +55 -0
  171. package/dist/core/workspace/knowledge.d.ts.map +1 -0
  172. package/dist/core/workspace/knowledge.js +230 -0
  173. package/dist/core/workspace/knowledge.js.map +1 -0
  174. package/dist/core/workspace/structure.d.ts +9 -0
  175. package/dist/core/workspace/structure.d.ts.map +1 -0
  176. package/dist/core/workspace/structure.js +59 -0
  177. package/dist/core/workspace/structure.js.map +1 -0
  178. package/dist/index.d.ts +7 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +7 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/utils/kb-dedup.d.ts +46 -0
  183. package/dist/utils/kb-dedup.d.ts.map +1 -0
  184. package/dist/utils/kb-dedup.js +169 -0
  185. package/dist/utils/kb-dedup.js.map +1 -0
  186. package/dist/utils/path.d.ts +22 -0
  187. package/dist/utils/path.d.ts.map +1 -0
  188. package/dist/utils/path.js +37 -0
  189. package/dist/utils/path.js.map +1 -0
  190. package/package.json +61 -0
  191. package/schemas/spec-driven/schema.yaml +50 -0
  192. package/schemas/spec-driven/templates/design.md +43 -0
  193. package/schemas/spec-driven/templates/plan.md +46 -0
  194. package/schemas/spec-driven/templates/proposal.md +35 -0
  195. package/schemas/spec-driven/templates/tasks.md +39 -0
  196. package/scripts/patch-inquirer.js +70 -0
@@ -0,0 +1,524 @@
1
+ /* ==================== common 域:跨命令共享字符串 ==================== */
2
+ export const common = {
3
+ error: { key: 'common.error', zh: '错误', en: '' },
4
+ errorTmpl: { key: 'common.errorTmpl', zh: '错误:{msg}', en: '' },
5
+ ok: { key: 'common.ok', zh: '✓', en: '' },
6
+ none: { key: 'common.none', zh: '(无)', en: '' },
7
+ noData: { key: 'common.noData', zh: '(无记录)', en: '' },
8
+ inProgress: { key: 'common.inProgress', zh: '(进行中)', en: '' },
9
+ completed: { key: 'common.completed', zh: '已完成', en: '' },
10
+ unknown: { key: 'common.unknown', zh: '未知', en: '' },
11
+ cancelled: { key: 'common.cancelled', zh: '已取消', en: '' },
12
+ noInit: { key: 'common.noInit', zh: '流水线未初始化(flow.json 不存在)', en: '' },
13
+ noConfig: { key: 'common.noConfig', zh: '(无配置)', en: '' },
14
+ invalidOpId: { key: 'common.invalidOpId', zh: 'opId 格式不正确,应为 stage-xx.op-xxx(如 stage-01.op-001)', en: '' },
15
+ errorNoInit: { key: 'common.errorNoInit', zh: '错误:flow.json 未初始化,请先运行 openfeel init', en: '' },
16
+ stage: { key: 'common.stage', zh: '阶段', en: '' },
17
+ op: { key: 'common.op', zh: '操作', en: '' },
18
+ status: { key: 'common.status', zh: '状态', en: '' },
19
+ blockedBy: { key: 'common.blockedBy', zh: '阻塞原因', en: '' },
20
+ retry: { key: 'common.retry', zh: '重试', en: '' },
21
+ cancel: { key: 'common.cancel', zh: '取消', en: '' },
22
+ };
23
+ /* ==================== flow 域:流水线状态管理 ==================== */
24
+ export const flow = {
25
+ // flow status
26
+ 'status.title': { key: 'flow.status.title', zh: 'OpenFeel 流水线状态', en: '' },
27
+ 'status.verboseTitle': { key: 'flow.status.verboseTitle', zh: 'OpenFeel 流水线状态(verbose)', en: '' },
28
+ 'status.currentStage': { key: 'flow.status.currentStage', zh: '当前活跃阶段', en: '' },
29
+ 'status.stageDuration': { key: 'flow.status.stageDuration', zh: '阶段耗时', en: '' },
30
+ 'status.globalStatus': { key: 'flow.status.globalStatus', zh: '全局状态', en: '' },
31
+ 'status.currentStageLabel': { key: 'flow.status.currentStageLabel', zh: '当前阶段', en: '' },
32
+ 'status.stagePhase': { key: 'flow.status.stagePhase', zh: '阶段状态', en: '' },
33
+ 'status.currentOp': { key: 'flow.status.currentOp', zh: '当前操作', en: '' },
34
+ 'status.retryCount': { key: 'flow.status.retryCount', zh: '重试次数', en: '' },
35
+ 'status.stagesCount': { key: 'flow.status.stagesCount', zh: '阶段数', en: '' },
36
+ 'status.opsCount': { key: 'flow.status.opsCount', zh: '操作数', en: '' },
37
+ 'status.reviewPending': { key: 'flow.status.reviewPending', zh: '待处理审查', en: '' },
38
+ 'status.logTotal': { key: 'flow.status.logTotal', zh: '日志总数', en: '' },
39
+ 'status.cascadeTitle': { key: 'flow.status.cascadeTitle', zh: '── 配置级联状态 ──', en: '' },
40
+ 'status.cascadeHeader': { key: 'flow.status.cascadeHeader', zh: '字段 config.yaml status.md 生效值', en: '' },
41
+ 'status.cascadeNote': { key: 'flow.status.cascadeNote', zh: '(* 表示 status.md 覆盖了 config.yaml 默认值)', en: '' },
42
+ 'status.recentTitleTmpl': { key: 'flow.status.recentTitleTmpl', zh: '── 最近 {n} 条状态变更 ──', en: '' },
43
+ 'status.recentHeader': { key: 'flow.status.recentHeader', zh: '时间 Agent 状态变化 说明', en: '' },
44
+ 'status.downstreamTitle': { key: 'flow.status.downstreamTitle', zh: '── 下游 Agent 就绪状态 ──', en: '' },
45
+ 'status.noDownstream': { key: 'flow.status.noDownstream', zh: '(当前阶段无下游可达阶段)', en: '' },
46
+ 'status.downstreamHeader': { key: 'flow.status.downstreamHeader', zh: '可达阶段 负责 Agent', en: '' },
47
+ 'status.lastUpdated': { key: 'flow.status.lastUpdated', zh: '最后更新', en: '' },
48
+ 'status.recoveryTitle': { key: 'flow.status.recoveryTitle', zh: '── 跨会话恢复信息 ──', en: '' },
49
+ 'status.recoveryMoreTmpl': { key: 'flow.status.recoveryMoreTmpl', zh: '... 还有 {n} 项', en: '' },
50
+ // flow overview
51
+ 'overview.title': { key: 'flow.overview.title', zh: 'OpenFeel 流水线全景视图', en: '' },
52
+ 'overview.currentStatus': { key: 'flow.overview.currentStatus', zh: '📍 当前状态', en: '' },
53
+ 'overview.stagesOverview': { key: 'flow.overview.stagesOverview', zh: '📋 阶段总览', en: '' },
54
+ 'overview.noStages': { key: 'flow.overview.noStages', zh: '(无阶段数据)', en: '' },
55
+ 'overview.totalStagesTmpl': { key: 'flow.overview.totalStagesTmpl', zh: '共 {n} 个阶段', en: '' },
56
+ 'overview.noOps': { key: 'flow.overview.noOps', zh: '(无操作)', en: '' },
57
+ 'overview.reviewSection': { key: 'flow.overview.reviewSection', zh: '🔍 审查条目 (REV)', en: '' },
58
+ 'overview.noReviews': { key: 'flow.overview.noReviews', zh: '(无审查条目)', en: '' },
59
+ 'overview.reviewOpen': { key: 'flow.overview.reviewOpen', zh: '打开', en: '' },
60
+ 'overview.reviewResolved': { key: 'flow.overview.reviewResolved', zh: '已解决', en: '' },
61
+ 'overview.reviewClosed': { key: 'flow.overview.reviewClosed', zh: '已关闭', en: '' },
62
+ 'overview.reviewPending': { key: 'flow.overview.reviewPending', zh: '待处理审查', en: '' },
63
+ 'overview.bugSection': { key: 'flow.overview.bugSection', zh: '🐛 Bug 追踪', en: '' },
64
+ 'overview.bugUnreadable': { key: 'flow.overview.bugUnreadable', zh: '(无法读取 Bug 统计)', en: '' },
65
+ 'overview.bugUninitialized': { key: 'flow.overview.bugUninitialized', zh: '(Bug 追踪未初始化)', en: '' },
66
+ 'overview.bugOpen': { key: 'flow.overview.bugOpen', zh: '打开', en: '' },
67
+ 'overview.bugClosed': { key: 'flow.overview.bugClosed', zh: '已关闭', en: '' },
68
+ 'overview.recentLogs': { key: 'flow.overview.recentLogs', zh: '📝 最近操作(5 条)', en: '' },
69
+ 'overview.noLogs': { key: 'flow.overview.noLogs', zh: '(无日志记录)', en: '' },
70
+ 'overview.health': { key: 'flow.overview.health', zh: '💚 健康状态', en: '' },
71
+ 'overview.healthStatsTmpl': { key: 'flow.overview.healthStatsTmpl', zh: '✅ {n} 🟡 {m} ❌ {k}', en: '' },
72
+ // flow current
73
+ 'current.globalStatus': { key: 'flow.current.globalStatus', zh: '全局状态', en: '' },
74
+ 'current.stagePhase': { key: 'flow.current.stagePhase', zh: '阶段状态', en: '' },
75
+ 'current.currentOp': { key: 'flow.current.currentOp', zh: '当前操作', en: '' },
76
+ 'current.retryCount': { key: 'flow.current.retryCount', zh: '重试次数', en: '' },
77
+ // flow stage add
78
+ 'stage.addedTmpl': { key: 'flow.stage.addedTmpl', zh: '✓ 已创建阶段: {stage} → plan_pending', en: '' },
79
+ // flow advance
80
+ 'advance.errorNoStage': { key: 'flow.advance.errorNoStage', zh: '错误:--stage 参数必须指定阶段 ID(如 stage-03)', en: '' },
81
+ 'advance.warnAutoCorrect': { key: 'flow.advance.warnAutoCorrect', zh: '(非标准 phase 已自动修正,继续推进)', en: '' },
82
+ 'advance.errorInvalidFormat': { key: 'flow.advance.errorInvalidFormat', zh: '错误:flow.json 格式不合法', en: '' },
83
+ 'advance.errorInvalidPhaseTmpl': { key: 'flow.advance.errorInvalidPhaseTmpl', zh: "错误: '{phase}' 不是合法的 PipelinePhase。", en: '' },
84
+ 'advance.labelValidPhases': { key: 'flow.advance.labelValidPhases', zh: '合法值', en: '' },
85
+ 'advance.hintUseForceFuzzy': { key: 'flow.advance.hintUseForceFuzzy', zh: '使用 --force 强制执行(自动模糊修正)', en: '' },
86
+ 'advance.errorPhaseJumpTmpl': { key: 'flow.advance.errorPhaseJumpTmpl', zh: '错误: 阶段 "{stage}" 当前 phase 无法跳转到 "{to}"', en: '' },
87
+ 'advance.hintUseForce': { key: 'flow.advance.hintUseForce', zh: '使用 --force 强制执行', en: '' },
88
+ 'advance.warnSkipReview': { key: 'flow.advance.warnSkipReview', zh: '[!] 跳过审查阶段直接标记 done,确认继续', en: '' },
89
+ 'advance.okTmpl': { key: 'flow.advance.okTmpl', zh: '✓ 已推进: {stage} → {to}', en: '' },
90
+ 'advance.opLabelTmpl': { key: 'flow.advance.opLabelTmpl', zh: '操作: {op}', en: '' },
91
+ 'advance.autoRepaired': { key: 'flow.advance.autoRepaired', zh: '检测到阶段数据不一致,已自动修复', en: '' },
92
+ 'advance.saveError': { key: 'flow.advance.saveError', zh: 'flow.json 保存失败', en: '' },
93
+ 'advance.gitCommitOkTmpl': { key: 'flow.advance.gitCommitOkTmpl', zh: '✓ 阶段 {stage} 已自动 git commit 归档', en: '' },
94
+ 'advance.gitCommitSkipTmpl': { key: 'flow.advance.gitCommitSkipTmpl', zh: '(跳过自动 git commit:非 git 仓库或无变更){stage}', en: '' },
95
+ // flow attempt
96
+ 'attempt.errorInvalidResult': { key: 'flow.attempt.errorInvalidResult', zh: '错误:--result 必须为 pass 或 fail', en: '' },
97
+ 'attempt.passTmpl': { key: 'flow.attempt.passTmpl', zh: '✓ {op} 执行成功', en: '' },
98
+ 'attempt.failRetryTmpl': { key: 'flow.attempt.failRetryTmpl', zh: '⚠ {op} 执行失败,将重试(可重试)', en: '' },
99
+ 'attempt.failReplanTmpl': { key: 'flow.attempt.failReplanTmpl', zh: '✗ {op} 重试耗尽,需要重新规划', en: '' },
100
+ 'attempt.autoReplan': { key: 'flow.attempt.autoReplan', zh: '→ 已自动回退到 scheme_pending,请重新规划方案', en: '' },
101
+ // flow log
102
+ 'log.noInit': { key: 'flow.log.noInit', zh: '流水线未初始化,无日志', en: '' },
103
+ 'log.noLogs': { key: 'flow.log.noLogs', zh: '暂无操作日志', en: '' },
104
+ 'log.recentTitleTmpl': { key: 'flow.log.recentTitleTmpl', zh: '最近 {n} 条操作日志', en: '' },
105
+ 'log.detail': { key: 'flow.log.detail', zh: '详情', en: '' },
106
+ // flow checkpoint
107
+ 'checkpoint.listTitle': { key: 'flow.checkpoint.listTitle', zh: 'Checkpoint 快照', en: '' },
108
+ 'checkpoint.noSnapshots': { key: 'flow.checkpoint.noSnapshots', zh: '(暂无 Checkpoint 快照)', en: '' },
109
+ 'checkpoint.noSnapshotsStageTmpl': { key: 'flow.checkpoint.noSnapshotsStageTmpl', zh: '(阶段 {stage} 暂无 Checkpoint 快照)', en: '' },
110
+ 'checkpoint.listCountTmpl': { key: 'flow.checkpoint.listCountTmpl', zh: '共 {n} 个快照', en: '' },
111
+ 'checkpoint.restoreNeedForce': { key: 'flow.checkpoint.restoreNeedForce', zh: '错误:恢复操作将覆盖当前 flow.json,请使用 --force 确认', en: '' },
112
+ 'checkpoint.restoreOkTmpl': { key: 'flow.checkpoint.restoreOkTmpl', zh: '✓ 已从快照 {file} 恢复 flow.json(当前文件已备份为 flow.json.bak)', en: '' },
113
+ 'checkpoint.restoreFailTmpl': { key: 'flow.checkpoint.restoreFailTmpl', zh: '错误:无法从快照 {file} 恢复(文件不存在、名称非法或内容无效)', en: '' },
114
+ // flow review
115
+ 'review.errorStageNotFoundTmpl': { key: 'flow.review.errorStageNotFoundTmpl', zh: '错误:opId "{opId}" 中的阶段 "{stage}" 在 flow.json 中不存在', en: '' },
116
+ 'review.errorOpNotFoundTmpl': { key: 'flow.review.errorOpNotFoundTmpl', zh: '错误:opId "{opId}" 中的操作 "{op}" 在阶段 "{stage}" 中不存在', en: '' },
117
+ 'review.labelBlocking': { key: 'flow.review.labelBlocking', zh: '[阻塞]', en: '' },
118
+ 'review.labelNonBlocking': { key: 'flow.review.labelNonBlocking', zh: '[非阻塞]', en: '' },
119
+ 'review.addedAutoFixTmpl': { key: 'flow.review.addedAutoFixTmpl', zh: '✓ {label} [AUTO_FIX] 审查条目已添加并自动修复: {revId}', en: '' },
120
+ 'review.detail': { key: 'flow.review.detail', zh: '说明', en: '' },
121
+ 'review.autoFixPhase': { key: 'flow.review.autoFixPhase', zh: '流水线已跳过 review_failed,直接推进到 exec_running', en: '' },
122
+ 'review.addedTmpl': { key: 'flow.review.addedTmpl', zh: '✓ {label} 审查条目已添加: {revId} ({op})', en: '' },
123
+ 'review.resolvedTmpl': { key: 'flow.review.resolvedTmpl', zh: '✓ 审查条目已解决: {revId}', en: '' },
124
+ 'review.notFoundTmpl': { key: 'flow.review.notFoundTmpl', zh: '错误:未找到审查条目 {revId}', en: '' },
125
+ // flow retry
126
+ 'retry.errorNoData': { key: 'flow.retry.errorNoData', zh: '错误:无法读取流水线数据', en: '' },
127
+ 'retry.errorStageNotFoundTmpl': { key: 'flow.retry.errorStageNotFoundTmpl', zh: '错误:未找到阶段 {stage}', en: '' },
128
+ 'retry.errorOpNotFoundTmpl': { key: 'flow.retry.errorOpNotFoundTmpl', zh: '错误:未找到操作 {op}', en: '' },
129
+ 'retry.attemptCount': { key: 'flow.retry.attemptCount', zh: '当前尝试次数', en: '' },
130
+ 'retry.exhausted': { key: 'flow.retry.exhausted', zh: '⚠ 重试次数已用尽', en: '' },
131
+ // flow repair
132
+ 'repair.backupOk': { key: 'flow.repair.backupOk', zh: '已备份: flow.json.bak', en: '' },
133
+ 'repair.noBackup': { key: 'flow.repair.noBackup', zh: 'flow.json 不存在,无需备份', en: '' },
134
+ 'repair.dryRunTitle': { key: 'flow.repair.dryRunTitle', zh: '[DRY-RUN 模式] 以下问题将被修复:', en: '' },
135
+ 'repair.recovered': { key: 'flow.repair.recovered', zh: '♻ flow.json 从 .bak 恢复成功', en: '' },
136
+ 'repair.dryRunHint': { key: 'flow.repair.dryRunHint', zh: '检测到可修复的问题,使用不带 --dry-run 执行以应用修复。', en: '' },
137
+ 'repair.fixDone': { key: 'flow.repair.fixDone', zh: '✓ flow.json 修复完成', en: '' },
138
+ 'repair.noFix': { key: 'flow.repair.noFix', zh: '未检测到需要修复的问题', en: '' },
139
+ 'repair.fixFailed': { key: 'flow.repair.fixFailed', zh: '✗ 部分问题无法自动修复,请手动检查 flow.json', en: '' },
140
+ 'repair.migrationHint': { key: 'flow.repair.migrationHint', zh: '💡 检测到旧版 flow.json 格式(全局 phase),建议运行:', en: '' },
141
+ 'repair.migrationPreview': { key: 'flow.repair.migrationPreview', zh: '查看迁移预览: openfeel flow migrate --dry-run', en: '' },
142
+ // flow migrate
143
+ 'migrate.alreadyNew': { key: 'flow.migrate.alreadyNew', zh: '✓ 已是新版格式,无需迁移', en: '' },
144
+ 'migrate.dryRunTitle': { key: 'flow.migrate.dryRunTitle', zh: '[DRY-RUN 模式] 以下变更将被执行:', en: '' },
145
+ 'migrate.dryRunNote': { key: 'flow.migrate.dryRunNote', zh: '(未实际修改文件,使用不带 --dry-run 执行以应用迁移)', en: '' },
146
+ 'migrate.complete': { key: 'flow.migrate.complete', zh: '迁移完成', en: '' },
147
+ 'migrate.failed': { key: 'flow.migrate.failed', zh: '✗ 迁移失败', en: '' },
148
+ 'migrate.done': { key: 'flow.migrate.done', zh: '✓ flow.json 已迁移至新版格式', en: '' },
149
+ // flow health
150
+ 'health.title': { key: 'flow.health.title', zh: 'openfeel flow health', en: '' },
151
+ 'health.pass': { key: 'flow.health.pass', zh: '🎉 健康检查通过', en: '' },
152
+ 'health.hasFailures': { key: 'flow.health.hasFailures', zh: '⚠️ 存在不通过项,请检查上述错误', en: '' },
153
+ 'health.quickMode': { key: 'flow.health.quickMode', zh: '(快速模式:仅检查关键项)', en: '' },
154
+ // flow recover
155
+ 'recover.title': { key: 'flow.recover.title', zh: '═══ 跨会话上下文恢复 ═══', en: '' },
156
+ 'recover.globalStatus': { key: 'flow.recover.globalStatus', zh: '全局状态', en: '' },
157
+ 'recover.phase': { key: 'flow.recover.phase', zh: '流水线阶段', en: '' },
158
+ 'recover.currentOp': { key: 'flow.recover.currentOp', zh: '当前操作', en: '' },
159
+ 'recover.stageStatus': { key: 'flow.recover.stageStatus', zh: '阶段状态', en: '' },
160
+ 'recover.pendingTasksTmpl': { key: 'flow.recover.pendingTasksTmpl', zh: '待处理任务 ({n})', en: '' },
161
+ 'recover.noTasks': { key: 'flow.recover.noTasks', zh: '无待处理任务', en: '' },
162
+ 'recover.stageDuration': { key: 'flow.recover.stageDuration', zh: '阶段耗时', en: '' },
163
+ 'recover.statusUninitialized': { key: 'flow.recover.statusUninitialized', zh: '未初始化', en: '' },
164
+ 'recover.statusAutoExec': { key: 'flow.recover.statusAutoExec', zh: '自动执行', en: '' },
165
+ 'recover.statusManualExec': { key: 'flow.recover.statusManualExec', zh: '手动执行', en: '' },
166
+ 'recover.statusUnreadable': { key: 'flow.recover.statusUnreadable', zh: '无法读取 status.md', en: '' },
167
+ 'recover.statusFileMissing': { key: 'flow.recover.statusFileMissing', zh: 'status.md 不存在', en: '' },
168
+ 'recover.statusNoCurrentStage': { key: 'flow.recover.statusNoCurrentStage', zh: '无当前阶段', en: '' },
169
+ // flow wizard
170
+ 'wizard.done': { key: 'flow.wizard.done', zh: '🎉 流水线已完成!', en: '' },
171
+ 'wizard.noStages': { key: 'flow.wizard.noStages', zh: '无可用阶段。', en: '' },
172
+ 'wizard.selectStage': { key: 'flow.wizard.selectStage', zh: '选择要推进的阶段', en: '' },
173
+ 'wizard.currentLabel': { key: 'flow.wizard.currentLabel', zh: '(当前)', en: '' },
174
+ 'wizard.unavailable': { key: 'flow.wizard.unavailable', zh: '选择的阶段不可用。', en: '' },
175
+ 'wizard.statusHeader': { key: 'flow.wizard.statusHeader', zh: '═══ 流水线状态 ═══', en: '' },
176
+ 'wizard.stagePhase': { key: 'flow.wizard.stagePhase', zh: '阶段状态', en: '' },
177
+ 'wizard.retryCount': { key: 'flow.wizard.retryCount', zh: '重试次数', en: '' },
178
+ 'wizard.pendingReviews': { key: 'flow.wizard.pendingReviews', zh: '待处理审查', en: '' },
179
+ 'wizard.noNext': { key: 'flow.wizard.noNext', zh: '当前阶段无可达的下一步操作。', en: '' },
180
+ 'wizard.exitOption': { key: 'flow.wizard.exitOption', zh: '退出向导', en: '' },
181
+ 'wizard.selectAction': { key: 'flow.wizard.selectAction', zh: '选择下一步操作', en: '' },
182
+ 'wizard.exited': { key: 'flow.wizard.exited', zh: '已退出向导。', en: '' },
183
+ 'wizard.previewTmpl': { key: 'flow.wizard.previewTmpl', zh: '预览: 将阶段 {stage} 从 {from} ({fromLabel}) 推进到 {to} ({toLabel})', en: '' },
184
+ 'wizard.confirmTitle': { key: 'flow.wizard.confirmTitle', zh: '确认执行此操作?', en: '' },
185
+ 'wizard.confirm': { key: 'flow.wizard.confirm', zh: '确认推进', en: '' },
186
+ 'wizard.advancedTmpl': { key: 'flow.wizard.advancedTmpl', zh: '✓ 已推进: {stage}: {from} → {to}', en: '' },
187
+ };
188
+ /* ==================== init 域:初始化命令 ==================== */
189
+ export const init = {
190
+ 'errorPathNotExistTmpl': { key: 'init.errorPathNotExistTmpl', zh: '错误:路径不存在 — {path}', en: '' },
191
+ 'initializingTmpl': { key: 'init.initializingTmpl', zh: '正在初始化 OpenFeel 工作区: {path}', en: '' },
192
+ 'created': { key: 'init.created', zh: '已创建', en: '' },
193
+ 'updated': { key: 'init.updated', zh: '已更新', en: '' },
194
+ 'alreadyUpToDate': { key: 'init.alreadyUpToDate', zh: '工作区已是最新状态,无需变更。', en: '' },
195
+ 'complete': { key: 'init.complete', zh: '✓ OpenFeel 工作区初始化完成', en: '' },
196
+ 'demoCreating': { key: 'init.demoCreating', zh: '⚙ 创建示例项目骨架...', en: '' },
197
+ 'demoCreated': { key: 'init.demoCreated', zh: '已创建示例文件', en: '' },
198
+ 'demoSkipped': { key: 'init.demoSkipped', zh: '已跳过(文件已存在)', en: '' },
199
+ 'demoComplete': { key: 'init.demoComplete', zh: '✅ 示例项目已创建,运行 npm install && npm test 开始', en: '' },
200
+ // promptLanguage 函数内的字符串(用于 op-004/op-005)
201
+ 'prompt.nonInteractive': { key: 'init.prompt.nonInteractive', zh: '非交互环境,Agent 提示词语言默认设置为 zh-CN。使用 openfeel update --lang <zh-CN|en> 可修改。', en: '' },
202
+ 'prompt.bilingual': { key: 'init.prompt.bilingual', zh: 'Select Agent prompt language / 选择 Agent 提示词语言:', en: '' },
203
+ // init.ts 中 initProject 里额外的 console 字符串
204
+ 'agentLangTmpl': { key: 'init.agentLangTmpl', zh: 'Agent 提示词语言: {lang}', en: '' },
205
+ 'invalidLangWarnTmpl': { key: 'init.invalidLangWarnTmpl', zh: '无效的 --lang 值 "{lang}",回退到交互式选择', en: '' },
206
+ // ensureGlobalConfig 非交互环境消息(REV-006)
207
+ 'firstUse.nonInteractive': { key: 'init.firstUse.nonInteractive', zh: '首次使用 OpenFeel:检测到非交互环境,全局默认语言设置为 zh-CN。', en: 'First time using OpenFeel: Non-interactive environment detected, global default language set to zh-CN.' },
208
+ 'firstUse.changeHint': { key: 'init.firstUse.changeHint', zh: '使用 openfeel config set-lang <zh-CN|en> 可修改。', en: 'Use openfeel config set-lang <zh-CN|en> to change.' },
209
+ // ensureGlobalConfig 交互环境消息
210
+ 'firstUse.interactiveWelcome': { key: 'init.firstUse.interactiveWelcome', zh: '🌐 欢迎使用 OpenFeel!请选择全局默认语言', en: '🌐 Welcome to OpenFeel! Please select your global default language:' },
211
+ 'firstUse.interactiveOption': { key: 'init.firstUse.interactiveOption', zh: '请输入选项 (1/2) / Enter choice (1/2) [2]: ', en: '' },
212
+ 'firstUse.langSetEn': { key: 'init.firstUse.langSetEn', zh: '✓ 全局语言已设置为英文。后续可通过以下命令修改:openfeel config set-lang', en: '✓ Global language set to English. You can change it later with: openfeel config set-lang' },
213
+ 'firstUse.langSetZh': { key: 'init.firstUse.langSetZh', zh: '✓ 全局语言已设置为中文。后续可通过以下命令修改:openfeel config set-lang', en: '✓ Global language set to Chinese. You can change it later with: openfeel config set-lang' },
214
+ };
215
+ /* ==================== update 域:更新命令 ==================== */
216
+ export const update = {
217
+ 'errorPathNotExistTmpl': { key: 'update.errorPathNotExistTmpl', zh: '错误:路径不存在 — {path}', en: '' },
218
+ 'errorUnsupportedLangTmpl': { key: 'update.errorUnsupportedLangTmpl', zh: '错误:不支持的语言 "{lang}"。支持的值:zh-CN, en', en: '' },
219
+ 'autoInitTmpl': { key: 'update.autoInitTmpl', zh: '检测到项目尚未初始化,正在自动执行 openfeel init...', en: '' },
220
+ 'autoInitCreated': { key: 'update.autoInitCreated', zh: '已自动创建', en: '' },
221
+ 'cancelled': { key: 'update.cancelled', zh: '未选择任何工具,已取消。', en: '' },
222
+ 'deployingTmpl': { key: 'update.deployingTmpl', zh: '正在部署适配文件到: {path}', en: '' },
223
+ 'selectedToolsTmpl': { key: 'update.selectedToolsTmpl', zh: '选定工具: {tools}', en: '' },
224
+ 'created': { key: 'update.created', zh: '已创建', en: '' },
225
+ 'updated': { key: 'update.updated', zh: '已更新', en: '' },
226
+ 'skipped': { key: 'update.skipped', zh: '已跳过(内容一致)', en: '' },
227
+ 'alreadyUpToDate': { key: 'update.alreadyUpToDate', zh: '所有适配文件已是最新状态,无需变更。', en: '' },
228
+ 'complete': { key: 'update.complete', zh: '✓ 适配文件部署完成', en: '' },
229
+ 'errorDeployFailedTmpl': { key: 'update.errorDeployFailedTmpl', zh: '错误:部署失败 — {message}', en: '' },
230
+ 'langConflict': { key: 'update.langConflict', zh: '⚠️ AGENTS.md 语言差异:当前项目为 {projectLang},请求部署为 {requestedLang}。使用 --force 覆盖或手动调整。', en: '' },
231
+ };
232
+ /* ==================== project 域:项目概览命令 ==================== */
233
+ export const project = {
234
+ 'overview.title': { key: 'project.overview.title', zh: 'OpenFeel 项目结构化概览', en: '' },
235
+ 'overview.basicInfo': { key: 'project.overview.basicInfo', zh: '📋 基本信息', en: '' },
236
+ 'overview.projectName': { key: 'project.overview.projectName', zh: '项目名', en: '' },
237
+ 'overview.description': { key: 'project.overview.description', zh: '定位', en: '' },
238
+ 'overview.language': { key: 'project.overview.language', zh: '语言', en: '' },
239
+ 'overview.dirStructure': { key: 'project.overview.dirStructure', zh: '📁 目录结构', en: '' },
240
+ 'overview.dirNotExist': { key: 'project.overview.dirNotExist', zh: '(目录不存在)', en: '' },
241
+ 'overview.stats': { key: 'project.overview.stats', zh: '📊 统计信息', en: '' },
242
+ 'overview.entryPath': { key: 'project.overview.entryPath', zh: '🚪 入口路径', en: '' },
243
+ 'overview.noSrc': { key: 'project.overview.noSrc', zh: '(未检测到项目结构——缺少 src/ 目录)', en: '' },
244
+ 'overview.techStack': { key: 'project.overview.techStack', zh: '🔧 技术栈', en: '' },
245
+ // 目录结构 — 描述模板(带 {n} 变量插值)
246
+ 'dir.cliTmpl': { key: 'project.dir.cliTmpl', zh: '— CLI 入口程序({n} 个文件)', en: '' },
247
+ 'dir.commandsTmpl': { key: 'project.dir.commandsTmpl', zh: '— CLI 命令模块({n} 个)', en: '' },
248
+ 'dir.coreTmpl': { key: 'project.dir.coreTmpl', zh: '— 核心逻辑({n} 个文件)', en: '' },
249
+ 'dir.utilsTmpl': { key: 'project.dir.utilsTmpl', zh: '— 工具函数({n} 个文件)', en: '' },
250
+ 'dir.agentsTmpl': { key: 'project.dir.agentsTmpl', zh: '— Agent 定义({n} 个)', en: '' },
251
+ 'dir.skillsTmpl': { key: 'project.dir.skillsTmpl', zh: '— 技能定义({n} 个)', en: '' },
252
+ 'dir.kbTmpl': { key: 'project.dir.kbTmpl', zh: '— 项目知识库({n} 个文件)', en: '' },
253
+ 'dir.planTmpl': { key: 'project.dir.planTmpl', zh: '— 工作计划({n} 个版本)', en: '' },
254
+ 'dir.codeReviewTmpl': { key: 'project.dir.codeReviewTmpl', zh: '— 代码审查记录({n} 个文件)', en: '' },
255
+ 'dir.bugs': { key: 'project.dir.bugs', zh: '— Bug 追踪', en: '' },
256
+ 'dir.bugsNotInit': { key: 'project.dir.bugsNotInit', zh: '(未初始化)', en: '' },
257
+ // 统计信息标签
258
+ 'stats.tsSource': { key: 'project.stats.tsSource', zh: 'TS 源文件', en: '' },
259
+ 'stats.agentDefs': { key: 'project.stats.agentDefs', zh: 'Agent 定义', en: '' },
260
+ 'stats.cliModules': { key: 'project.stats.cliModules', zh: 'CLI 命令模块', en: '' },
261
+ 'stats.kbEntries': { key: 'project.stats.kbEntries', zh: 'KB 条目', en: '' },
262
+ 'stats.planVersions': { key: 'project.stats.planVersions', zh: '计划版本', en: '' },
263
+ // 入口路径标签
264
+ 'entry.cli': { key: 'project.entry.cli', zh: 'CLI 入口', en: '' },
265
+ 'entry.pkg': { key: 'project.entry.pkg', zh: '包入口', en: '' },
266
+ 'entry.build': { key: 'project.entry.build', zh: '构建产物', en: '' },
267
+ // 技术栈标签
268
+ 'tech.runtime': { key: 'project.tech.runtime', zh: '运行时', en: '' },
269
+ 'tech.language': { key: 'project.tech.language', zh: '语言', en: '' },
270
+ 'tech.cliFramework': { key: 'project.tech.cliFramework', zh: 'CLI 框架', en: '' },
271
+ 'tech.validation': { key: 'project.tech.validation', zh: '校验', en: '' },
272
+ 'tech.config': { key: 'project.tech.config', zh: '配置', en: '' },
273
+ 'tech.fileMatch': { key: 'project.tech.fileMatch', zh: '文件匹配', en: '' },
274
+ 'tech.test': { key: 'project.tech.test', zh: '测试', en: '' },
275
+ };
276
+ /* ==================== stage 域:阶段管理命令 ==================== */
277
+ export const stage = {
278
+ 'status.noStages': { key: 'stage.status.noStages', zh: '未发现任何阶段(.openfeel/plan/ 中无 status.md 文件)', en: '' },
279
+ 'status.foundTmpl': { key: 'stage.status.foundTmpl', zh: '发现 {n} 个阶段', en: '' },
280
+ 'status.hint': { key: 'stage.status.hint', zh: '使用 openfeel stage status <stageId> 查看详细状态', en: '' },
281
+ 'errorStageNotFoundTmpl': { key: 'stage.errorStageNotFoundTmpl', zh: '错误:未找到阶段 "{stageId}" 的 status.md 文件', en: '' },
282
+ 'errorCheckStageId': { key: 'stage.errorCheckStageId', zh: '请确认阶段 ID 是否正确(如 v4-stage-04)', en: '' },
283
+ 'set.errorFieldNotFoundTmpl': { key: 'stage.set.errorFieldNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「状态」字段', en: '' },
284
+ 'set.updatedTmpl': { key: 'stage.set.updatedTmpl', zh: '✓ 已更新 {stageId} 状态: → {status}', en: '' },
285
+ 'task.errorMutualExclusive': { key: 'stage.task.errorMutualExclusive', zh: '错误:必须指定 --done 或 --undone(二者互斥)', en: '' },
286
+ 'task.errorInvalidTaskNo': { key: 'stage.task.errorInvalidTaskNo', zh: '错误:任务编号必须为正整数', en: '' },
287
+ 'task.errorTaskNotFoundTmpl': { key: 'stage.task.errorTaskNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「任务{taskNo}」', en: '' },
288
+ 'task.done': { key: 'stage.task.done', zh: '✓ 已勾选', en: '' },
289
+ 'task.undone': { key: 'stage.task.undone', zh: '○ 已取消勾选', en: '' },
290
+ 'task.taskListTmpl': { key: 'stage.task.taskListTmpl', zh: '任务列表 ({done}/{total} 完成)', en: '' },
291
+ 'task.taskItemTmpl': { key: 'stage.task.taskItemTmpl', zh: '任务{number}: {desc}', en: '' },
292
+ 'task.blockedByTmpl': { key: 'stage.task.blockedByTmpl', zh: '阻塞原因: {reason}', en: '' },
293
+ 'task.actionLabelTmpl': { key: 'stage.task.actionLabelTmpl', zh: '{label} {stageId} 任务{taskNo}', en: '' },
294
+ };
295
+ /* ==================== plan 域:计划命令 ==================== */
296
+ export const plan = {
297
+ 'stage.createdTmpl': { key: 'plan.stage.createdTmpl', zh: '已创建阶段: {name}', en: '' },
298
+ 'stage.empty': { key: 'plan.stage.empty', zh: '暂无工作阶段', en: '' },
299
+ 'scheme.createdTmpl': { key: 'plan.scheme.createdTmpl', zh: '已创建操作方案: {opId}({stage})', en: '' },
300
+ 'scheme.empty': { key: 'plan.scheme.empty', zh: '暂无操作方案', en: '' },
301
+ };
302
+ /* ==================== knowledge 域:知识库命令 ==================== */
303
+ export const knowledge = {
304
+ 'list.empty': { key: 'knowledge.list.empty', zh: '暂无知识条目', en: '' },
305
+ 'list.enabled': { key: 'knowledge.list.enabled', zh: '启用', en: '' },
306
+ 'list.disabled': { key: 'knowledge.list.disabled', zh: '禁用', en: '' },
307
+ 'add.errorInvalidCategoryTmpl': { key: 'knowledge.add.errorInvalidCategoryTmpl', zh: '错误:无效分类 "{category}",有效值:{valid}', en: '' },
308
+ 'add.errorNoContent': { key: 'knowledge.add.errorNoContent', zh: '错误:请使用 --content 提供内容,或通过管道提供内容。', en: '' },
309
+ 'add.errorEmptyContent': { key: 'knowledge.add.errorEmptyContent', zh: '错误:内容不能为空。', en: '' },
310
+ 'add.okTmpl': { key: 'knowledge.add.okTmpl', zh: '✓ 已添加知识条目: [{category}] {title}', en: '' },
311
+ 'search.noResultsTmpl': { key: 'knowledge.search.noResultsTmpl', zh: '未找到与 "{query}" 相关的知识条目。', en: '' },
312
+ 'search.offsetOutOfBoundsTmpl': { key: 'knowledge.search.offsetOutOfBoundsTmpl', zh: '(偏移量 {offset},已越界)', en: '' },
313
+ 'search.foundTmpl': { key: 'knowledge.search.foundTmpl', zh: '找到 {n} 条匹配', en: '' },
314
+ 'index.categoryOverview': { key: 'knowledge.index.categoryOverview', zh: '=== 分类概览 ===', en: '' },
315
+ 'index.noCategories': { key: 'knowledge.index.noCategories', zh: '(无分类)', en: '' },
316
+ 'index.recentUpdates': { key: 'knowledge.index.recentUpdates', zh: '=== 最近更新 ===', en: '' },
317
+ 'index.noUpdates': { key: 'knowledge.index.noUpdates', zh: '暂无更新记录。', en: '' },
318
+ // knowledge list 表头列名
319
+ 'list.colCategory': { key: 'knowledge.list.colCategory', zh: '分类', en: '' },
320
+ 'list.colTitle': { key: 'knowledge.list.colTitle', zh: '标题', en: '' },
321
+ 'list.colDate': { key: 'knowledge.list.colDate', zh: '日期', en: '' },
322
+ // knowledge index 表头列名
323
+ 'index.colDate': { key: 'knowledge.index.colDate', zh: '日期', en: '' },
324
+ 'index.colCategory': { key: 'knowledge.index.colCategory', zh: '分类', en: '' },
325
+ 'index.colTitle': { key: 'knowledge.index.colTitle', zh: '标题', en: '' },
326
+ };
327
+ /* ==================== archive 域:归档命令 ==================== */
328
+ export const archive = {
329
+ 'errorArchiveFailedTmpl': { key: 'archive.errorArchiveFailedTmpl', zh: '错误:归档失败,请确认阶段 "{stage}" 存在且 flow.json 已初始化。', en: '' },
330
+ 'okTmpl': { key: 'archive.okTmpl', zh: '✓ 阶段已归档: {stage}', en: '' },
331
+ 'opsCount': { key: 'archive.opsCount', zh: '操作数', en: '' },
332
+ 'reviewsCount': { key: 'archive.reviewsCount', zh: '审查条目数', en: '' },
333
+ 'knowledgeExtracts': { key: 'archive.knowledgeExtracts', zh: '知识提取', en: '' },
334
+ 'archivePath': { key: 'archive.archivePath', zh: '归档文件', en: '' },
335
+ };
336
+ /* ==================== roadmap 域:路线图命令 ==================== */
337
+ export const roadmap = {};
338
+ /* ==================== view 域:审查视图命令 ==================== */
339
+ export const view = {
340
+ 'list.empty': { key: 'view.list.empty', zh: '暂无审查条目', en: '' },
341
+ 'list.filedBy': { key: 'view.list.filedBy', zh: '提交人', en: '' },
342
+ 'list.filedAt': { key: 'view.list.filedAt', zh: '时间', en: '' },
343
+ 'add.errorInvalidPriorityTmpl': { key: 'view.add.errorInvalidPriorityTmpl', zh: '错误:无效的优先级 "{priority}",可选值:high / medium / low', en: '' },
344
+ 'add.okTmpl': { key: 'view.add.okTmpl', zh: '✓ 审查条目已添加: {id} ({op}) — {title}', en: '' },
345
+ 'accept.okTmpl': { key: 'view.accept.okTmpl', zh: '✓ 审查条目已验收: {id} → closed', en: '' },
346
+ 'accept.errorNotFoundTmpl': { key: 'view.accept.errorNotFoundTmpl', zh: '错误:未找到审查条目 {id}', en: '' },
347
+ };
348
+ /* ==================== instructions 域:说明命令 ==================== */
349
+ export const instructions = {};
350
+ /* ==================== lint 域:健康检查命令 ==================== */
351
+ export const lint = {
352
+ 'i18n.okTmpl': { key: 'lint.i18n.okTmpl', zh: '✅ {n} 键一致', en: '' },
353
+ 'i18n.failTitleTmpl': { key: 'lint.i18n.failTitleTmpl', zh: '❌ {m} 个问题', en: '' },
354
+ 'i18n.consistentTmpl': { key: 'lint.i18n.consistentTmpl', zh: '({n} 键一致 / 共 {total} 键)', en: '' },
355
+ 'i18n.emptyZhTmpl': { key: 'lint.i18n.emptyZhTmpl', zh: '[空值 zh-CN] {key}', en: '' },
356
+ 'i18n.emptyEnTmpl': { key: 'lint.i18n.emptyEnTmpl', zh: '[空值 en] {key}', en: '' },
357
+ 'i18n.zhOnlyTmpl': { key: 'lint.i18n.zhOnlyTmpl', zh: '[中文独有] {key}', en: '' },
358
+ 'i18n.enOnlyTmpl': { key: 'lint.i18n.enOnlyTmpl', zh: '[英文独有] {key}', en: '' },
359
+ 'kb.noDir': { key: 'lint.kb.noDir', zh: '(.openfeel/kb/ 目录不存在)', en: '' },
360
+ 'kb.scanTmpl': { key: 'lint.kb.scanTmpl', zh: '扫描 {n} 个 kb 文件中的文件引用...', en: '' },
361
+ 'kb.okTmpl': { key: 'lint.kb.okTmpl', zh: '✅ 未发现过期引用(共检查 {n} 个引用)', en: '' },
362
+ 'kb.staleTmpl': { key: 'lint.kb.staleTmpl', zh: '❌ 发现 {n} 个过期引用', en: '' },
363
+ 'kb.staleItemTmpl': { key: 'lint.kb.staleItemTmpl', zh: ' {file} L{line}: "{ref}" → 文件不存在', en: '' },
364
+ };
365
+ /* ==================== help 域:命令帮助文本(--help 输出用语) ==================== */
366
+ export const help = {
367
+ // openfeel 顶层
368
+ 'openfeel': { key: 'help.openfeel', zh: 'AI Agent 开发流程治理 CLI 工具', en: '' },
369
+ 'openfeel.version': { key: 'help.openfeel.version', zh: '输出版本号', en: '' },
370
+ // init
371
+ 'init': { key: 'help.init', zh: '初始化项目工作区,创建 .openfeel/ 目录结构和配置文件', en: '' },
372
+ 'init.demo': { key: 'help.init.demo', zh: '创建带示例骨架的项目(NumKit 风格)', en: '' },
373
+ 'init.lang': { key: 'help.init.lang', zh: 'Agent 提示词语言(zh-CN 或 en),非交互环境默认 zh-CN', en: '' },
374
+ // update
375
+ 'update': { key: 'help.update', zh: '部署 OpenFeel 适配文件到目标项目(无参数时交互式选择工具)', en: '' },
376
+ 'update.lang': { key: 'help.update.lang', zh: 'Agent prompt language (zh-CN or en)', en: '' },
377
+ 'update.force': { key: 'help.update.force', zh: '跳过 AGENTS.md 覆盖确认,直接覆盖', en: '' },
378
+ // flow
379
+ 'flow': { key: 'help.flow', zh: '流水线状态管理', en: '' },
380
+ 'flow.status': { key: 'help.flow.status', zh: '显示流水线状态摘要', en: '' },
381
+ 'flow.status.verbose': { key: 'help.flow.status.verbose', zh: '增强输出:配置级联、最近状态变更、下游 Agent 就绪状态', en: '' },
382
+ 'flow.status.lines': { key: 'help.flow.status.lines', zh: '最近状态变更条数(默认 5)', en: '' },
383
+ 'flow.overview': { key: 'help.flow.overview', zh: '全状态可视化视图(/opfx:status 的后端实现)', en: '' },
384
+ 'flow.current': { key: 'help.flow.current', zh: '显示当前阶段和操作', en: '' },
385
+ 'flow.metrics': { key: 'help.flow.metrics', zh: '展示 Agent 性能指标', en: '' },
386
+ 'flow.stage': { key: 'help.flow.stage', zh: '阶段管理', en: '' },
387
+ 'flow.stage.add': { key: 'help.flow.stage.add', zh: '新增流水线阶段', en: '' },
388
+ 'flow.advance': { key: 'help.flow.advance', zh: '推进流水线阶段', en: '' },
389
+ 'flow.advance.op': { key: 'help.flow.advance.op', zh: '操作 ID(如 stage-01.op-001),仅用于日志/展示', en: '' },
390
+ 'flow.advance.to': { key: 'help.flow.advance.to', zh: '目标阶段(如 exec_running)', en: '' },
391
+ 'flow.advance.stage': { key: 'help.flow.advance.stage', zh: '阶段 ID(如 stage-03),必须指定', en: '' },
392
+ 'flow.advance.force': { key: 'help.flow.advance.force', zh: '强制执行(跳过非法 phase 校验和阶段跳跃检查,但不可绕过 REV 阻塞检查)', en: '' },
393
+ 'flow.attempt': { key: 'help.flow.attempt', zh: '记录操作执行结果', en: '' },
394
+ 'flow.attempt.op': { key: 'help.flow.attempt.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
395
+ 'flow.attempt.result': { key: 'help.flow.attempt.result', zh: '执行结果(pass 或 fail)', en: '' },
396
+ 'flow.log': { key: 'help.flow.log', zh: '显示最近操作日志', en: '' },
397
+ 'flow.log.last': { key: 'help.flow.log.last', zh: '显示最近 n 条(默认 10)', en: '' },
398
+ 'flow.review': { key: 'help.flow.review', zh: '管理审查条目', en: '' },
399
+ 'flow.review.add': { key: 'help.flow.review.add', zh: '添加审查条目', en: '' },
400
+ 'flow.review.add.op': { key: 'help.flow.review.add.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
401
+ 'flow.review.add.title': { key: 'help.flow.review.add.title', zh: '审查标题', en: '' },
402
+ 'flow.review.add.autoFix': { key: 'help.flow.review.add.autoFix', zh: '自动修复说明,设置后跳过 scheme_pending 直接推进到 exec_running', en: '' },
403
+ 'flow.review.add.blocking': { key: 'help.flow.review.add.blocking', zh: '是否阻塞流水线(默认 true)', en: '' },
404
+ 'flow.review.resolve': { key: 'help.flow.review.resolve', zh: '解决审查条目', en: '' },
405
+ 'flow.retry': { key: 'help.flow.retry', zh: '查询操作的重试状态', en: '' },
406
+ 'flow.retry.op': { key: 'help.flow.retry.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
407
+ 'flow.repair': { key: 'help.flow.repair', zh: '自动检测并修复 flow.json 中的常见问题', en: '' },
408
+ 'flow.repair.dryRun': { key: 'help.flow.repair.dryRun', zh: '仅检测不修复', en: '' },
409
+ 'flow.repair.backup': { key: 'help.flow.repair.backup', zh: '修复前备份为 .bak', en: '' },
410
+ 'flow.migrate': { key: 'help.flow.migrate', zh: '将旧版 flow.json(v4.0 全局 phase)迁移到新版格式(v4.1 阶段级 phase)', en: '' },
411
+ 'flow.migrate.dryRun': { key: 'help.flow.migrate.dryRun', zh: '仅检测预览,不实际写入文件', en: '' },
412
+ 'flow.migrate.noBackup': { key: 'help.flow.migrate.noBackup', zh: '跳过 .bak 文件生成(默认生成 flow.json.v4.0.bak)', en: '' },
413
+ 'flow.health': { key: 'help.flow.health', zh: '全面健康检查 flow.json / 跨文件一致性 / 僵尸状态 / config.yaml 等', en: '' },
414
+ 'flow.health.quick': { key: 'help.flow.health.quick', zh: '仅检查关键项(phase/current 合法性,跳过其他检查)', en: '' },
415
+ 'flow.checkpoint': { key: 'help.flow.checkpoint', zh: 'Checkpoint 快照管理(phase 推进时自动保存 flow.json 快照)', en: '' },
416
+ 'flow.checkpoint.list': { key: 'help.flow.checkpoint.list', zh: '列出所有(或指定阶段的)Checkpoint 快照', en: '' },
417
+ 'flow.checkpoint.restore': { key: 'help.flow.checkpoint.restore', zh: '从 Checkpoint 快照恢复 flow.json(覆盖当前文件,需 --force 确认)', en: '' },
418
+ 'flow.checkpoint.restore.force': { key: 'help.flow.checkpoint.restore.force', zh: '确认恢复操作(覆盖当前 flow.json)', en: '' },
419
+ 'flow.recover': { key: 'help.flow.recover', zh: '跨会话上下文恢复:输出流水线状态、阻塞原因和待处理任务', en: '' },
420
+ 'flow.wizard': { key: 'help.flow.wizard', zh: '交互式流水线向导,逐步推进阶段', en: '' },
421
+ // config
422
+ 'config.get-lang': { key: 'help.config.get-lang', zh: '显示全局默认语言', en: '' },
423
+ 'config.set-lang': { key: 'help.config.set-lang', zh: '修改全局默认语言(zh-CN 或 en)', en: '' },
424
+ 'config.list-projects': { key: 'help.config.list-projects', zh: '列出所有已记录的项目路径→语言映射', en: '' },
425
+ 'config.get': { key: 'help.config.get', zh: '读取配置项的值(项目配置;--global 时读取全局 profile)', en: '' },
426
+ 'config.get.global': { key: 'help.config.get.global', zh: '操作全局 profile(~/.config/openfeel/profile.yaml)', en: '' },
427
+ 'config.set': { key: 'help.config.set', zh: '设置配置项的值(项目配置;--global 时写入全局 profile)', en: '' },
428
+ 'config.set.global': { key: 'help.config.set.global', zh: '操作全局 profile(~/.config/openfeel/profile.yaml)', en: '' },
429
+ // project
430
+ 'project': { key: 'help.project', zh: '项目管理与概览', en: '' },
431
+ 'project.overview': { key: 'help.project.overview', zh: '实时扫描项目结构,输出结构化概览', en: '' },
432
+ // plan
433
+ 'plan': { key: 'help.plan', zh: '计划管理', en: '' },
434
+ 'plan.stage': { key: 'help.plan.stage', zh: '工作阶段管理', en: '' },
435
+ 'plan.stage.add': { key: 'help.plan.stage.add', zh: '添加工作阶段', en: '' },
436
+ 'plan.stage.list': { key: 'help.plan.stage.list', zh: '列出所有工作阶段', en: '' },
437
+ 'plan.scheme': { key: 'help.plan.scheme', zh: '操作方案管理', en: '' },
438
+ 'plan.scheme.create': { key: 'help.plan.scheme.create', zh: '创建操作方案', en: '' },
439
+ 'plan.scheme.list': { key: 'help.plan.scheme.list', zh: '列出操作方案(可选按阶段过滤)', en: '' },
440
+ // stage
441
+ 'stage': { key: 'help.stage', zh: '工作阶段状态管理(status.md 原子操作)', en: '' },
442
+ 'stage.status': { key: 'help.stage.status', zh: '查看阶段状态(无参数时列出所有阶段)', en: '' },
443
+ 'stage.set': { key: 'help.stage.set', zh: '设置阶段状态字段(原子更新,保留其余内容不变)', en: '' },
444
+ 'stage.set.status': { key: 'help.stage.set.status', zh: '状态值(如 exec_running)', en: '' },
445
+ 'stage.task': { key: 'help.stage.task', zh: '勾选或取消任务 checkbox', en: '' },
446
+ 'stage.task.done': { key: 'help.stage.task.done', zh: '标记任务为已完成', en: '' },
447
+ 'stage.task.undone': { key: 'help.stage.task.undone', zh: '标记任务为未完成', en: '' },
448
+ // view
449
+ 'view': { key: 'help.view', zh: '审查条目管理', en: '' },
450
+ 'view.list': { key: 'help.view.list', zh: '列出审查条目', en: '' },
451
+ 'view.list.op': { key: 'help.view.list.op', zh: '按操作 ID 过滤', en: '' },
452
+ 'view.add': { key: 'help.view.add', zh: '添加审查条目', en: '' },
453
+ 'view.add.op': { key: 'help.view.add.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
454
+ 'view.add.title': { key: 'help.view.add.title', zh: '审查标题', en: '' },
455
+ 'view.add.priority': { key: 'help.view.add.priority', zh: '优先级(high/medium/low,默认 medium)', en: '' },
456
+ 'view.accept': { key: 'help.view.accept', zh: '验收审查条目(标记为 closed)', en: '' },
457
+ // knowledge
458
+ 'knowledge': { key: 'help.knowledge', zh: '知识库管理', en: '' },
459
+ 'knowledge.list': { key: 'help.knowledge.list', zh: '列出知识条目', en: '' },
460
+ 'knowledge.list.type': { key: 'help.knowledge.list.type', zh: '按分类过滤', en: '' },
461
+ 'knowledge.add': { key: 'help.knowledge.add', zh: '添加知识条目', en: '' },
462
+ 'knowledge.add.content': { key: 'help.knowledge.add.content', zh: '条目内容(也可通过管道 stdin 传入)', en: '' },
463
+ 'knowledge.search': { key: 'help.knowledge.search', zh: '搜索知识库', en: '' },
464
+ 'knowledge.search.limit': { key: 'help.knowledge.search.limit', zh: '返回结果数量上限(默认 10)', en: '' },
465
+ 'knowledge.search.offset': { key: 'help.knowledge.search.offset', zh: '结果偏移量(默认 0)', en: '' },
466
+ 'knowledge.index': { key: 'help.knowledge.index', zh: '显示知识库索引概览', en: '' },
467
+ // archive
468
+ 'archive': { key: 'help.archive', zh: '归档指定阶段(汇总产出、生成摘要、提取知识)', en: '' },
469
+ // roadmap
470
+ 'roadmap': { key: 'help.roadmap', zh: '分期大纲管理', en: '' },
471
+ 'roadmap.create': { key: 'help.roadmap.create', zh: '创建分期大纲(版本号如 1.0、2.0)', en: '' },
472
+ 'roadmap.show': { key: 'help.roadmap.show', zh: '显示分期大纲内容(不传版本则列出所有)', en: '' },
473
+ // instructions
474
+ 'instructions': { key: 'help.instructions', zh: '为指定 artifact 生成结构化指令(XML 或 JSON)', en: '' },
475
+ 'instructions.change': { key: 'help.instructions.change', zh: '变更名称(如 feat-login)', en: '' },
476
+ 'instructions.json': { key: 'help.instructions.json', zh: '输出 JSON 格式而非 XML', en: '' },
477
+ 'instructions.schema': { key: 'help.instructions.schema', zh: 'Schema 名称(默认 spec-driven)', en: '' },
478
+ // lint
479
+ 'lint': { key: 'help.lint', zh: '项目健康检查(i18n 键一致性、kb 引用有效性)', en: '' },
480
+ 'lint.i18n': { key: 'help.lint.i18n', zh: '校验 i18n 键一致性(空值/中英独有键)', en: '' },
481
+ 'lint.kb': { key: 'help.lint.kb', zh: '检测 .openfeel/kb/ 中的过期文件引用', en: '' },
482
+ };
483
+ /* ==================== config 域:配置管理命令 ==================== */
484
+ export const config = {
485
+ 'get.lang': { key: 'config.get.lang', zh: '全局语言:{lang}', en: '' },
486
+ 'set.ok': { key: 'config.set.ok', zh: '全局语言已设置为:{lang}', en: '' },
487
+ 'set.invalidLang': { key: 'config.set.invalidLang', zh: '无效的语言值 "{val}",仅支持 zh-CN 和 en', en: '' },
488
+ 'list.title': { key: 'config.list.title', zh: '已记录的项目语言映射:', en: '' },
489
+ 'list.empty': { key: 'config.list.empty', zh: '(暂无记录的项目)', en: '' },
490
+ 'list.item': { key: 'config.list.item', zh: ' {path} → {lang}', en: '' },
491
+ 'get.result': { key: 'config.get.result', zh: '{key}:{value}', en: '' },
492
+ 'get.noProject': { key: 'config.get.noProject', zh: '项目配置读取失败:{err}', en: '' },
493
+ 'get.globalProfileNotFound': { key: 'config.get.globalProfileNotFound', zh: '全局 profile 未设置(使用默认值)', en: '' },
494
+ 'get.globalKeyNotFound': { key: 'config.get.globalKeyNotFound', zh: '{key}:未设置', en: '' },
495
+ 'get.globalResult': { key: 'config.get.globalResult', zh: '{key}: {value}', en: '' },
496
+ 'set.valueOk': { key: 'config.set.valueOk', zh: '{key} 已设置为:{value}', en: '' },
497
+ 'set.invalidKey': { key: 'config.set.invalidKey', zh: '无效的配置键 "{val}",当前仅支持:{keys}', en: '' },
498
+ 'set.invalidValue': { key: 'config.set.invalidValue', zh: '无效的值 "{val}"。{key} 仅支持:{values}', en: '' },
499
+ 'set.error': { key: 'config.set.error', zh: '项目配置写入失败:{err}', en: '' },
500
+ 'set.globalInvalidKey': { key: 'config.set.globalInvalidKey', zh: '无效的全局配置键 "{val}"', en: '' },
501
+ 'set.globalInvalidValue': { key: 'config.set.globalInvalidValue', zh: '无效的值 "{val}"。{key} 仅支持:{values}', en: '' },
502
+ 'set.globalValueOk': { key: 'config.set.globalValueOk', zh: '✓ 全局配置已设置:{key} = {value}', en: '' },
503
+ 'set.globalAllowedKeys': { key: 'config.set.globalAllowedKeys', zh: '支持的全局配置键:{keys}', en: '' },
504
+ };
505
+ /* ==================== 聚合导出 ==================== */
506
+ /** 所有功能域的聚合数组(供 i18n.ts 构建 Map 使用) */
507
+ export const allDomains = [
508
+ { name: 'common', domain: common },
509
+ { name: 'help', domain: help },
510
+ { name: 'flow', domain: flow },
511
+ { name: 'init', domain: init },
512
+ { name: 'update', domain: update },
513
+ { name: 'project', domain: project },
514
+ { name: 'stage', domain: stage },
515
+ { name: 'plan', domain: plan },
516
+ { name: 'knowledge', domain: knowledge },
517
+ { name: 'archive', domain: archive },
518
+ { name: 'roadmap', domain: roadmap },
519
+ { name: 'view', domain: view },
520
+ { name: 'instructions', domain: instructions },
521
+ { name: 'lint', domain: lint },
522
+ { name: 'config', domain: config },
523
+ ];
524
+ //# sourceMappingURL=zh-CN.js.map