speccore 8.3.58 → 8.3.60

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 (65) hide show
  1. package/.agents/skills/spec-deploy/SKILL.md +311 -0
  2. package/.agents/skills/spec-verify/SKILL.md +226 -0
  3. package/README.md +60 -3
  4. package/dist/cli.js +52 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/about.d.ts.map +1 -1
  7. package/dist/commands/about.js +9 -2
  8. package/dist/commands/about.js.map +1 -1
  9. package/dist/commands/build.d.ts +9 -0
  10. package/dist/commands/build.d.ts.map +1 -0
  11. package/dist/commands/build.js +180 -0
  12. package/dist/commands/build.js.map +1 -0
  13. package/dist/commands/deploy.d.ts +11 -0
  14. package/dist/commands/deploy.d.ts.map +1 -0
  15. package/dist/commands/deploy.js +118 -0
  16. package/dist/commands/deploy.js.map +1 -0
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +2 -0
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/iteration/split.d.ts.map +1 -1
  21. package/dist/commands/iteration/split.js +28 -0
  22. package/dist/commands/iteration/split.js.map +1 -1
  23. package/dist/commands/pipeline.d.ts +10 -0
  24. package/dist/commands/pipeline.d.ts.map +1 -0
  25. package/dist/commands/pipeline.js +365 -0
  26. package/dist/commands/pipeline.js.map +1 -0
  27. package/dist/commands/pr.d.ts +3 -0
  28. package/dist/commands/pr.d.ts.map +1 -1
  29. package/dist/commands/pr.js +218 -0
  30. package/dist/commands/pr.js.map +1 -1
  31. package/dist/commands/update-env-configs.d.ts +3 -0
  32. package/dist/commands/update-env-configs.d.ts.map +1 -0
  33. package/dist/commands/update-env-configs.js +252 -0
  34. package/dist/commands/update-env-configs.js.map +1 -0
  35. package/dist/commands/update.d.ts.map +1 -1
  36. package/dist/commands/update.js +13 -0
  37. package/dist/commands/update.js.map +1 -1
  38. package/dist/commands/verify.d.ts +3 -0
  39. package/dist/commands/verify.d.ts.map +1 -1
  40. package/dist/commands/verify.js +343 -4
  41. package/dist/commands/verify.js.map +1 -1
  42. package/dist/core/deploy/engine.d.ts +25 -0
  43. package/dist/core/deploy/engine.d.ts.map +1 -0
  44. package/dist/core/deploy/engine.js +348 -0
  45. package/dist/core/deploy/engine.js.map +1 -0
  46. package/dist/core/environment-config.d.ts +61 -0
  47. package/dist/core/environment-config.d.ts.map +1 -0
  48. package/dist/core/environment-config.js +178 -0
  49. package/dist/core/environment-config.js.map +1 -0
  50. package/dist/core/pipeline-test.d.ts +83 -0
  51. package/dist/core/pipeline-test.d.ts.map +1 -0
  52. package/dist/core/pipeline-test.js +467 -0
  53. package/dist/core/pipeline-test.js.map +1 -0
  54. package/dist/core/test-config.d.ts +39 -0
  55. package/dist/core/test-config.d.ts.map +1 -0
  56. package/dist/core/test-config.js +162 -0
  57. package/dist/core/test-config.js.map +1 -0
  58. package/dist/core/ui-verify/spec-generator.d.ts.map +1 -1
  59. package/dist/core/ui-verify/spec-generator.js +27 -0
  60. package/dist/core/ui-verify/spec-generator.js.map +1 -1
  61. package/dist/core/unified-config.d.ts +54 -0
  62. package/dist/core/unified-config.d.ts.map +1 -1
  63. package/dist/core/unified-config.js +89 -0
  64. package/dist/core/unified-config.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadEnvironmentConfig = loadEnvironmentConfig;
