openfeel 1.1.6 → 1.1.7
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 +13 -2
- package/README.md +10 -1
- package/README.zh-CN.md +13 -2
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +66 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/flow.d.ts +8 -0
- package/dist/commands/flow.d.ts.map +1 -1
- package/dist/commands/flow.js +169 -10
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +59 -2
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/stage.d.ts.map +1 -1
- package/dist/commands/stage.js +56 -2
- package/dist/commands/stage.js.map +1 -1
- package/dist/core/config.d.ts +17 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +21 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/flow-manager.d.ts +71 -14
- package/dist/core/flow-manager.d.ts.map +1 -1
- package/dist/core/flow-manager.js +266 -51
- package/dist/core/flow-manager.js.map +1 -1
- package/dist/core/i18n-data/en.d.ts.map +1 -1
- package/dist/core/i18n-data/en.js +25 -3
- package/dist/core/i18n-data/en.js.map +1 -1
- package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
- package/dist/core/i18n-data/zh-CN.js +26 -3
- package/dist/core/i18n-data/zh-CN.js.map +1 -1
- package/dist/core/pipeline-schema.d.ts +5 -0
- package/dist/core/pipeline-schema.d.ts.map +1 -1
- package/dist/core/pipeline-schema.js +5 -0
- package/dist/core/pipeline-schema.js.map +1 -1
- package/dist/core/plan/scheme.d.ts +22 -0
- package/dist/core/plan/scheme.d.ts.map +1 -1
- package/dist/core/plan/scheme.js +71 -2
- package/dist/core/plan/scheme.js.map +1 -1
- package/dist/core/plan/stage.d.ts +2 -0
- package/dist/core/plan/stage.d.ts.map +1 -1
- package/dist/core/plan/stage.js +8 -0
- package/dist/core/plan/stage.js.map +1 -1
- package/dist/core/template-loader.d.ts.map +1 -1
- package/dist/core/template-loader.js +353 -62
- package/dist/core/template-loader.js.map +1 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +45 -12
- package/dist/core/update.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -69,9 +69,20 @@ openfeel flow status
|
|
|
69
69
|
- **Upgrade**: `npm i -g openfeel@latest` → `openfeel setup --tools claude`; **after the first creation of `~/.claude/{agents,skills}`, restart the session or run `/reload-skills`** to load new skills/agents; `CLAUDE.md` takes effect on the **next session**. `npm i -g` alone does not refresh global assets.
|
|
70
70
|
- **Zero-touch by default**: without `--tools`, `~/.claude/` is **unchanged**.
|
|
71
71
|
|
|
72
|
+
## Fast Iteration Mode (since v1.1.7)
|
|
73
|
+
|
|
74
|
+
> **Coexists** with the full pipeline; new deployments default to **fast** (`config.yaml defaults.workflow_mode`), overridable per stage.
|
|
75
|
+
|
|
76
|
+
- **Fast line**: `plan_pending → plan_review → plan_passed → exec_running → review_pending → review_passed → archiving → done` (skips 6 phases: `scheme_*` / `test_*`; **plan review and code review each keep a single round**; `review_failed` loops back for retries).
|
|
77
|
+
- **Choose and switch**: `openfeel plan stage add <name> --workflow-mode full|fast` (new stage); `openfeel stage set <stage> --workflow-mode full|fast` (per-stage switch); `openfeel config set defaults.workflow_mode full|fast` (project-level default memory).
|
|
78
|
+
- **Inspect (read-only)**: `openfeel flow mode [--stage <id>] [--json]` (current mode + source); `openfeel flow phases [--mode full|fast] [--stage <id>]` (view the transition table per mode).
|
|
79
|
+
- **Auto-advance enabled by default**: new deployments default to `auto_advance: enabled` (since v1.1.7); to disable: `openfeel config set auto_advance disabled`.
|
|
80
|
+
|
|
81
|
+
Upgrade/migration notes: see [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md) ("工作流模式(full / fast)与自动推进" section, Chinese) and [CHANGELOG.md](CHANGELOG.md) `[1.1.7]`.
|
|
82
|
+
|
|
72
83
|
## What's New in v1.1.2
|
|
73
84
|
|
|
74
|
-
- **Self-description**: `flow phases [--json]` lists all valid phases and the transition table (
|
|
85
|
+
- **Self-description**: `flow phases [--json]` lists all valid phases and the transition table (6 top-level JSON keys: `schemaVersion` / `phases` / `transitions` / `advanceAccepted` / `transitionsDiff` / `workflowMode` (added in v1.1.7; existing five keys unchanged verbatim)).
|
|
75
86
|
- **Stage governance**: `flow stage remove` / `plan stage add --deps` / `stageId` validation and directory-conflict detection.
|
|
76
87
|
- **Effective config**: `config effective` prints the resolved value plus its source (`status.md > config.yaml > profile.yaml > builtin`).
|
|
77
88
|
- **Structured output**: `flow status/current/health/metrics/overview --json` (pure JSON + `schemaVersion`).
|
|
@@ -189,7 +200,7 @@ Core Layer
|
|
|
189
200
|
```bash
|
|
190
201
|
npm install # Install dependencies
|
|
191
202
|
npm run build # Compile TypeScript
|
|
192
|
-
npm test # Run tests (
|
|
203
|
+
npm test # Run tests (1306 cases / 67 test files; Linux CI skips 1 Windows-only case)
|
|
193
204
|
```
|
|
194
205
|
|
|
195
206
|
## Acknowledgments
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
OpenFeel 是一个 TypeScript CLI 工具,为 AI Agent 开发提供端到端的流程治理。核心理念:**「提示词瘦身,流程入工具」** —— Agent 不靠读长文本理解流程,而是通过 `flow.json` 获取当前状态和下一步指令。
|
|
10
10
|
|
|
11
|
-
> 📦 **最新版本 v1.1.
|
|
11
|
+
> 📦 **最新版本 v1.1.7**(快速迭代模式 fast workflow mode / 双模式流水线) — 自描述 `flow phases`、配置有效值 `config effective`、部署前自动备份;框架资产(agents/skills/AGENTS.md)全局部署。
|
|
12
12
|
|
|
13
13
|
> 📌 本项目基于 [AI_Prompt](https://github.com/Liuary/AI_Prompt) 开发,参考了 [OpenSpec](https://github.com/Fission-AI/OpenSpec) 等工具的设计思路。
|
|
14
14
|
|
|
@@ -39,4 +39,13 @@ npm install -g openfeel@latest # 更新到最新版本
|
|
|
39
39
|
- **升级**:`npm i -g openfeel@latest` → `openfeel setup --tools claude`;**首次创建 `~/.claude/{agents,skills}` 后须重启会话或 `/reload-skills`** 使新 skill/agent 生效;`CLAUDE.md` 于**下次会话**生效。仅 `npm i -g` 不刷新全局资产。
|
|
40
40
|
- **默认零触**:不带 `--tools` 时 `~/.claude/` **零变化**。
|
|
41
41
|
|
|
42
|
+
## 快速迭代模式(v1.1.7 起)
|
|
43
|
+
|
|
44
|
+
> 与完整流水线(full)**并存**;新部署默认 **fast**(`config.yaml defaults.workflow_mode`),可逐阶段覆盖与切回。
|
|
45
|
+
|
|
46
|
+
- **快线链**:`plan_pending → plan_review → plan_passed → exec_running → review_pending → review_passed → archiving → done`(跳过 6 项 `scheme_*` / `test_*`;**计划审查与代码审查保留单轮**,`review_failed` 可回环重试)。
|
|
47
|
+
- **选择与切换**:`openfeel plan stage add <name> --workflow-mode full|fast`(新建阶段);`openfeel stage set <stage> --workflow-mode full|fast`(单阶段切回);`openfeel config set defaults.workflow_mode full|fast`(项目默认记忆)。
|
|
48
|
+
- **查看(只读)**:`openfeel flow mode [--stage <id>] [--json]`(当前模式 + 来源);`openfeel flow phases [--mode full|fast] [--stage <id>]`(按模式查看转移表)。
|
|
49
|
+
- **默认自动推进开启**:新部署默认 `auto_advance: enabled`(v1.1.7 起);如需关闭:`openfeel config set auto_advance disabled`。
|
|
50
|
+
|
|
42
51
|
完整中文文档:[README.zh-CN.md](README.zh-CN.md)(详见其中的「Claude Code 适配器」小节)
|
package/README.zh-CN.md
CHANGED
|
@@ -69,9 +69,20 @@ openfeel flow status
|
|
|
69
69
|
- **升级**:`npm i -g openfeel@latest` → `openfeel setup --tools claude`;**首次创建 `~/.claude/{agents,skills}` 后须重启会话或 `/reload-skills`** 使新 skill/agent 生效;`CLAUDE.md` 于**下次会话**生效。仅 `npm i -g` 不刷新全局资产。
|
|
70
70
|
- **默认零触**:不带 `--tools` 时 `~/.claude/` **零变化**。
|
|
71
71
|
|
|
72
|
+
## 快速迭代模式(v1.1.7 起)
|
|
73
|
+
|
|
74
|
+
> 与完整流水线(full)**并存**;新部署默认 **fast**(`config.yaml defaults.workflow_mode`),可逐阶段覆盖与切回。
|
|
75
|
+
|
|
76
|
+
- **快线链**:`plan_pending → plan_review → plan_passed → exec_running → review_pending → review_passed → archiving → done`(跳过 6 项 `scheme_*` / `test_*`;**计划审查与代码审查保留单轮**,`review_failed` 可回环重试)。
|
|
77
|
+
- **选择与切换**:`openfeel plan stage add <name> --workflow-mode full|fast`(新建阶段);`openfeel stage set <stage> --workflow-mode full|fast`(单阶段切回);`openfeel config set defaults.workflow_mode full|fast`(项目默认记忆)。
|
|
78
|
+
- **查看(只读)**:`openfeel flow mode [--stage <id>] [--json]`(当前模式 + 来源);`openfeel flow phases [--mode full|fast] [--stage <id>]`(按模式查看转移表)。
|
|
79
|
+
- **默认自动推进开启**:新部署默认 `auto_advance: enabled`(v1.1.7 起);如需关闭:`openfeel config set auto_advance disabled`。
|
|
80
|
+
|
|
81
|
+
升级迁移提示见 [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md)「工作流模式(full / fast)与自动推进」小节与 [CHANGELOG.md](CHANGELOG.md) `[1.1.7]`。
|
|
82
|
+
|
|
72
83
|
## v1.1.2 新增能力
|
|
73
84
|
|
|
74
|
-
- **自描述**:`flow phases [--json]` 输出全部合法 phase 与转移表(JSON 顶层
|
|
85
|
+
- **自描述**:`flow phases [--json]` 输出全部合法 phase 与转移表(JSON 顶层 6 键:`schemaVersion` / `phases` / `transitions` / `advanceAccepted` / `transitionsDiff` / `workflowMode`(v1.1.7 追加,既有五键语义逐字不变))。
|
|
75
86
|
- **阶段治理**:`flow stage remove` / `plan stage add --deps` / `stageId` 校验与目录冲突检测。
|
|
76
87
|
- **配置有效值**:`config effective` 输出有效值 + 生效来源(`status.md > config.yaml > profile.yaml > builtin`)。
|
|
77
88
|
- **结构化输出**:`flow status/current/health/metrics/overview --json`(纯 JSON + `schemaVersion`)。
|
|
@@ -189,7 +200,7 @@ Core 层
|
|
|
189
200
|
```bash
|
|
190
201
|
npm install # 安装依赖
|
|
191
202
|
npm run build # 编译 TypeScript
|
|
192
|
-
npm test # 运行测试(
|
|
203
|
+
npm test # 运行测试(1306 用例 / 67 个测试文件;Linux CI 跳过 1 个 Windows 专属用例)
|
|
193
204
|
```
|
|
194
205
|
|
|
195
206
|
## 致谢
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DpC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsT5D"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getGlobalConfig, setGlobalConfig } from '../core/workspace/identity.js';
|
|
2
2
|
import { getConfigValue, setConfigValue, readProfile, writeProfile, ProfileSchema, ConfigDefaultsSchema, getConfigFieldLegalValues, normalizeConfigKey, STAGE_FIELD_BY_CONFIG_KEY } from '../core/config.js';
|
|
3
3
|
import { FlowManager } from '../core/flow-manager.js';
|
|
4
|
+
import { normalizeStageId, suggestStageId } from '../core/plan/path.js';
|
|
4
5
|
import { t, getCliLang } from '../core/i18n.js';
|
|
5
6
|
/** 全局配置 key 白名单:key → 合法值列表(null 表示任意 string) */
|
|
6
7
|
const GLOBAL_ALLOWED_KEYS = {
|
|
@@ -164,9 +165,22 @@ export function registerConfigCommand(program) {
|
|
|
164
165
|
.description(t('help.config.set'))
|
|
165
166
|
.option('-g, --global', '操作全局 profile(~/.config/openfeel/profile.yaml)')
|
|
166
167
|
.option('--sync-stages', '将配置值同步写入所有已注册阶段的 status.md 对应字段(仅项目模式)')
|
|
168
|
+
.option('--stage <ids...>', '限定同步的阶段 ID 列表(仅与 --sync-stages 组合;空格或逗号分隔)')
|
|
167
169
|
.action(function (key, value) {
|
|
168
170
|
const opts = this.opts();
|
|
169
171
|
const lang = getCliLang(process.cwd());
|
|
172
|
+
// --stage 仅可与 --sync-stages 组合(单独使用 → exit 1,防静默无效参数)
|
|
173
|
+
if (opts.stage !== undefined && !opts.syncStages) {
|
|
174
|
+
console.error(t('common.errorTmpl', lang, { msg: '--stage 仅可与 --sync-stages 组合使用' }));
|
|
175
|
+
process.exit(1);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// --stage 仅项目模式可用(与 --global 组合 → exit 1)
|
|
179
|
+
if (opts.global && opts.stage !== undefined) {
|
|
180
|
+
console.error(t('common.errorTmpl', lang, { msg: '--stage 仅项目模式可用(不能与 --global 组合)' }));
|
|
181
|
+
process.exit(1);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
170
184
|
// --sync-stages 仅项目模式可用(与 --global 组合 → exit 1)
|
|
171
185
|
if (opts.global && opts.syncStages) {
|
|
172
186
|
console.error(t('common.errorTmpl', lang, { msg: '--sync-stages 仅项目模式可用(不能与 --global 组合)' }));
|
|
@@ -228,6 +242,35 @@ export function registerConfigCommand(program) {
|
|
|
228
242
|
process.exit(1);
|
|
229
243
|
return;
|
|
230
244
|
}
|
|
245
|
+
// --stage 前置全量校验(D1:解析 → 归一 → 注册校验;任一失败 → exit 1 且 config.yaml/status.md 零写盘)
|
|
246
|
+
let onlyStages;
|
|
247
|
+
if (opts.syncStages && opts.stage !== undefined) {
|
|
248
|
+
const projectPath = process.cwd();
|
|
249
|
+
// 变长参数:空格 / 逗号两种写法(与 --deps 同款)
|
|
250
|
+
const parsedIds = opts.stage
|
|
251
|
+
.flatMap((s) => s.split(','))
|
|
252
|
+
.map((s) => s.trim())
|
|
253
|
+
.filter(Boolean);
|
|
254
|
+
if (parsedIds.length === 0) {
|
|
255
|
+
console.error(t('common.errorTmpl', lang, { msg: '--stage 需要至少一个阶段 ID' }));
|
|
256
|
+
process.exit(1);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const normalizedIds = parsedIds.map((id) => normalizeStageId(id) ?? id);
|
|
260
|
+
const fmCheck = new FlowManager(projectPath);
|
|
261
|
+
const knownSet = new Set(Object.keys(fmCheck.isLoaded() ? fmCheck.getData().stages : {}).map((k) => normalizeStageId(k) ?? k));
|
|
262
|
+
const invalid = normalizedIds.filter((id) => !knownSet.has(id));
|
|
263
|
+
// 未注册阶段(含 flow.json 未加载 → knownSet 为空 → 全部 invalid)→ 逐 id 报错 + 建议名
|
|
264
|
+
if (invalid.length > 0) {
|
|
265
|
+
for (const id of invalid) {
|
|
266
|
+
console.error(t('common.stageIdInvalidTmpl', lang, { input: id }));
|
|
267
|
+
console.error(t('common.stageIdSuggestTmpl', lang, { suggest: suggestStageId(projectPath, id) }));
|
|
268
|
+
}
|
|
269
|
+
process.exit(1);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
onlyStages = [...new Set(normalizedIds)];
|
|
273
|
+
}
|
|
231
274
|
try {
|
|
232
275
|
setConfigValue(process.cwd(), normalizedKey, value);
|
|
233
276
|
console.log(t('config.set.valueOk', lang, { key: normalizedKey, value }));
|
|
@@ -237,31 +280,50 @@ export function registerConfigCommand(program) {
|
|
|
237
280
|
console.error(t('config.set.error', lang, { err: err.message }));
|
|
238
281
|
process.exit(1);
|
|
239
282
|
}
|
|
240
|
-
// --sync-stages
|
|
283
|
+
// --sync-stages:将目标键批量同步到已注册阶段 status.md 对应字段(仅项目模式;--stage 可限定范围)
|
|
241
284
|
if (opts.syncStages) {
|
|
242
285
|
const field = STAGE_FIELD_BY_CONFIG_KEY[normalizedKey];
|
|
243
286
|
const mgr = new FlowManager(process.cwd());
|
|
244
|
-
const results = mgr.isLoaded() ? mgr.syncConfigFieldToStages(normalizedKey, value) : [];
|
|
287
|
+
const results = mgr.isLoaded() ? mgr.syncConfigFieldToStages(normalizedKey, value, { onlyStages }) : [];
|
|
245
288
|
let updated = 0;
|
|
289
|
+
let inserted = 0;
|
|
290
|
+
let skipped = 0;
|
|
246
291
|
for (const r of results) {
|
|
247
292
|
switch (r.result) {
|
|
248
293
|
case 'updated':
|
|
249
294
|
updated++;
|
|
250
295
|
console.log(t('stage.set.updatedTmpl', lang, { stageId: r.stage, field: field ?? normalizedKey, value }));
|
|
251
296
|
break;
|
|
297
|
+
case 'inserted':
|
|
298
|
+
// 字段缺失 → 插入语义(与 stage set --workflow-mode 同口径;禁落 default 当错误输出)
|
|
299
|
+
inserted++;
|
|
300
|
+
console.log(t('stage.set.insertedTmpl', lang, { stageId: r.stage, field: field ?? normalizedKey, value }));
|
|
301
|
+
break;
|
|
302
|
+
case 'skipped-no-anchor':
|
|
303
|
+
// 锚点缺失 → 跳过类(不写盘;复用 op-001 新键保持口径一致),退出码恒 0
|
|
304
|
+
skipped++;
|
|
305
|
+
console.error(t('stage.set.noAnchorTmpl', lang, { stageId: r.stage, field: field ?? normalizedKey }));
|
|
306
|
+
break;
|
|
252
307
|
case 'noop':
|
|
308
|
+
skipped++;
|
|
253
309
|
console.log(t('stage.set.noopTmpl', lang, { field: field ?? normalizedKey }));
|
|
254
310
|
break;
|
|
255
311
|
case 'skipped-no-status':
|
|
312
|
+
skipped++;
|
|
256
313
|
console.error(t('stage.errorStageNotFoundTmpl', lang, { stageId: r.stage }));
|
|
257
314
|
break;
|
|
258
315
|
default: // skipped-no-field
|
|
316
|
+
skipped++;
|
|
259
317
|
console.error(t('stage.set.errorFieldNotFoundTmpl', lang, { stageId: r.stage, field: field ?? normalizedKey }));
|
|
260
318
|
break;
|
|
261
319
|
}
|
|
262
320
|
}
|
|
263
|
-
// 汇总:同步 N / 跳过
|
|
264
|
-
console.log(
|
|
321
|
+
// 汇总:同步 N / 插入 M / 跳过 K(跳过含 noop / 无字段 / 无 status / 无锚点;退出码保持 0)
|
|
322
|
+
console.log(t('config.set.syncSummaryTmpl', lang, {
|
|
323
|
+
updated: String(updated),
|
|
324
|
+
inserted: String(inserted),
|
|
325
|
+
skipped: String(skipped),
|
|
326
|
+
}));
|
|
265
327
|
}
|
|
266
328
|
});
|
|
267
329
|
// openfeel config effective [key] — 输出有效值 + 生效来源(P9)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/flow.d.ts
CHANGED
|
@@ -21,4 +21,12 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { Command } from 'commander';
|
|
23
23
|
export declare function registerFlowCommand(program: Command): void;
|
|
24
|
+
/**
|
|
25
|
+
* 「是否询问工作流模式」决策矩阵(stage-75 T4,D4)。
|
|
26
|
+
* 仅当阶段 status.md 无「工作流模式」字段 **且** 项目 config.yaml 未显式设 `defaults.workflow_mode` 时询问;
|
|
27
|
+
* 其余 3 态(有字段 / 有项目默认 / 两者皆有)一律 skip(保持既有推进流不变)。
|
|
28
|
+
* @param stageHasField 阶段 status.md 是否已有「工作流模式」字段
|
|
29
|
+
* @param projectHasDefault 项目 config.yaml 是否**显式**设过 `defaults.workflow_mode`
|
|
30
|
+
*/
|
|
31
|
+
export declare function shouldPromptWorkflowMode(stageHasField: boolean, projectHasDefault: boolean): 'prompt' | 'skip';
|
|
24
32
|
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAq6D1D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAE9G"}
|
package/dist/commands/flow.js
CHANGED
|
@@ -3,7 +3,9 @@ import { existsSync, copyFileSync, readFileSync, rmSync } from 'node:fs';
|
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { FlowManager, isFlowConcurrentError, normalizeAgentName, detectFillState, PHASE_PATH_MAX_DEPTH } from '../core/flow-manager.js';
|
|
5
5
|
import { PipelinePhaseSchema, PIPELINE_PHASES } from '../core/pipeline-schema.js';
|
|
6
|
-
import { validateStageId, suggestStageId, normalizeStageId } from '../core/plan/path.js';
|
|
6
|
+
import { validateStageId, suggestStageId, normalizeStageId, findStageStatusPath } from '../core/plan/path.js';
|
|
7
|
+
import { getConfigFieldLegalValues, setConfigValue } from '../core/config.js';
|
|
8
|
+
import { parse as parseYaml } from 'yaml';
|
|
7
9
|
import { MetricsStore } from '../core/metrics.js';
|
|
8
10
|
import { addReviewEntry } from '../core/view/entry.js';
|
|
9
11
|
import { handleAddStageError, handleConcurrentConflict } from './shared/errors.js';
|
|
@@ -341,22 +343,58 @@ export function registerFlowCommand(program) {
|
|
|
341
343
|
.command('phases')
|
|
342
344
|
.description('列出全部合法 phase 及其流转映射(自描述)')
|
|
343
345
|
.option('--json', 'Output { phases, transitions, advanceAccepted, schemaVersion } as JSON')
|
|
346
|
+
.option('--mode <mode>', '显式指定工作流模式(full | fast;缺省经 --stage / 当前阶段派生)')
|
|
347
|
+
.option('--stage <id>', '按指定阶段的模式展示转移表(缺省 = 当前阶段)')
|
|
344
348
|
.action((options) => {
|
|
345
|
-
const
|
|
349
|
+
const projectPath = process.cwd();
|
|
350
|
+
const lang = getCliLang(projectPath);
|
|
346
351
|
const mgr = createManager();
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
352
|
+
// ① --mode 显式值域校验(schema 派生;非法 → exit 1,不进入只读取值)
|
|
353
|
+
let explicitMode;
|
|
354
|
+
if (options.mode !== undefined) {
|
|
355
|
+
const allowed = getConfigFieldLegalValues('workflow_mode') ?? [];
|
|
356
|
+
if (!allowed.includes(options.mode)) {
|
|
357
|
+
console.error(t('stage.set.invalidValueTmpl', lang, { field: '工作流模式', value: options.mode, allowed: allowed.join(', ') }));
|
|
358
|
+
process.exit(1);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
explicitMode = options.mode;
|
|
362
|
+
}
|
|
363
|
+
// ② --stage 校验(格式 + 存在性):先于任何只读取值
|
|
364
|
+
let stageArg;
|
|
365
|
+
if (options.stage !== undefined) {
|
|
366
|
+
const v = validateStageId(options.stage);
|
|
367
|
+
if (!v.ok) {
|
|
368
|
+
console.error(t('common.stageIdInvalidTmpl', lang, { input: options.stage }));
|
|
369
|
+
console.error(t('common.stageIdSuggestTmpl', lang, { suggest: suggestStageId(projectPath, options.stage) }));
|
|
370
|
+
process.exit(1);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
stageArg = normalizeStageId(options.stage) ?? options.stage;
|
|
374
|
+
const known = new Set(Object.keys(mgr.isLoaded() ? mgr.getData().stages : {}).map((k) => normalizeStageId(k) ?? k));
|
|
375
|
+
if (!known.has(stageArg) && !findStageStatusPath(projectPath, stageArg)) {
|
|
376
|
+
console.error(t('common.stageIdInvalidTmpl', lang, { input: options.stage }));
|
|
377
|
+
console.error(t('common.stageIdSuggestTmpl', lang, { suggest: suggestStageId(projectPath, options.stage) }));
|
|
378
|
+
process.exit(1);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// ③ 单点派生:显式 --mode 优先,否则经 --stage / 当前阶段级联解析
|
|
383
|
+
const resolved = mgr.resolveStageWorkflowMode(stageArg);
|
|
384
|
+
const derivedMode = explicitMode ?? resolved.value;
|
|
385
|
+
// ④ 显式传 mode(消除无参调用;访问器默认形参保留)
|
|
386
|
+
const transitions = mgr.getPipelineTransitions(derivedMode);
|
|
387
|
+
// 运行时 vs 内置默认 transitions 差异(T19:使漂移可见,不补组合键;同模式对比)
|
|
388
|
+
const defaults = mgr.getDefaultTransitions(derivedMode);
|
|
351
389
|
const missingKeys = Object.keys(defaults).filter((k) => !(k in transitions));
|
|
352
390
|
const extraKeys = Object.keys(transitions).filter((k) => !(k in defaults));
|
|
353
391
|
const changedKeys = Object.keys(defaults).filter((k) => k in transitions && JSON.stringify(defaults[k]) !== JSON.stringify(transitions[k]));
|
|
354
392
|
const transitionsDiff = { missing: missingKeys, extra: extraKeys, changed: changedKeys };
|
|
393
|
+
const phases = mgr.getPipelinePhases();
|
|
355
394
|
if (options.json) {
|
|
356
395
|
// advanceAccepted = 内置 15 phase(flow advance 的推进白名单),与 phases(运行时存在视图,可含自定义)显式区分
|
|
357
|
-
// 既有三字段(phases/transitions/advanceAccepted)+ transitionsDiff
|
|
358
|
-
|
|
359
|
-
console.log(JSON.stringify({ schemaVersion: 1, phases, transitions, advanceAccepted: [...PIPELINE_PHASES], transitionsDiff }, null, 2));
|
|
396
|
+
// 既有三字段(phases/transitions/advanceAccepted)+ transitionsDiff 逐字保留;schemaVersion 与 workflowMode 追加于末位(B1-6 / stage-75 op-002)
|
|
397
|
+
console.log(JSON.stringify({ schemaVersion: 1, phases, transitions, advanceAccepted: [...PIPELINE_PHASES], transitionsDiff, workflowMode: derivedMode }, null, 2));
|
|
360
398
|
return;
|
|
361
399
|
}
|
|
362
400
|
console.log(t('flow.phases.title', lang));
|
|
@@ -365,6 +403,9 @@ export function registerFlowCommand(program) {
|
|
|
365
403
|
console.log(` - ${p}`);
|
|
366
404
|
}
|
|
367
405
|
console.log('');
|
|
406
|
+
// 模式分节行(stage-75 op-002:模式 + 来源 + 查看指引)
|
|
407
|
+
console.log(t('flow.mode.lineTmpl', lang, { mode: derivedMode, source: explicitMode ? '--mode' : resolved.source }));
|
|
408
|
+
console.log(t('flow.phases.modeHint', lang));
|
|
368
409
|
console.log(t('flow.phases.transitionsLabel', lang) + ':');
|
|
369
410
|
for (const [key, targets] of Object.entries(transitions)) {
|
|
370
411
|
console.log(` ${key} → [${targets.join(', ')}]`);
|
|
@@ -391,6 +432,62 @@ export function registerFlowCommand(program) {
|
|
|
391
432
|
}
|
|
392
433
|
console.log(t('flow.phases.hint', lang));
|
|
393
434
|
});
|
|
435
|
+
// flow mode — 当前工作流模式与来源(只读)
|
|
436
|
+
flow
|
|
437
|
+
.command('mode')
|
|
438
|
+
.description('显示当前工作流模式与来源(只读)')
|
|
439
|
+
.option('--stage <id>', '目标阶段(缺省 = 当前阶段)')
|
|
440
|
+
.option('--json', 'Output as JSON')
|
|
441
|
+
.action((options) => {
|
|
442
|
+
const projectPath = process.cwd();
|
|
443
|
+
const lang = getCliLang(projectPath);
|
|
444
|
+
const mgr = createManager();
|
|
445
|
+
let key;
|
|
446
|
+
if (options.stage !== undefined) {
|
|
447
|
+
const v = validateStageId(options.stage);
|
|
448
|
+
if (!v.ok) {
|
|
449
|
+
console.error(t('common.stageIdInvalidTmpl', lang, { input: options.stage }));
|
|
450
|
+
console.error(t('common.stageIdSuggestTmpl', lang, { suggest: suggestStageId(projectPath, options.stage) }));
|
|
451
|
+
process.exit(1);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
key = normalizeStageId(options.stage) ?? options.stage;
|
|
455
|
+
// 存在性:已注册(flow.json)或有 status.md;二者皆无 → exit 1(防 typo 静默落 config 层)
|
|
456
|
+
const known = new Set(Object.keys(mgr.isLoaded() ? mgr.getData().stages : {}).map((k) => normalizeStageId(k) ?? k));
|
|
457
|
+
if (!known.has(key) && !findStageStatusPath(projectPath, key)) {
|
|
458
|
+
console.error(t('common.stageIdInvalidTmpl', lang, { input: options.stage }));
|
|
459
|
+
console.error(t('common.stageIdSuggestTmpl', lang, { suggest: suggestStageId(projectPath, options.stage) }));
|
|
460
|
+
process.exit(1);
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
// 缺省 = 当前阶段;无 current 时 undefined(级联仍可解析 config/builtin)
|
|
466
|
+
key = mgr.getData()?.pipeline?.current?.stage || undefined;
|
|
467
|
+
}
|
|
468
|
+
// 唯一解析入口(禁第二套来源判定)
|
|
469
|
+
const resolved = mgr.resolveStageWorkflowMode(key);
|
|
470
|
+
const modes = {
|
|
471
|
+
full: mgr.getPipelineTransitions('full'),
|
|
472
|
+
fast: mgr.getPipelineTransitions('fast'),
|
|
473
|
+
};
|
|
474
|
+
if (options.json) {
|
|
475
|
+
// 未初始化亦保纯 JSON 单文档(stage 空串 + 无 stage 域级联解析值)
|
|
476
|
+
console.log(JSON.stringify({ schemaVersion: 1, stage: key ?? '', mode: resolved.value, source: resolved.source, modes }, null, 2));
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
if (!mgr.isLoaded()) {
|
|
480
|
+
console.log(t('common.noInit', lang));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
console.log(t('flow.mode.lineTmpl', lang, { mode: resolved.value, source: resolved.source }));
|
|
484
|
+
// 阶段 phase 已知时补可达目标行(同源 getAvailablePhases)
|
|
485
|
+
const phase = key ? mgr.getData()?.stages[key]?.phase : undefined;
|
|
486
|
+
if (key && phase) {
|
|
487
|
+
console.log(t('flow.mode.targetsLabel', lang, { stage: key, phase, targets: mgr.getAvailablePhases(key).join(', ') }));
|
|
488
|
+
}
|
|
489
|
+
// 只读保证:不 save()、不 appendLog、不写任何文件
|
|
490
|
+
});
|
|
394
491
|
// flow stage — 阶段管理子命令组
|
|
395
492
|
const stageCmd = flow
|
|
396
493
|
.command('stage')
|
|
@@ -611,7 +708,7 @@ export function registerFlowCommand(program) {
|
|
|
611
708
|
.command('advance')
|
|
612
709
|
.description('推进流水线阶段')
|
|
613
710
|
.option('--op <id>', '操作 ID(如 stage-01.op-001),仅用于日志/展示')
|
|
614
|
-
.requiredOption('--to <phase>', '目标阶段(如 exec_running)。合法 phase 与转移表:openfeel flow phases')
|
|
711
|
+
.requiredOption('--to <phase>', '目标阶段(如 exec_running)。合法 phase 与转移表:openfeel flow phases;查看当前模式:openfeel flow mode')
|
|
615
712
|
.option('--stage <id>', '阶段 ID(如 stage-03),必须指定')
|
|
616
713
|
.option('--force', '强制执行(跳过非法 phase 校验和阶段跳跃检查,但不可绕过 REV 阻塞检查)')
|
|
617
714
|
.option('--dry-run', '仅验证不执行修改(预览输出)。与 --force 组合时跳过校验但仍不执行修改')
|
|
@@ -1641,6 +1738,32 @@ export function registerFlowCommand(program) {
|
|
|
1641
1738
|
console.log(t('flow.wizard.unavailable', lang));
|
|
1642
1739
|
return;
|
|
1643
1740
|
}
|
|
1741
|
+
// stage-75 T4:首次选型 + 项目级记忆(TTY + 阶段无字段 + 项目未显式设默认 → 询问一次)
|
|
1742
|
+
{
|
|
1743
|
+
const modeResolved = mgr.resolveStageWorkflowMode(currentStage);
|
|
1744
|
+
const stageHasField = modeResolved.source === 'status.md';
|
|
1745
|
+
const projectHasDefault = hasExplicitProjectDefault(process.cwd(), 'workflow_mode');
|
|
1746
|
+
if (shouldPromptWorkflowMode(stageHasField, projectHasDefault) === 'prompt') {
|
|
1747
|
+
const chosen = (await select({
|
|
1748
|
+
message: t('flow.wizard.modePrompt', lang),
|
|
1749
|
+
choices: [
|
|
1750
|
+
{ name: t('flow.wizard.modeFull', lang), value: 'full' },
|
|
1751
|
+
{ name: t('flow.wizard.modeFast', lang), value: 'fast' },
|
|
1752
|
+
],
|
|
1753
|
+
}));
|
|
1754
|
+
const statusPath = findStageStatusPath(process.cwd(), currentStage);
|
|
1755
|
+
if (statusPath) {
|
|
1756
|
+
const r = mgr.insertStatusField(statusPath, currentStage, '工作流模式', chosen);
|
|
1757
|
+
if (r === 'no-anchor') {
|
|
1758
|
+
// 错误路径:手工破坏文件(骨架必含锚点)→ 警告而非阻断(D5)
|
|
1759
|
+
console.error(t('stage.set.noAnchorTmpl', lang, { stageId: currentStage, field: '工作流模式' }));
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
// 记忆写入仅 defaults.workflow_mode(增量写、保注释),不覆盖其它 defaults 键
|
|
1763
|
+
setConfigValue(process.cwd(), 'workflow_mode', chosen);
|
|
1764
|
+
console.log(t('flow.wizard.modeRememberedTmpl', lang, { mode: chosen }));
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1644
1767
|
const stagePhase = data.stages[currentStage].phase;
|
|
1645
1768
|
// 显示当前状态
|
|
1646
1769
|
console.log('\n' + t('flow.wizard.statusHeader', lang));
|
|
@@ -1720,6 +1843,42 @@ export function registerFlowCommand(program) {
|
|
|
1720
1843
|
}
|
|
1721
1844
|
});
|
|
1722
1845
|
}
|
|
1846
|
+
/**
|
|
1847
|
+
* 「是否询问工作流模式」决策矩阵(stage-75 T4,D4)。
|
|
1848
|
+
* 仅当阶段 status.md 无「工作流模式」字段 **且** 项目 config.yaml 未显式设 `defaults.workflow_mode` 时询问;
|
|
1849
|
+
* 其余 3 态(有字段 / 有项目默认 / 两者皆有)一律 skip(保持既有推进流不变)。
|
|
1850
|
+
* @param stageHasField 阶段 status.md 是否已有「工作流模式」字段
|
|
1851
|
+
* @param projectHasDefault 项目 config.yaml 是否**显式**设过 `defaults.workflow_mode`
|
|
1852
|
+
*/
|
|
1853
|
+
export function shouldPromptWorkflowMode(stageHasField, projectHasDefault) {
|
|
1854
|
+
return !stageHasField && !projectHasDefault ? 'prompt' : 'skip';
|
|
1855
|
+
}
|
|
1856
|
+
/**
|
|
1857
|
+
* 项目 config.yaml 是否**显式**声明了 `defaults.{key}`(stage-75 T4,D3)。
|
|
1858
|
+
* 必须**裸读 YAML**:`getConfigValue` 经 `ConfigDefaultsSchema` 逐键 `.default()` 填充,
|
|
1859
|
+
* 缺失键亦返回 schema 默认值(实测恒 `fast`),无法区分「设过」与「未设」。
|
|
1860
|
+
* 文件缺失 / 解析失败 / 无 defaults 块 / 非对象 → false(视为未显式设置)。
|
|
1861
|
+
* @param projectPath 项目根路径
|
|
1862
|
+
* @param key defaults 下的配置键(如 workflow_mode)
|
|
1863
|
+
*/
|
|
1864
|
+
function hasExplicitProjectDefault(projectPath, key) {
|
|
1865
|
+
try {
|
|
1866
|
+
const configPath = resolve(projectPath, '.openfeel', 'config.yaml');
|
|
1867
|
+
if (!existsSync(configPath)) {
|
|
1868
|
+
return false;
|
|
1869
|
+
}
|
|
1870
|
+
const raw = parseYaml(readFileSync(configPath, 'utf-8'));
|
|
1871
|
+
const defaults = raw?.defaults;
|
|
1872
|
+
if (!defaults || typeof defaults !== 'object') {
|
|
1873
|
+
return false;
|
|
1874
|
+
}
|
|
1875
|
+
return Object.prototype.hasOwnProperty.call(defaults, key);
|
|
1876
|
+
}
|
|
1877
|
+
catch {
|
|
1878
|
+
// 错误路径:YAML 解析失败 → 视为未显式设置(不阻断向导)
|
|
1879
|
+
return false;
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1723
1882
|
/** 创建 FlowManager 实例(使用当前工作目录) */
|
|
1724
1883
|
function createManager() {
|
|
1725
1884
|
return new FlowManager(process.cwd());
|