@dommaker/harness 0.1.0

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 (121) hide show
  1. package/README.md +188 -0
  2. package/bin/harness.js +104 -0
  3. package/dist/cli/commands/check.d.ts +25 -0
  4. package/dist/cli/commands/check.d.ts.map +1 -0
  5. package/dist/cli/commands/check.js +166 -0
  6. package/dist/cli/commands/check.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +9 -0
  8. package/dist/cli/commands/index.d.ts.map +1 -0
  9. package/dist/cli/commands/index.js +20 -0
  10. package/dist/cli/commands/index.js.map +1 -0
  11. package/dist/cli/commands/init.d.ts +22 -0
  12. package/dist/cli/commands/init.d.ts.map +1 -0
  13. package/dist/cli/commands/init.js +244 -0
  14. package/dist/cli/commands/init.js.map +1 -0
  15. package/dist/cli/commands/passes-gate.d.ts +24 -0
  16. package/dist/cli/commands/passes-gate.d.ts.map +1 -0
  17. package/dist/cli/commands/passes-gate.js +171 -0
  18. package/dist/cli/commands/passes-gate.js.map +1 -0
  19. package/dist/cli/commands/report.d.ts +18 -0
  20. package/dist/cli/commands/report.d.ts.map +1 -0
  21. package/dist/cli/commands/report.js +205 -0
  22. package/dist/cli/commands/report.js.map +1 -0
  23. package/dist/cli/commands/validate.d.ts +22 -0
  24. package/dist/cli/commands/validate.d.ts.map +1 -0
  25. package/dist/cli/commands/validate.js +175 -0
  26. package/dist/cli/commands/validate.js.map +1 -0
  27. package/dist/core/index.d.ts +7 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +23 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/iron-laws/checker.d.ts +61 -0
  32. package/dist/core/iron-laws/checker.d.ts.map +1 -0
  33. package/dist/core/iron-laws/checker.js +175 -0
  34. package/dist/core/iron-laws/checker.js.map +1 -0
  35. package/dist/core/iron-laws/definitions.d.ts +28 -0
  36. package/dist/core/iron-laws/definitions.d.ts.map +1 -0
  37. package/dist/core/iron-laws/definitions.js +180 -0
  38. package/dist/core/iron-laws/definitions.js.map +1 -0
  39. package/dist/core/iron-laws/index.d.ts +6 -0
  40. package/dist/core/iron-laws/index.d.ts.map +1 -0
  41. package/dist/core/iron-laws/index.js +22 -0
  42. package/dist/core/iron-laws/index.js.map +1 -0
  43. package/dist/core/session/clean-state.d.ts +17 -0
  44. package/dist/core/session/clean-state.d.ts.map +1 -0
  45. package/dist/core/session/clean-state.js +190 -0
  46. package/dist/core/session/clean-state.js.map +1 -0
  47. package/dist/core/session/index.d.ts +6 -0
  48. package/dist/core/session/index.d.ts.map +1 -0
  49. package/dist/core/session/index.js +15 -0
  50. package/dist/core/session/index.js.map +1 -0
  51. package/dist/core/session/startup.d.ts +47 -0
  52. package/dist/core/session/startup.d.ts.map +1 -0
  53. package/dist/core/session/startup.js +266 -0
  54. package/dist/core/session/startup.js.map +1 -0
  55. package/dist/core/validators/checkpoint.d.ts +88 -0
  56. package/dist/core/validators/checkpoint.d.ts.map +1 -0
  57. package/dist/core/validators/checkpoint.js +451 -0
  58. package/dist/core/validators/checkpoint.js.map +1 -0
  59. package/dist/core/validators/cso.d.ts +47 -0
  60. package/dist/core/validators/cso.d.ts.map +1 -0
  61. package/dist/core/validators/cso.js +88 -0
  62. package/dist/core/validators/cso.js.map +1 -0
  63. package/dist/core/validators/index.d.ts +9 -0
  64. package/dist/core/validators/index.d.ts.map +1 -0
  65. package/dist/core/validators/index.js +13 -0
  66. package/dist/core/validators/index.js.map +1 -0
  67. package/dist/core/validators/passes-gate.d.ts +76 -0
  68. package/dist/core/validators/passes-gate.d.ts.map +1 -0
  69. package/dist/core/validators/passes-gate.js +418 -0
  70. package/dist/core/validators/passes-gate.js.map +1 -0
  71. package/dist/index.d.ts +18 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +52 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/presets/index.d.ts +14 -0
  76. package/dist/presets/index.d.ts.map +1 -0
  77. package/dist/presets/index.js +25 -0
  78. package/dist/presets/index.js.map +1 -0
  79. package/dist/presets/relaxed.d.ts +8 -0
  80. package/dist/presets/relaxed.d.ts.map +1 -0
  81. package/dist/presets/relaxed.js +24 -0
  82. package/dist/presets/relaxed.js.map +1 -0
  83. package/dist/presets/standard.d.ts +8 -0
  84. package/dist/presets/standard.d.ts.map +1 -0
  85. package/dist/presets/standard.js +51 -0
  86. package/dist/presets/standard.js.map +1 -0
  87. package/dist/presets/strict.d.ts +8 -0
  88. package/dist/presets/strict.d.ts.map +1 -0
  89. package/dist/presets/strict.js +51 -0
  90. package/dist/presets/strict.js.map +1 -0
  91. package/dist/types/checkpoint.d.ts +120 -0
  92. package/dist/types/checkpoint.d.ts.map +1 -0
  93. package/dist/types/checkpoint.js +6 -0
  94. package/dist/types/checkpoint.js.map +1 -0
  95. package/dist/types/cso.d.ts +35 -0
  96. package/dist/types/cso.d.ts.map +1 -0
  97. package/dist/types/cso.js +6 -0
  98. package/dist/types/cso.js.map +1 -0
  99. package/dist/types/index.d.ts +10 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +24 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/types/iron-law.d.ts +113 -0
  104. package/dist/types/iron-law.d.ts.map +1 -0
  105. package/dist/types/iron-law.js +21 -0
  106. package/dist/types/iron-law.js.map +1 -0
  107. package/dist/types/passes-gate.d.ts +72 -0
  108. package/dist/types/passes-gate.d.ts.map +1 -0
  109. package/dist/types/passes-gate.js +6 -0
  110. package/dist/types/passes-gate.js.map +1 -0
  111. package/dist/types/session.d.ts +105 -0
  112. package/dist/types/session.d.ts.map +1 -0
  113. package/dist/types/session.js +6 -0
  114. package/dist/types/session.js.map +1 -0
  115. package/package.json +74 -0
  116. package/templates/nextjs-app/.github/workflows/ci.yml +39 -0
  117. package/templates/node-api/.github/workflows/ci.yml +36 -0
  118. package/templates/node-api/package.json +23 -0
  119. package/templates/node-api/src/index.ts +2 -0
  120. package/templates/node-api/tsconfig.json +19 -0
  121. package/templates/python-api/.github/workflows/ci.yml +39 -0