4
+ exports.resolveEnvironmentConfig = resolveEnvironmentConfig;
5
+ exports.loadEnvironmentByNameOrPath = loadEnvironmentByNameOrPath;
6
+ /**
7
+ * environment-config — 环境配置加载与管理
8
+ *
9
+ * 支持 .speccore/environments/*.yaml 文件夹化管理。
10
+ * 环境配置可覆盖 PROJECT.yaml 中的 deploy/build 参数。
11
+ *
12
+ * v8.3.60+
13
+ */
14
+ const fs_extra_1 = require("fs-extra");
15
+ const path_1 = require("path");
16
+ const logger_1 = require("../utils/logger");
17
+ const ENV_DIR = (0, path_1.join)('.speccore', 'environments');
18
+ /** 解析 YAML(复用统一配置中的解析逻辑) */
19
+ function parseEnvYaml(content) {
20
+ const result = {};
21
+ const lines = content.split('\n');
22
+ let stack = [{ obj: result, indent: -1 }];
23
+ for (const line of lines) {
24
+ if (!line.trim() || line.trim().startsWith('#'))
25
+ continue;
26
+ const indent = line.length - line.trimStart().length;
27
+ while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
28
+ stack.pop();
29
+ }
30
+ const trimmed = line.trim();
31
+ const parent = stack[stack.length - 1].obj;
32
+ if (trimmed.startsWith('- ')) {
33
+ const value = trimmed.slice(2).trim();
34
+ if (!Array.isArray(parent))
35
+ continue;
36
+ if (value.includes(':')) {
37
+ const obj = {};
38
+ const [k, ...rest] = value.split(':');
39
+ const v = rest.join(':').trim();
40
+ if (v)
41
+ obj[k.trim()] = autoType(v);
42
+ parent.push(obj);
43
+ stack.push({ obj, indent });
44
+ }
45
+ else {
46
+ parent.push(autoType(value));
47
+ }
48
+ }
49
+ else if (trimmed.endsWith(':')) {
50
+ const key = trimmed.slice(0, -1).trim();
51
+ if (Array.isArray(parent)) {
52
+ const last = parent[parent.length - 1];
53
+ if (last && typeof last === 'object' && !Array.isArray(last)) {
54
+ last[key] = {};
55
+ stack.push({ obj: last[key], indent });
56
+ }
57
+ }
58
+ else {
59
+ if (!parent[key])
60
+ parent[key] = {};
61
+ stack.push({ obj: parent[key], indent });
62
+ }
63
+ }
64
+ else if (trimmed.includes(':')) {
65
+ const [k, ...rest] = trimmed.split(':');
66
+ const v = rest.join(':').trim();
67
+ if (Array.isArray(parent)) {
68
+ const last = parent[parent.length - 1];
69
+ if (last && typeof last === 'object') {
70
+ last[k.trim()] = autoType(v);
71
+ }
72
+ }
73
+ else {
74
+ parent[k.trim()] = autoType(v);
75
+ }
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ function autoType(v) {
81
+ if (v === 'true')
82
+ return true;
83
+ if (v === 'false')
84
+ return false;
85
+ if (/^-?\d+$/.test(v))
86
+ return parseInt(v, 10);
87
+ if (/^-?\d+\.\d+$/.test(v))
88
+ return parseFloat(v);
89
+ return v;
90
+ }
91
+ /** 加载指定路径的环境配置文件 */
92
+ async function loadEnvironmentConfig(filePath) {
93
+ if (!(await (0, fs_extra_1.pathExists)(filePath))) {
94
+ return null;
95
+ }
96
+ try {
97
+ const raw = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
98
+ const parsed = parseEnvYaml(raw);
99
+ const config = {
100
+ env: parsed.env || 'unknown',
101
+ branch: parsed.branch || undefined,
102
+ platforms: {},
103
+ };
104
+ if (parsed.defaults && typeof parsed.defaults === 'object') {
105
+ config.defaults = {
106
+ build_cmd: parsed.defaults.build_cmd,
107
+ };
108
+ }
109
+ if (parsed.platforms && typeof parsed.platforms === 'object') {
110
+ for (const [name, pcfg] of Object.entries(parsed.platforms)) {
111
+ const platformConfig = {};
112
+ if (pcfg && typeof pcfg === 'object') {
113
+ const pc = pcfg;
114
+ if (pc.build_cmd)
115
+ platformConfig.build_cmd = String(pc.build_cmd);
116
+ if (pc.deploy && typeof pc.deploy === 'object') {
117
+ platformConfig.deploy = pc.deploy;
118
+ }
119
+ }
120
+ config.platforms[name] = platformConfig;
121
+ }
122
+ }
123
+ if (parsed.tests && typeof parsed.tests === 'object') {
124
+ const t = parsed.tests;
125
+ config.tests = {};
126
+ if (t.base_urls && typeof t.base_urls === 'object') {
127
+ config.tests.base_urls = t.base_urls;
128
+ }
129
+ if (t.visual_model && typeof t.visual_model === 'object') {
130
+ config.tests.visual_model = t.visual_model;
131
+ }
132
+ }
133
+ // 解析 pipeline 测试配置
134
+ if (parsed.pipeline && typeof parsed.pipeline === 'object') {
135
+ const p = parsed.pipeline;
136
+ config.pipeline = {};
137
+ if (p.test && typeof p.test === 'object') {
138
+ const pt = p.test;
139
+ config.pipeline.test = {
140
+ enabled: pt.enabled === true || pt.enabled === 'true',
141
+ type: pt.type || 'build-check',
142
+ stage: pt.stage || 'pre-deploy',
143
+ config: pt.config,
144
+ fail_on_error: pt.fail_on_error !== false && pt.fail_on_error !== 'false',
145
+ auto_fix: pt.auto_fix !== false && pt.auto_fix !== 'false',
146
+ max_retries: typeof pt.max_retries === 'number' ? pt.max_retries : undefined,
147
+ };
148
+ }
149
+ }
150
+ return config;
151
+ }
152
+ catch (e) {
153
+ logger_1.logger.warn(`⚠️ 环境配置文件解析失败: ${filePath} — ${e.message}`);
154
+ return null;
155
+ }
156
+ }
157
+ /** 按环境名解析配置文件路径 */
158
+ async function resolveEnvironmentConfig(envName) {
159
+ const envPath = (0, path_1.join)(ENV_DIR, `${envName}.yaml`);
160
+ const config = await loadEnvironmentConfig(envPath);
161
+ return { config, path: envPath };
162
+ }
163
+ /** 按环境名或文件路径加载(自动识别) */
164
+ async function loadEnvironmentByNameOrPath(input) {
165
+ if (!input)
166
+ return null;
167
+ // 若包含路径分隔符,视为文件路径
168
+ if (input.includes('/') || input.includes('\\') || input.endsWith('.yaml') || input.endsWith('.yml')) {
169
+ return loadEnvironmentConfig(input);
170
+ }
171
+ // 否则视为环境名
172
+ const { config } = await resolveEnvironmentConfig(input);
173
+ if (!config) {
174
+ logger_1.logger.warn(`⚠️ 未找到环境配置: .speccore/environments/${input}.yaml`);
175
+ }
176
+ return config;
177
+ }
178
+ //# sourceMappingURL=environment-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-config.js","sourceRoot":"","sources":["../../src/core/environment-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * pipeline-test — Pipeline 专用测试引擎
3
+ *
4
+ * 在 build 之后、deploy 之前执行,测试失败可阻断部署。
5
+ *
6
+ * 支持三种测试层级:
7
+ * 1. build-check: 构建产物检查(默认,轻量级)
8
+ * 2. smoke: HTTP 可达性检查(需要 base_url)
9
+ * 3. visual: 视觉回归测试(需要 Playwright + 视觉模型)
10
+ * 4. api: API 契约测试
11
+ * 5. all: 依次执行 build-check + smoke + visual + api
12
+ *
13
+ * v8.3.60+
14
+ */
15
+ import type { EnvironmentConfig } from './environment-config';
16
+ import type { PlatformConfig } from './unified-config';
17
+ import type { SmokeResult, VisualResult } from './ui-verify';
18
+ import type { ApiVerifyReport } from './api-verify';
19
+ export interface PipelineTestOptions {
20
+ /** 测试平台 */
21
+ platform: PlatformConfig;
22
+ /** 环境名 */
23
+ env: string;
24
+ /** 测试类型 */
25
+ type: 'build-check' | 'smoke' | 'visual' | 'api' | 'all';
26
+ /** 环境配置(用于读取 tests.base_urls 等) */
27
+ envConfig?: EnvironmentConfig;
28
+ /** 是否预览模式 */
29
+ dryRun?: boolean;
30
+ /** 构建输出目录(用于 build-check) */
31
+ outputDir?: string;
32
+ /** 超时时间(毫秒) */
33
+ timeout?: number;
34
+ }
35
+ export interface PipelineTestResult {
36
+ /** 平台名 */
37
+ platform: string;
38
+ /** 是否全部通过 */
39
+ passed: boolean;
40
+ /** 失败严重程度: critical(严重,必须阻断) / warning(警告,可继续部署) */
41
+ severity: 'critical' | 'warning';
42
+ /** 执行的测试类型列表 */
43
+ types: string[];
44
+ /** 耗时(毫秒) */
45
+ duration: number;
46
+ /** 各测试详情 */
47
+ details: {
48
+ buildCheck?: BuildCheckResult;
49
+ smoke?: SmokeResult[];
50
+ visual?: VisualResult[];
51
+ api?: ApiVerifyReport;
52
+ };
53
+ /** 汇总 */
54
+ summary: {
55
+ total: number;
56
+ passed: number;
57
+ failed: number;
58
+ };
59
+ /** 错误信息(整体失败时) */
60
+ error?: string;
61
+ }
62
+ interface BuildCheckResult {
63
+ passed: boolean;
64
+ checks: Array<{
65
+ name: string;
66
+ passed: boolean;
67
+ message?: string;
68
+ }>;
69
+ }
70
+ /**
71
+ * 执行 Pipeline 测试
72
+ *
73
+ * 按配置的类型依次执行测试,任一失败即返回失败结果。
74
+ */
75
+ export declare function runPipelineTest(options: PipelineTestOptions): Promise<PipelineTestResult>;
76
+ /**
77
+ * 生成 Pipeline 测试报告(供 Skill / AI 读取)
78
+ *
79
+ * 输出格式便于 AI 解析失败原因。
80
+ */
81
+ export declare function formatPipelineTestReport(result: PipelineTestResult): string;
82
+ export {};
83
+ //# sourceMappingURL=pipeline-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-test.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAc,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,cAAc,CAAC;AAGrE,MAAM,WAAW,mBAAmB;IAClC,WAAW;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IACzD,mCAAmC;IACnC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;IACjC,gBAAgB;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,OAAO,EAAE;QACP,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,EAAE,eAAe,CAAC;KACvB,CAAC;IACF,SAAS;IACT,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AA8RD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAmE3E"}