@gordon.gan/specflow 1.8.0-beta → 1.8.1-beta
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.md +7 -5
- package/dist/cli/commands/document-run.d.ts +97 -0
- package/dist/cli/commands/document-run.js +845 -0
- package/dist/cli/index.js +2 -2
- package/dist/core/artifact-language.js +11 -1
- package/dist/core/document/chapters.d.ts +6 -0
- package/dist/core/document/chapters.js +36 -0
- package/dist/core/document/coverage.d.ts +25 -0
- package/dist/core/document/coverage.js +49 -0
- package/dist/core/document/digests.d.ts +40 -0
- package/dist/core/document/digests.js +144 -0
- package/dist/core/document/engine.d.ts +101 -0
- package/dist/core/document/engine.js +722 -0
- package/dist/core/document/extract.d.ts +61 -0
- package/dist/core/document/extract.js +437 -0
- package/dist/core/{approval → document}/forbidden-patterns.d.ts +4 -2
- package/dist/core/document/forbidden-patterns.js +36 -0
- package/dist/core/document/gates.d.ts +39 -0
- package/dist/core/document/gates.js +75 -0
- package/dist/core/document/input-digest.d.ts +63 -0
- package/dist/core/document/input-digest.js +200 -0
- package/dist/core/document/input-features.d.ts +43 -0
- package/dist/core/document/input-features.js +161 -0
- package/dist/core/document/lint.d.ts +39 -0
- package/dist/core/document/lint.js +147 -0
- package/dist/core/document/llm.d.ts +28 -0
- package/dist/core/document/llm.js +22 -0
- package/dist/core/document/map.d.ts +52 -0
- package/dist/core/document/map.js +296 -0
- package/dist/core/document/outline.d.ts +29 -0
- package/dist/core/document/outline.js +171 -0
- package/dist/core/document/paths.d.ts +23 -0
- package/dist/core/document/paths.js +36 -0
- package/dist/core/document/profile-validator.d.ts +23 -0
- package/dist/core/document/profile-validator.js +155 -0
- package/dist/core/document/profiles.d.ts +23 -0
- package/dist/core/document/profiles.js +74 -0
- package/dist/core/document/render.d.ts +45 -0
- package/dist/core/document/render.js +193 -0
- package/dist/core/document/review.d.ts +57 -0
- package/dist/core/document/review.js +202 -0
- package/dist/core/document/scene-detect.d.ts +32 -0
- package/dist/core/document/scene-detect.js +237 -0
- package/dist/core/document/schemas.d.ts +1103 -0
- package/dist/core/document/schemas.js +171 -0
- package/dist/integrations/shared/capability-evidence.js +4 -9
- package/dist/integrations/shared/command-catalog.js +2 -1
- package/dist/integrations/shared/parity-manifest.js +4 -9
- package/package.json +2 -1
- package/prompts/apply/phase-a-plan.md +1 -1
- package/prompts/document/map/acceptance.md +9 -0
- package/prompts/document/map/anti-ai.md +29 -0
- package/prompts/document/map/api-design.md +26 -0
- package/prompts/document/map/architecture.md +27 -0
- package/prompts/document/map/benchmark.md +26 -0
- package/prompts/document/map/closed-loop.md +9 -0
- package/prompts/document/map/compat-migration.md +31 -0
- package/prompts/document/map/component-design.md +30 -0
- package/prompts/document/map/config-runtime.md +9 -0
- package/prompts/document/map/core-flow.md +62 -0
- package/prompts/document/map/core-logic.md +9 -0
- package/prompts/document/map/data-model.md +18 -0
- package/prompts/document/map/deploy.md +26 -0
- package/prompts/document/map/fix.md +8 -0
- package/prompts/document/map/frontend-architecture.md +35 -0
- package/prompts/document/map/goal.md +8 -0
- package/prompts/document/map/impact.md +8 -0
- package/prompts/document/map/implementability.md +9 -0
- package/prompts/document/map/migration-guide.md +36 -0
- package/prompts/document/map/mvp-boundary.md +8 -0
- package/prompts/document/map/non-goals.md +8 -0
- package/prompts/document/map/ops.md +33 -0
- package/prompts/document/map/performance.md +32 -0
- package/prompts/document/map/poc-demo.md +25 -0
- package/prompts/document/map/regression.md +8 -0
- package/prompts/document/map/reproduce.md +8 -0
- package/prompts/document/map/requirement.md +8 -0
- package/prompts/document/map/research.md +25 -0
- package/prompts/document/map/root-cause.md +8 -0
- package/prompts/document/map/signoff.md +9 -0
- package/prompts/document/map/state-management.md +23 -0
- package/prompts/document/map/tech-selection.md +29 -0
- package/prompts/document/map/test-strategy.md +24 -0
- package/prompts/document/map/ui-design.md +21 -0
- package/prompts/document/outline/general.md +46 -0
- package/prompts/document/review/ai-review.md +57 -0
- package/prompts/document/shared/grounding.md +84 -0
- package/prompts/explore/explore-session.md +1 -1
- package/prompts/propose/design-draft.md +1 -1
- package/prompts/propose/proposal.md +1 -1
- package/prompts/propose/specs.md +1 -1
- package/prompts/propose/tasks-draft.md +1 -1
- package/prompts/refine/design-output.md +1 -1
- package/prompts/refine/update-artifacts.md +2 -0
- package/prompts/shared/artifact-language.md +13 -0
- package/skills/specflow-techdoc/SKILL.md +143 -0
- package/skills/specflow-techdoc-synth/SKILL.md +99 -0
- package/templates/document/chapters/acceptance.yaml +16 -0
- package/templates/document/chapters/api-design.yaml +29 -0
- package/templates/document/chapters/architecture.yaml +21 -0
- package/templates/document/chapters/benchmark.yaml +20 -0
- package/templates/document/chapters/closed-loop.yaml +22 -0
- package/templates/document/chapters/compat-migration.yaml +21 -0
- package/templates/document/chapters/component-design.yaml +22 -0
- package/templates/document/chapters/config-runtime.yaml +16 -0
- package/templates/document/chapters/core-flow.yaml +27 -0
- package/templates/document/chapters/core-logic.yaml +16 -0
- package/templates/document/chapters/data-model.yaml +25 -0
- package/templates/document/chapters/deploy.yaml +22 -0
- package/templates/document/chapters/fix.yaml +18 -0
- package/templates/document/chapters/frontend-architecture.yaml +22 -0
- package/templates/document/chapters/goal.yaml +17 -0
- package/templates/document/chapters/impact.yaml +16 -0
- package/templates/document/chapters/implementability.yaml +22 -0
- package/templates/document/chapters/migration-guide.yaml +21 -0
- package/templates/document/chapters/mvp-boundary.yaml +20 -0
- package/templates/document/chapters/non-goals.yaml +17 -0
- package/templates/document/chapters/ops.yaml +25 -0
- package/templates/document/chapters/performance.yaml +21 -0
- package/templates/document/chapters/poc-demo.yaml +22 -0
- package/templates/document/chapters/regression.yaml +16 -0
- package/templates/document/chapters/reproduce.yaml +16 -0
- package/templates/document/chapters/requirement.yaml +18 -0
- package/templates/document/chapters/research.yaml +22 -0
- package/templates/document/chapters/root-cause.yaml +18 -0
- package/templates/document/chapters/signoff.yaml +15 -0
- package/templates/document/chapters/state-management.yaml +22 -0
- package/templates/document/chapters/tech-selection.yaml +23 -0
- package/templates/document/chapters/test-strategy.yaml +23 -0
- package/templates/document/chapters/ui-design.yaml +28 -0
- package/templates/document/profiles/0to1.yaml +44 -0
- package/templates/document/profiles/approve.yaml +22 -0
- package/templates/document/profiles/bugfix.yaml +15 -0
- package/templates/document/profiles/feature.yaml +23 -0
- package/templates/document/profiles/frontend-0to1.yaml +47 -0
- package/templates/document/profiles/migration.yaml +42 -0
- package/templates/document/profiles/poc.yaml +46 -0
- package/dist/cli/commands/approval-assemble.d.ts +0 -64
- package/dist/cli/commands/approval-assemble.js +0 -408
- package/dist/core/approval/assemble.d.ts +0 -10
- package/dist/core/approval/assemble.js +0 -384
- package/dist/core/approval/bundle.d.ts +0 -9
- package/dist/core/approval/bundle.js +0 -172
- package/dist/core/approval/forbidden-patterns.js +0 -40
- package/dist/core/approval/index-schema.d.ts +0 -676
- package/dist/core/approval/index-schema.js +0 -193
- package/dist/core/approval/index.d.ts +0 -12
- package/dist/core/approval/index.js +0 -9
- package/dist/core/approval/lint.d.ts +0 -10
- package/dist/core/approval/lint.js +0 -302
- package/dist/core/approval/paths.d.ts +0 -13
- package/dist/core/approval/paths.js +0 -43
- package/dist/core/approval/pipeline.d.ts +0 -28
- package/dist/core/approval/pipeline.js +0 -146
- package/dist/core/approval/playbook-schema.d.ts +0 -182
- package/dist/core/approval/playbook-schema.js +0 -51
- package/dist/core/approval/render.d.ts +0 -20
- package/dist/core/approval/render.js +0 -210
- package/dist/core/approval/review-pack.d.ts +0 -26
- package/dist/core/approval/review-pack.js +0 -205
- package/dist/core/approval/types.d.ts +0 -223
- package/dist/core/approval/types.js +0 -1
- package/prompts/approval/acp-pipeline.md +0 -106
- package/prompts/approval/ai-review.md +0 -145
- package/prompts/approval/api-guidance.md +0 -179
- package/prompts/approval/database-guidance.md +0 -105
- package/prompts/approval/frontend-guidance.md +0 -249
- package/prompts/approval/generate.md +0 -1596
- package/prompts/approval/multi-repo-guidance.md +0 -263
- package/prompts/approval/multi-repo-spoke-subagent.md +0 -94
- package/prompts/approval/project-conventions-guidance.md +0 -171
- package/prompts/approval/runtime-guidance.md +0 -64
- package/prompts/approval/segmented-generation.md +0 -157
- package/skills/specflow-approval/SKILL.md +0 -778
- package/templates/approval-index.yaml +0 -93
- package/templates/approval-part.md +0 -15
- package/templates/approval-playbook-talos-scenario-job-compile.yaml +0 -29
- package/templates/approval-playbook.yaml +0 -28
- package/templates/approval.md +0 -261
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ explore(可选)→ propose → refine → apply → review → test → veri
|
|
|
72
72
|
│ ↓ │
|
|
73
73
|
│ refine ≥2 轮精化:挑战假设 / 新方案 / 探边界 / 质疑 scope │
|
|
74
74
|
│ ↓ │
|
|
75
|
-
│
|
|
75
|
+
│ document [可选] 通用长文档引擎 → 方案文档(0→1 / bugfix / feature) │
|
|
76
76
|
│ ↓ │
|
|
77
77
|
│ apply Phase A 重写 tasks.md → Phase B 逐任务 TDD 执行 │
|
|
78
78
|
│ (可选 /specflow:apply --yes:少打断,成功后串行验收) │
|
|
@@ -126,7 +126,7 @@ npm install -g @gordon.gan/specflow
|
|
|
126
126
|
npm install -g github:Gordon-Gan-Jiang/specflow
|
|
127
127
|
|
|
128
128
|
# 验证
|
|
129
|
-
specflow --version # 以 npm / package.json 为准(当前 1.
|
|
129
|
+
specflow --version # 以 npm / package.json 为准(当前 1.8.0-alpha)
|
|
130
130
|
specflow --help
|
|
131
131
|
```
|
|
132
132
|
|
|
@@ -259,14 +259,15 @@ specflow init
|
|
|
259
259
|
|
|
260
260
|
## IDE 工作流命令
|
|
261
261
|
|
|
262
|
-
共 **
|
|
262
|
+
共 **12 个**技能,命名因 IDE 而异:
|
|
263
263
|
|
|
264
264
|
| 阶段 | Claude Code | Cursor | Codex |
|
|
265
265
|
|------|-------------|--------|-------|
|
|
266
266
|
| 探索(可选) | `/specflow:explore` | `specflow:explore` | `$specflow-explore` |
|
|
267
267
|
| 规划 | `/specflow:propose` | `specflow:propose` | `$specflow-propose` |
|
|
268
268
|
| 精化 | `/specflow:refine` | `specflow:refine` | `$specflow-refine` |
|
|
269
|
-
|
|
|
269
|
+
| 方案文档(可选) | `/specflow:techdoc` | `specflow:techdoc` | `$specflow-techdoc` |
|
|
270
|
+
| 跨仓方案(可选) | `/specflow:techdoc-synth` | `specflow:techdoc-synth` | `$specflow-techdoc-synth` |
|
|
270
271
|
| 构建 | `/specflow:apply` | `specflow:apply` | `$specflow-apply` |
|
|
271
272
|
| 审查 | `/specflow:review` | `specflow:review` | `$specflow-review` |
|
|
272
273
|
| 测试 | `/specflow:test` | `specflow:test` | `$specflow-test` |
|
|
@@ -282,7 +283,8 @@ specflow init
|
|
|
282
283
|
| **explore** | 读代码、比方案、定边界;产出 `explore.md`,confirmed 后 handoff 到 propose |
|
|
283
284
|
| **propose** | 一次产出 proposal、delta specs、design、tasks(第一轮深度思考,非占位骨架);叙述语言跟 `artifacts.language` |
|
|
284
285
|
| **refine** | 内部多轮循环(≥2 轮,AI 判断收敛);可更新任意 artifact |
|
|
285
|
-
| **
|
|
286
|
+
| **techdoc** | 可选:`specflow techdoc run <0to1|frontend-0to1|bugfix|feature|poc|migration>` 用**通用长文档引擎**生成方案文档——**场景轴 × 技术栈轴正交**:场景管「做什么」(0→1 / 加功能 / 修 bug / 预研选型 / 技术升级),输入特征(hasBackend / uiInScope / containsApiChange / hasPersistence)自动决定章节伸缩(纯逻辑功能 ~3 章,全栈功能 ~10 章)。两遍扫描(Pass 1 大纲冻结 → Pass 2 逐章按要点填空)+ 分层真源(契约实体 zod + 受控叙述)+ 四层上下文注入(大纲要点 + 依赖摘要 + 契约注入 + 本片片段,保证注意力不稀释 / token 不易打满)+ 覆盖双通道校验 + AI Review。审批文档走独立入口 `techdoc approve`(四件套 → 审批模式,非业务场景)。详见 `docs/GENERIC_LONGDOC_ENGINE_DESIGN.md` |
|
|
287
|
+
| **techdoc-synth** | 可选:`specflow techdoc synthesize --workspace-root <root>` 把多仓四件套合成**一份跨仓文档**(统一大纲 + 契约实体命名空间 `<repo>_<id>` + 每章按仓分节 + 全局结论);省略 `--profile` 时自动识别场景(`--text` 优先,其次四件套内容;不确定且有 `--text` 时确认,无 `--text` 时回退 approve)。带确定性质量门禁(validate 强制每必选章含所有仓 `### <repo>` 小节)。区别于 `techdoc approve --bundle` 的物理拼接;原有多仓多产物不受影响 |
|
|
286
288
|
| **apply** | Phase A 重写 tasks.md;Phase B 按语言路由 ECC 审查 + TDD 逐任务执行;可选 `--yes` |
|
|
287
289
|
| **review** | 代码审查,对照 specs 检查回归 |
|
|
288
290
|
| **test** | 单元 + 集成 + E2E + 回归测试 |
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: specflow techdoc {plan|validate|run} — Generic LongDoc Engine, IDE-model driven.
|
|
3
|
+
*
|
|
4
|
+
* The engine does NOT call a third-party LLM API. In Cursor/Codex the Agent runs on the IDE's
|
|
5
|
+
* model, so:
|
|
6
|
+
* - `document plan <profile>` emits a step list the Agent executes with the IDE model.
|
|
7
|
+
* - `document validate --work-root <path>` deterministically validates + renders Agent-written
|
|
8
|
+
* artifacts (outline.yaml / chapters/*.md / entities.json) — no LLM call.
|
|
9
|
+
* - `document run <profile>` guides: plan → Agent executes → validate (requires injected LLM only
|
|
10
|
+
* for library/tests; CLI itself never fetches an API).
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from 'commander';
|
|
13
|
+
import type { DocumentLLM } from '../../core/document/llm.js';
|
|
14
|
+
export interface DocumentPlanOptions {
|
|
15
|
+
text?: string;
|
|
16
|
+
proposal?: string;
|
|
17
|
+
design?: string;
|
|
18
|
+
specs?: string;
|
|
19
|
+
tasks?: string;
|
|
20
|
+
code?: string;
|
|
21
|
+
workRoot?: string;
|
|
22
|
+
json?: boolean;
|
|
23
|
+
markdown?: boolean;
|
|
24
|
+
signoff?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DocumentValidateOptions {
|
|
27
|
+
workRoot?: string;
|
|
28
|
+
json?: boolean;
|
|
29
|
+
noRender?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function planDocumentCommand(profileId: string, options: DocumentPlanOptions): Promise<{
|
|
32
|
+
exitCode: number;
|
|
33
|
+
payload: unknown;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function validateDocumentCommand(options: DocumentValidateOptions): Promise<{
|
|
36
|
+
exitCode: number;
|
|
37
|
+
payload: unknown;
|
|
38
|
+
}>;
|
|
39
|
+
export declare function injectLLM(llm: DocumentLLM): void;
|
|
40
|
+
export declare function runDocumentCommand(profileId: string | undefined, options: {
|
|
41
|
+
text?: string;
|
|
42
|
+
proposal?: string;
|
|
43
|
+
design?: string;
|
|
44
|
+
specs?: string;
|
|
45
|
+
code?: string;
|
|
46
|
+
workRoot?: string;
|
|
47
|
+
json?: boolean;
|
|
48
|
+
signoff?: boolean;
|
|
49
|
+
} & {
|
|
50
|
+
skipReview?: boolean;
|
|
51
|
+
maxRounds?: number;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
exitCode: number;
|
|
54
|
+
payload: unknown;
|
|
55
|
+
}>;
|
|
56
|
+
export declare function detectDocumentCommand(options: {
|
|
57
|
+
text?: string;
|
|
58
|
+
proposal?: string;
|
|
59
|
+
design?: string;
|
|
60
|
+
specs?: string;
|
|
61
|
+
code?: string;
|
|
62
|
+
json?: boolean;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
exitCode: number;
|
|
65
|
+
payload: unknown;
|
|
66
|
+
}>;
|
|
67
|
+
export interface ApproveOptions {
|
|
68
|
+
proposal?: string;
|
|
69
|
+
specs?: string;
|
|
70
|
+
design?: string;
|
|
71
|
+
tasks?: string;
|
|
72
|
+
change?: string;
|
|
73
|
+
workspaceRoot?: string;
|
|
74
|
+
changes?: string;
|
|
75
|
+
workRoot?: string;
|
|
76
|
+
signoff?: boolean;
|
|
77
|
+
bundle?: boolean;
|
|
78
|
+
json?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export declare function approveDocumentCommand(options: ApproveOptions): Promise<{
|
|
81
|
+
exitCode: number;
|
|
82
|
+
payload: unknown;
|
|
83
|
+
}>;
|
|
84
|
+
export interface SynthesizeOptions {
|
|
85
|
+
workspaceRoot: string;
|
|
86
|
+
changes?: string;
|
|
87
|
+
profile?: string;
|
|
88
|
+
text?: string;
|
|
89
|
+
workRoot?: string;
|
|
90
|
+
signoff?: boolean;
|
|
91
|
+
json?: boolean;
|
|
92
|
+
}
|
|
93
|
+
export declare function synthesizeDocumentCommand(options: SynthesizeOptions): Promise<{
|
|
94
|
+
exitCode: number;
|
|
95
|
+
payload: unknown;
|
|
96
|
+
}>;
|
|
97
|
+
export declare function registerDocumentRunCommand(program: Command): void;
|