@@ -0,0 +1,451 @@
1
+ "use strict";
2
+ /**
3
+ * 检查点验证引擎
4
+ *
5
+ * 在每个步骤执行后,自动验证检查点是否满足
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.checkpointValidator = exports.CheckpointValidator = void 0;
42
+ exports.validateCheckpoint = validateCheckpoint;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ const util_1 = require("util");
47
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
48
+ /**
49
+ * 检查点验证器
50
+ */
51
+ class CheckpointValidator {
52
+ static instance;
53
+ constructor() { }
54
+ static getInstance() {
55
+ if (!CheckpointValidator.instance) {
56
+ CheckpointValidator.instance = new CheckpointValidator();
57
+ }
58
+ return CheckpointValidator.instance;
59
+ }
60
+ /**
61
+ * 验证检查点
62
+ */
63
+ async validate(checkpoint, context) {
64
+ if (!checkpoint || !checkpoint.checks || checkpoint.checks.length === 0) {
65
+ return {
66
+ checkpointId: checkpoint?.id || 'unknown',
67
+ passed: true,
68
+ checks: [],
69
+ message: '无检查点要求',
70
+ validatedAt: new Date(),
71
+ };
72
+ }
73
+ const results = [];
74
+ for (const check of checkpoint.checks) {
75
+ const result = await this.executeCheck(check, context);
76
+ results.push(result);
77
+ }
78
+ const allPassed = results.every(r => r.passed);
79
+ return {
80
+ checkpointId: checkpoint.id,
81
+ passed: allPassed,
82
+ checks: results,
83
+ message: allPassed ? '检查点验证通过' : '检查点验证失败',
84
+ validatedAt: new Date(),
85
+ };
86
+ }
87
+ /**
88
+ * 执行单个检查项
89
+ */
90
+ async executeCheck(check, context) {
91
+ try {
92
+ switch (check.type) {
93
+ case 'file_exists':
94
+ return await this.checkFileExists(check, context);
95
+ case 'file_not_empty':
96
+ return await this.checkFileNotEmpty(check, context);
97
+ case 'file_contains':
98
+ return await this.checkFileContains(check, context);
99
+ case 'command_success':
100
+ return await this.checkCommandSuccess(check, context);
101
+ case 'command_output':
102
+ return await this.checkCommandOutput(check, context);
103
+ case 'output_contains':
104
+ return await this.checkOutputContains(check, context);
105
+ case 'output_not_contains':
106
+ return await this.checkOutputNotContains(check, context);
107
+ case 'output_matches':
108
+ return await this.checkOutputMatches(check, context);
109
+ case 'json_path':
110
+ return await this.checkJsonPath(check, context);
111
+ case 'http_status':
112
+ return await this.checkHttpStatus(check, context);
113
+ case 'http_body':
114
+ return await this.checkHttpBody(check, context);
115
+ case 'custom':
116
+ return await this.checkCustom(check, context);
117
+ default:
118
+ return {
119
+ checkId: check.id,
120
+ passed: false,
121
+ message: `未知检查类型: ${check.type}`,
122
+ error: `Unknown check type: ${check.type}`,
123
+ };
124
+ }
125
+ }
126
+ catch (error) {
127
+ return {
128
+ checkId: check.id,
129
+ passed: false,
130
+ message: `检查执行失败: ${error.message}`,
131
+ error: error.message,
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * 检查文件是否存在
137
+ */
138
+ async checkFileExists(check, context) {
139
+ const filePath = this.resolvePath(check.config.path || '', context.workdir);
140
+ const exists = fs.existsSync(filePath);
141
+ return {
142
+ checkId: check.id,
143
+ passed: exists,
144
+ message: exists ? `文件存在: ${filePath}` : `文件不存在: ${filePath}`,
145
+ actual: exists,
146
+ expected: true,
147
+ };
148
+ }
149
+ /**
150
+ * 检查文件非空
151
+ */
152
+ async checkFileNotEmpty(check, context) {
153
+ const filePath = this.resolvePath(check.config.path || '', context.workdir);
154
+ if (!fs.existsSync(filePath)) {
155
+ return {
156
+ checkId: check.id,
157
+ passed: false,
158
+ message: `文件不存在: ${filePath}`,
159
+ actual: false,
160
+ expected: true,
161
+ };
162
+ }
163
+ const stats = fs.statSync(filePath);
164
+ const notEmpty = stats.size > 0;
165
+ return {
166
+ checkId: check.id,
167
+ passed: notEmpty,
168
+ message: notEmpty ? `文件非空: ${filePath}` : `文件为空: ${filePath}`,
169
+ actual: stats.size,
170
+ expected: '> 0',
171
+ };
172
+ }
173
+ /**
174
+ * 检查文件包含内容
175
+ */
176
+ async checkFileContains(check, context) {
177
+ const filePath = this.resolvePath(check.config.path || '', context.workdir);
178
+ const content = check.config.content || '';
179
+ if (!fs.existsSync(filePath)) {
180
+ return {
181
+ checkId: check.id,
182
+ passed: false,
183
+ message: `文件不存在: ${filePath}`,
184
+ actual: null,
185
+ expected: content,
186
+ };
187
+ }
188
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
189
+ const contains = fileContent.includes(content);
190
+ return {
191
+ checkId: check.id,
192
+ passed: contains,
193
+ message: contains ? `文件包含内容: ${content}` : `文件不包含内容: ${content}`,
194
+ actual: contains,
195
+ expected: true,
196
+ };
197
+ }
198
+ /**
199
+ * 检查命令执行成功
200
+ */
201
+ async checkCommandSuccess(check, context) {
202
+ const command = check.config.command || '';
203
+ try {
204
+ const { stdout, stderr } = await execAsync(command, { cwd: context.workdir });
205
+ return {
206
+ checkId: check.id,
207
+ passed: true,
208
+ message: `命令执行成功: ${command}`,
209
+ actual: stdout.trim(),
210
+ expected: 'exit code 0',
211
+ };
212
+ }
213
+ catch (error) {
214
+ return {
215
+ checkId: check.id,
216
+ passed: false,
217
+ message: `命令执行失败: ${command}`,
218
+ actual: error.message,
219
+ expected: 'exit code 0',
220
+ error: error.message,
221
+ };
222
+ }
223
+ }
224
+ /**
225
+ * 检查命令输出
226
+ */
227
+ async checkCommandOutput(check, context) {
228
+ const command = check.config.command || '';
229
+ const expected = String(check.config.expected || '');
230
+ try {
231
+ const { stdout } = await execAsync(command, { cwd: context.workdir });
232
+ const actual = stdout.trim();
233
+ const matches = actual.includes(expected);
234
+ return {
235
+ checkId: check.id,
236
+ passed: matches,
237
+ message: matches ? `命令输出匹配: ${expected}` : `命令输出不匹配: ${expected}`,
238
+ actual,
239
+ expected,
240
+ };
241
+ }
242
+ catch (error) {
243
+ return {
244
+ checkId: check.id,
245
+ passed: false,
246
+ message: `命令执行失败: ${command}`,
247
+ actual: error.message,
248
+ expected,
249
+ error: error.message,
250
+ };
251
+ }
252
+ }
253
+ /**
254
+ * 检查输出包含内容
255
+ */
256
+ async checkOutputContains(check, context) {
257
+ const output = this.stringifyOutput(context.output);
258
+ const content = check.config.content || String(check.config.expected || '');
259
+ const contains = output.includes(content);
260
+ return {
261
+ checkId: check.id,
262
+ passed: contains,
263
+ message: contains ? `输出包含内容: ${content}` : `输出不包含内容: ${content}`,
264
+ actual: contains,
265
+ expected: true,
266
+ };
267
+ }
268
+ /**
269
+ * 检查输出不包含内容
270
+ */
271
+ async checkOutputNotContains(check, context) {
272
+ const output = this.stringifyOutput(context.output);
273
+ const content = check.config.content || String(check.config.expected || '');
274
+ const notContains = !output.includes(content);
275
+ return {
276
+ checkId: check.id,
277
+ passed: notContains,
278
+ message: notContains ? `输出不包含内容: ${content}` : `输出包含内容: ${content}`,
279
+ actual: !notContains,
280
+ expected: false,
281
+ };
282
+ }
283
+ /**
284
+ * 检查输出匹配正则
285
+ */
286
+ async checkOutputMatches(check, context) {
287
+ const output = this.stringifyOutput(context.output);
288
+ const pattern = check.config.pattern || '';
289
+ const regex = new RegExp(pattern, 'gm');
290
+ const matches = regex.test(output);
291
+ return {
292
+ checkId: check.id,
293
+ passed: matches,
294
+ message: matches ? `输出匹配正则: ${pattern}` : `输出不匹配正则: ${pattern}`,
295
+ actual: matches,
296
+ expected: true,
297
+ };
298
+ }
299
+ /**
300
+ * 检查 JSON 路径
301
+ */
302
+ async checkJsonPath(check, context) {
303
+ const jsonPath = check.config.jsonPath || '';
304
+ const expected = check.config.expected;
305
+ let actual;
306
+ try {
307
+ actual = this.getJsonValue(context.output, jsonPath);
308
+ }
309
+ catch (error) {
310
+ return {
311
+ checkId: check.id,
312
+ passed: false,
313
+ message: `JSON 路径无效: ${jsonPath}`,
314
+ actual: null,
315
+ expected,
316
+ error: error.message,
317
+ };
318
+ }
319
+ const matches = JSON.stringify(actual) === JSON.stringify(expected);
320
+ return {
321
+ checkId: check.id,
322
+ passed: matches,
323
+ message: matches ? `JSON 路径匹配: ${jsonPath}` : `JSON 路径不匹配: ${jsonPath}`,
324
+ actual,
325
+ expected,
326
+ };
327
+ }
328
+ /**
329
+ * 检查 HTTP 状态码
330
+ */
331
+ async checkHttpStatus(check, context) {
332
+ const url = check.config.url || '';
333
+ const expected = check.config.expectedStatus || check.config.expected || 200;
334
+ try {
335
+ const response = await fetch(url);
336
+ const actual = response.status;
337
+ const matches = actual === expected;
338
+ return {
339
+ checkId: check.id,
340
+ passed: matches,
341
+ message: matches ? `HTTP 状态码匹配: ${expected}` : `HTTP 状态码不匹配: ${actual} != ${expected}`,
342
+ actual,
343
+ expected,
344
+ };
345
+ }
346
+ catch (error) {
347
+ return {
348
+ checkId: check.id,
349
+ passed: false,
350
+ message: `HTTP 请求失败: ${url}`,
351
+ actual: error.message,
352
+ expected,
353
+ error: error.message,
354
+ };
355
+ }
356
+ }
357
+ /**
358
+ * 检查 HTTP 响应体
359
+ */
360
+ async checkHttpBody(check, context) {
361
+ const url = check.config.url || '';
362
+ const expected = String(check.config.expected || '');
363
+ try {
364
+ const response = await fetch(url, {
365
+ method: check.config.method || 'GET',
366
+ headers: check.config.headers,
367
+ body: check.config.body ? JSON.stringify(check.config.body) : undefined,
368
+ });
369
+ const actual = await response.text();
370
+ const contains = actual.includes(expected);
371
+ return {
372
+ checkId: check.id,
373
+ passed: contains,
374
+ message: contains ? `HTTP 响应体包含: ${expected}` : `HTTP 响应体不包含: ${expected}`,
375
+ actual,
376
+ expected,
377
+ };
378
+ }
379
+ catch (error) {
380
+ return {
381
+ checkId: check.id,
382
+ passed: false,
383
+ message: `HTTP 请求失败: ${url}`,
384
+ actual: error.message,
385
+ expected,
386
+ error: error.message,
387
+ };
388
+ }
389
+ }
390
+ /**
391
+ * 自定义检查
392
+ */
393
+ async checkCustom(check, context) {
394
+ // 检查是否有自定义处理器
395
+ const handler = context.customHandlers?.get(check.config.customFunction || '');
396
+ if (handler) {
397
+ return await handler(check.config);
398
+ }
399
+ return {
400
+ checkId: check.id,
401
+ passed: false,
402
+ message: `自定义检查未实现: ${check.config.customFunction}`,
403
+ error: 'Custom check not implemented',
404
+ };
405
+ }
406
+ /**
407
+ * 解析路径
408
+ */
409
+ resolvePath(relativePath, workdir) {
410
+ if (path.isAbsolute(relativePath)) {
411
+ return relativePath;
412
+ }
413
+ return path.join(workdir, relativePath);
414
+ }
415
+ /**
416
+ * 将输出转换为字符串
417
+ */
418
+ stringifyOutput(output) {
419
+ if (typeof output === 'string') {
420
+ return output;
421
+ }
422
+ if (output === null || output === undefined) {
423
+ return '';
424
+ }
425
+ return JSON.stringify(output);
426
+ }
427
+ /**
428
+ * 获取 JSON 值
429
+ */
430
+ getJsonValue(obj, jsonPath) {
431
+ const parts = jsonPath.split('.');
432
+ let current = obj;
433
+ for (const part of parts) {
434
+ if (current === null || current === undefined) {
435
+ return undefined;
436
+ }
437
+ current = current[part];
438
+ }
439
+ return current;
440
+ }
441
+ }
442
+ exports.CheckpointValidator = CheckpointValidator;
443
+ // 导出单例
444
+ exports.checkpointValidator = CheckpointValidator.getInstance();
445
+ /**
446
+ * 快捷函数:验证检查点
447
+ */
448
+ async function validateCheckpoint(checkpoint, context) {
449
+ return exports.checkpointValidator.validate(checkpoint, context);
450
+ }
451
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/core/validators/checkpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * CSO (Concise Skill Optimization) 验证器(简化版)
3
+ */
4
+ import type { WorkflowMeta, StepMeta, ToolMeta } from '../../types/cso';
5
+ /**
6
+ * CSO 验证结果
7
+ */
8
+ export interface CSOValidationResult {
9
+ valid: boolean;
10
+ message?: string;
11
+ suggestion?: string;
12
+ issues?: CSOIssue[];
13
+ }
14
+ /**
15
+ * CSO 问题
16
+ */
17
+ export interface CSOIssue {
18
+ type: 'workflow_summary' | 'missing_trigger' | 'too_long';
19
+ message: string;
20
+ }
21
+ /**
22
+ * CSO 验证器
23
+ */
24
+ export declare class CSOValidator {
25
+ private static instance;
26
+ private static WORKFLOW_KEYWORDS;
27
+ private static TRIGGER_KEYWORDS;
28
+ private constructor();
29
+ static getInstance(): CSOValidator;
30
+ /**
31
+ * 验证 Workflow 的 description
32
+ */
33
+ validateWorkflow(workflow: WorkflowMeta): CSOValidationResult;
34
+ /**
35
+ * 验证 Step 的 description
36
+ */
37
+ validateStep(step: StepMeta): CSOValidationResult;
38
+ /**
39
+ * 验证 Tool 的 description
40
+ */
41
+ validateTool(tool: ToolMeta): CSOValidationResult;
42
+ /**
43
+ * 验证描述
44
+ */
45
+ private validateDescription;
46
+ }
47
+ //# sourceMappingURL=cso.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cso.d.ts","sourceRoot":"","sources":["../../../src/core/validators/cso.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,UAAU,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAGtC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAG9B;IAGF,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAE7B;IAEF,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB;IAI7D;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,mBAAmB;IAIjD;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,mBAAmB;IAIjD;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAiD5B"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * CSO (Concise Skill Optimization) 验证器(简化版)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CSOValidator = void 0;
7
+ /**
8
+ * CSO 验证器
9
+ */
10
+ class CSOValidator {
11
+ static instance;
12
+ // 工作流总结关键词(不应出现在 description 中)
13
+ static WORKFLOW_KEYWORDS = [
14
+ 'step 1', 'step 2', 'phase', 'first', 'then', 'after',
15
+ '流程', '步骤', '首先', '然后',
16
+ ];
17
+ // 触发条件关键词(应该出现在 description 中)
18
+ static TRIGGER_KEYWORDS = [
19
+ 'use when', 'use for', '用于', '当', '适用于', '触发',
20
+ ];
21
+ constructor() { }
22
+ static getInstance() {
23
+ if (!CSOValidator.instance) {
24
+ CSOValidator.instance = new CSOValidator();
25
+ }
26
+ return CSOValidator.instance;
27
+ }
28
+ /**
29
+ * 验证 Workflow 的 description
30
+ */
31
+ validateWorkflow(workflow) {
32
+ return this.validateDescription(workflow.description, 'workflow');
33
+ }
34
+ /**
35
+ * 验证 Step 的 description
36
+ */
37
+ validateStep(step) {
38
+ return this.validateDescription(step.description, 'step');
39
+ }
40
+ /**
41
+ * 验证 Tool 的 description
42
+ */
43
+ validateTool(tool) {
44
+ return this.validateDescription(tool.description, 'tool');
45
+ }
46
+ /**
47
+ * 验证描述
48
+ */
49
+ validateDescription(description, type) {
50
+ const issues = [];
51
+ // 检查是否有工作流总结关键词
52
+ const hasWorkflowKeywords = CSOValidator.WORKFLOW_KEYWORDS.some(k => description.toLowerCase().includes(k.toLowerCase()));
53
+ if (hasWorkflowKeywords) {
54
+ issues.push({
55
+ type: 'workflow_summary',
56
+ message: `描述包含工作流总结关键词,应只描述触发条件`,
57
+ });
58
+ }
59
+ // 检查是否有触发条件关键词
60
+ const hasTriggerKeywords = CSOValidator.TRIGGER_KEYWORDS.some(k => description.toLowerCase().includes(k.toLowerCase()));
61
+ if (!hasTriggerKeywords) {
62
+ issues.push({
63
+ type: 'missing_trigger',
64
+ message: `描述缺少触发条件关键词`,
65
+ });
66
+ }
67
+ // 检查长度
68
+ if (description.length > 200) {
69
+ issues.push({
70
+ type: 'too_long',
71
+ message: `描述过长 (${description.length} 字符),建议不超过 200 字符`,
72
+ });
73
+ }
74
+ const valid = issues.length === 0;
75
+ let suggestion;
76
+ if (!valid) {
77
+ suggestion = `建议格式: "用于 [场景] 时,[做什么]"`;
78
+ }
79
+ return {
80
+ valid,
81
+ issues,
82
+ message: valid ? '符合 CSO 格式' : '不符合 CSO 格式',
83
+ suggestion,
84
+ };
85
+ }
86
+ }
87
+ exports.CSOValidator = CSOValidator;
88
+ //# sourceMappingURL=cso.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cso.js","sourceRoot":"","sources":["../../../src/core/validators/cso.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsBH;;GAEG;AACH,MAAa,YAAY;IACf,MAAM,CAAC,QAAQ,CAAe;IAEtC,gCAAgC;IACxB,MAAM,CAAC,iBAAiB,GAAG;QACjC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;QACrD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACvB,CAAC;IAEF,+BAA+B;IACvB,MAAM,CAAC,gBAAgB,GAAG;QAChC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;KAC9C,CAAC;IAEF,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAsB;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAc;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAc;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,WAAmB,EAAE,IAAY;QAC3D,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,gBAAgB;QAChB,MAAM,mBAAmB,GAAG,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAClE,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACpD,CAAC;QAEF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,uBAAuB;aACjC,CAAC,CAAC;QACL,CAAC;QAED,eAAe;QACf,MAAM,kBAAkB,GAAG,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAChE,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACpD,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,aAAa;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;QACP,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,SAAS,WAAW,CAAC,MAAM,mBAAmB;aACxD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAClC,IAAI,UAA8B,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,UAAU,GAAG,yBAAyB,CAAC;QACzC,CAAC;QAED,OAAO;YACL,KAAK;YACL,MAAM;YACN,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;YAC3C,UAAU;SACX,CAAC;IACJ,CAAC;;AA/FH,oCAgGC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 验证器导出
3
+ */
4
+ export { CheckpointValidator } from './checkpoint';
5
+ export { PassesGate } from './passes-gate';
6
+ export { CSOValidator, type CSOValidationResult, type CSOIssue } from './cso';
7
+ export type { Checkpoint, CheckpointCheck, CheckpointResult, CheckResult, CheckpointContext, CheckType, CheckConfig, } from '../../types/checkpoint';
8
+ export type { PassesGateConfig, PassesGateResult, TaskTestResult, DynamicTask, } from '../../types/passes-gate';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/validators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG9E,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * 验证器导出
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CSOValidator = exports.PassesGate = exports.CheckpointValidator = void 0;
7
+ var checkpoint_1 = require("./checkpoint");
8
+ Object.defineProperty(exports, "CheckpointValidator", { enumerable: true, get: function () { return checkpoint_1.CheckpointValidator; } });
9
+ var passes_gate_1 = require("./passes-gate");
10
+ Object.defineProperty(exports, "PassesGate", { enumerable: true, get: function () { return passes_gate_1.PassesGate; } });
11
+ var cso_1 = require("./cso");
12
+ Object.defineProperty(exports, "CSOValidator", { enumerable: true, get: function () { return cso_1.CSOValidator; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/validators/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,2CAAmD;AAA1C,iHAAA,mBAAmB,OAAA;AAC5B,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6BAA8E;AAArE,mGAAA,YAAY,OAAA"}