speccore 8.3.307 → 8.3.308
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/dist/commands/chain.d.ts.map +1 -1
- package/dist/commands/chain.js +24 -14
- package/dist/commands/chain.js.map +1 -1
- package/dist/commands/execute.js +24 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +63 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/taskify.d.ts.map +1 -1
- package/dist/commands/iteration/taskify.js +2 -1
- package/dist/commands/iteration/taskify.js.map +1 -1
- package/dist/commands/task/new.js +11 -7
- package/dist/commands/task/new.js.map +1 -1
- package/dist/commands/verify.js +3 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/constraint-set.d.ts.map +1 -1
- package/dist/core/constraint-set.js +3 -2
- package/dist/core/constraint-set.js.map +1 -1
- package/dist/core/task-paths.d.ts +1 -1
- package/dist/core/task-paths.d.ts.map +1 -1
- package/dist/core/task-paths.js +2 -1
- package/dist/core/task-paths.js.map +1 -1
- package/dist/core/task-type-registry.d.ts +74 -14
- package/dist/core/task-type-registry.d.ts.map +1 -1
- package/dist/core/task-type-registry.js +190 -14
- package/dist/core/task-type-registry.js.map +1 -1
- package/package.json +1 -1
- package/templates/html/speccore-ask-guide.html +1 -1
- package/templates/html/speccore-ask-pipeline.html +1 -1
- package/templates/html/speccore-ask-result.html +1 -1
- package/templates/html/speccore-help.html +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-type-registry.d.ts","sourceRoot":"","sources":["../../src/core/task-type-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"task-type-registry.d.ts","sourceRoot":"","sources":["../../src/core/task-type-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,aAAa,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CA0GjE,CAAC;AAEF,qBAAqB;AACrB,eAAO,MAAM,cAAc,UAAkC,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAcvE;AAMD,uBAAuB;AACvB,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAE9D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAiClG;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAUvG;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CASrE;AAED,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuDtD,CAAC"}
|
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* TaskChain 任务类型注册表(v8.3.307
|
|
3
|
+
* TaskChain 任务类型注册表(v8.3.307+,v8.3.308 开放类型系统)
|
|
4
4
|
*
|
|
5
5
|
* 背景:SpecCore 传统任务是「代码类迭代任务」(feature/bugfix/refactor/research),
|
|
6
|
-
* 但长任务链场景下用户会混排「编码 / 写文档 / 写脚本 /
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* 但长任务链场景下用户会混排「编码 / 写文档 / 写脚本 / 数据处理 / 做 PPT」等
|
|
7
|
+
* 异质任务。本注册表把任务类型泛化:每种类型声明自身的产出位置、验收方式、
|
|
8
|
+
* 分支策略与默认约束集,让 taskify/execute/chain 等命令按类型差异调度。
|
|
9
|
+
*
|
|
10
|
+
* v8.3.308 开放类型系统:
|
|
11
|
+
* - 内置类型(8 种)由本文件定义,语义向后兼容
|
|
12
|
+
* - 用户自定义类型:在 .speccore/GLOBAL/TASK_TYPES/{类型名}.md 中声明定义,
|
|
13
|
+
* resolveTaskTypeDefinition 按「内置 → 自定义定义文件 → 通用非代码回退」解析
|
|
14
|
+
* - 关键原则:非系统定义的类型默认与代码世界绝缘——不建分支、不需要端拆分、
|
|
15
|
+
* 不需要技术规格,除非任务 spec 中显式声明 code: true(parseSpecCodeDeclaration)
|
|
9
16
|
*
|
|
10
17
|
* 设计原则:
|
|
11
18
|
* - 原有 4 种代码类型语义完全不变(向后兼容)
|
|
12
|
-
* -
|
|
19
|
+
* - 非代码类型走同一调度链路,但跳过分支/端拆分/技术规格
|
|
13
20
|
* - 约束集(constraints)是「共同前提约束」的声明载体:执行同类任务时
|
|
14
21
|
* 约束集加载器(constraint-set.ts)会重新读取,保证上下文不随会话漂移
|
|
15
22
|
*/
|
|
16
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.BUILTIN_CONSTRAINTS = exports.ALL_TASK_TYPES = exports.TASK_TYPE_REGISTRY = void 0;
|
|
24
|
+
exports.BUILTIN_CONSTRAINTS = exports.CUSTOM_TYPES_DIR = exports.ALL_TASK_TYPES = exports.TASK_TYPE_REGISTRY = void 0;
|
|
18
25
|
exports.getTaskTypeDefinition = getTaskTypeDefinition;
|
|
26
|
+
exports.buildGenericDefinition = buildGenericDefinition;
|
|
27
|
+
exports.parseCustomTypeDefinition = parseCustomTypeDefinition;
|
|
28
|
+
exports.resolveTaskTypeDefinition = resolveTaskTypeDefinition;
|
|
29
|
+
exports.parseSpecCodeDeclaration = parseSpecCodeDeclaration;
|
|
30
|
+
const path_1 = require("path");
|
|
31
|
+
const fs_extra_1 = require("fs-extra");
|
|
32
|
+
const task_utils_1 = require("../utils/task-utils");
|
|
19
33
|
/**
|
|
20
|
-
* 任务类型注册表 —
|
|
34
|
+
* 任务类型注册表 — 内置类型单一事实来源
|
|
21
35
|
*
|
|
22
36
|
* 约束集命名约定:`{约束名}` 对应 .speccore/GLOBAL/CONSTRAINTS/{约束名}.md,
|
|
23
|
-
*
|
|
24
|
-
* 由 init 生成,用户可按团队规范增改。
|
|
37
|
+
* 内置约束由 init 生成,用户可按团队规范增改。
|
|
25
38
|
*/
|
|
26
39
|
exports.TASK_TYPE_REGISTRY = {
|
|
27
40
|
feature: {
|
|
@@ -31,9 +44,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
31
44
|
outputDir: '{code_path}', // 由 CONSTITUTION/PROJECT.yaml 源码路径解析
|
|
32
45
|
acceptance: '编译通过 + 单元测试通过 + 接口契约一致',
|
|
33
46
|
branchType: 'feature',
|
|
47
|
+
needsBranch: true,
|
|
34
48
|
needsPlatforms: true,
|
|
35
49
|
needsTechSpec: true,
|
|
36
50
|
defaultConstraints: ['coding-standards'],
|
|
51
|
+
builtin: true,
|
|
37
52
|
},
|
|
38
53
|
bugfix: {
|
|
39
54
|
type: 'bugfix',
|
|
@@ -42,9 +57,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
42
57
|
outputDir: '{code_path}',
|
|
43
58
|
acceptance: '复现步骤修复 + 回归测试通过 + 无新缺陷引入',
|
|
44
59
|
branchType: 'bugfix',
|
|
60
|
+
needsBranch: true,
|
|
45
61
|
needsPlatforms: true,
|
|
46
62
|
needsTechSpec: true,
|
|
47
63
|
defaultConstraints: ['coding-standards'],
|
|
64
|
+
builtin: true,
|
|
48
65
|
},
|
|
49
66
|
refactor: {
|
|
50
67
|
type: 'refactor',
|
|
@@ -53,9 +70,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
53
70
|
outputDir: '{code_path}',
|
|
54
71
|
acceptance: '行为不变(原测试全过)+ 结构改善',
|
|
55
72
|
branchType: 'refactor',
|
|
73
|
+
needsBranch: true,
|
|
56
74
|
needsPlatforms: true,
|
|
57
75
|
needsTechSpec: true,
|
|
58
76
|
defaultConstraints: ['coding-standards'],
|
|
77
|
+
builtin: true,
|
|
59
78
|
},
|
|
60
79
|
research: {
|
|
61
80
|
type: 'research',
|
|
@@ -64,9 +83,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
64
83
|
outputDir: '{iteration_dir}/research/',
|
|
65
84
|
acceptance: '调研报告完整(背景/假设/结论/建议)+ 结论可执行',
|
|
66
85
|
branchType: 'research',
|
|
86
|
+
needsBranch: true,
|
|
67
87
|
needsPlatforms: false,
|
|
68
88
|
needsTechSpec: false,
|
|
69
89
|
defaultConstraints: ['research-standards'],
|
|
90
|
+
builtin: true,
|
|
70
91
|
},
|
|
71
92
|
doc: {
|
|
72
93
|
type: 'doc',
|
|
@@ -75,9 +96,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
75
96
|
outputDir: 'docs/',
|
|
76
97
|
acceptance: '文档结构完整 + 内容准确 + 无死链/占位符残留',
|
|
77
98
|
branchType: 'docs',
|
|
99
|
+
needsBranch: false,
|
|
78
100
|
needsPlatforms: false,
|
|
79
101
|
needsTechSpec: false,
|
|
80
102
|
defaultConstraints: ['doc-standards'],
|
|
103
|
+
builtin: true,
|
|
81
104
|
},
|
|
82
105
|
script: {
|
|
83
106
|
type: 'script',
|
|
@@ -86,9 +109,11 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
86
109
|
outputDir: 'scripts/',
|
|
87
110
|
acceptance: '脚本可运行 + 输入校验完整 + 失败有明确退出码',
|
|
88
111
|
branchType: 'feature',
|
|
112
|
+
needsBranch: false,
|
|
89
113
|
needsPlatforms: false,
|
|
90
114
|
needsTechSpec: false,
|
|
91
115
|
defaultConstraints: ['script-standards'],
|
|
116
|
+
builtin: true,
|
|
92
117
|
},
|
|
93
118
|
data: {
|
|
94
119
|
type: 'data',
|
|
@@ -97,17 +122,158 @@ exports.TASK_TYPE_REGISTRY = {
|
|
|
97
122
|
outputDir: 'outputs/',
|
|
98
123
|
acceptance: '数据完整性校验通过 + 结果可复现 + 异常数据有隔离',
|
|
99
124
|
branchType: 'feature',
|
|
125
|
+
needsBranch: false,
|
|
100
126
|
needsPlatforms: false,
|
|
101
127
|
needsTechSpec: false,
|
|
102
128
|
defaultConstraints: ['data-standards'],
|
|
129
|
+
builtin: true,
|
|
130
|
+
},
|
|
131
|
+
// v8.3.308+: 演示文稿(PPT)——Markdown 大纲 + 逐页内容,渲染交给用户
|
|
132
|
+
presentation: {
|
|
133
|
+
type: 'presentation',
|
|
134
|
+
category: 'doc',
|
|
135
|
+
label: '演示文稿',
|
|
136
|
+
outputDir: 'presentations/',
|
|
137
|
+
acceptance: '页数达标(spec 声明,未声明默认 ≥8 页)+ 每页含标题与 3-5 要点 + 无占位符残留',
|
|
138
|
+
branchType: '',
|
|
139
|
+
needsBranch: false,
|
|
140
|
+
needsPlatforms: false,
|
|
141
|
+
needsTechSpec: false,
|
|
142
|
+
defaultConstraints: ['doc-standards', 'presentation-standards'],
|
|
143
|
+
builtin: true,
|
|
103
144
|
},
|
|
104
145
|
};
|
|
105
|
-
/**
|
|
146
|
+
/** 全部内置任务类型 ID 列表 */
|
|
147
|
+
exports.ALL_TASK_TYPES = Object.keys(exports.TASK_TYPE_REGISTRY);
|
|
148
|
+
/**
|
|
149
|
+
* 获取任务类型定义(同步版:内置 → 通用非代码回退)
|
|
150
|
+
*
|
|
151
|
+
* 不读自定义定义文件(需 I/O),供 task new 等创建侧使用;执行侧请用
|
|
152
|
+
* resolveTaskTypeDefinition(异步,含自定义定义文件解析)。
|
|
153
|
+
*/
|
|
106
154
|
function getTaskTypeDefinition(type) {
|
|
107
|
-
return exports.TASK_TYPE_REGISTRY[type] ||
|
|
155
|
+
return exports.TASK_TYPE_REGISTRY[type] || buildGenericDefinition(type);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 通用非代码回退定义 —— 未知类型一律按「与代码世界绝缘」处理
|
|
159
|
+
*
|
|
160
|
+
* v8.3.308 核心原则:只要不是系统定义的类型,默认不建分支、不需要端拆分、
|
|
161
|
+
* 不需要技术规格;spec 显式声明 code: true 才切换为代码形态。
|
|
162
|
+
*/
|
|
163
|
+
function buildGenericDefinition(type) {
|
|
164
|
+
return {
|
|
165
|
+
type: type || 'custom',
|
|
166
|
+
category: 'custom',
|
|
167
|
+
label: type || '自定义任务',
|
|
168
|
+
outputDir: 'outputs/',
|
|
169
|
+
acceptance: '按任务 spec 描述的交付物与验收标准完成(见 REQ.md 验收标准节)',
|
|
170
|
+
branchType: '',
|
|
171
|
+
needsBranch: false,
|
|
172
|
+
needsPlatforms: false,
|
|
173
|
+
needsTechSpec: false,
|
|
174
|
+
defaultConstraints: [],
|
|
175
|
+
builtin: false,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// ═══════════════════════════════════════════════════════════
|
|
179
|
+
// 用户自定义类型定义文件(v8.3.308)
|
|
180
|
+
// ═══════════════════════════════════════════════════════════
|
|
181
|
+
/** 自定义类型定义目录(相对项目根) */
|
|
182
|
+
exports.CUSTOM_TYPES_DIR = '.speccore/GLOBAL/TASK_TYPES';
|
|
183
|
+
/**
|
|
184
|
+
* 解析自定义类型定义文件(.speccore/GLOBAL/TASK_TYPES/{类型名}.md)
|
|
185
|
+
*
|
|
186
|
+
* 格式:YAML frontmatter 声明字段,正文为类型说明(可选)。示例:
|
|
187
|
+
*
|
|
188
|
+
* ---
|
|
189
|
+
* label: 演示文稿
|
|
190
|
+
* category: doc
|
|
191
|
+
* outputDir: presentations/
|
|
192
|
+
* acceptance: 页数达标 + 每页含标题要点
|
|
193
|
+
* needsBranch: false
|
|
194
|
+
* needsPlatforms: false
|
|
195
|
+
* needsTechSpec: false
|
|
196
|
+
* constraints: [doc-standards, ppt-style]
|
|
197
|
+
* ---
|
|
198
|
+
* 正文说明……
|
|
199
|
+
*/
|
|
200
|
+
function parseCustomTypeDefinition(type, content) {
|
|
201
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
202
|
+
if (!fmMatch)
|
|
203
|
+
return null;
|
|
204
|
+
const fm = fmMatch[1];
|
|
205
|
+
const pick = (key) => {
|
|
206
|
+
const m = fm.match(new RegExp(`^${key}\\s*:\\s*(.+)$`, 'm'));
|
|
207
|
+
return m ? m[1].trim().replace(/^['"]|['"]$/g, '') : undefined;
|
|
208
|
+
};
|
|
209
|
+
const pickBool = (key) => {
|
|
210
|
+
const v = pick(key);
|
|
211
|
+
if (v === undefined)
|
|
212
|
+
return undefined;
|
|
213
|
+
return ['true', 'yes', '1'].includes(v.toLowerCase());
|
|
214
|
+
};
|
|
215
|
+
const pickList = (key) => {
|
|
216
|
+
const v = pick(key);
|
|
217
|
+
if (v === undefined)
|
|
218
|
+
return undefined;
|
|
219
|
+
return v.replace(/^\[|\]$/g, '').split(',').map(s => s.trim().replace(/['"]/g, '')).filter(Boolean);
|
|
220
|
+
};
|
|
221
|
+
const label = pick('label') || type;
|
|
222
|
+
const base = buildGenericDefinition(type);
|
|
223
|
+
return {
|
|
224
|
+
...base,
|
|
225
|
+
category: pick('category') || 'custom',
|
|
226
|
+
label,
|
|
227
|
+
outputDir: pick('outputDir') || 'outputs/',
|
|
228
|
+
acceptance: pick('acceptance') || base.acceptance,
|
|
229
|
+
branchType: pick('branchType') || '',
|
|
230
|
+
needsBranch: pickBool('needsBranch') ?? false,
|
|
231
|
+
needsPlatforms: pickBool('needsPlatforms') ?? false,
|
|
232
|
+
needsTechSpec: pickBool('needsTechSpec') ?? false,
|
|
233
|
+
defaultConstraints: pickList('constraints') ?? [],
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* 解析任务类型定义(异步版,执行侧使用)
|
|
238
|
+
*
|
|
239
|
+
* 优先级:内置注册表 → 用户自定义定义文件 → 通用非代码回退。
|
|
240
|
+
* 自定义定义文件不存在/无 frontmatter 时静默回退,不阻断调度。
|
|
241
|
+
*/
|
|
242
|
+
async function resolveTaskTypeDefinition(type, cwd) {
|
|
243
|
+
if (exports.TASK_TYPE_REGISTRY[type])
|
|
244
|
+
return exports.TASK_TYPE_REGISTRY[type];
|
|
245
|
+
try {
|
|
246
|
+
const fp = (0, path_1.join)(cwd || (0, task_utils_1.getProjectRoot)(), exports.CUSTOM_TYPES_DIR, `${type}.md`);
|
|
247
|
+
if (await (0, fs_extra_1.pathExists)(fp)) {
|
|
248
|
+
const parsed = parseCustomTypeDefinition(type, await (0, fs_extra_1.readFile)(fp, 'utf-8'));
|
|
249
|
+
if (parsed)
|
|
250
|
+
return parsed;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch { /* 忽略,回退通用定义 */ }
|
|
254
|
+
return buildGenericDefinition(type);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 解析任务 spec 中的「写代码」显式声明(v8.3.308)
|
|
258
|
+
*
|
|
259
|
+
* 非系统定义类型默认与代码世界绝缘;任务 spec 声明 code: true(或 needsCode: true)
|
|
260
|
+
* 时切换为代码形态(建分支、写源码路径、注入编码约束)。
|
|
261
|
+
*
|
|
262
|
+
* 支持两种声明:
|
|
263
|
+
* - YAML frontmatter: code: true / needsCode: true
|
|
264
|
+
* - 行内声明: - 需要写代码: true
|
|
265
|
+
*/
|
|
266
|
+
function parseSpecCodeDeclaration(specContent) {
|
|
267
|
+
const fmMatch = specContent.match(/^---\n([\s\S]*?)\n---/);
|
|
268
|
+
if (fmMatch) {
|
|
269
|
+
const fm = fmMatch[1];
|
|
270
|
+
const m = fm.match(/^(code|needsCode)\s*:\s*true\s*$/m);
|
|
271
|
+
if (m)
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
const inline = specContent.match(/^[-•]\s*\*{0,2}(需要写代码|需要编码|写代码)\*{0,2}\s*[::]\s*(true|是|yes)\s*$/im);
|
|
275
|
+
return !!inline;
|
|
108
276
|
}
|
|
109
|
-
/** 全部任务类型 ID 列表(含新增的 doc/script/data) */
|
|
110
|
-
exports.ALL_TASK_TYPES = Object.keys(exports.TASK_TYPE_REGISTRY);
|
|
111
277
|
/** 内置约束集清单(init 时生成到 .speccore/GLOBAL/CONSTRAINTS/) */
|
|
112
278
|
exports.BUILTIN_CONSTRAINTS = {
|
|
113
279
|
'coding-standards': `# 编码标准约束(内置)
|
|
@@ -121,12 +287,22 @@ exports.BUILTIN_CONSTRAINTS = {
|
|
|
121
287
|
`,
|
|
122
288
|
'doc-standards': `# 文档标准约束(内置)
|
|
123
289
|
|
|
124
|
-
> 本约束在每次执行文档类任务(doc)前自动注入。
|
|
290
|
+
> 本约束在每次执行文档类任务(doc/presentation)前自动注入。
|
|
125
291
|
|
|
126
292
|
- 使用标准 Markdown,标题层级清晰,表格对齐
|
|
127
293
|
- 术语与既有文档保持一致,引用使用相对路径
|
|
128
294
|
- 禁止占位符残留(TODO、待补充、xxx)
|
|
129
295
|
- 所有链接必须有效(本地文件存在、外链可访问)
|
|
296
|
+
`,
|
|
297
|
+
'presentation-standards': `# 演示文稿约束(内置)
|
|
298
|
+
|
|
299
|
+
> 本约束在每次执行演示文稿任务(presentation)前自动注入。
|
|
300
|
+
|
|
301
|
+
- 产出 Markdown 大纲 + 逐页内容(presentation.md),不生成二进制 PPT
|
|
302
|
+
- 每页必须有标题与 3-5 个要点,禁止整段文字上页
|
|
303
|
+
- 页数按 spec 要求(未声明时 ≥ 8 页),首页为封面、末页为总结
|
|
304
|
+
- 配图以文字建议描述("此处配图:…"),不嵌入实际图片
|
|
305
|
+
- 演讲稿与页内容分离:页内容精简,口播内容放每页的「口播备注」小节
|
|
130
306
|
`,
|
|
131
307
|
'script-standards': `# 脚本标准约束(内置)
|
|
132
308
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-type-registry.js","sourceRoot":"","sources":["../../src/core/task-type-registry.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"task-type-registry.js","sourceRoot":"","sources":["../../src/core/task-type-registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
.match-result{padding:10px 0}.match-summary{font-weight:600;font-size:14px;margin-bottom:12px}.match-detail{color:var(--muted);font-size:12px;line-height:1.6}
|
|
8
8
|
/* Pipeline */
|
|
9
9
|
.pipeline-title{font-weight:600;margin-bottom:16px}.pipeline-steps{display:flex;flex-direction:column;gap:10px}.pipe-step{display:flex;gap:14px;padding:12px 14px;background:rgba(99,102,241,.04);border-left:2px solid var(--purple);border-radius:0 8px 8px 0}.pipe-step .pipe-num{font-family:Orbitron;font-size:20px;font-weight:900;color:var(--purple);min-width:36px}.pipe-step .pipe-cmd{font-weight:600;color:var(--green)}.pipe-step .pipe-args{color:var(--muted);font-size:11px}.pipe-step .pipe-desc{color:var(--muted);font-size:10px;margin-top:4px}.pipe-step .pipe-dep{font-size:9px;color:var(--orange);margin-top:4px}.confirm-bar{text-align:center;padding:14px;margin-top:16px;background:rgba(99,102,241,.08);border:1px dashed rgba(99,102,241,.2);border-radius:8px;color:var(--purple);font-size:12px}
|
|
10
|
-
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(9 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore iteration taskify -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore verify --ui</div><div class="step-desc">本地冒烟测试(自动登录 + 页面冒烟,默认 module 范围)</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">9</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="speccore-welcome.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.
|
|
10
|
+
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(9 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore iteration taskify -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore verify --ui</div><div class="step-desc">本地冒烟测试(自动登录 + 页面冒烟,默认 module 范围)</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">9</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="speccore-welcome.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.308 · 2026-08-31</div></div></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore · ask --pipeline</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:900px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:32px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.page-title{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:700;text-align:center;color:var(--cyan);margin-bottom:32px;letter-spacing:1px;text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}.page-title span{color:var(--text);font-weight:500}.flow-chart{display:flex;align-items:stretch;gap:0;margin-bottom:28px}.flow-node{flex:1;background:rgba(13,31,56,.7);border:1px solid;border-radius:10px;padding:14px 8px;text-align:center;position:relative}.flow-node .icon{font-size:18px;margin-bottom:6px}.flow-node .name{font-size:12px;font-weight:600;margin-bottom:4px}.flow-node .desc{font-size:10px;color:var(--muted)}.flow-node.n1{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n2{border-color:rgba(99,102,241,.4);color:var(--purple)}.flow-node.n3{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n4{border-color:rgba(20,184,166,.4);color:var(--green)}.flow-connector{width:24px;display:flex;align-items:center;justify-content:center}.flow-connector::after{content:'';width:100%;height:1px;background:linear-gradient(90deg,var(--border),var(--cyan),var(--border))}.example-box{border:1px dashed rgba(14,165,233,.3);border-radius:12px;padding:16px 20px;margin-bottom:24px;background:rgba(14,165,233,.03)}.example-label{font-size:13px;font-weight:600;color:var(--cyan);margin-bottom:8px}.example-query{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text)}.example-query code{color:var(--green);font-weight:600}.steps{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.step{background:rgba(13,31,56,.8);border:1px solid rgba(14,165,233,.12);border-radius:10px;padding:14px 18px}.step-num{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:var(--green);margin-bottom:6px}.step-cmd{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text);margin-bottom:6px}.step-cmd .cmd-name{color:var(--green)}.step-cmd .cmd-args{color:var(--muted)}.step-parse{font-size:12px;color:var(--muted);line-height:1.5}.step-parse::before{content:'→ 解析:';color:var(--cyan)}.confirm-btn{display:block;width:100%;max-width:420px;margin:0 auto 16px;text-align:center;padding:16px;background:linear-gradient(135deg,var(--cyan),#0284c7);border:none;border-radius:40px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 0 30px rgba(14,165,233,.3)}.legend{display:flex;justify-content:center;gap:20px;font-size:11px;color:var(--muted);margin-bottom:16px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.legend-dot.required{background:var(--cyan)}.legend-dot.generated{background:var(--green)}.legend-dot.pending{background:rgba(255,255,255,.3)}.back-link{text-align:center;margin-top:12px}.back-link a{color:var(--cyan);font-size:11px;text-decoration:none}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:20px}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><div class="page-title">ask --pipeline <span>多步骤编排引擎</span></div><div class="flow-chart"><div class="flow-node n1"><div class="icon">🧠</div><div class="name">AI 意图分解</div><div class="desc">LLM 分解多步骤</div></div><div class="flow-connector"></div><div class="flow-node n2"><div class="icon">📐</div><div class="name">命令匹配</div><div class="desc">意图→命令图</div></div><div class="flow-connector"></div><div class="flow-node n3"><div class="icon">🔗</div><div class="name">依赖解析</div><div class="desc">顺序/并行/参数</div></div><div class="flow-connector"></div><div class="flow-node n4"><div class="icon">✅</div><div class="name">预览</div><div class="desc">展示给用户</div></div></div><div class="example-box"><div class="example-label">📋 示例:<span class="example-query"><code>/spec-ask "本期迭代:从 PRD 导入到代码提交,跑完整开发流程"</code></span></div></div><div class="steps"><div class="step"><div class="step-num">1.</div><div class="step-cmd"><span class="cmd-name">speccore doc2spec</span> <span class="cmd-args">-f PRD.docx --iter {iteration}</span></div><div class="step-parse">导入 PRD 文档,AI 分析生成需求规格说明书</div></div><div class="step"><div class="step-num">2.</div><div class="step-cmd"><span class="cmd-name">speccore analyze</span> <span class="cmd-args">--iteration {iteration} --audit</span></div><div class="step-parse">AI 深度分析需求,生成审计报告和可行性评估</div></div><div class="step"><div class="step-num">3.</div><div class="step-cmd"><span class="cmd-name">speccore iteration taskify</span> <span class="cmd-args">-f REQUIREMENT.md</span></div><div class="step-parse">将需求拆分为独立开发任务,确定优先级和依赖关系</div></div><div class="step"><div class="step-num">4.</div><div class="step-cmd"><span class="cmd-name">speccore execute</span> <span class="cmd-args">--auto</span></div><div class="step-parse">按任务计划依次自动执行开发、测试和代码生成</div></div><div class="step"><div class="step-num">5.</div><div class="step-cmd"><span class="cmd-name">speccore verify</span> <span class="cmd-args">--ui</span></div><div class="step-parse">本地冒烟测试:自动登录 + 页面冒烟(默认 module 范围)</div></div><div class="step"><div class="step-num">6.</div><div class="step-cmd"><span class="cmd-name">speccore pr</span> <span class="cmd-args">--auto</span></div><div class="step-parse">代码提交后自动创建 Pull Request,完成交付</div></div></div><div class="confirm-btn">确认执行? (y/N) 或修改参数</div><div class="legend"><div class="legend-item"><span class="legend-dot required"></span> = 必选步骤</div><div class="legend-item"><span class="legend-dot generated"></span> = 已生成</div><div class="legend-item"><span class="legend-dot pending"></span> = 待执行</div><div class="legend-item">→ = 依赖传递</div></div><div class="back-link"><a href="speccore-welcome.html">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore · ask --pipeline</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:900px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:32px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.page-title{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:700;text-align:center;color:var(--cyan);margin-bottom:32px;letter-spacing:1px;text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}.page-title span{color:var(--text);font-weight:500}.flow-chart{display:flex;align-items:stretch;gap:0;margin-bottom:28px}.flow-node{flex:1;background:rgba(13,31,56,.7);border:1px solid;border-radius:10px;padding:14px 8px;text-align:center;position:relative}.flow-node .icon{font-size:18px;margin-bottom:6px}.flow-node .name{font-size:12px;font-weight:600;margin-bottom:4px}.flow-node .desc{font-size:10px;color:var(--muted)}.flow-node.n1{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n2{border-color:rgba(99,102,241,.4);color:var(--purple)}.flow-node.n3{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n4{border-color:rgba(20,184,166,.4);color:var(--green)}.flow-connector{width:24px;display:flex;align-items:center;justify-content:center}.flow-connector::after{content:'';width:100%;height:1px;background:linear-gradient(90deg,var(--border),var(--cyan),var(--border))}.example-box{border:1px dashed rgba(14,165,233,.3);border-radius:12px;padding:16px 20px;margin-bottom:24px;background:rgba(14,165,233,.03)}.example-label{font-size:13px;font-weight:600;color:var(--cyan);margin-bottom:8px}.example-query{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text)}.example-query code{color:var(--green);font-weight:600}.steps{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.step{background:rgba(13,31,56,.8);border:1px solid rgba(14,165,233,.12);border-radius:10px;padding:14px 18px}.step-num{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:var(--green);margin-bottom:6px}.step-cmd{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text);margin-bottom:6px}.step-cmd .cmd-name{color:var(--green)}.step-cmd .cmd-args{color:var(--muted)}.step-parse{font-size:12px;color:var(--muted);line-height:1.5}.step-parse::before{content:'→ 解析:';color:var(--cyan)}.confirm-btn{display:block;width:100%;max-width:420px;margin:0 auto 16px;text-align:center;padding:16px;background:linear-gradient(135deg,var(--cyan),#0284c7);border:none;border-radius:40px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 0 30px rgba(14,165,233,.3)}.legend{display:flex;justify-content:center;gap:20px;font-size:11px;color:var(--muted);margin-bottom:16px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.legend-dot.required{background:var(--cyan)}.legend-dot.generated{background:var(--green)}.legend-dot.pending{background:rgba(255,255,255,.3)}.back-link{text-align:center;margin-top:12px}.back-link a{color:var(--cyan);font-size:11px;text-decoration:none}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:20px}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><div class="page-title">ask --pipeline <span>多步骤编排引擎</span></div><div class="flow-chart"><div class="flow-node n1"><div class="icon">🧠</div><div class="name">AI 意图分解</div><div class="desc">LLM 分解多步骤</div></div><div class="flow-connector"></div><div class="flow-node n2"><div class="icon">📐</div><div class="name">命令匹配</div><div class="desc">意图→命令图</div></div><div class="flow-connector"></div><div class="flow-node n3"><div class="icon">🔗</div><div class="name">依赖解析</div><div class="desc">顺序/并行/参数</div></div><div class="flow-connector"></div><div class="flow-node n4"><div class="icon">✅</div><div class="name">预览</div><div class="desc">展示给用户</div></div></div><div class="example-box"><div class="example-label">📋 示例:<span class="example-query"><code>/spec-ask "本期迭代:从 PRD 导入到代码提交,跑完整开发流程"</code></span></div></div><div class="steps"><div class="step"><div class="step-num">1.</div><div class="step-cmd"><span class="cmd-name">speccore doc2spec</span> <span class="cmd-args">-f PRD.docx --iter {iteration}</span></div><div class="step-parse">导入 PRD 文档,AI 分析生成需求规格说明书</div></div><div class="step"><div class="step-num">2.</div><div class="step-cmd"><span class="cmd-name">speccore analyze</span> <span class="cmd-args">--iteration {iteration} --audit</span></div><div class="step-parse">AI 深度分析需求,生成审计报告和可行性评估</div></div><div class="step"><div class="step-num">3.</div><div class="step-cmd"><span class="cmd-name">speccore iteration taskify</span> <span class="cmd-args">-f REQUIREMENT.md</span></div><div class="step-parse">将需求拆分为独立开发任务,确定优先级和依赖关系</div></div><div class="step"><div class="step-num">4.</div><div class="step-cmd"><span class="cmd-name">speccore execute</span> <span class="cmd-args">--auto</span></div><div class="step-parse">按任务计划依次自动执行开发、测试和代码生成</div></div><div class="step"><div class="step-num">5.</div><div class="step-cmd"><span class="cmd-name">speccore verify</span> <span class="cmd-args">--ui</span></div><div class="step-parse">本地冒烟测试:自动登录 + 页面冒烟(默认 module 范围)</div></div><div class="step"><div class="step-num">6.</div><div class="step-cmd"><span class="cmd-name">speccore pr</span> <span class="cmd-args">--auto</span></div><div class="step-parse">代码提交后自动创建 Pull Request,完成交付</div></div></div><div class="confirm-btn">确认执行? (y/N) 或修改参数</div><div class="legend"><div class="legend-item"><span class="legend-dot required"></span> = 必选步骤</div><div class="legend-item"><span class="legend-dot generated"></span> = 已生成</div><div class="legend-item"><span class="legend-dot pending"></span> = 待执行</div><div class="legend-item">→ = 依赖传递</div></div><div class="back-link"><a href="speccore-welcome.html">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.308 · 2026-08-31</div></div></body></html>
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
.match-result{padding:10px 0}.match-summary{font-weight:600;font-size:14px;margin-bottom:12px}.match-detail{color:var(--muted);font-size:12px;line-height:1.6}
|
|
8
8
|
/* Pipeline */
|
|
9
9
|
.pipeline-title{font-weight:600;margin-bottom:16px}.pipeline-steps{display:flex;flex-direction:column;gap:10px}.pipe-step{display:flex;gap:14px;padding:12px 14px;background:rgba(99,102,241,.04);border-left:2px solid var(--purple);border-radius:0 8px 8px 0}.pipe-step .pipe-num{font-family:Orbitron;font-size:20px;font-weight:900;color:var(--purple);min-width:36px}.pipe-step .pipe-cmd{font-weight:600;color:var(--green)}.pipe-step .pipe-args{color:var(--muted);font-size:11px}.pipe-step .pipe-desc{color:var(--muted);font-size:10px;margin-top:4px}.pipe-step .pipe-dep{font-size:9px;color:var(--orange);margin-top:4px}.confirm-bar{text-align:center;padding:14px;margin-top:16px;background:rgba(99,102,241,.08);border:1px dashed rgba(99,102,241,.2);border-radius:8px;color:var(--purple);font-size:12px}
|
|
10
|
-
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"dashboard"</div><div class="badge">🎯 意图匹配</div><div class="match-result"><div class="match-summary">✅ 推荐: dashboard</div><div class="match-detail">🎯 推荐命令: <code>speccore dashboard<br>项目仪表盘:期次状态/进度/健康度,--scope</code> global 全量视图<br><br>用法: <code>speccore dashboard</code> [--scope global|iteration] [--export html] [--health] [--lifecycle]<br><br>示例:<br> $ <code>speccore dashboard<br></code> $ <code>speccore dashboard</code> --scope global --export html</div></div><div class="footer">由 SpecCore 驱动 v8.3.
|
|
10
|
+
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"dashboard"</div><div class="badge">🎯 意图匹配</div><div class="match-result"><div class="match-summary">✅ 推荐: dashboard</div><div class="match-detail">🎯 推荐命令: <code>speccore dashboard<br>项目仪表盘:期次状态/进度/健康度,--scope</code> global 全量视图<br><br>用法: <code>speccore dashboard</code> [--scope global|iteration] [--export html] [--health] [--lifecycle]<br><br>示例:<br> $ <code>speccore dashboard<br></code> $ <code>speccore dashboard</code> --scope global --export html</div></div><div class="footer">由 SpecCore 驱动 v8.3.308 · 2026-08-31</div></div></body></html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:960px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:36px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:2px;margin-bottom:4px;animation:titleGlow 3s ease-in-out infinite}.sub{color:var(--muted);font-size:11px;margin-bottom:24px}.intro-card{padding:20px;margin-bottom:20px;background:linear-gradient(135deg,rgba(14,165,233,.08),rgba(99,102,241,.08));border:1px solid rgba(14,165,233,.2);border-radius:12px}.intro-title{font-size:16px;font-weight:700;color:var(--cyan);margin-bottom:12px}.intro-text{font-size:13px;line-height:1.6;color:var(--text);margin-bottom:16px}.highlight-box{display:flex;gap:16px;padding:16px;background:rgba(20,184,166,.08);border:1px solid rgba(20,184,166,.2);border-radius:10px}.highlight-icon{font-size:32px}.highlight-content{flex:1}.highlight-title{font-size:12px;font-weight:700;color:var(--green);margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.highlight-list{list-style:none;padding:0;margin:0}.highlight-list li{font-size:12px;color:var(--text);padding:4px 0;line-height:1.5}.highlight-list strong{color:var(--cyan)}.quick-start{padding:20px;margin:20px 0;background:rgba(249,115,22,.05);border:1px solid rgba(249,115,22,.15);border-radius:12px}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px}.header-icon{font-size:20px}.header-title{font-size:14px;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:1px}.step-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}.step-item{display:flex;gap:12px;padding:12px 16px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;min-width:180px}.step-num{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--orange),#ea580c);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#fff;flex-shrink:0}.step-text{font-size:12px;line-height:1.5}.step-text code{display:inline-block;margin-top:4px;padding:2px 8px;background:rgba(249,115,22,.1);border-radius:4px;color:var(--orange);font-size:11px}.step-arrow{color:var(--muted);font-size:20px;font-weight:700}.cat{margin:16px 0;padding:16px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:12px;transition:all .3s}.cat:hover{border-color:rgba(14,165,233,.3);background:rgba(14,165,233,.03)}.cat-header{display:flex;align-items:center;gap:12px;margin-bottom:12px}.cat-icon{font-size:24px}.cat-info{flex:1}.cat-title{font-size:13px;font-weight:700;color:var(--cyan);margin-bottom:2px}.cat-desc{font-size:11px;color:var(--muted)}.cat-cmds{display:flex;flex-wrap:wrap;gap:8px}.cmd-pill{padding:4px 12px;border-radius:6px;font-size:11px;background:rgba(14,165,233,.08);color:var(--cyan);border:1px solid rgba(14,165,233,.15);transition:all .2s;cursor:pointer}.core-commands{padding:16px;border:1px solid var(--border);border-radius:12px;background:rgba(14,165,233,.04)}.core-commands .cmd-pill{font-size:12px;padding:6px 14px;background:rgba(20,184,166,.12);color:var(--green);border-color:rgba(20,184,166,.3)}.core-hint{margin-top:12px;font-size:12px;color:var(--muted)}.cmd-pill:hover{background:rgba(14,165,233,.15);border-color:rgba(14,165,233,.3);transform:translateY(-1px)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:14px;margin-bottom:16px;color:var(--text);line-height:1.6}.param-list{margin:16px 0}.param{display:flex;gap:16px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:12px;min-width:180px;font-weight:600}.param-meaning{color:var(--muted);font-size:12px;line-height:1.5}.example-list{margin:16px 0}.section-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.tips-section{padding:20px;margin:20px 0;background:rgba(99,102,241,.05);border:1px solid rgba(99,102,241,.15);border-radius:12px}.tip-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:16px}.tip-card{padding:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:10px;display:flex;gap:12px;transition:all .3s}.tip-card:hover{border-color:rgba(99,102,241,.3);background:rgba(99,102,241,.05);transform:translateY(-2px)}.tip-icon{font-size:24px;flex-shrink:0}.tip-content{flex:1}.tip-title{font-size:12px;font-weight:700;color:var(--purple);margin-bottom:4px}.tip-text{font-size:11px;color:var(--muted);line-height:1.5}.tip-text code{display:inline-block;margin-top:4px;padding:2px 6px;background:rgba(99,102,241,.1);border-radius:4px;color:var(--purple);font-size:10px}code{display:block;background:rgba(14,165,233,.08);padding:6px 12px;border-radius:6px;color:var(--cyan);font-size:12px;margin:6px 0;transition:all .2s}code:hover{background:rgba(14,165,233,.12)}.params-section{padding:20px;margin:20px 0;background:rgba(14,165,233,.05);border:1px solid rgba(14,165,233,.15);border-radius:12px}.param-table{margin-top:16px}.param-row{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.03);align-items:center}.header-row{border-bottom:2px solid rgba(14,165,233,.3);font-weight:700}.param-col{flex:1;font-size:12px;line-height:1.5}.param-col.flag{min-width:120px;color:var(--green);font-weight:600}.param-col.meaning{flex:2;color:var(--text)}.param-col.example{flex:1.5;color:var(--muted)}.param-col code{display:inline-block;padding:2px 8px;background:rgba(14,165,233,.08);border-radius:4px;font-size:11px;margin:0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 30% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}@keyframes titleGlow{0%,100%{filter:drop-shadow(0 0 20px rgba(14,165,233,.4)) drop-shadow(0 0 60px rgba(14,165,233,.15))}50%{filter:drop-shadow(0 0 30px rgba(14,165,233,.7)) drop-shadow(0 0 80px rgba(14,165,233,.3))}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:960px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:36px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:2px;margin-bottom:4px;animation:titleGlow 3s ease-in-out infinite}.sub{color:var(--muted);font-size:11px;margin-bottom:24px}.intro-card{padding:20px;margin-bottom:20px;background:linear-gradient(135deg,rgba(14,165,233,.08),rgba(99,102,241,.08));border:1px solid rgba(14,165,233,.2);border-radius:12px}.intro-title{font-size:16px;font-weight:700;color:var(--cyan);margin-bottom:12px}.intro-text{font-size:13px;line-height:1.6;color:var(--text);margin-bottom:16px}.highlight-box{display:flex;gap:16px;padding:16px;background:rgba(20,184,166,.08);border:1px solid rgba(20,184,166,.2);border-radius:10px}.highlight-icon{font-size:32px}.highlight-content{flex:1}.highlight-title{font-size:12px;font-weight:700;color:var(--green);margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.highlight-list{list-style:none;padding:0;margin:0}.highlight-list li{font-size:12px;color:var(--text);padding:4px 0;line-height:1.5}.highlight-list strong{color:var(--cyan)}.quick-start{padding:20px;margin:20px 0;background:rgba(249,115,22,.05);border:1px solid rgba(249,115,22,.15);border-radius:12px}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px}.header-icon{font-size:20px}.header-title{font-size:14px;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:1px}.step-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}.step-item{display:flex;gap:12px;padding:12px 16px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;min-width:180px}.step-num{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--orange),#ea580c);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#fff;flex-shrink:0}.step-text{font-size:12px;line-height:1.5}.step-text code{display:inline-block;margin-top:4px;padding:2px 8px;background:rgba(249,115,22,.1);border-radius:4px;color:var(--orange);font-size:11px}.step-arrow{color:var(--muted);font-size:20px;font-weight:700}.cat{margin:16px 0;padding:16px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:12px;transition:all .3s}.cat:hover{border-color:rgba(14,165,233,.3);background:rgba(14,165,233,.03)}.cat-header{display:flex;align-items:center;gap:12px;margin-bottom:12px}.cat-icon{font-size:24px}.cat-info{flex:1}.cat-title{font-size:13px;font-weight:700;color:var(--cyan);margin-bottom:2px}.cat-desc{font-size:11px;color:var(--muted)}.cat-cmds{display:flex;flex-wrap:wrap;gap:8px}.cmd-pill{padding:4px 12px;border-radius:6px;font-size:11px;background:rgba(14,165,233,.08);color:var(--cyan);border:1px solid rgba(14,165,233,.15);transition:all .2s;cursor:pointer}.core-commands{padding:16px;border:1px solid var(--border);border-radius:12px;background:rgba(14,165,233,.04)}.core-commands .cmd-pill{font-size:12px;padding:6px 14px;background:rgba(20,184,166,.12);color:var(--green);border-color:rgba(20,184,166,.3)}.core-hint{margin-top:12px;font-size:12px;color:var(--muted)}.cmd-pill:hover{background:rgba(14,165,233,.15);border-color:rgba(14,165,233,.3);transform:translateY(-1px)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:14px;margin-bottom:16px;color:var(--text);line-height:1.6}.param-list{margin:16px 0}.param{display:flex;gap:16px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:12px;min-width:180px;font-weight:600}.param-meaning{color:var(--muted);font-size:12px;line-height:1.5}.example-list{margin:16px 0}.section-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.tips-section{padding:20px;margin:20px 0;background:rgba(99,102,241,.05);border:1px solid rgba(99,102,241,.15);border-radius:12px}.tip-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:16px}.tip-card{padding:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:10px;display:flex;gap:12px;transition:all .3s}.tip-card:hover{border-color:rgba(99,102,241,.3);background:rgba(99,102,241,.05);transform:translateY(-2px)}.tip-icon{font-size:24px;flex-shrink:0}.tip-content{flex:1}.tip-title{font-size:12px;font-weight:700;color:var(--purple);margin-bottom:4px}.tip-text{font-size:11px;color:var(--muted);line-height:1.5}.tip-text code{display:inline-block;margin-top:4px;padding:2px 6px;background:rgba(99,102,241,.1);border-radius:4px;color:var(--purple);font-size:10px}code{display:block;background:rgba(14,165,233,.08);padding:6px 12px;border-radius:6px;color:var(--cyan);font-size:12px;margin:6px 0;transition:all .2s}code:hover{background:rgba(14,165,233,.12)}.params-section{padding:20px;margin:20px 0;background:rgba(14,165,233,.05);border:1px solid rgba(14,165,233,.15);border-radius:12px}.param-table{margin-top:16px}.param-row{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.03);align-items:center}.header-row{border-bottom:2px solid rgba(14,165,233,.3);font-weight:700}.param-col{flex:1;font-size:12px;line-height:1.5}.param-col.flag{min-width:120px;color:var(--green);font-weight:600}.param-col.meaning{flex:2;color:var(--text)}.param-col.example{flex:1.5;color:var(--muted)}.param-col code{display:inline-block;padding:2px 8px;background:rgba(14,165,233,.08);border-radius:4px;font-size:11px;margin:0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 30% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}@keyframes titleGlow{0%,100%{filter:drop-shadow(0 0 20px rgba(14,165,233,.4)) drop-shadow(0 0 60px rgba(14,165,233,.15))}50%{filter:drop-shadow(0 0 30px rgba(14,165,233,.7)) drop-shadow(0 0 80px rgba(14,165,233,.3))}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.308</div>
|
|
2
2
|
<div class="intro-card">
|
|
3
3
|
<div class="intro-title">🎯 SpecCore — SDD 开发方法论 CLI 工具</div>
|
|
4
4
|
<div class="intro-text">SpecCore 采用 <strong>Specification-Driven Development(规格驱动开发)</strong>方法论,通过标准化流程和 AI 辅助,实现从需求到交付的自动化流水线。</div>
|
|
@@ -238,4 +238,4 @@
|
|
|
238
238
|
</div>
|
|
239
239
|
</div>
|
|
240
240
|
</div>
|
|
241
|
-
<div class="footer">由 SpecCore 驱动 v8.3.
|
|
241
|
+
<div class="footer">由 SpecCore 驱动 v8.3.308 · 2026-09-29</div></div></body></html>
|