openfeel 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +41 -11
- package/README.md +8 -3
- package/README.zh-CN.md +42 -12
- package/bin/openfeel.js +5 -0
- package/dist/cli/index.d.ts +15 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +59 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output-encoding.d.ts +32 -0
- package/dist/cli/output-encoding.d.ts.map +1 -0
- package/dist/cli/output-encoding.js +120 -0
- package/dist/cli/output-encoding.js.map +1 -0
- package/dist/cli/repl.d.ts +2 -2
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +46 -25
- package/dist/cli/repl.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +56 -9
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/flow.d.ts.map +1 -1
- package/dist/commands/flow.js +827 -138
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +56 -42
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +69 -0
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +17 -5
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +6 -1
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +18 -1
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +185 -7
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/project.js +2 -2
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/roadmap.d.ts.map +1 -1
- package/dist/commands/roadmap.js +20 -5
- package/dist/commands/roadmap.js.map +1 -1
- package/dist/commands/setup.d.ts +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +8 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/shared/errors.d.ts +22 -0
- package/dist/commands/shared/errors.d.ts.map +1 -0
- package/dist/commands/shared/errors.js +45 -0
- package/dist/commands/shared/errors.js.map +1 -0
- package/dist/commands/stage.d.ts.map +1 -1
- package/dist/commands/stage.js +133 -23
- package/dist/commands/stage.js.map +1 -1
- package/dist/commands/view.d.ts +1 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +4 -26
- package/dist/commands/view.js.map +1 -1
- package/dist/core/archive/merge.d.ts.map +1 -1
- package/dist/core/archive/merge.js +9 -5
- package/dist/core/archive/merge.js.map +1 -1
- package/dist/core/artifact-graph/graph.d.ts +7 -2
- package/dist/core/artifact-graph/graph.d.ts.map +1 -1
- package/dist/core/artifact-graph/graph.js +25 -18
- package/dist/core/artifact-graph/graph.js.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +4 -33
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
- package/dist/core/backup.d.ts +28 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +118 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/config.d.ts +30 -19
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +86 -26
- package/dist/core/config.js.map +1 -1
- package/dist/core/flow-manager.d.ts +256 -5
- package/dist/core/flow-manager.d.ts.map +1 -1
- package/dist/core/flow-manager.js +908 -68
- package/dist/core/flow-manager.js.map +1 -1
- package/dist/core/fs/atomic-write.d.ts +3 -0
- package/dist/core/fs/atomic-write.d.ts.map +1 -1
- package/dist/core/fs/atomic-write.js +3 -0
- package/dist/core/fs/atomic-write.js.map +1 -1
- package/dist/core/fs/safe-read.d.ts +11 -0
- package/dist/core/fs/safe-read.d.ts.map +1 -0
- package/dist/core/fs/safe-read.js +31 -0
- package/dist/core/fs/safe-read.js.map +1 -0
- package/dist/core/global-paths.d.ts +16 -7
- package/dist/core/global-paths.d.ts.map +1 -1
- package/dist/core/global-paths.js +23 -8
- package/dist/core/global-paths.js.map +1 -1
- package/dist/core/i18n-data/en.d.ts +2 -0
- package/dist/core/i18n-data/en.d.ts.map +1 -1
- package/dist/core/i18n-data/en.js +259 -23
- package/dist/core/i18n-data/en.js.map +1 -1
- package/dist/core/i18n-data/zh-CN.d.ts +2 -0
- package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
- package/dist/core/i18n-data/zh-CN.js +265 -23
- package/dist/core/i18n-data/zh-CN.js.map +1 -1
- package/dist/core/i18n.d.ts +8 -0
- package/dist/core/i18n.d.ts.map +1 -1
- package/dist/core/i18n.js +14 -4
- package/dist/core/i18n.js.map +1 -1
- package/dist/core/init.d.ts +4 -2
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +38 -13
- package/dist/core/init.js.map +1 -1
- package/dist/core/managed-region.d.ts +1 -1
- package/dist/core/managed-region.js +1 -1
- package/dist/core/metrics.d.ts +16 -4
- package/dist/core/metrics.d.ts.map +1 -1
- package/dist/core/metrics.js +31 -11
- package/dist/core/metrics.js.map +1 -1
- package/dist/core/migrate.d.ts.map +1 -1
- package/dist/core/migrate.js +53 -19
- package/dist/core/migrate.js.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +4 -2
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/opencode-config.d.ts +4 -4
- package/dist/core/opencode-config.d.ts.map +1 -1
- package/dist/core/opencode-config.js +6 -5
- package/dist/core/opencode-config.js.map +1 -1
- package/dist/core/plan/path.d.ts +40 -0
- package/dist/core/plan/path.d.ts.map +1 -1
- package/dist/core/plan/path.js +108 -1
- package/dist/core/plan/path.js.map +1 -1
- package/dist/core/plan/roadmap.js +2 -2
- package/dist/core/plan/roadmap.js.map +1 -1
- package/dist/core/plan/scheme.d.ts +74 -2
- package/dist/core/plan/scheme.d.ts.map +1 -1
- package/dist/core/plan/scheme.js +311 -26
- package/dist/core/plan/scheme.js.map +1 -1
- package/dist/core/plan/stage.d.ts +34 -3
- package/dist/core/plan/stage.d.ts.map +1 -1
- package/dist/core/plan/stage.js +90 -6
- package/dist/core/plan/stage.js.map +1 -1
- package/dist/core/public-logger.d.ts +18 -5
- package/dist/core/public-logger.d.ts.map +1 -1
- package/dist/core/public-logger.js +62 -23
- package/dist/core/public-logger.js.map +1 -1
- package/dist/core/runtime-log.d.ts +25 -0
- package/dist/core/runtime-log.d.ts.map +1 -0
- package/dist/core/runtime-log.js +94 -0
- package/dist/core/runtime-log.js.map +1 -0
- package/dist/core/setup.d.ts.map +1 -1
- package/dist/core/setup.js +47 -19
- package/dist/core/setup.js.map +1 -1
- package/dist/core/template-loader.d.ts.map +1 -1
- package/dist/core/template-loader.js +672 -288
- package/dist/core/template-loader.js.map +1 -1
- package/dist/core/templates.d.ts +2 -2
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +13 -9
- package/dist/core/templates.js.map +1 -1
- package/dist/core/update-infos.d.ts +14 -3
- package/dist/core/update-infos.d.ts.map +1 -1
- package/dist/core/update-infos.js +67 -15
- package/dist/core/update-infos.js.map +1 -1
- package/dist/core/update-state.d.ts.map +1 -1
- package/dist/core/update-state.js +7 -4
- package/dist/core/update-state.js.map +1 -1
- package/dist/core/update.d.ts +2 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +253 -61
- package/dist/core/update.js.map +1 -1
- package/dist/core/view/entry.d.ts +53 -1
- package/dist/core/view/entry.d.ts.map +1 -1
- package/dist/core/view/entry.js +71 -2
- package/dist/core/view/entry.js.map +1 -1
- package/dist/core/workspace/identity.d.ts.map +1 -1
- package/dist/core/workspace/identity.js +15 -5
- package/dist/core/workspace/identity.js.map +1 -1
- package/dist/core/workspace/knowledge.d.ts.map +1 -1
- package/dist/core/workspace/knowledge.js +125 -19
- package/dist/core/workspace/knowledge.js.map +1 -1
- package/dist/core/workspace/structure.d.ts.map +1 -1
- package/dist/core/workspace/structure.js +6 -2
- package/dist/core/workspace/structure.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/kb-dedup.d.ts +5 -1
- package/dist/utils/kb-dedup.d.ts.map +1 -1
- package/dist/utils/kb-dedup.js +11 -5
- package/dist/utils/kb-dedup.js.map +1 -1
- package/package.json +6 -6
- package/dist/utils/path.d.ts +0 -22
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -37
- package/dist/utils/path.js.map +0 -1
- package/scripts/patch-inquirer.js +0 -70
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export const common = {
|
|
3
3
|
error: { key: 'common.error', zh: '错误', en: '' },
|
|
4
4
|
errorTmpl: { key: 'common.errorTmpl', zh: '错误:{msg}', en: '' },
|
|
5
|
+
concurrentConflict: { key: 'common.concurrentConflict', zh: '[并发冲突] flow.json 已被其它进程修改(期望 revision={expected},磁盘={actual});本次修改未写入,请重新执行该命令重试。', en: '' },
|
|
5
6
|
ok: { key: 'common.ok', zh: '✓', en: '' },
|
|
6
7
|
none: { key: 'common.none', zh: '(无)', en: '' },
|
|
7
8
|
noData: { key: 'common.noData', zh: '(无记录)', en: '' },
|
|
@@ -19,6 +20,9 @@ export const common = {
|
|
|
19
20
|
blockedBy: { key: 'common.blockedBy', zh: '阻塞原因', en: '' },
|
|
20
21
|
retry: { key: 'common.retry', zh: '重试', en: '' },
|
|
21
22
|
cancel: { key: 'common.cancel', zh: '取消', en: '' },
|
|
23
|
+
stageIdInvalidTmpl: { key: 'common.stageIdInvalidTmpl', zh: '{input} → 非法阶段 ID(应为 stage-NN 或 vX.Y.Z-stage-NN)', en: '' },
|
|
24
|
+
stageIdSuggestTmpl: { key: 'common.stageIdSuggestTmpl', zh: '建议名称:{suggest}', en: '' },
|
|
25
|
+
stageDirConflictTmpl: { key: 'common.stageDirConflictTmpl', zh: '阶段目录冲突:{stage} 与 {other} 映射同一目录', en: '' },
|
|
22
26
|
};
|
|
23
27
|
/* ==================== flow 域:流水线状态管理 ==================== */
|
|
24
28
|
export const flow = {
|
|
@@ -37,8 +41,8 @@ export const flow = {
|
|
|
37
41
|
'status.reviewPending': { key: 'flow.status.reviewPending', zh: '待处理审查', en: '' },
|
|
38
42
|
'status.logTotal': { key: 'flow.status.logTotal', zh: '日志总数', en: '' },
|
|
39
43
|
'status.cascadeTitle': { key: 'flow.status.cascadeTitle', zh: '── 配置级联状态 ──', en: '' },
|
|
40
|
-
'status.cascadeHeader': { key: 'flow.status.cascadeHeader', zh: '字段
|
|
41
|
-
'status.cascadeNote': { key: 'flow.status.cascadeNote', zh: '(* 表示 status.md
|
|
44
|
+
'status.cascadeHeader': { key: 'flow.status.cascadeHeader', zh: '字段 profile.yaml config.yaml status.md 生效值', en: '' },
|
|
45
|
+
'status.cascadeNote': { key: 'flow.status.cascadeNote', zh: '(* 表示 status.md 覆盖 config.yaml 默认值;config.yaml 未声明时取全局画像兜底)', en: '' },
|
|
42
46
|
'status.recentTitleTmpl': { key: 'flow.status.recentTitleTmpl', zh: '── 最近 {n} 条状态变更 ──', en: '' },
|
|
43
47
|
'status.recentHeader': { key: 'flow.status.recentHeader', zh: '时间 Agent 状态变化 说明', en: '' },
|
|
44
48
|
'status.downstreamTitle': { key: 'flow.status.downstreamTitle', zh: '── 下游 Agent 就绪状态 ──', en: '' },
|
|
@@ -74,8 +78,29 @@ export const flow = {
|
|
|
74
78
|
'current.stagePhase': { key: 'flow.current.stagePhase', zh: '阶段状态', en: '' },
|
|
75
79
|
'current.currentOp': { key: 'flow.current.currentOp', zh: '当前操作', en: '' },
|
|
76
80
|
'current.retryCount': { key: 'flow.current.retryCount', zh: '重试次数', en: '' },
|
|
81
|
+
// B8:无 op 时的回退文案({stage}(无 op))
|
|
82
|
+
'current.noOpTmpl': { key: 'flow.current.noOpTmpl', zh: '{stage}(无 op)', en: '' },
|
|
77
83
|
// flow stage add
|
|
78
84
|
'stage.addedTmpl': { key: 'flow.stage.addedTmpl', zh: '✓ 已创建阶段: {stage} → plan_pending', en: '' },
|
|
85
|
+
// flow phases(自描述)
|
|
86
|
+
'phases.title': { key: 'flow.phases.title', zh: 'OpenFeel 流水线 phase 自描述', en: '' },
|
|
87
|
+
'phases.listLabel': { key: 'flow.phases.listLabel', zh: '合法 phase 列表', en: '' },
|
|
88
|
+
'phases.transitionsLabel': { key: 'flow.phases.transitionsLabel', zh: 'phase 流转映射(from → [to...])', en: '' },
|
|
89
|
+
'phases.hint': { key: 'flow.phases.hint', zh: '提示:`openfeel flow advance --stage <id> --to <phase>` 推进', en: '' },
|
|
90
|
+
'phases.customPhaseNote': { key: 'flow.phases.customPhaseNote', zh: '提示:运行时 pipeline.yaml 含内置 15 个 phase 之外的 phase({phases});它们可被展示,但 openfeel flow advance 仅接受内置 phase。', en: '' },
|
|
91
|
+
'phases.transitionsDiffNote': { key: 'flow.phases.transitionsDiffNote', zh: '检测到运行时转移表与内置默认存在差异:{detail}', en: '' },
|
|
92
|
+
'phases.transitionsDiffMissing': { key: 'flow.phases.transitionsDiffMissing', zh: '缺失键 {keys}', en: '' },
|
|
93
|
+
'phases.transitionsDiffExtra': { key: 'flow.phases.transitionsDiffExtra', zh: '新增键 {keys}', en: '' },
|
|
94
|
+
'phases.transitionsDiffChanged': { key: 'flow.phases.transitionsDiffChanged', zh: '目标集不同 {keys}', en: '' },
|
|
95
|
+
// flow stage remove
|
|
96
|
+
'stage.remove.notFoundTmpl': { key: 'flow.stage.remove.notFoundTmpl', zh: '阶段不存在:{stage}', en: '' },
|
|
97
|
+
'stage.remove.okTmpl': { key: 'flow.stage.remove.okTmpl', zh: '✓ 已移除阶段: {stage}', en: '' },
|
|
98
|
+
'stage.remove.purgedTmpl': { key: 'flow.stage.remove.purgedTmpl', zh: '✓ 已删除对应 plan 目录', en: '' },
|
|
99
|
+
'stage.remove.purgeNeedForce': { key: 'flow.stage.remove.purgeNeedForce', zh: '删除目录需交互确认;非 TTY 环境请显式加 --force', en: '' },
|
|
100
|
+
'stage.remove.purgeConfirm': { key: 'flow.stage.remove.purgeConfirm', zh: '确认删除该阶段的 plan 目录(不可撤销)?', en: '' },
|
|
101
|
+
'stage.remove.dryRunTitle': { key: 'flow.stage.remove.dryRunTitle', zh: '─── Dry-run 预览 ───', en: '' },
|
|
102
|
+
'stage.remove.dryRunReferencing': { key: 'flow.stage.remove.dryRunReferencing', zh: '引用者 (deps)', en: '' },
|
|
103
|
+
'stage.remove.dryRunOk': { key: 'flow.stage.remove.dryRunOk', zh: '✓ 预期可移除(未写盘);去掉 --dry-run 正式执行', en: '' },
|
|
79
104
|
// flow advance
|
|
80
105
|
'advance.errorNoStage': { key: 'flow.advance.errorNoStage', zh: '错误:--stage 参数必须指定阶段 ID(如 stage-03)。如果是新项目,请先运行 openfeel stage create <id> 创建阶段。', en: '' },
|
|
81
106
|
'advance.warnAutoCorrect': { key: 'flow.advance.warnAutoCorrect', zh: '(非标准 phase 已自动修正,继续推进)', en: '' },
|
|
@@ -92,6 +117,7 @@ export const flow = {
|
|
|
92
117
|
'advance.okTmpl': { key: 'flow.advance.okTmpl', zh: '✓ 已推进: {stage} → {to}', en: '' },
|
|
93
118
|
'advance.opLabelTmpl': { key: 'flow.advance.opLabelTmpl', zh: '操作: {op}', en: '' },
|
|
94
119
|
'advance.autoRepaired': { key: 'flow.advance.autoRepaired', zh: '检测到阶段数据不一致,已自动修复', en: '' },
|
|
120
|
+
'advance.autoRepairPreview': { key: 'flow.advance.autoRepairPreview', zh: '检测到阶段数据不一致,正式执行将自动修复', en: '' },
|
|
95
121
|
'advance.saveError': { key: 'flow.advance.saveError', zh: 'flow.json 保存失败', en: '' },
|
|
96
122
|
'advance.gitCommitOkTmpl': { key: 'flow.advance.gitCommitOkTmpl', zh: '✓ 阶段 {stage} 已自动 git commit 归档', en: '' },
|
|
97
123
|
'advance.gitCommitSkipTmpl': { key: 'flow.advance.gitCommitSkipTmpl', zh: '(跳过自动 git commit:非 git 仓库或无变更){stage}', en: '' },
|
|
@@ -100,17 +126,55 @@ export const flow = {
|
|
|
100
126
|
'advance.dryRunFrom': { key: 'flow.advance.dryRunFrom', zh: '当前阶段', en: '' },
|
|
101
127
|
'advance.dryRunTo': { key: 'flow.advance.dryRunTo', zh: '目标阶段', en: '' },
|
|
102
128
|
'advance.dryRunOk': { key: 'flow.advance.dryRunOk', zh: '✓ 合法性验证通过,未实际修改 flow.json。去掉 --dry-run 后正式执行。', en: '' },
|
|
129
|
+
'advance.pathTitle': { key: 'flow.advance.pathTitle', zh: '推进路径:', en: '' },
|
|
130
|
+
'advance.pathArrow': { key: 'flow.advance.pathArrow', zh: ' → ', en: '' },
|
|
131
|
+
'advance.stepOkTmpl': { key: 'flow.advance.stepOkTmpl', zh: '已推进:{stage} {from} → {to}', en: '' },
|
|
132
|
+
'advance.ambiguousTmpl': { key: 'flow.advance.ambiguousTmpl', zh: '存在多条等价路径,已拒绝;请逐步显式指定 --to', en: '' },
|
|
133
|
+
'advance.noPathTmpl': { key: 'flow.advance.noPathTmpl', zh: '无法从 {from} 到达 {to};当前可达目标:{targets}', en: '' },
|
|
134
|
+
'advance.depthExceededTmpl': { key: 'flow.advance.depthExceededTmpl', zh: '路径深度超过上限({max}),已拒绝', en: '' },
|
|
135
|
+
'advance.partialFailTmpl': { key: 'flow.advance.partialFailTmpl', zh: '已完成到 {done};失败于 {failed};剩余路径:{remaining}', en: '' },
|
|
136
|
+
'advance.blockedByRevTmpl': { key: 'flow.advance.blockedByRevTmpl', zh: '存在阻塞中的审查条目,已停止推进:{revs};剩余路径:{remaining}', en: '' },
|
|
137
|
+
'advance.alreadyAtTargetTmpl': { key: 'flow.advance.alreadyAtTargetTmpl', zh: '已在目标阶段:{stage} → {to}(无操作)', en: '' },
|
|
138
|
+
'advance.forceRevRefused': { key: 'flow.advance.forceRevRefused', zh: '[!] --force 已指定,但 REV 安全检查不可绕过。拒绝推进。', en: '' },
|
|
139
|
+
'advance.blockingRevRefused': { key: 'flow.advance.blockingRevRefused', zh: '错误:blocking REV 未解决前禁止推进到 done。', en: '' },
|
|
140
|
+
'advance.blockingRevHint': { key: 'flow.advance.blockingRevHint', zh: '请先解决上述 REV 或通过 flow review resolve 标记为非阻塞。', en: '' },
|
|
141
|
+
'advance.gitDirtyBoxTop': { key: 'flow.advance.gitDirtyBoxTop', zh: '[!] ╔════════════════════════════════════════╗', en: '' },
|
|
142
|
+
'advance.gitDirtyBoxMsg': { key: 'flow.advance.gitDirtyBoxMsg', zh: '[!] ║ ⚠ Git 脏区警告:存在未提交的变更 ║', en: '' },
|
|
143
|
+
'advance.gitDirtyBoxHint': { key: 'flow.advance.gitDirtyBoxHint', zh: '[!] ║ 请确认 Executor 已完成 git commit ║', en: '' },
|
|
144
|
+
'advance.gitDirtyBoxBottom': { key: 'flow.advance.gitDirtyBoxBottom', zh: '[!] ╚════════════════════════════════════════╝', en: '' },
|
|
145
|
+
'advance.revBlockedTitleTmpl': { key: 'flow.advance.revBlockedTitleTmpl', zh: '[!] 检测到 {n} 个未解决的阻塞 REV:', en: '' },
|
|
146
|
+
'advance.revBlockedItemTmpl': { key: 'flow.advance.revBlockedItemTmpl', zh: ' {id}: {title} (priority={priority})', en: '' },
|
|
103
147
|
// flow attempt
|
|
104
148
|
'attempt.errorInvalidResult': { key: 'flow.attempt.errorInvalidResult', zh: '错误:--result 必须为 pass 或 fail', en: '' },
|
|
105
149
|
'attempt.passTmpl': { key: 'flow.attempt.passTmpl', zh: '✓ {op} 执行成功', en: '' },
|
|
106
150
|
'attempt.failRetryTmpl': { key: 'flow.attempt.failRetryTmpl', zh: '⚠ {op} 执行失败,将重试(可重试)', en: '' },
|
|
107
151
|
'attempt.failReplanTmpl': { key: 'flow.attempt.failReplanTmpl', zh: '✗ {op} 重试耗尽,需要重新规划', en: '' },
|
|
108
152
|
'attempt.autoReplan': { key: 'flow.attempt.autoReplan', zh: '→ 已自动回退到 scheme_pending,请重新规划方案', en: '' },
|
|
153
|
+
'attempt.currentOpTmpl': { key: 'flow.attempt.currentOpTmpl', zh: '当前指针:{stage}.{op}', en: '' },
|
|
154
|
+
'attempt.currentOpEmptyTmpl': { key: 'flow.attempt.currentOpEmptyTmpl', zh: '当前指针:{stage}.(无待执行 op)', en: '' },
|
|
155
|
+
'attempt.draftRefusedTmpl': { key: 'flow.attempt.draftRefusedTmpl', zh: '{opId} 处于 draft(未发布),无法记录执行结果;请先运行 openfeel plan scheme publish {stage} {opId}', en: '' },
|
|
156
|
+
// flow ops(B3-1)
|
|
157
|
+
'ops.title': { key: 'flow.ops.title', zh: '操作方案:', en: '' },
|
|
158
|
+
'ops.emptyWarningTmpl': { key: 'flow.ops.emptyWarningTmpl', zh: ' ⚠️ {opId} 模板未填充(存在「- [ ] 待补充」)', en: '' },
|
|
159
|
+
'ops.groupDraft': { key: 'flow.ops.groupDraft', zh: '未发布(draft):', en: '' },
|
|
160
|
+
'ops.groupActive': { key: 'flow.ops.groupActive', zh: '已发布:', en: '' },
|
|
161
|
+
// flow manager warnings(L5:core 层 warn i18n 化,均为 this.projectPath 上下文)
|
|
162
|
+
'manager.snapshotRestoreRefused': { key: 'flow.manager.snapshotRestoreRefused', zh: '[WARN] flow.json 已被其它进程修改,拒绝从快照恢复(请重新加载后重试)', en: '' },
|
|
163
|
+
'manager.phaseAutoCorrectTmpl': { key: 'flow.manager.phaseAutoCorrectTmpl', zh: "[WARN] advanceStagePhase: Phase '{phase}' 自动修正为 '{corrected}'", en: '' },
|
|
164
|
+
'manager.advancePhaseDeprecated': { key: 'flow.manager.advancePhaseDeprecated', zh: '[DEPRECATED] advancePhase() 已弃用,请使用 advanceStagePhase(stageName, phase) 替代', en: '' },
|
|
165
|
+
'manager.phaseAutoCorrectShortTmpl': { key: 'flow.manager.phaseAutoCorrectShortTmpl', zh: "[WARN] Phase '{to}' 自动修正为 '{corrected}'", en: '' },
|
|
166
|
+
'manager.advancePhaseNoStageId': { key: 'flow.manager.advancePhaseNoStageId', zh: '[DEPRECATED] advancePhase: 无法解析 stageId,跳过', en: '' },
|
|
167
|
+
'manager.autoFixPhaseGuardTmpl': { key: 'flow.manager.autoFixPhaseGuardTmpl', zh: '[WARN] addAutoFixReview 仅允许从 review_failed 状态调用,当前 stage {stage} phase 为 {phase}', en: '' },
|
|
109
168
|
// flow log
|
|
110
169
|
'log.noInit': { key: 'flow.log.noInit', zh: '流水线未初始化,无日志', en: '' },
|
|
111
170
|
'log.noLogs': { key: 'flow.log.noLogs', zh: '暂无操作日志', en: '' },
|
|
112
171
|
'log.recentTitleTmpl': { key: 'flow.log.recentTitleTmpl', zh: '最近 {n} 条操作日志', en: '' },
|
|
113
172
|
'log.detail': { key: 'flow.log.detail', zh: '详情', en: '' },
|
|
173
|
+
'log.writeFailedTmpl': { key: 'flow.log.writeFailedTmpl', zh: '[WARN] 公共日志写入失败: {err}', en: '' },
|
|
174
|
+
'log.layoutNestedTag': { key: 'flow.log.layoutNestedTag', zh: '(嵌套)', en: '' },
|
|
175
|
+
'log.layoutLegacyTag': { key: 'flow.log.layoutLegacyTag', zh: '(历史扁平)', en: '' },
|
|
176
|
+
'log.legacyDirTmpl': { key: 'flow.log.legacyDirTmpl', zh: '历史扁平目录({date}):无 day_index.md', en: '' },
|
|
177
|
+
'log.legacyDirNoteTmpl': { key: 'flow.log.legacyDirNoteTmpl', zh: '历史扁平目录({date})', en: '' },
|
|
114
178
|
// flow checkpoint
|
|
115
179
|
'checkpoint.listTitle': { key: 'flow.checkpoint.listTitle', zh: 'Checkpoint 快照', en: '' },
|
|
116
180
|
'checkpoint.noSnapshots': { key: 'flow.checkpoint.noSnapshots', zh: '(暂无 Checkpoint 快照)', en: '' },
|
|
@@ -122,6 +186,7 @@ export const flow = {
|
|
|
122
186
|
// flow review
|
|
123
187
|
'review.errorStageNotFoundTmpl': { key: 'flow.review.errorStageNotFoundTmpl', zh: '错误:opId "{opId}" 中的阶段 "{stage}" 在 flow.json 中不存在', en: '' },
|
|
124
188
|
'review.errorOpNotFoundTmpl': { key: 'flow.review.errorOpNotFoundTmpl', zh: '错误:opId "{opId}" 中的操作 "{op}" 在阶段 "{stage}" 中不存在', en: '' },
|
|
189
|
+
'review.errorInvalidPriorityTmpl': { key: 'flow.review.errorInvalidPriorityTmpl', zh: '错误:无效的优先级 "{priority}",可选值:high / medium / low', en: '' },
|
|
125
190
|
'review.labelBlocking': { key: 'flow.review.labelBlocking', zh: '[阻塞]', en: '' },
|
|
126
191
|
'review.labelNonBlocking': { key: 'flow.review.labelNonBlocking', zh: '[非阻塞]', en: '' },
|
|
127
192
|
'review.addedAutoFixTmpl': { key: 'flow.review.addedAutoFixTmpl', zh: '✓ {label} [AUTO_FIX] 审查条目已添加并自动修复: {revId}', en: '' },
|
|
@@ -130,6 +195,10 @@ export const flow = {
|
|
|
130
195
|
'review.addedTmpl': { key: 'flow.review.addedTmpl', zh: '✓ {label} 审查条目已添加: {revId} ({op})', en: '' },
|
|
131
196
|
'review.resolvedTmpl': { key: 'flow.review.resolvedTmpl', zh: '✓ 审查条目已解决: {revId}', en: '' },
|
|
132
197
|
'review.notFoundTmpl': { key: 'flow.review.notFoundTmpl', zh: '错误:未找到审查条目 {revId}', en: '' },
|
|
198
|
+
'review.updateOkTmpl': { key: 'flow.review.updateOkTmpl', zh: '已更新审查条目 {revId}', en: '' },
|
|
199
|
+
'review.updateNoFieldTmpl': { key: 'flow.review.updateNoFieldTmpl', zh: '未提供任何可更新字段(--priority/--title/--blocking)', en: '' },
|
|
200
|
+
'review.removeOkTmpl': { key: 'flow.review.removeOkTmpl', zh: '已删除审查条目 {revId}:{title}', en: '' },
|
|
201
|
+
'review.invalidBlockingTmpl': { key: 'flow.review.invalidBlockingTmpl', zh: '错误:--blocking 必须为 true 或 false(收到 "{value}")', en: '' },
|
|
133
202
|
// flow retry
|
|
134
203
|
'retry.errorNoData': { key: 'flow.retry.errorNoData', zh: '错误:无法读取流水线数据', en: '' },
|
|
135
204
|
'retry.errorStageNotFoundTmpl': { key: 'flow.retry.errorStageNotFoundTmpl', zh: '错误:未找到阶段 {stage}', en: '' },
|
|
@@ -147,6 +216,12 @@ export const flow = {
|
|
|
147
216
|
'repair.fixFailed': { key: 'flow.repair.fixFailed', zh: '✗ 部分问题无法自动修复,请手动检查 flow.json', en: '' },
|
|
148
217
|
'repair.migrationHint': { key: 'flow.repair.migrationHint', zh: '💡 检测到旧版 flow.json 格式(全局 phase),建议运行:', en: '' },
|
|
149
218
|
'repair.migrationPreview': { key: 'flow.repair.migrationPreview', zh: '查看迁移预览: openfeel flow migrate --dry-run', en: '' },
|
|
219
|
+
'repair.orphansTitle': { key: 'flow.repair.orphansTitle', zh: '孤儿 op 对账:', en: '' },
|
|
220
|
+
'repair.orphanKeyTmpl': { key: 'flow.repair.orphanKeyTmpl', zh: ' 键孤儿(有注册无文件):{items}', en: '' },
|
|
221
|
+
'repair.orphanFileTmpl': { key: 'flow.repair.orphanFileTmpl', zh: ' 文件孤儿(有文件无注册):{items}', en: '' },
|
|
222
|
+
'repair.fileOrphanTitle': { key: 'flow.repair.fileOrphanTitle', zh: '文件孤儿(有文件无注册):', en: '' },
|
|
223
|
+
'repair.fileOrphanNote': { key: 'flow.repair.fileOrphanNote', zh: '按裁定不提供自动清理(避免误删历史源码);请人工确认后处理', en: '' },
|
|
224
|
+
'repair.pruneOkTmpl': { key: 'flow.repair.pruneOkTmpl', zh: '已清理 {n} 个键孤儿(文件未删除)', en: '' },
|
|
150
225
|
// flow migrate
|
|
151
226
|
'migrate.alreadyNew': { key: 'flow.migrate.alreadyNew', zh: '✓ 已是新版格式,无需迁移', en: '' },
|
|
152
227
|
'migrate.dryRunTitle': { key: 'flow.migrate.dryRunTitle', zh: '[DRY-RUN 模式] 以下变更将被执行:', en: '' },
|
|
@@ -159,6 +234,16 @@ export const flow = {
|
|
|
159
234
|
'health.pass': { key: 'flow.health.pass', zh: '🎉 健康检查通过', en: '' },
|
|
160
235
|
'health.hasFailures': { key: 'flow.health.hasFailures', zh: '⚠️ 存在不通过项,请检查上述错误', en: '' },
|
|
161
236
|
'health.quickMode': { key: 'flow.health.quickMode', zh: '(快速模式:仅检查关键项)', en: '' },
|
|
237
|
+
'health.orphanOps': { key: 'flow.health.orphanOps', zh: '孤儿操作方案', en: '' },
|
|
238
|
+
'health.emptyTemplate': { key: 'flow.health.emptyTemplate', zh: '空模板', en: '' },
|
|
239
|
+
'health.emptyTemplateDetail': { key: 'flow.health.emptyTemplateDetail', zh: '{n} 个操作方案模板未填充:{items}', en: '' },
|
|
240
|
+
'health.orphanOpsDetail': { key: 'flow.health.orphanOpsDetail', zh: '键孤儿 {n} 个、文件孤儿 {m} 个;运行 flow repair 查看详情(按裁定不提供自动清理)', en: '' },
|
|
241
|
+
'health.fixTitle': { key: 'flow.health.fixTitle', zh: '状态对账:', en: '' },
|
|
242
|
+
'health.fixItemTmpl': { key: 'flow.health.fixItemTmpl', zh: ' {stage}: {from} → {to}({result})', en: '' },
|
|
243
|
+
'health.fixAppliedTmpl': { key: 'flow.health.fixAppliedTmpl', zh: '已回写 {n} 个阶段的状态字段', en: '' },
|
|
244
|
+
'health.fixSkippedTmpl': { key: 'flow.health.fixSkippedTmpl', zh: '跳过 {n} 个阶段(status.md 中「状态」字段缺失)', en: '' },
|
|
245
|
+
'health.fixDryRunNote': { key: 'flow.health.fixDryRunNote', zh: '仅预览,未写入任何文件', en: '' },
|
|
246
|
+
'health.fixOnlyStatusNote': { key: 'flow.health.fixOnlyStatusNote', zh: '仅同步「状态」字段;执行模式/自动推进/当前任务等不受影响', en: '' },
|
|
162
247
|
// flow recover
|
|
163
248
|
'recover.title': { key: 'flow.recover.title', zh: '═══ 跨会话上下文恢复 ═══', en: '' },
|
|
164
249
|
'recover.globalStatus': { key: 'flow.recover.globalStatus', zh: '全局状态', en: '' },
|
|
@@ -176,6 +261,7 @@ export const flow = {
|
|
|
176
261
|
'recover.statusNoCurrentStage': { key: 'flow.recover.statusNoCurrentStage', zh: '无当前阶段', en: '' },
|
|
177
262
|
// flow wizard
|
|
178
263
|
'wizard.done': { key: 'flow.wizard.done', zh: '🎉 流水线已完成!', en: '' },
|
|
264
|
+
'wizard.nonTtyHint': { key: 'flow.wizard.nonTtyHint', zh: '当前环境非交互式;请改用 flow advance 等非交互命令', en: '' },
|
|
179
265
|
'wizard.noStages': { key: 'flow.wizard.noStages', zh: '无可用阶段。', en: '' },
|
|
180
266
|
'wizard.selectStage': { key: 'flow.wizard.selectStage', zh: '选择要推进的阶段', en: '' },
|
|
181
267
|
'wizard.currentLabel': { key: 'flow.wizard.currentLabel', zh: '(当前)', en: '' },
|
|
@@ -206,6 +292,7 @@ export const init = {
|
|
|
206
292
|
'initializingTmpl': { key: 'init.initializingTmpl', zh: '正在初始化 OpenFeel 工作区: {path}', en: '' },
|
|
207
293
|
'created': { key: 'init.created', zh: '已创建', en: '' },
|
|
208
294
|
'updated': { key: 'init.updated', zh: '已更新', en: '' },
|
|
295
|
+
'skipped': { key: 'init.skipped', zh: '已跳过', en: '' },
|
|
209
296
|
'alreadyUpToDate': { key: 'init.alreadyUpToDate', zh: '工作区已是最新状态,无需变更。', en: '' },
|
|
210
297
|
'complete': { key: 'init.complete', zh: '✓ OpenFeel 工作区初始化完成', en: '' },
|
|
211
298
|
'demoCreating': { key: 'init.demoCreating', zh: '⚙ 创建示例项目骨架...', en: '' },
|
|
@@ -218,6 +305,7 @@ export const init = {
|
|
|
218
305
|
// init.ts 中 initProject 里额外的 console 字符串
|
|
219
306
|
'agentLangTmpl': { key: 'init.agentLangTmpl', zh: 'Agent 提示词语言: {lang}', en: '' },
|
|
220
307
|
'invalidLangWarnTmpl': { key: 'init.invalidLangWarnTmpl', zh: '无效的 --lang 值 "{lang}",回退到交互式选择', en: '' },
|
|
308
|
+
'pkgBackupSkipTmpl': { key: 'init.pkgBackupSkipTmpl', zh: '[init] {err};已跳过 package.json 改写', en: '' },
|
|
221
309
|
// ensureGlobalConfig 非交互环境消息(REV-006)
|
|
222
310
|
'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.' },
|
|
223
311
|
'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.' },
|
|
@@ -248,6 +336,10 @@ export const update = {
|
|
|
248
336
|
'appendedTitle': { key: 'update.appendedTitle', zh: '追加了 {n} 个文件(无控制区标记,受管内容已追加到末尾,待会话启动复核)', en: '' },
|
|
249
337
|
'appendedHint': { key: 'update.appendedHint', zh: '详见 ~/.openfeel/update_infos.md,会话启动时将逐条检查并提示修复。', en: '' },
|
|
250
338
|
'appendedManyWarning': { key: 'update.appendedManyWarning', zh: '⚠️ 一次追加 {n} 个文件,疑似 update_state 损坏或首次迁移,请运行 openfeel update 后检查 ~/.openfeel/update_infos.md。', en: '' },
|
|
339
|
+
'fileWriteSkipTmpl': { key: 'update.fileWriteSkipTmpl', zh: '[update] {err};已跳过该文件写入', en: '' },
|
|
340
|
+
'legacyLayoutWarnTmpl': { key: 'update.legacyLayoutWarnTmpl', zh: '[update] 检测到项目内旧布局 .opencode/{dirs},请运行 openfeel migrate(stage-39 提供)迁移。', en: '' },
|
|
341
|
+
'globalJsoncParseSkipTmpl': { key: 'update.globalJsoncParseSkipTmpl', zh: '[update] 全局 opencode.jsonc 解析失败(可能含块注释),跳过合并保留原文件: {err}', en: '' },
|
|
342
|
+
'globalJsoncWriteSkipTmpl': { key: 'update.globalJsoncWriteSkipTmpl', zh: '[update] {err};已跳过全局 opencode.jsonc 写入,继续其余步骤', en: '' },
|
|
251
343
|
};
|
|
252
344
|
/* ==================== project 域:项目概览命令 ==================== */
|
|
253
345
|
export const project = {
|
|
@@ -300,8 +392,14 @@ export const stage = {
|
|
|
300
392
|
'status.hint': { key: 'stage.status.hint', zh: '使用 openfeel stage status <stageId> 查看详细状态', en: '' },
|
|
301
393
|
'errorStageNotFoundTmpl': { key: 'stage.errorStageNotFoundTmpl', zh: '错误:未找到阶段 "{stageId}" 的 status.md 文件', en: '' },
|
|
302
394
|
'errorCheckStageId': { key: 'stage.errorCheckStageId', zh: '请确认阶段 ID 是否正确(如 v4-stage-04)', en: '' },
|
|
303
|
-
'set.errorFieldNotFoundTmpl': { key: 'stage.set.errorFieldNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md
|
|
304
|
-
'set.updatedTmpl': { key: 'stage.set.updatedTmpl', zh: '✓ 已更新 {stageId}
|
|
395
|
+
'set.errorFieldNotFoundTmpl': { key: 'stage.set.errorFieldNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「{field}」字段', en: '' },
|
|
396
|
+
'set.updatedTmpl': { key: 'stage.set.updatedTmpl', zh: '✓ 已更新 {stageId} {field}: → {value}', en: '' },
|
|
397
|
+
'set.noopTmpl': { key: 'stage.set.noopTmpl', zh: '字段 {field} 已是目标值,未做变更', en: '' },
|
|
398
|
+
'set.invalidValueTmpl': { key: 'stage.set.invalidValueTmpl', zh: '字段 {field} 的取值非法:{value}(允许:{allowed})', en: '' },
|
|
399
|
+
'set.multiPartialTmpl': { key: 'stage.set.multiPartialTmpl', zh: '已写入:{done};失败于:{field}', en: '' },
|
|
400
|
+
'set.noOptionTmpl': { key: 'stage.set.noOptionTmpl', zh: '请至少提供一个字段选项(--status/--exec-mode/--auto-advance/--review-agent)', en: '' },
|
|
401
|
+
'set.depsOkTmpl': { key: 'stage.set.depsOkTmpl', zh: '已更新阶段 {stage} 的依赖:{deps}', en: '' },
|
|
402
|
+
'set.depsDanglingTmpl': { key: 'stage.set.depsDanglingTmpl', zh: '依赖校验失败:以下阶段不存在 {deps}', en: '' },
|
|
305
403
|
'task.errorMutualExclusive': { key: 'stage.task.errorMutualExclusive', zh: '错误:必须指定 --done 或 --undone(二者互斥)', en: '' },
|
|
306
404
|
'task.errorInvalidTaskNo': { key: 'stage.task.errorInvalidTaskNo', zh: '错误:任务编号必须为正整数', en: '' },
|
|
307
405
|
'task.errorTaskNotFoundTmpl': { key: 'stage.task.errorTaskNotFoundTmpl', zh: '错误:在 {stageId} 的 status.md 中未找到「任务{taskNo}」', en: '' },
|
|
@@ -311,15 +409,40 @@ export const stage = {
|
|
|
311
409
|
'task.taskItemTmpl': { key: 'stage.task.taskItemTmpl', zh: '任务{number}: {desc}', en: '' },
|
|
312
410
|
'task.blockedByTmpl': { key: 'stage.task.blockedByTmpl', zh: '阻塞原因: {reason}', en: '' },
|
|
313
411
|
'task.actionLabelTmpl': { key: 'stage.task.actionLabelTmpl', zh: '{label} {stageId} 任务{taskNo}', en: '' },
|
|
314
|
-
'
|
|
412
|
+
'task.addOkTmpl': { key: 'stage.task.addOkTmpl', zh: '已追加任务 {no}:{desc}', en: '' },
|
|
413
|
+
'task.addUsageTmpl': { key: 'stage.task.addUsageTmpl', zh: '请提供任务编号或使用 --add "<描述>"', en: '' },
|
|
414
|
+
'task.addMutualExclusiveTmpl': { key: 'stage.task.addMutualExclusiveTmpl', zh: '错误:--add 与 --done/--undone 互斥', en: '' },
|
|
415
|
+
'task.sectionMissingTmpl': { key: 'stage.task.sectionMissingTmpl', zh: 'status.md 缺少任务小节,请先运行 openfeel plan stage add 生成骨架', en: '' },
|
|
315
416
|
'create.addedTmpl': { key: 'stage.create.addedTmpl', zh: '✓ 已创建阶段: {stage} → plan_pending', en: '' },
|
|
417
|
+
'create.deprecated': { key: 'stage.create.deprecated', zh: '[deprecated] `openfeel stage create` 已弃用;请改用 `openfeel flow stage add <stageId>`(仅注册)或 `openfeel plan stage add <name>`(完整入口)', en: '' },
|
|
316
418
|
};
|
|
317
419
|
/* ==================== plan 域:计划命令 ==================== */
|
|
318
420
|
export const plan = {
|
|
319
421
|
'stage.createdTmpl': { key: 'plan.stage.createdTmpl', zh: '已创建阶段: {name}', en: '' },
|
|
422
|
+
'stage.invalidDepsTmpl': { key: 'plan.stage.invalidDepsTmpl', zh: '依赖阶段不存在:{deps}(已注册阶段:{known})', en: '' },
|
|
320
423
|
'stage.empty': { key: 'plan.stage.empty', zh: '暂无工作阶段', en: '' },
|
|
321
424
|
'scheme.createdTmpl': { key: 'plan.scheme.createdTmpl', zh: '已创建操作方案: {opId}({stage})', en: '' },
|
|
322
425
|
'scheme.empty': { key: 'plan.scheme.empty', zh: '暂无操作方案', en: '' },
|
|
426
|
+
'scheme.remove.okTmpl': { key: 'plan.scheme.remove.okTmpl', zh: '已注销操作方案:{opId}(阶段 {stage})', en: '' },
|
|
427
|
+
'scheme.remove.dryRunTmpl': { key: 'plan.scheme.remove.dryRunTmpl', zh: '已预览注销操作方案:{opId}(阶段 {stage})[DRY-RUN,未写盘]', en: '' },
|
|
428
|
+
'scheme.remove.orphanNote': { key: 'plan.scheme.remove.orphanNote', zh: '该 op 为孤儿(无对应模板文件),已注销其注册键', en: '' },
|
|
429
|
+
'scheme.remove.reasonDone': { key: 'plan.scheme.remove.reasonDone', zh: '拒绝删除:{opId} 状态为 done;如需强制删除请加 --force', en: '' },
|
|
430
|
+
'scheme.remove.reasonCheckpoint': { key: 'plan.scheme.remove.reasonCheckpoint', zh: '拒绝删除:{opId} 存在 checkpoint 进展;如需强制删除请加 --force', en: '' },
|
|
431
|
+
'scheme.remove.notFoundTmpl': { key: 'plan.scheme.remove.notFoundTmpl', zh: '未找到:阶段 {stage} 或操作方案 {opId}', en: '' },
|
|
432
|
+
'scheme.implicitRegisterTmpl': { key: 'plan.scheme.implicitRegisterTmpl', zh: '阶段 {stage} 未注册,已按注册语义补齐阶段骨架(overview.md / status.md)', en: '' },
|
|
433
|
+
'scheme.skeletonWarnTmpl': { key: 'plan.scheme.skeletonWarnTmpl', zh: '阶段骨架补建失败({err}),已跳过;请手动创建 overview.md / status.md', en: '' },
|
|
434
|
+
'scheme.skipAutoRegisterTmpl': { key: 'plan.scheme.skipAutoRegisterTmpl', zh: '[WARN] {reason};已跳过 flow.json 自动注册(op 文件已创建)。', en: '' },
|
|
435
|
+
'scheme.dirConflictSkipTmpl': { key: 'plan.scheme.dirConflictSkipTmpl', zh: "[WARN] 阶段 '{stage}' 与 '{other}' 映射同一 (series, stageDir);已跳过 flow.json 自动注册(op 文件已创建),请检查 stageId。", en: '' },
|
|
436
|
+
'scheme.concurrentSkipTmpl': { key: 'plan.scheme.concurrentSkipTmpl', zh: '[WARN] op {opId} 已创建,但 flow.json 同步因并发冲突失败;请执行 openfeel flow repair 兜底或重新注册该 op。', en: '' },
|
|
437
|
+
'scheme.publish.okTmpl': { key: 'plan.scheme.publish.okTmpl', zh: '已发布 {opId}(draft → pending)', en: '' },
|
|
438
|
+
'scheme.publish.emptyTmpl': { key: 'plan.scheme.publish.emptyTmpl', zh: '模板未填充,禁止发布:{opId}(请先补全「- [ ] 待补充」)', en: '' },
|
|
439
|
+
'scheme.publish.notDraftTmpl': { key: 'plan.scheme.publish.notDraftTmpl', zh: '{opId} 不是 draft 状态,无需发布', en: '' },
|
|
440
|
+
'scheme.publish.notFoundTmpl': { key: 'plan.scheme.publish.notFoundTmpl', zh: '未找到:阶段 {stage} 或操作方案 {opId}', en: '' },
|
|
441
|
+
'scheme.rename.okTmpl': { key: 'plan.scheme.rename.okTmpl', zh: '已重命名 {opId}:{from} → {to}', en: '' },
|
|
442
|
+
'scheme.rename.unchangedTmpl': { key: 'plan.scheme.rename.unchangedTmpl', zh: '标题未变化:{opId}', en: '' },
|
|
443
|
+
'scheme.rename.notFoundTmpl': { key: 'plan.scheme.rename.notFoundTmpl', zh: '未找到:阶段 {stage} 或操作方案 {opId}', en: '' },
|
|
444
|
+
'scheme.rename.fileMissingTmpl': { key: 'plan.scheme.rename.fileMissingTmpl', zh: '未找到 {opId} 的模板文件({path});flow.json 未修改', en: '' },
|
|
445
|
+
'scheme.rename.emptyTitleTmpl': { key: 'plan.scheme.rename.emptyTitleTmpl', zh: '标题不能为空', en: '' },
|
|
323
446
|
};
|
|
324
447
|
/* ==================== knowledge 域:知识库命令 ==================== */
|
|
325
448
|
export const knowledge = {
|
|
@@ -337,6 +460,14 @@ export const knowledge = {
|
|
|
337
460
|
'index.noCategories': { key: 'knowledge.index.noCategories', zh: '(无分类)', en: '' },
|
|
338
461
|
'index.recentUpdates': { key: 'knowledge.index.recentUpdates', zh: '=== 最近更新 ===', en: '' },
|
|
339
462
|
'index.noUpdates': { key: 'knowledge.index.noUpdates', zh: '暂无更新记录。', en: '' },
|
|
463
|
+
'dedup.title': { key: 'knowledge.dedup.title', zh: '相似条目建议:', en: '' },
|
|
464
|
+
'dedup.itemTmpl': { key: 'knowledge.dedup.itemTmpl', zh: ' [{category}] {title}(相似度 {pct}%){flag}', en: '' },
|
|
465
|
+
'dedup.suggestFlag': { key: 'knowledge.dedup.suggestFlag', zh: '← 建议合并/更新', en: '' },
|
|
466
|
+
'dedup.noneTmpl': { key: 'knowledge.dedup.noneTmpl', zh: '未发现相似条目(阈值 {threshold})', en: '' },
|
|
467
|
+
'dedup.readOnlyNote': { key: 'knowledge.dedup.readOnlyNote', zh: '本命令仅输出建议,不会修改 kb 文件', en: '' },
|
|
468
|
+
'dedup.invalidThresholdTmpl': { key: 'knowledge.dedup.invalidThresholdTmpl', zh: '阈值非法:{value}(应为 0~1 之间的数字)', en: '' },
|
|
469
|
+
'dedup.invalidCategoryTmpl': { key: 'knowledge.dedup.invalidCategoryTmpl', zh: '分类非法:{value}(允许:{allowed})', en: '' },
|
|
470
|
+
'dedup.noContentTmpl': { key: 'knowledge.dedup.noContentTmpl', zh: '未提供内容:请传入内容参数或通过标准输入', en: '' },
|
|
340
471
|
// knowledge list 表头列名
|
|
341
472
|
'list.colCategory': { key: 'knowledge.list.colCategory', zh: '分类', en: '' },
|
|
342
473
|
'list.colTitle': { key: 'knowledge.list.colTitle', zh: '标题', en: '' },
|
|
@@ -362,8 +493,6 @@ export const view = {
|
|
|
362
493
|
'list.empty': { key: 'view.list.empty', zh: '暂无审查条目', en: '' },
|
|
363
494
|
'list.filedBy': { key: 'view.list.filedBy', zh: '提交人', en: '' },
|
|
364
495
|
'list.filedAt': { key: 'view.list.filedAt', zh: '时间', en: '' },
|
|
365
|
-
'add.errorInvalidPriorityTmpl': { key: 'view.add.errorInvalidPriorityTmpl', zh: '错误:无效的优先级 "{priority}",可选值:high / medium / low', en: '' },
|
|
366
|
-
'add.okTmpl': { key: 'view.add.okTmpl', zh: '✓ 审查条目已添加: {id} ({op}) — {title}', en: '' },
|
|
367
496
|
'accept.okTmpl': { key: 'view.accept.okTmpl', zh: '✓ 审查条目已验收: {id} → closed', en: '' },
|
|
368
497
|
'accept.errorNotFoundTmpl': { key: 'view.accept.errorNotFoundTmpl', zh: '错误:未找到审查条目 {id}', en: '' },
|
|
369
498
|
};
|
|
@@ -388,15 +517,20 @@ export const lint = {
|
|
|
388
517
|
export const help = {
|
|
389
518
|
// openfeel 顶层
|
|
390
519
|
'openfeel': { key: 'help.openfeel', zh: 'AI Agent 开发流程治理 CLI 工具', en: '' },
|
|
520
|
+
'global.noColor': { key: 'help.global.noColor', zh: '禁用彩色输出(亦可通过环境变量 NO_COLOR=1)', en: '' },
|
|
521
|
+
'global.encoding': { key: 'help.global.encoding', zh: '输出编码(utf8|gbk|auto,默认 auto:Windows 非 TTY 直通 UTF-8;GBK 需显式 --encoding gbk/OPENFEEL_ENCODING;--json 恒 UTF-8)', en: '' },
|
|
522
|
+
'global.logFile': { key: 'help.global.logFile', zh: '运行日志文件路径(默认 ~/.openfeel/cli/logs/openfeel-YYYY-MM-DD.log)', en: '' },
|
|
523
|
+
'global.noLog': { key: 'help.global.noLog', zh: '关闭运行日志(亦可通过 OPENFEEL_LOG=0 / OPENFEEL_NO_LOG=1)', en: '' },
|
|
524
|
+
'global.debug': { key: 'help.global.debug', zh: '记录 debug 级日志(默认仅 info/warn/error)', en: '' },
|
|
391
525
|
'openfeel.version': { key: 'help.openfeel.version', zh: '输出版本号', en: '' },
|
|
392
526
|
// init
|
|
393
527
|
'init': { key: 'help.init', zh: '初始化项目工作区,创建 .openfeel/ 目录结构和配置文件', en: '' },
|
|
394
528
|
'init.demo': { key: 'help.init.demo', zh: '创建带示例骨架的项目(NumKit 风格)', en: '' },
|
|
395
529
|
'init.lang': { key: 'help.init.lang', zh: 'Agent 提示词语言(zh-CN 或 en),非交互环境默认 zh-CN', en: '' },
|
|
396
|
-
'init.workspaceOnly': { key: 'help.init.workspaceOnly', zh: '仅创建 .openfeel/
|
|
530
|
+
'init.workspaceOnly': { key: 'help.init.workspaceOnly', zh: '仅创建 .openfeel/ 工作区(不建全局规则/平台适配器配置(AGENTS.md/opencode.jsonc)),供 feel 空白项目自动搭建', en: '' },
|
|
397
531
|
'init.nonInteractive': { key: 'help.init.nonInteractive', zh: '非交互模式(配合 --workspace-only 使用)', en: '' },
|
|
398
532
|
// setup
|
|
399
|
-
'setup': { key: 'help.setup', zh: '部署全局 OpenFeel 框架配置(全局 AGENTS.md + agent + skill + opencode.jsonc
|
|
533
|
+
'setup': { key: 'help.setup', zh: '部署全局 OpenFeel 框架配置(全局 AGENTS.md + agent + skill + 平台适配器配置(opencode.jsonc)),不建立项目 .openfeel/', en: '' },
|
|
400
534
|
'setup.lang': { key: 'help.setup.lang', zh: 'Agent 提示词语言(zh-CN 或 en),默认 zh-CN', en: '' },
|
|
401
535
|
// update
|
|
402
536
|
'update': { key: 'help.update', zh: '部署 OpenFeel 适配文件到目标项目(无参数时交互式选择工具)', en: '' },
|
|
@@ -407,20 +541,39 @@ export const help = {
|
|
|
407
541
|
'flow.status': { key: 'help.flow.status', zh: '显示流水线状态摘要', en: '' },
|
|
408
542
|
'flow.status.verbose': { key: 'help.flow.status.verbose', zh: '增强输出:配置级联、最近状态变更、下游 Agent 就绪状态', en: '' },
|
|
409
543
|
'flow.status.lines': { key: 'help.flow.status.lines', zh: '最近状态变更条数(默认 5)', en: '' },
|
|
544
|
+
'flow.status.json': { key: 'help.flow.status.json', zh: '以 JSON 输出(机器可读,纯 JSON 单文档)', en: '' },
|
|
410
545
|
'flow.overview': { key: 'help.flow.overview', zh: '全状态可视化视图(openfeel flow overview 的后端实现)', en: '' },
|
|
546
|
+
'flow.overview.json': { key: 'help.flow.overview.json', zh: '以 JSON 输出', en: '' },
|
|
411
547
|
'flow.current': { key: 'help.flow.current', zh: '显示当前阶段和操作', en: '' },
|
|
548
|
+
'flow.current.json': { key: 'help.flow.current.json', zh: '以 JSON 输出', en: '' },
|
|
412
549
|
'flow.metrics': { key: 'help.flow.metrics', zh: '展示 Agent 性能指标', en: '' },
|
|
550
|
+
'flow.metrics.json': { key: 'help.flow.metrics.json', zh: '以 JSON 输出', en: '' },
|
|
551
|
+
'flow.phases': { key: 'help.flow.phases', zh: '列出全部合法 phase 及其流转映射(自描述)', en: '' },
|
|
552
|
+
'flow.phases.json': { key: 'help.flow.phases.json', zh: '以 JSON 输出 { phases, transitions, advanceAccepted, transitionsDiff, schemaVersion }(advanceAccepted = 内置 15 phase,即 flow advance 的推进白名单;transitionsDiff = 运行时转移表与内置默认的差异报告)', en: '' },
|
|
413
553
|
'flow.stage': { key: 'help.flow.stage', zh: '阶段管理', en: '' },
|
|
414
|
-
'flow.stage.add': { key: 'help.flow.stage.add', zh: '
|
|
554
|
+
'flow.stage.add': { key: 'help.flow.stage.add', zh: '新增流水线阶段(仅注册 flow.json,不建目录;通常应使用 openfeel plan stage add)', en: '' },
|
|
555
|
+
'flow.stage.add.argstageId': { key: 'help.flow.stage.add.argstageId', zh: '阶段 ID(如 v1.1.2-stage-41)', en: '' },
|
|
556
|
+
'flow.stage.remove': { key: 'help.flow.stage.remove', zh: '移除流水线阶段(安全校验;默认仅注销 flow.json,不删目录)', en: '' },
|
|
557
|
+
'flow.stage.remove.force': { key: 'help.flow.stage.remove.force', zh: '越过安全校验(ops 非空 / 当前活跃阶段 / 被其它阶段依赖)', en: '' },
|
|
558
|
+
'flow.stage.remove.dryRun': { key: 'help.flow.stage.remove.dryRun', zh: '仅预览,不写盘', en: '' },
|
|
559
|
+
'flow.stage.remove.purge': { key: 'help.flow.stage.remove.purge', zh: '同时删除 plan/{series}/{stageDir}/ 目录(非 TTY 须配 --force)', en: '' },
|
|
560
|
+
'flow.stage.set': { key: 'help.flow.stage.set', zh: '设置阶段依赖(覆盖写入;未指定 --deps 视为清空)', en: '' },
|
|
561
|
+
'flow.stage.set.argstageId': { key: 'help.flow.stage.set.argstageId', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
562
|
+
'flow.stage.set.deps': { key: 'help.flow.stage.set.deps', zh: '依赖阶段 ID 列表(空格或逗号分隔;含变长参数,建议置于命令末尾)', en: '' },
|
|
415
563
|
'flow.advance': { key: 'help.flow.advance', zh: '推进流水线阶段', en: '' },
|
|
416
564
|
'flow.advance.op': { key: 'help.flow.advance.op', zh: '操作 ID(如 stage-01.op-001),仅用于日志/展示', en: '' },
|
|
417
|
-
'flow.advance.to': { key: 'help.flow.advance.to', zh: '目标阶段(如 exec_running
|
|
565
|
+
'flow.advance.to': { key: 'help.flow.advance.to', zh: '目标阶段(如 exec_running)。合法 phase 与转移表:openfeel flow phases', en: '' },
|
|
418
566
|
'flow.advance.stage': { key: 'help.flow.advance.stage', zh: '阶段 ID(如 stage-03),必须指定', en: '' },
|
|
419
567
|
'flow.advance.force': { key: 'help.flow.advance.force', zh: '强制执行(跳过非法 phase 校验和阶段跳跃检查,但不可绕过 REV 阻塞检查)', en: '' },
|
|
420
568
|
'flow.advance.dryRun': { key: 'help.flow.advance.dryRun', zh: '仅验证不执行修改(预览输出)。与 --force 组合时跳过校验但仍不执行修改', en: '' },
|
|
569
|
+
'flow.advance.quiet': { key: 'help.flow.advance.quiet', zh: '静默非错误输出(成功确认与 Git 警告均不打印)', en: '' },
|
|
421
570
|
'flow.attempt': { key: 'help.flow.attempt', zh: '记录操作执行结果', en: '' },
|
|
422
571
|
'flow.attempt.op': { key: 'help.flow.attempt.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
|
|
423
572
|
'flow.attempt.result': { key: 'help.flow.attempt.result', zh: '执行结果(pass 或 fail)', en: '' },
|
|
573
|
+
'flow.ops': { key: 'help.flow.ops', zh: '操作方案视图', en: '' },
|
|
574
|
+
'flow.ops.list': { key: 'help.flow.ops.list', zh: '列出操作方案(含状态与模板填充度)', en: '' },
|
|
575
|
+
'flow.ops.list.stage': { key: 'help.flow.ops.list.stage', zh: '仅列出指定阶段', en: '' },
|
|
576
|
+
'flow.ops.list.json': { key: 'help.flow.ops.list.json', zh: '以 JSON 输出', en: '' },
|
|
424
577
|
'flow.log': { key: 'help.flow.log', zh: '显示最近操作日志', en: '' },
|
|
425
578
|
'flow.log.last': { key: 'help.flow.log.last', zh: '显示最近 n 条(默认 10)', en: '' },
|
|
426
579
|
'flow.review': { key: 'help.flow.review', zh: '管理审查条目', en: '' },
|
|
@@ -430,19 +583,33 @@ export const help = {
|
|
|
430
583
|
'flow.review.add.autoFix': { key: 'help.flow.review.add.autoFix', zh: '自动修复说明,设置后跳过 scheme_pending 直接推进到 exec_running', en: '' },
|
|
431
584
|
'flow.review.add.blocking': { key: 'help.flow.review.add.blocking', zh: '是否阻塞流水线(默认 true)', en: '' },
|
|
432
585
|
'flow.review.resolve': { key: 'help.flow.review.resolve', zh: '解决审查条目', en: '' },
|
|
586
|
+
'flow.review.resolve.argrev-id': { key: 'help.flow.review.resolve.argrev-id', zh: '审查条目 ID(如 REV-001)', en: '' },
|
|
587
|
+
'flow.review.update': { key: 'help.flow.review.update', zh: '更新审查条目字段(至少提供一个选项)', en: '' },
|
|
588
|
+
'flow.review.update.argrev-id': { key: 'help.flow.review.update.argrev-id', zh: '审查条目 ID(如 REV-001)', en: '' },
|
|
589
|
+
'flow.review.update.priority': { key: 'help.flow.review.update.priority', zh: '优先级(high/medium/low)', en: '' },
|
|
590
|
+
'flow.review.update.title': { key: 'help.flow.review.update.title', zh: '审查标题', en: '' },
|
|
591
|
+
'flow.review.update.blocking': { key: 'help.flow.review.update.blocking', zh: '是否阻塞流水线(true/false)', en: '' },
|
|
592
|
+
'flow.review.remove': { key: 'help.flow.review.remove', zh: '删除审查条目(留审计日志;打印被删条目标题)', en: '' },
|
|
593
|
+
'flow.review.remove.argrev-id': { key: 'help.flow.review.remove.argrev-id', zh: '审查条目 ID(如 REV-001)', en: '' },
|
|
433
594
|
'flow.retry': { key: 'help.flow.retry', zh: '查询操作的重试状态', en: '' },
|
|
434
595
|
'flow.retry.op': { key: 'help.flow.retry.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
|
|
435
596
|
'flow.repair': { key: 'help.flow.repair', zh: '自动检测并修复 flow.json 中的常见问题', en: '' },
|
|
436
597
|
'flow.repair.dryRun': { key: 'help.flow.repair.dryRun', zh: '仅检测不修复', en: '' },
|
|
437
598
|
'flow.repair.backup': { key: 'help.flow.repair.backup', zh: '修复前备份为 .bak', en: '' },
|
|
599
|
+
'flow.repair.pruneOrphans': { key: 'help.flow.repair.pruneOrphans', zh: '清理键孤儿(flow.json 中已注册但 ops/ 无文件的 op 键;不删除文件)', en: '' },
|
|
438
600
|
'flow.migrate': { key: 'help.flow.migrate', zh: '将旧版 flow.json(v4.0 全局 phase)迁移到新版格式(v4.1 阶段级 phase)', en: '' },
|
|
439
601
|
'flow.migrate.dryRun': { key: 'help.flow.migrate.dryRun', zh: '仅检测预览,不实际写入文件', en: '' },
|
|
440
602
|
'flow.migrate.noBackup': { key: 'help.flow.migrate.noBackup', zh: '跳过 .bak 文件生成(默认生成 flow.json.v4.0.bak)', en: '' },
|
|
441
603
|
'flow.health': { key: 'help.flow.health', zh: '全面健康检查 flow.json / 跨文件一致性 / 僵尸状态 / config.yaml 等', en: '' },
|
|
442
604
|
'flow.health.quick': { key: 'help.flow.health.quick', zh: '仅检查关键项(phase/current 合法性,跳过其他检查)', en: '' },
|
|
605
|
+
'flow.health.json': { key: 'help.flow.health.json', zh: '以 JSON 输出', en: '' },
|
|
606
|
+
'flow.health.fix': { key: 'help.flow.health.fix', zh: '以 flow.json 为权威,回写 status.md 的「状态」字段(仅该字段)', en: '' },
|
|
607
|
+
'flow.health.dryRun': { key: 'help.flow.health.dryRun', zh: '仅预览(与 --fix 组合);不写入任何文件', en: '' },
|
|
443
608
|
'flow.checkpoint': { key: 'help.flow.checkpoint', zh: 'Checkpoint 快照管理(phase 推进时自动保存 flow.json 快照)', en: '' },
|
|
444
609
|
'flow.checkpoint.list': { key: 'help.flow.checkpoint.list', zh: '列出所有(或指定阶段的)Checkpoint 快照', en: '' },
|
|
610
|
+
'flow.checkpoint.list.argstage': { key: 'help.flow.checkpoint.list.argstage', zh: '阶段 ID(可选),如 v5.3-stage-01', en: '' },
|
|
445
611
|
'flow.checkpoint.restore': { key: 'help.flow.checkpoint.restore', zh: '从 Checkpoint 快照恢复 flow.json(覆盖当前文件,需 --force 确认)', en: '' },
|
|
612
|
+
'flow.checkpoint.restore.argcheckpoint-file': { key: 'help.flow.checkpoint.restore.argcheckpoint-file', zh: '快照文件名(如 v5.3-stage-01-20260807T162300-exec_running.json)', en: '' },
|
|
446
613
|
'flow.checkpoint.restore.force': { key: 'help.flow.checkpoint.restore.force', zh: '确认恢复操作(覆盖当前 flow.json)', en: '' },
|
|
447
614
|
'flow.recover': { key: 'help.flow.recover', zh: '跨会话上下文恢复:输出流水线状态、阻塞原因和待处理任务', en: '' },
|
|
448
615
|
'flow.wizard': { key: 'help.flow.wizard', zh: '交互式流水线向导,逐步推进阶段', en: '' },
|
|
@@ -450,57 +617,97 @@ export const help = {
|
|
|
450
617
|
'config.get-lang': { key: 'help.config.get-lang', zh: '显示全局默认语言', en: '' },
|
|
451
618
|
'config.set-lang': { key: 'help.config.set-lang', zh: '修改全局默认语言(zh-CN 或 en)', en: '' },
|
|
452
619
|
'config.list-projects': { key: 'help.config.list-projects', zh: '列出所有已记录的项目路径→语言映射', en: '' },
|
|
620
|
+
'config': { key: 'help.config', zh: '查看或修改项目配置', en: '' },
|
|
453
621
|
'config.get': { key: 'help.config.get', zh: '读取配置项的值(项目配置;--global 时读取全局 profile)', en: '' },
|
|
454
622
|
'config.get.global': { key: 'help.config.get.global', zh: '操作全局 profile(~/.config/openfeel/profile.yaml)', en: '' },
|
|
455
623
|
'config.set': { key: 'help.config.set', zh: '设置配置项的值(项目配置;--global 时写入全局 profile)', en: '' },
|
|
456
624
|
'config.set.global': { key: 'help.config.set.global', zh: '操作全局 profile(~/.config/openfeel/profile.yaml)', en: '' },
|
|
625
|
+
'config.effective': { key: 'help.config.effective', zh: '输出配置的有效值 + 生效来源(status.md > config.yaml > profile.yaml > builtin)', en: '' },
|
|
457
626
|
// project
|
|
458
627
|
'project': { key: 'help.project', zh: '项目管理与概览', en: '' },
|
|
459
628
|
'project.overview': { key: 'help.project.overview', zh: '实时扫描项目结构,输出结构化概览', en: '' },
|
|
460
629
|
// plan
|
|
461
630
|
'plan': { key: 'help.plan', zh: '计划管理', en: '' },
|
|
462
631
|
'plan.stage': { key: 'help.plan.stage', zh: '工作阶段管理', en: '' },
|
|
463
|
-
'plan.stage.add': { key: 'help.plan.stage.add', zh: '
|
|
632
|
+
'plan.stage.add': { key: 'help.plan.stage.add', zh: '添加工作阶段(完整入口:建目录 + overview/status + 注册 flow.json;仅注册请用 openfeel flow stage add)', en: '' },
|
|
633
|
+
'plan.stage.add.deps': { key: 'help.plan.stage.add.deps', zh: '依赖阶段 ID 列表(空格或逗号分隔,如 --deps a b 或 --deps a,b)', en: '' },
|
|
634
|
+
'plan.stage.add.argname': { key: 'help.plan.stage.add.argname', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
635
|
+
'plan.stage.add.tasks': { key: 'help.plan.stage.add.tasks', zh: '初始任务列表(空格或逗号分隔,生成到 status.md)', en: '' },
|
|
464
636
|
'plan.stage.list': { key: 'help.plan.stage.list', zh: '列出所有工作阶段', en: '' },
|
|
465
637
|
'plan.scheme': { key: 'help.plan.scheme', zh: '操作方案管理', en: '' },
|
|
466
638
|
'plan.scheme.create': { key: 'help.plan.scheme.create', zh: '创建操作方案', en: '' },
|
|
639
|
+
'plan.scheme.create.argstage': { key: 'help.plan.scheme.create.argstage', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
640
|
+
'plan.scheme.create.argtitle': { key: 'help.plan.scheme.create.argtitle', zh: '方案标题', en: '' },
|
|
641
|
+
'plan.scheme.create.draft': { key: 'help.plan.scheme.create.draft', zh: '以 draft(未发布)状态创建;填充后需 plan scheme publish 发布', en: '' },
|
|
467
642
|
'plan.scheme.list': { key: 'help.plan.scheme.list', zh: '列出操作方案(可选按阶段过滤)', en: '' },
|
|
643
|
+
'plan.scheme.list.argstage': { key: 'help.plan.scheme.list.argstage', zh: '阶段名(可选)', en: '' },
|
|
644
|
+
'plan.scheme.remove': { key: 'help.plan.scheme.remove', zh: '注销操作方案(仅从 flow.json 删除注册键,不删除 op 模板文件)', en: '' },
|
|
645
|
+
'plan.scheme.remove.force': { key: 'help.plan.scheme.remove.force', zh: '越过保护校验(op 已 done / 存在 checkpoint 进展)', en: '' },
|
|
646
|
+
'plan.scheme.remove.dryRun': { key: 'help.plan.scheme.remove.dryRun', zh: '仅预览,不写盘', en: '' },
|
|
647
|
+
'plan.scheme.remove.argstage': { key: 'help.plan.scheme.remove.argstage', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
648
|
+
'plan.scheme.remove.argopId': { key: 'help.plan.scheme.remove.argopId', zh: '操作方案 ID(如 op-001 或完整 stage.op-001)', en: '' },
|
|
649
|
+
'plan.scheme.publish': { key: 'help.plan.scheme.publish', zh: '将 draft 操作方案发布为执行态(draft → pending)', en: '' },
|
|
650
|
+
'plan.scheme.publish.argstage': { key: 'help.plan.scheme.publish.argstage', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
651
|
+
'plan.scheme.publish.argopId': { key: 'help.plan.scheme.publish.argopId', zh: '操作方案 ID(如 op-001 或完整 stage.op-001)', en: '' },
|
|
652
|
+
'plan.scheme.rename': { key: 'help.plan.scheme.rename', zh: '更新操作方案标题', en: '' },
|
|
653
|
+
'plan.scheme.rename.title': { key: 'help.plan.scheme.rename.title', zh: '新标题(必填)', en: '' },
|
|
654
|
+
'plan.scheme.rename.argstage': { key: 'help.plan.scheme.rename.argstage', zh: '阶段 ID(如 stage-01 或 v1.0.0-stage-01)', en: '' },
|
|
655
|
+
'plan.scheme.rename.argopId': { key: 'help.plan.scheme.rename.argopId', zh: '操作方案 ID(如 op-001 或完整 stage.op-001)', en: '' },
|
|
468
656
|
// stage
|
|
469
657
|
'stage': { key: 'help.stage', zh: '工作阶段状态管理(status.md 原子操作)', en: '' },
|
|
470
658
|
'stage.status': { key: 'help.stage.status', zh: '查看阶段状态(无参数时列出所有阶段)', en: '' },
|
|
659
|
+
'stage.status.argstageId': { key: 'help.stage.status.argstageId', zh: '阶段 ID(如 v4-stage-04)', en: '' },
|
|
471
660
|
'stage.set': { key: 'help.stage.set', zh: '设置阶段状态字段(原子更新,保留其余内容不变)', en: '' },
|
|
661
|
+
'stage.set.argstageId': { key: 'help.stage.set.argstageId', zh: '阶段 ID(如 v4-stage-04)', en: '' },
|
|
472
662
|
'stage.set.status': { key: 'help.stage.set.status', zh: '状态值(如 exec_running)', en: '' },
|
|
473
|
-
'stage.
|
|
663
|
+
'stage.set.execMode': { key: 'help.stage.set.execMode', zh: '执行模式(manual | auto)', en: '' },
|
|
664
|
+
'stage.set.autoAdvance': { key: 'help.stage.set.autoAdvance', zh: '自动推进(enabled | disabled)', en: '' },
|
|
665
|
+
'stage.set.reviewAgent': { key: 'help.stage.set.reviewAgent', zh: '当前责任 Agent(如 openfeel-executor)', en: '' },
|
|
666
|
+
'stage.task': { key: 'help.stage.task', zh: '勾选/取消任务 checkbox,或追加任务', en: '' },
|
|
667
|
+
'stage.task.argstageId': { key: 'help.stage.task.argstageId', zh: '阶段 ID(如 v4-stage-04)', en: '' },
|
|
668
|
+
'stage.task.argtaskNo': { key: 'help.stage.task.argtaskNo', zh: '任务编号(如 1)', en: '' },
|
|
669
|
+
'stage.task.add': { key: 'help.stage.task.add', zh: '追加一条任务(与 --done/--undone 互斥)', en: '' },
|
|
474
670
|
'stage.task.done': { key: 'help.stage.task.done', zh: '标记任务为已完成', en: '' },
|
|
475
671
|
'stage.task.undone': { key: 'help.stage.task.undone', zh: '标记任务为未完成', en: '' },
|
|
476
|
-
'stage.create': { key: 'help.stage.create', zh: '
|
|
672
|
+
'stage.create': { key: 'help.stage.create', zh: '创建新阶段(已弃用,请改用 openfeel flow stage add)', en: '' },
|
|
673
|
+
'stage.create.argstageId': { key: 'help.stage.create.argstageId', zh: '阶段 ID(如 v1.0.0-stage-30)', en: '' },
|
|
477
674
|
// view
|
|
478
675
|
'view': { key: 'help.view', zh: '审查条目管理', en: '' },
|
|
479
676
|
'view.list': { key: 'help.view.list', zh: '列出审查条目', en: '' },
|
|
480
677
|
'view.list.op': { key: 'help.view.list.op', zh: '按操作 ID 过滤', en: '' },
|
|
481
|
-
'view.
|
|
482
|
-
'view.add.op': { key: 'help.view.add.op', zh: '操作 ID(如 stage-01.op-001)', en: '' },
|
|
483
|
-
'view.add.title': { key: 'help.view.add.title', zh: '审查标题', en: '' },
|
|
484
|
-
'view.add.priority': { key: 'help.view.add.priority', zh: '优先级(high/medium/low,默认 medium)', en: '' },
|
|
678
|
+
'view.note': { key: 'help.view.note', zh: '新增/修改/删除审查条目请使用 `openfeel flow review add|update|remove`', en: '' },
|
|
485
679
|
'view.accept': { key: 'help.view.accept', zh: '验收审查条目(标记为 closed)', en: '' },
|
|
680
|
+
'view.accept.argrev-id': { key: 'help.view.accept.argrev-id', zh: '审查条目 ID(如 REV-001)', en: '' },
|
|
486
681
|
// knowledge
|
|
487
682
|
'knowledge': { key: 'help.knowledge', zh: '知识库管理', en: '' },
|
|
488
683
|
'knowledge.list': { key: 'help.knowledge.list', zh: '列出知识条目', en: '' },
|
|
489
684
|
'knowledge.list.type': { key: 'help.knowledge.list.type', zh: '按分类过滤', en: '' },
|
|
490
685
|
'knowledge.add': { key: 'help.knowledge.add', zh: '添加知识条目', en: '' },
|
|
686
|
+
'knowledge.add.argcategory': { key: 'help.knowledge.add.argcategory', zh: '分类(architecture | patterns | troubleshooting | setup)', en: '' },
|
|
687
|
+
'knowledge.add.argtitle': { key: 'help.knowledge.add.argtitle', zh: '条目标题', en: '' },
|
|
491
688
|
'knowledge.add.content': { key: 'help.knowledge.add.content', zh: '条目内容(也可通过管道 stdin 传入)', en: '' },
|
|
492
689
|
'knowledge.search': { key: 'help.knowledge.search', zh: '搜索知识库', en: '' },
|
|
690
|
+
'knowledge.search.argquery': { key: 'help.knowledge.search.argquery', zh: '搜索关键词', en: '' },
|
|
493
691
|
'knowledge.search.limit': { key: 'help.knowledge.search.limit', zh: '返回结果数量上限(默认 10)', en: '' },
|
|
494
692
|
'knowledge.search.offset': { key: 'help.knowledge.search.offset', zh: '结果偏移量(默认 0)', en: '' },
|
|
495
693
|
'knowledge.index': { key: 'help.knowledge.index', zh: '显示知识库索引概览', en: '' },
|
|
694
|
+
'knowledge.dedup': { key: 'help.knowledge.dedup', zh: '检索相似知识条目(只读建议,不修改 kb)', en: '' },
|
|
695
|
+
'knowledge.dedup.argcontent': { key: 'help.knowledge.dedup.argcontent', zh: '待归档内容(省略时从标准输入读取)', en: '' },
|
|
696
|
+
'knowledge.dedup.project': { key: 'help.knowledge.dedup.project', zh: '目标项目根路径(默认当前目录)', en: '' },
|
|
697
|
+
'knowledge.dedup.category': { key: 'help.knowledge.dedup.category', zh: '仅检查指定分类(architecture|patterns|troubleshooting|setup)', en: '' },
|
|
698
|
+
'knowledge.dedup.threshold': { key: 'help.knowledge.dedup.threshold', zh: '相似度阈值 0~1(默认 0.8)', en: '' },
|
|
496
699
|
// archive
|
|
497
700
|
'archive': { key: 'help.archive', zh: '归档指定阶段(汇总产出、生成摘要、提取知识)', en: '' },
|
|
701
|
+
'archive.argstage': { key: 'help.archive.argstage', zh: '阶段名称(如 stage-06)', en: '' },
|
|
498
702
|
// roadmap
|
|
499
703
|
'roadmap': { key: 'help.roadmap', zh: '分期大纲管理', en: '' },
|
|
500
704
|
'roadmap.create': { key: 'help.roadmap.create', zh: '创建分期大纲(版本号如 1.0、2.0)', en: '' },
|
|
705
|
+
'roadmap.create.argversion': { key: 'help.roadmap.create.argversion', zh: '版本号', en: '' },
|
|
501
706
|
'roadmap.show': { key: 'help.roadmap.show', zh: '显示分期大纲内容(不传版本则列出所有)', en: '' },
|
|
707
|
+
'roadmap.show.argversion': { key: 'help.roadmap.show.argversion', zh: '版本号(可选)', en: '' },
|
|
502
708
|
// instructions
|
|
503
709
|
'instructions': { key: 'help.instructions', zh: '为指定 artifact 生成结构化指令(XML 或 JSON)', en: '' },
|
|
710
|
+
'instructions.argartifactId': { key: 'help.instructions.argartifactId', zh: '目标 artifact ID(如 proposal、implementation)', en: '' },
|
|
504
711
|
'instructions.change': { key: 'help.instructions.change', zh: '变更名称(如 feat-login)', en: '' },
|
|
505
712
|
'instructions.json': { key: 'help.instructions.json', zh: '输出 JSON 格式而非 XML', en: '' },
|
|
506
713
|
'instructions.schema': { key: 'help.instructions.schema', zh: 'Schema 名称(默认 spec-driven)', en: '' },
|
|
@@ -514,7 +721,7 @@ export const help = {
|
|
|
514
721
|
'migrate.remapAssignee': { key: 'help.migrate.remapAssignee', zh: '改写 flow.json 旧 assignee 为新名(默认仅报告)', en: '' },
|
|
515
722
|
'migrate.rollback': { key: 'help.migrate.rollback', zh: '回滚最近一次迁移', en: '' },
|
|
516
723
|
'migrate.rollback.dryRun': { key: 'help.migrate.rollback.dryRun', zh: '仅预览回滚计划', en: '' },
|
|
517
|
-
'migrate.cleanGlobalCoreMd': { key: 'help.migrate.cleanGlobalCoreMd', zh: '删除已废弃的全局 core.md
|
|
724
|
+
'migrate.cleanGlobalCoreMd': { key: 'help.migrate.cleanGlobalCoreMd', zh: '删除已废弃的全局 core.md(opencode 适配器:~/.config/opencode/openfeel/core.md)', en: '' },
|
|
518
725
|
// model(模型配置)
|
|
519
726
|
'model': { key: 'help.model', zh: '模型配置(三层级 set/get/list)', en: '' },
|
|
520
727
|
'model.set': { key: 'help.model.set', zh: '设置指定 agent 的模型', en: '' },
|
|
@@ -528,6 +735,10 @@ export const help = {
|
|
|
528
735
|
};
|
|
529
736
|
/* ==================== config 域:配置管理命令 ==================== */
|
|
530
737
|
export const config = {
|
|
738
|
+
'desc': { key: 'config.desc', zh: '查看或修改项目配置', en: '' },
|
|
739
|
+
'getLang.desc': { key: 'config.getLang.desc', zh: '查看 CLI 语言设置', en: '' },
|
|
740
|
+
'get.parseErrorWarn': { key: 'config.get.parseErrorWarn', zh: '配置文件解析失败,已按空值处理:{path}', en: '' },
|
|
741
|
+
'effective.invalidValueSkipped': { key: 'config.effective.invalidValueSkipped', zh: '配置项 {key} 取值非法,已跳过:{reason}', en: '' },
|
|
531
742
|
'get.lang': { key: 'config.get.lang', zh: '全局语言:{lang}', en: '' },
|
|
532
743
|
'set.ok': { key: 'config.set.ok', zh: '全局语言已设置为:{lang}', en: '' },
|
|
533
744
|
'set.invalidLang': { key: 'config.set.invalidLang', zh: '无效的语言值 "{val}",仅支持 zh-CN 和 en', en: '' },
|
|
@@ -547,12 +758,19 @@ export const config = {
|
|
|
547
758
|
'set.globalInvalidValue': { key: 'config.set.globalInvalidValue', zh: '无效的值 "{val}"。{key} 仅支持:{values}', en: '' },
|
|
548
759
|
'set.globalValueOk': { key: 'config.set.globalValueOk', zh: '✓ 全局配置已设置:{key} = {value}', en: '' },
|
|
549
760
|
'set.globalAllowedKeys': { key: 'config.set.globalAllowedKeys', zh: '支持的全局配置键:{keys}', en: '' },
|
|
761
|
+
'effective.title': { key: 'config.effective.title', zh: '配置有效值与来源', en: '' },
|
|
762
|
+
'effective.row': { key: 'config.effective.row', zh: '{key}:{value} [来源: {source}]', en: '' },
|
|
763
|
+
'effective.unknownKey': { key: 'config.effective.unknownKey', zh: '未知配置键:{key}(受管键:{keys})', en: '' },
|
|
764
|
+
// config profile warn(L5:ensureProfileDefaults,projectPath 上下文)
|
|
765
|
+
'profile.parseErrorSkipTmpl': { key: 'config.profile.parseErrorSkipTmpl', zh: '[profile] {err};已跳过自动填充写回以保护现有文件', en: '' },
|
|
766
|
+
'profile.writeFailSkipTmpl': { key: 'config.profile.writeFailSkipTmpl', zh: '[profile] 自动填充写盘失败,已跳过:{err}', en: '' },
|
|
550
767
|
};
|
|
551
768
|
/* ==================== migrate 域:legacy 布局迁移命令 ==================== */
|
|
552
769
|
export const migrate = {
|
|
553
770
|
// legacy 布局通用
|
|
554
771
|
'legacy.alreadyLatest': { key: 'migrate.legacy.alreadyLatest', zh: '✓ 已是最新布局,无需迁移', en: '' },
|
|
555
772
|
'legacy.done': { key: 'migrate.legacy.done', zh: '迁移完成', en: '' },
|
|
773
|
+
'globalJsoncParseSkipTmpl': { key: 'migrate.globalJsoncParseSkipTmpl', zh: '[migrate] 全局 opencode.jsonc 解析失败(可能含块注释),跳过合并保留原文件: {err}', en: '' },
|
|
556
774
|
// detect 检测报告
|
|
557
775
|
'detect.title': { key: 'migrate.detect.title', zh: 'Legacy 布局检测报告:', en: '' },
|
|
558
776
|
'detect.dryRunTitle': { key: 'migrate.detect.dryRunTitle', zh: '[DRY-RUN 模式] 以下迁移计划将被执行(未写盘):', en: '' },
|
|
@@ -568,13 +786,14 @@ export const migrate = {
|
|
|
568
786
|
'rollback.dryRunTitle': { key: 'migrate.rollback.dryRunTitle', zh: '[DRY-RUN 模式] 回滚将恢复以下文件(未写盘):', en: '' },
|
|
569
787
|
'rollback.done': { key: 'migrate.rollback.done', zh: '✓ 回滚完成,已恢复:', en: '' },
|
|
570
788
|
'rollback.failed': { key: 'migrate.rollback.failed', zh: '✗ 回滚失败:{message}', en: '' },
|
|
789
|
+
'rollback.wrongDir': { key: 'migrate.rollback.wrongDir', zh: '当前目录不是项目根(未发现迁移标记);请在项目根执行 migrate rollback', en: '' },
|
|
571
790
|
// error
|
|
572
791
|
'error.pathNotExist': { key: 'migrate.error.pathNotExist', zh: '路径不存在:{path}', en: '' },
|
|
573
792
|
'error.aborted': { key: 'migrate.error.aborted', zh: '迁移中止,可执行 `openfeel migrate rollback` 回滚:{message}', en: '' },
|
|
574
793
|
// deprecated(v1.1.1 兼容过渡)
|
|
575
|
-
'deprecated.globalCoreMd': { key: 'migrate.deprecated.globalCoreMd', zh: '⚠ 检测到已废弃的全局 core.md
|
|
794
|
+
'deprecated.globalCoreMd': { key: 'migrate.deprecated.globalCoreMd', zh: '⚠ 检测到已废弃的全局 core.md(opencode 适配器:~/.config/opencode/openfeel/core.md),约束已并入全局 AGENTS.md', en: '' },
|
|
576
795
|
'deprecated.globalCoreMdHint': { key: 'migrate.deprecated.globalCoreMdHint', zh: '可运行 openfeel migrate --clean-global-core-md 删除,或手动删除', en: '' },
|
|
577
|
-
'deprecated.projectAgentsMd': { key: 'migrate.deprecated.projectAgentsMd', zh: 'ℹ 检测到项目 AGENTS.md
|
|
796
|
+
'deprecated.projectAgentsMd': { key: 'migrate.deprecated.projectAgentsMd', zh: 'ℹ 检测到项目 AGENTS.md(存量项目约束,现已收归全局规则文件(opencode 适配器:~/.config/opencode/AGENTS.md)),可保留或手动删除', en: '' },
|
|
578
797
|
};
|
|
579
798
|
/* ==================== model 域:模型配置(stage-40) ==================== */
|
|
580
799
|
export const model = {
|
|
@@ -590,8 +809,8 @@ export const model = {
|
|
|
590
809
|
// get
|
|
591
810
|
'get.effective': { key: 'model.get.effective', zh: '生效模型:{value}', en: '' },
|
|
592
811
|
'get.byScope': { key: 'model.get.byScope', zh: ' {scope}:{value}', en: '' },
|
|
593
|
-
'get.none': { key: 'model.get.none', zh: '
|
|
594
|
-
'get.inconsistent': { key: 'model.get.inconsistent', zh: '⚠ default 层多源不一致(frontmatter
|
|
812
|
+
'get.none': { key: 'model.get.none', zh: '(未显式设置,走平台默认;当前适配器 opencode)', en: '' },
|
|
813
|
+
'get.inconsistent': { key: 'model.get.inconsistent', zh: '⚠ default 层多源不一致(frontmatter 与适配器默认配置值不同),以 frontmatter 为准', en: '' },
|
|
595
814
|
'get.shadowed': { key: 'model.get.shadowed', zh: '⚠ project/global 设置被框架默认 frontmatter 遮蔽(default 优先),如需修改生效值请用 --scope default', en: '' },
|
|
596
815
|
'get.failed': { key: 'model.get.failed', zh: '✗ 读取失败:{message}', en: '' },
|
|
597
816
|
// list
|
|
@@ -602,10 +821,31 @@ export const model = {
|
|
|
602
821
|
/* ==================== setup 域:全局部署(v1.1.1) ==================== */
|
|
603
822
|
export const setup = {
|
|
604
823
|
'created': { key: 'setup.created', zh: '已创建全局文件:', en: '' },
|
|
824
|
+
'globalJsoncParseSkipTmpl': { key: 'setup.globalJsoncParseSkipTmpl', zh: '[setup] 全局平台适配器配置(opencode.jsonc)解析失败,跳过合并保留原文件: {err}', en: '' },
|
|
825
|
+
'globalJsoncWriteSkipTmpl': { key: 'setup.globalJsoncWriteSkipTmpl', zh: '[setup] {err};已跳过全局 opencode.jsonc 写入,继续其余步骤', en: '' },
|
|
605
826
|
'updated': { key: 'setup.updated', zh: '已更新全局文件:', en: '' },
|
|
606
827
|
'appended': { key: 'setup.appended', zh: '需人工确认的全局文件(已存在且非受管,未覆盖):', en: '' },
|
|
607
828
|
'complete': { key: 'setup.complete', zh: '✓ 全局 OpenFeel 框架配置部署完成', en: '' },
|
|
608
829
|
};
|
|
830
|
+
/* ==================== metrics 域:Agent 性能摘要(T15) ==================== */
|
|
831
|
+
export const metrics = {
|
|
832
|
+
'summary.noData': { key: 'metrics.summary.noData', zh: '暂无 Agent 性能数据。', en: '' },
|
|
833
|
+
'summary.title': { key: 'metrics.summary.title', zh: 'Agent 性能指标摘要', en: '' },
|
|
834
|
+
'summary.totalRuns': { key: 'metrics.summary.totalRuns', zh: ' 总执行次数: {n}', en: '' },
|
|
835
|
+
'summary.successFail': { key: 'metrics.summary.successFail', zh: ' 成功 / 失败: {ok} / {fail}', en: '' },
|
|
836
|
+
'summary.successRate': { key: 'metrics.summary.successRate', zh: ' 成功率: {rate}', en: '' },
|
|
837
|
+
'summary.totalRetries': { key: 'metrics.summary.totalRetries', zh: ' 总重试次数: {n}', en: '' },
|
|
838
|
+
'summary.totalDuration': { key: 'metrics.summary.totalDuration', zh: ' 总耗时: {n}ms', en: '' },
|
|
839
|
+
'summary.avgDuration': { key: 'metrics.summary.avgDuration', zh: ' 平均耗时: {n}ms', en: '' },
|
|
840
|
+
};
|
|
841
|
+
/* ==================== repl 域:交互模式(T40) ==================== */
|
|
842
|
+
export const repl = {
|
|
843
|
+
'prompt': { key: 'repl.prompt', zh: 'openfeel> ', en: '' },
|
|
844
|
+
'welcome': { key: 'repl.welcome', zh: 'OpenFeel REPL 交互模式(输入 exit 退出,help 查看命令)', en: '' },
|
|
845
|
+
'bye': { key: 'repl.bye', zh: '再见!', en: '' },
|
|
846
|
+
'helpTitle': { key: 'repl.helpTitle', zh: '可用命令:', en: '' },
|
|
847
|
+
'errorPrefix': { key: 'repl.errorPrefix', zh: '错误:', en: '' },
|
|
848
|
+
};
|
|
609
849
|
/* ==================== 聚合导出 ==================== */
|
|
610
850
|
/** 所有功能域的聚合数组(供 i18n.ts 构建 Map 使用) */
|
|
611
851
|
export const allDomains = [
|
|
@@ -627,5 +867,7 @@ export const allDomains = [
|
|
|
627
867
|
{ name: 'migrate', domain: migrate },
|
|
628
868
|
{ name: 'model', domain: model },
|
|
629
869
|
{ name: 'setup', domain: setup },
|
|
870
|
+
{ name: 'metrics', domain: metrics },
|
|
871
|
+
{ name: 'repl', domain: repl },
|
|
630
872
|
];
|
|
631
873
|
//# sourceMappingURL=zh-CN.js.map
|