openfeel 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.en.md +42 -12
  2. package/README.md +8 -3
  3. package/README.zh-CN.md +43 -13
  4. package/bin/openfeel.js +5 -0
  5. package/dist/cli/index.d.ts +15 -3
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +61 -15
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/output-encoding.d.ts +41 -0
  10. package/dist/cli/output-encoding.d.ts.map +1 -0
  11. package/dist/cli/output-encoding.js +165 -0
  12. package/dist/cli/output-encoding.js.map +1 -0
  13. package/dist/cli/repl.d.ts +2 -2
  14. package/dist/cli/repl.d.ts.map +1 -1
  15. package/dist/cli/repl.js +46 -25
  16. package/dist/cli/repl.js.map +1 -1
  17. package/dist/commands/config.d.ts.map +1 -1
  18. package/dist/commands/config.js +56 -9
  19. package/dist/commands/config.js.map +1 -1
  20. package/dist/commands/flow.d.ts.map +1 -1
  21. package/dist/commands/flow.js +827 -138
  22. package/dist/commands/flow.js.map +1 -1
  23. package/dist/commands/init.d.ts +2 -1
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +58 -39
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/knowledge.d.ts.map +1 -1
  28. package/dist/commands/knowledge.js +69 -0
  29. package/dist/commands/knowledge.js.map +1 -1
  30. package/dist/commands/lint.d.ts.map +1 -1
  31. package/dist/commands/lint.js +17 -5
  32. package/dist/commands/lint.js.map +1 -1
  33. package/dist/commands/migrate.d.ts.map +1 -1
  34. package/dist/commands/migrate.js +15 -1
  35. package/dist/commands/migrate.js.map +1 -1
  36. package/dist/commands/model.d.ts.map +1 -1
  37. package/dist/commands/model.js +18 -1
  38. package/dist/commands/model.js.map +1 -1
  39. package/dist/commands/plan.d.ts.map +1 -1
  40. package/dist/commands/plan.js +185 -7
  41. package/dist/commands/plan.js.map +1 -1
  42. package/dist/commands/project.js +2 -2
  43. package/dist/commands/project.js.map +1 -1
  44. package/dist/commands/roadmap.d.ts.map +1 -1
  45. package/dist/commands/roadmap.js +20 -5
  46. package/dist/commands/roadmap.js.map +1 -1
  47. package/dist/commands/setup.d.ts +7 -0
  48. package/dist/commands/setup.d.ts.map +1 -0
  49. package/dist/commands/setup.js +37 -0
  50. package/dist/commands/setup.js.map +1 -0
  51. package/dist/commands/shared/errors.d.ts +22 -0
  52. package/dist/commands/shared/errors.d.ts.map +1 -0
  53. package/dist/commands/shared/errors.js +45 -0
  54. package/dist/commands/shared/errors.js.map +1 -0
  55. package/dist/commands/stage.d.ts.map +1 -1
  56. package/dist/commands/stage.js +133 -23
  57. package/dist/commands/stage.js.map +1 -1
  58. package/dist/commands/update.d.ts.map +1 -1
  59. package/dist/commands/update.js +1 -10
  60. package/dist/commands/update.js.map +1 -1
  61. package/dist/commands/view.d.ts +1 -1
  62. package/dist/commands/view.d.ts.map +1 -1
  63. package/dist/commands/view.js +4 -26
  64. package/dist/commands/view.js.map +1 -1
  65. package/dist/core/archive/merge.d.ts.map +1 -1
  66. package/dist/core/archive/merge.js +9 -5
  67. package/dist/core/archive/merge.js.map +1 -1
  68. package/dist/core/artifact-graph/graph.d.ts +7 -2
  69. package/dist/core/artifact-graph/graph.d.ts.map +1 -1
  70. package/dist/core/artifact-graph/graph.js +25 -18
  71. package/dist/core/artifact-graph/graph.js.map +1 -1
  72. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  73. package/dist/core/artifact-graph/instruction-loader.js +4 -33
  74. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  75. package/dist/core/backup.d.ts +28 -0
  76. package/dist/core/backup.d.ts.map +1 -0
  77. package/dist/core/backup.js +118 -0
  78. package/dist/core/backup.js.map +1 -0
  79. package/dist/core/config.d.ts +30 -19
  80. package/dist/core/config.d.ts.map +1 -1
  81. package/dist/core/config.js +86 -26
  82. package/dist/core/config.js.map +1 -1
  83. package/dist/core/flow-manager.d.ts +256 -5
  84. package/dist/core/flow-manager.d.ts.map +1 -1
  85. package/dist/core/flow-manager.js +908 -68
  86. package/dist/core/flow-manager.js.map +1 -1
  87. package/dist/core/fs/atomic-write.d.ts +3 -0
  88. package/dist/core/fs/atomic-write.d.ts.map +1 -1
  89. package/dist/core/fs/atomic-write.js +3 -0
  90. package/dist/core/fs/atomic-write.js.map +1 -1
  91. package/dist/core/fs/safe-read.d.ts +11 -0
  92. package/dist/core/fs/safe-read.d.ts.map +1 -0
  93. package/dist/core/fs/safe-read.js +31 -0
  94. package/dist/core/fs/safe-read.js.map +1 -0
  95. package/dist/core/global-paths.d.ts +17 -6
  96. package/dist/core/global-paths.d.ts.map +1 -1
  97. package/dist/core/global-paths.js +26 -7
  98. package/dist/core/global-paths.js.map +1 -1
  99. package/dist/core/i18n-data/en.d.ts +3 -0
  100. package/dist/core/i18n-data/en.d.ts.map +1 -1
  101. package/dist/core/i18n-data/en.js +271 -18
  102. package/dist/core/i18n-data/en.js.map +1 -1
  103. package/dist/core/i18n-data/zh-CN.d.ts +3 -0
  104. package/dist/core/i18n-data/zh-CN.d.ts.map +1 -1
  105. package/dist/core/i18n-data/zh-CN.js +278 -18
  106. package/dist/core/i18n-data/zh-CN.js.map +1 -1
  107. package/dist/core/i18n.d.ts +8 -0
  108. package/dist/core/i18n.d.ts.map +1 -1
  109. package/dist/core/i18n.js +14 -4
  110. package/dist/core/i18n.js.map +1 -1
  111. package/dist/core/init.d.ts +12 -15
  112. package/dist/core/init.d.ts.map +1 -1
  113. package/dist/core/init.js +85 -142
  114. package/dist/core/init.js.map +1 -1
  115. package/dist/core/managed-region.d.ts +1 -1
  116. package/dist/core/managed-region.js +1 -1
  117. package/dist/core/metrics.d.ts +16 -4
  118. package/dist/core/metrics.d.ts.map +1 -1
  119. package/dist/core/metrics.js +31 -11
  120. package/dist/core/metrics.js.map +1 -1
  121. package/dist/core/migrate.d.ts +12 -0
  122. package/dist/core/migrate.d.ts.map +1 -1
  123. package/dist/core/migrate.js +88 -29
  124. package/dist/core/migrate.js.map +1 -1
  125. package/dist/core/model-config.d.ts.map +1 -1
  126. package/dist/core/model-config.js +4 -2
  127. package/dist/core/model-config.js.map +1 -1
  128. package/dist/core/opencode-config.d.ts +4 -4
  129. package/dist/core/opencode-config.d.ts.map +1 -1
  130. package/dist/core/opencode-config.js +20 -7
  131. package/dist/core/opencode-config.js.map +1 -1
  132. package/dist/core/plan/path.d.ts +40 -0
  133. package/dist/core/plan/path.d.ts.map +1 -1
  134. package/dist/core/plan/path.js +108 -1
  135. package/dist/core/plan/path.js.map +1 -1
  136. package/dist/core/plan/roadmap.js +2 -2
  137. package/dist/core/plan/roadmap.js.map +1 -1
  138. package/dist/core/plan/scheme.d.ts +74 -2
  139. package/dist/core/plan/scheme.d.ts.map +1 -1
  140. package/dist/core/plan/scheme.js +311 -26
  141. package/dist/core/plan/scheme.js.map +1 -1
  142. package/dist/core/plan/stage.d.ts +34 -3
  143. package/dist/core/plan/stage.d.ts.map +1 -1
  144. package/dist/core/plan/stage.js +90 -6
  145. package/dist/core/plan/stage.js.map +1 -1
  146. package/dist/core/public-logger.d.ts +18 -5
  147. package/dist/core/public-logger.d.ts.map +1 -1
  148. package/dist/core/public-logger.js +62 -23
  149. package/dist/core/public-logger.js.map +1 -1
  150. package/dist/core/runtime-log.d.ts +25 -0
  151. package/dist/core/runtime-log.d.ts.map +1 -0
  152. package/dist/core/runtime-log.js +94 -0
  153. package/dist/core/runtime-log.js.map +1 -0
  154. package/dist/core/setup.d.ts +10 -0
  155. package/dist/core/setup.d.ts.map +1 -0
  156. package/dist/core/setup.js +103 -0
  157. package/dist/core/setup.js.map +1 -0
  158. package/dist/core/template-loader.d.ts +4 -5
  159. package/dist/core/template-loader.d.ts.map +1 -1
  160. package/dist/core/template-loader.js +1322 -259
  161. package/dist/core/template-loader.js.map +1 -1
  162. package/dist/core/templates.d.ts +4 -4
  163. package/dist/core/templates.d.ts.map +1 -1
  164. package/dist/core/templates.js +15 -11
  165. package/dist/core/templates.js.map +1 -1
  166. package/dist/core/update-infos.d.ts +14 -3
  167. package/dist/core/update-infos.d.ts.map +1 -1
  168. package/dist/core/update-infos.js +67 -15
  169. package/dist/core/update-infos.js.map +1 -1
  170. package/dist/core/update-state.d.ts.map +1 -1
  171. package/dist/core/update-state.js +7 -4
  172. package/dist/core/update-state.js.map +1 -1
  173. package/dist/core/update.d.ts +2 -7
  174. package/dist/core/update.d.ts.map +1 -1
  175. package/dist/core/update.js +338 -149
  176. package/dist/core/update.js.map +1 -1
  177. package/dist/core/view/entry.d.ts +53 -1
  178. package/dist/core/view/entry.d.ts.map +1 -1
  179. package/dist/core/view/entry.js +71 -2
  180. package/dist/core/view/entry.js.map +1 -1
  181. package/dist/core/workspace/identity.d.ts.map +1 -1
  182. package/dist/core/workspace/identity.js +15 -5
  183. package/dist/core/workspace/identity.js.map +1 -1
  184. package/dist/core/workspace/knowledge.d.ts.map +1 -1
  185. package/dist/core/workspace/knowledge.js +125 -19
  186. package/dist/core/workspace/knowledge.js.map +1 -1
  187. package/dist/core/workspace/structure.d.ts.map +1 -1
  188. package/dist/core/workspace/structure.js +6 -2
  189. package/dist/core/workspace/structure.js.map +1 -1
  190. package/dist/index.d.ts +0 -1
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.js +1 -2
  193. package/dist/index.js.map +1 -1
  194. package/dist/utils/kb-dedup.d.ts +5 -1
  195. package/dist/utils/kb-dedup.d.ts.map +1 -1
  196. package/dist/utils/kb-dedup.js +11 -5
  197. package/dist/utils/kb-dedup.js.map +1 -1
  198. package/package.json +6 -6
  199. package/dist/utils/path.d.ts +0 -22
  200. package/dist/utils/path.d.ts.map +0 -1
  201. package/dist/utils/path.js +0 -37
  202. package/dist/utils/path.js.map +0 -1
  203. package/scripts/patch-inquirer.js +0 -70
@@ -7,7 +7,7 @@
7
7
  * - {stage} = 阶段目录名 = stage-{NN}(不含版本前缀)
8
8
  * - flow.json stageId 是权威标识(唯一键),目录名是派生组织单位
9
9
  */
10
- import { existsSync, readFileSync } from 'node:fs';
10
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
11
11
  import { resolve } from 'node:path';
12
12
  import fastGlob from 'fast-glob';
13
13
  /** 短名(无版本前缀)默认系列 */
@@ -67,6 +67,113 @@ export function normalizeStageId(stageId) {
67
67
  const parsed = parseStageId(stageId);
68
68
  return parsed ? parsed.fullStageId : null;
69
69
  }
70
+ /**
71
+ * 校验 stageId 是否为合法格式(stage-NN / vX.Y.Z-stage-NN / vX-stage-NN)。
72
+ * 空字符串、'foo'、'v1' 等无法被 parseStageId 解析者判为非法。
73
+ *
74
+ * @param input 待校验的阶段 ID
75
+ * @returns 校验结果;失败时附带中文原因
76
+ */
77
+ export function validateStageId(input) {
78
+ if (!input || !input.trim()) {
79
+ return { ok: false, reason: '阶段 ID 不能为空' };
80
+ }
81
+ if (!parseStageId(input)) {
82
+ return { ok: false, reason: `非法阶段 ID:「${input}」(应为 stage-NN 或 vX.Y.Z-stage-NN)` };
83
+ }
84
+ return { ok: true };
85
+ }
86
+ /**
87
+ * 为非法/非规范输入推导建议名。
88
+ *
89
+ * 规则:
90
+ * - 输入形如版本号(vX / vX.Y / vX.Y.Z,正则 /^v\d+(?:\.\d+)*$/)→ 建议 `{版本}-stage-{NN}`,
91
+ * 其中 series = 版本首段(vX),NN = 该 series 内已用编号 max+1(两位补零)。
92
+ * - 其它无法识别版本前缀的输入 → 回退 DEFAULT_STAGE_VERSION / DEFAULT_SERIES(v1.0.0 / v1)。
93
+ *
94
+ * NN 计算范围:flow.json.stages 键 ∪ .openfeel/plan/{series}/stage-NN/ 目录,**仅限目标 series**,不跨系列。
95
+ *
96
+ * @param projectPath 项目根路径
97
+ * @param input 原始输入(可为非法值)
98
+ * @returns 建议的规范化 stageId
99
+ */
100
+ export function suggestStageId(projectPath, input) {
101
+ const versionMatch = (input ?? '').trim().match(/^(v\d+(?:\.\d+)*)$/);
102
+ const version = versionMatch ? versionMatch[1] : DEFAULT_STAGE_VERSION;
103
+ const series = version.split('.')[0]; // v1 / v4
104
+ // 收集该 series 下已用的 NN
105
+ const used = new Set();
106
+ // 来源 1:flow.json stages 键
107
+ const flowPath = resolve(projectPath, '.openfeel', 'flow.json');
108
+ if (existsSync(flowPath)) {
109
+ try {
110
+ const flowData = JSON.parse(readFileSync(flowPath, 'utf-8'));
111
+ for (const key of Object.keys(flowData.stages ?? {})) {
112
+ const parsed = parseStageId(key);
113
+ if (parsed && parsed.series === series) {
114
+ used.add(parseInt(parsed.stageDir.replace(/^stage-/, ''), 10));
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ // flow.json 不可读时忽略该来源(建议名降级为目录来源 / 从 01 起)
120
+ }
121
+ }
122
+ // 来源 2:.openfeel/plan/{series}/stage-NN/ 目录
123
+ const seriesDir = resolve(projectPath, '.openfeel', 'plan', series);
124
+ if (existsSync(seriesDir)) {
125
+ try {
126
+ for (const name of readdirSync(seriesDir)) {
127
+ const m = name.match(/^stage-(\d+)$/);
128
+ if (m) {
129
+ used.add(parseInt(m[1], 10));
130
+ }
131
+ }
132
+ }
133
+ catch {
134
+ // 目录不可读时忽略
135
+ }
136
+ }
137
+ const nextSeq = used.size > 0 ? Math.max(...used) + 1 : 1;
138
+ return `${version}-stage-${String(nextSeq).padStart(2, '0')}`;
139
+ }
140
+ /**
141
+ * 查找与给定 stageId 映射「同一 (series, stageDir)」的其它 stageId。
142
+ *
143
+ * 例:flow.json 已有 `v4-stage-04`,传入 `v4.0.0-stage-04` → 返回 'v4-stage-04';
144
+ * 二者 stageId 不同但映射同一目录 .openfeel/plan/v4/stage-04/。
145
+ *
146
+ * @param projectPath 项目根路径
147
+ * @param stageId 待检查的阶段 ID
148
+ * @returns 冲突的其它 stageId;无冲突或输入无法解析时返回 null
149
+ */
150
+ export function findStageDirConflict(projectPath, stageId) {
151
+ const parsed = parseStageId(stageId);
152
+ if (!parsed) {
153
+ return null;
154
+ }
155
+ const flowPath = resolve(projectPath, '.openfeel', 'flow.json');
156
+ if (!existsSync(flowPath)) {
157
+ return null;
158
+ }
159
+ let flowData;
160
+ try {
161
+ flowData = JSON.parse(readFileSync(flowPath, 'utf-8'));
162
+ }
163
+ catch {
164
+ return null; // flow.json 不可读时不做冲突判定(不阻塞主流程)
165
+ }
166
+ for (const key of Object.keys(flowData.stages ?? {})) {
167
+ if (key === stageId) {
168
+ continue;
169
+ }
170
+ const other = parseStageId(key);
171
+ if (other && other.series === parsed.series && other.stageDir === parsed.stageDir) {
172
+ return key;
173
+ }
174
+ }
175
+ return null;
176
+ }
70
177
  /**
71
178
  * 目录名(stage-NN)→ 完整 stageId(反向映射,回查 flow.json stages 键)
72
179
  *
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/core/plan/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,oBAAoB;AACpB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAY9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,+DAA+D;IAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAU,cAAc;QAChD,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;QAChD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAED,kBAAkB;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,QAAQ;YACR,WAAW,EAAE,GAAG,qBAAqB,IAAI,QAAQ,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,QAAgB;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAA2F,CAAC;IAChG,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC,YAAY;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,wBAAwB;IACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IAClD,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAe;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,2CAA2C;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrG,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qCAAqC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,YAAY,EAAE;gBAC/D,GAAG,EAAE,OAAO;gBACZ,SAAS,EAAE,IAAI;gBACf,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACjF,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/core/plan/path.ts"],"names":[],"mappings":"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"}
@@ -58,8 +58,8 @@ export function showRoadmap(projectPath, version) {
58
58
  const ver = normalizeVersion(version);
59
59
  const filePath = join(roadmapDir, `v${ver}.md`);
60
60
  if (!existsSync(filePath)) {
61
- console.error(`错误:大纲文件不存在 — v${ver}.md`);
62
- process.exit(1);
61
+ // 文件不存在:core 层不直接 process.exit,抛错由命令层决定退出码(T10)
62
+ throw new Error(`错误:大纲文件不存在 — v${ver}.md`);
63
63
  }
64
64
  return readFileSync(filePath, 'utf-8');
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../../src/core/plan/roadmap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAS5D,2BAA2B;AAC3B,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAe;IAChE,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiB/B,CAAC;IAEA,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAgB;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC9C,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../../src/core/plan/roadmap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAS5D,2BAA2B;AAC3B,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAe;IAChE,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiB/B,CAAC;IAEA,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAgB;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,gDAAgD;YAChD,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC9C,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -11,16 +11,88 @@ export interface Scheme {
11
11
  /** 相对路径 .openfeel/plan/{series}/{stage}/ops/op-001_{title}.md */
12
12
  filePath: string;
13
13
  }
14
+ /**
15
+ * 同步方案到 flow.json
16
+ * 若 flow.json 不存在或对应 stage 不存在,跳过同步(不报错)
17
+ * @param stageName 完整 stageId(如 v1.0.0-stage-01,调用方已规范化)
18
+ */
19
+ /** 隐式注册回调信息(N3-2) */
20
+ export interface ImplicitRegisterInfo {
21
+ /** 被隐式注册的阶段(完整 stageId) */
22
+ stage: string;
23
+ /** 是否补建了阶段骨架(overview.md / status.md) */
24
+ skeletonCreated: boolean;
25
+ }
14
26
  /**
15
27
  * 创建操作方案
16
28
  * 在 .openfeel/plan/{series}/{stage}/ops/ 下创建 op-NNN_{title}.md
17
29
  * NNN 自动递增(从该阶段的已有方案中计算)
18
30
  * 必须按固定模板生成,包含:目标、实施步骤(checkbox)、产出文件、自测清单、修正记录
19
- * 创建后自动同步到 flow.json(如果存在)
31
+ * 创建后自动同步到 flow.json(如果存在);阶段未注册时按注册语义补齐阶段骨架(N3)
20
32
  * @param stageName 阶段名(短名 stage-01 或完整 v1.0.0-stage-01 均可)
33
+ * @param options.onImplicitRegister 隐式注册回调(阶段未注册时触发,供命令层输出提示)
34
+ * @param options.draft true → 以 draft(未发布)状态注册;false/缺省 → pending(现行为)
21
35
  * @returns opId(如 op-001)
22
36
  */
23
- export declare function createScheme(projectPath: string, stageName: string, title: string): string;
37
+ export declare function createScheme(projectPath: string, stageName: string, title: string, options?: {
38
+ draft?: boolean;
39
+ onImplicitRegister?: (info: ImplicitRegisterInfo) => void;
40
+ }): string;
41
+ /** 删除(注销)结果(N1-1) */
42
+ export interface RemoveSchemeResult {
43
+ /** 是否已删除 flow.json 中的 op 键 */
44
+ removed: boolean;
45
+ /** 未删除时的原因(错误码,供命令层映射 i18n) */
46
+ reason?: 'stage-not-found' | 'op-not-found' | 'op-done' | 'has-checkpoint';
47
+ /** 该 op 是否本已是「键孤儿」(opsDir 无对应文件) */
48
+ orphan?: boolean;
49
+ }
50
+ /**
51
+ * 从 flow.json 注销一个 op 键(不删除 op 模板文件),并留审计日志(N1-1)。
52
+ * 默认对「已 done」或「存在 checkpoint 进展」的 op 拒绝删除(--force 覆盖)。
53
+ * @param projectPath 项目根路径
54
+ * @param stageName 阶段 ID(简写或全称,经 normalizeStageId 归一)
55
+ * @param opId op ID(op-001 或 完整 stage.op-001)
56
+ * @param options.force 跳过保护校验;options.dryRun 仅预览不写盘
57
+ * @returns 删除结果(成功/原因码/是否孤儿)
58
+ */
59
+ export declare function removeScheme(projectPath: string, stageName: string, opId: string, options?: {
60
+ force?: boolean;
61
+ dryRun?: boolean;
62
+ }): RemoveSchemeResult;
63
+ /** 发布(draft → pending)结果(B4-2) */
64
+ export interface PublishSchemeResult {
65
+ /** 是否已发布(draft → pending) */
66
+ published: boolean;
67
+ /** 未发布原因码(供命令层映射 i18n) */
68
+ reason?: 'not-found' | 'not-draft' | 'empty-template';
69
+ }
70
+ /**
71
+ * 将 draft op 发布为 pending(B4-2 / A1)。
72
+ * 校验模板已填充(无空模板标记残留,单一来源 EMPTY_TEMPLATE_MARKER)。
73
+ * @param projectPath 项目根路径
74
+ * @param stageName 阶段 ID(简写或全称)
75
+ * @param opId op ID(op-001 或 完整 stage.op-001)
76
+ */
77
+ export declare function publishScheme(projectPath: string, stageName: string, opId: string): PublishSchemeResult;
78
+ /** 重命名结果(B6-1) */
79
+ export interface RenameSchemeResult {
80
+ /** 是否已重命名 */
81
+ renamed: boolean;
82
+ /** 未重命名原因 */
83
+ reason?: 'not-found' | 'title-unchanged' | 'file-missing';
84
+ /** 旧标题(用于输出与审计) */
85
+ previousTitle?: string;
86
+ /** 未命中文件时的模板路径(file-missing 报告用) */
87
+ path?: string;
88
+ }
89
+ /**
90
+ * 更新 op 标题(B6-1):同步 flow.json 的 `ops[opId].title` 与 op 文件内容首行的 `# {opId}:{title}`。
91
+ * 文件名为 op-NNN.md(不含标题)→ **无需重命名文件**(含历史命名 `op-NNN_{title}.md` 亦不改文件名)。
92
+ * 顺序:先校验(存在/文件可读)→ 写文件首行 → 写 flow.json;`file-missing` 时不写 flow.json。
93
+ * @param title 新标题(非空;首尾空白折叠)
94
+ */
95
+ export declare function renameScheme(projectPath: string, stageName: string, opId: string, title: string): RenameSchemeResult;
24
96
  /**
25
97
  * 读取操作方案
26
98
  * @param opId 操作ID(如 op-001)或完整 opId(如 stage-01.op-001 / v1.0.0-stage-01.op-001)
@@ -1 +1 @@
1
- {"version":3,"file":"scheme.d.ts","sourceRoot":"","sources":["../../../src/core/plan/scheme.ts"],"names":[],"mappings":"AAaA,WAAW;AACX,MAAM,WAAW,MAAM;IACrB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0HD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkC1F;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+B1E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA6E7E"}
1
+ {"version":3,"file":"scheme.d.ts","sourceRoot":"","sources":["../../../src/core/plan/scheme.ts"],"names":[],"mappings":"AAeA,WAAW;AACX,MAAM,WAAW,MAAM;IACrB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0ED;;;;GAIG;AACH,qBAAqB;AACrB,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAoGD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAA;CAAE,GACvF,MAAM,CAsCR;AAED,qBAAqB;AACrB,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAC3E,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9C,kBAAkB,CA8CpB;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,gBAAgB,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAoCvG;AAED,kBAAkB;AAClB,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,MAAM,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAC1D,mBAAmB;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,kBAAkB,CAsDpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+B1E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA6E7E"}