@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,6 @@
1
+ /**
2
+ * Session 模块导出
3
+ */
4
+ export { SessionStartup, createSessionStartup, DEFAULT_CODE_CHECKPOINTS, MINIMAL_CHECKPOINTS, } from './startup';
5
+ export { CleanStateManager, createCleanStateManager, } from './clean-state';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/session/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * Session 模块导出
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCleanStateManager = exports.CleanStateManager = exports.MINIMAL_CHECKPOINTS = exports.DEFAULT_CODE_CHECKPOINTS = exports.createSessionStartup = exports.SessionStartup = void 0;
7
+ var startup_1 = require("./startup");
8
+ Object.defineProperty(exports, "SessionStartup", { enumerable: true, get: function () { return startup_1.SessionStartup; } });
9
+ Object.defineProperty(exports, "createSessionStartup", { enumerable: true, get: function () { return startup_1.createSessionStartup; } });
10
+ Object.defineProperty(exports, "DEFAULT_CODE_CHECKPOINTS", { enumerable: true, get: function () { return startup_1.DEFAULT_CODE_CHECKPOINTS; } });
11
+ Object.defineProperty(exports, "MINIMAL_CHECKPOINTS", { enumerable: true, get: function () { return startup_1.MINIMAL_CHECKPOINTS; } });
12
+ var clean_state_1 = require("./clean-state");
13
+ Object.defineProperty(exports, "CleanStateManager", { enumerable: true, get: function () { return clean_state_1.CleanStateManager; } });
14
+ Object.defineProperty(exports, "createCleanStateManager", { enumerable: true, get: function () { return clean_state_1.createCleanStateManager; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/session/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAKmB;AAJjB,yGAAA,cAAc,OAAA;AACd,+GAAA,oBAAoB,OAAA;AACpB,mHAAA,wBAAwB,OAAA;AACxB,8GAAA,mBAAmB,OAAA;AAGrB,6CAGuB;AAFrB,gHAAA,iBAAiB,OAAA;AACjB,sHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SessionStartup - Session 启动检查点验证
3
+ *
4
+ * 确保 Agent 启动时必须先读上下文,防止"失忆"乱搞。
5
+ */
6
+ import type { StartupCheckpoints, StartupCheckpointResult } from '../../types/session';
7
+ export declare class SessionStartup {
8
+ private checkpoints;
9
+ private workDir;
10
+ constructor(workDir: string, checkpoints: StartupCheckpoints);
11
+ run(): Promise<{
12
+ success: boolean;
13
+ results: StartupCheckpointResult[];
14
+ errors: string[];
15
+ }>;
16
+ private runCheckpoint;
17
+ private checkPwd;
18
+ private checkGitLog;
19
+ private checkGitStatus;
20
+ private checkProgress;
21
+ private checkTaskList;
22
+ private checkInitSh;
23
+ private checkBasicVerification;
24
+ private hasTestFiles;
25
+ private checkLoadContext;
26
+ /**
27
+ * Get current task from task list
28
+ */
29
+ getCurrentTask(): Promise<{
30
+ task: any;
31
+ index: number;
32
+ } | null>;
33
+ /**
34
+ * Generate startup report
35
+ */
36
+ generateReport(results: StartupCheckpointResult[]): string;
37
+ }
38
+ export declare const createSessionStartup: (workDir: string, checkpoints: StartupCheckpoints) => SessionStartup;
39
+ /**
40
+ * Default startup checkpoints for code workflows
41
+ */
42
+ export declare const DEFAULT_CODE_CHECKPOINTS: StartupCheckpoints;
43
+ /**
44
+ * Minimal startup checkpoints
45
+ */
46
+ export declare const MINIMAL_CHECKPOINTS: StartupCheckpoints;
47
+ //# sourceMappingURL=startup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/session/startup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EAGxB,MAAM,qBAAqB,CAAC;AAM7B,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB;IAKtD,GAAG,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,uBAAuB,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;YA0BlF,aAAa;YAyCb,QAAQ;YAIR,WAAW;YASX,cAAc;YAmBd,aAAa;YAUb,aAAa;YAkBb,WAAW;YAUX,sBAAsB;YAStB,YAAY;YAUZ,gBAAgB;IAc9B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAcpE;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,MAAM;CAa3D;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,EAAE,aAAa,kBAAkB,mBAC3C,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,kBAItC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAIjC,CAAC"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * SessionStartup - Session 启动检查点验证
4
+ *
5
+ * 确保 Agent 启动时必须先读上下文,防止"失忆"乱搞。
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.MINIMAL_CHECKPOINTS = exports.DEFAULT_CODE_CHECKPOINTS = exports.createSessionStartup = exports.SessionStartup = void 0;
42
+ const child_process_1 = require("child_process");
43
+ const util_1 = require("util");
44
+ const fs = __importStar(require("fs/promises"));
45
+ const path = __importStar(require("path"));
46
+ const yaml = __importStar(require("js-yaml"));
47
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
48
+ const DEFAULT_TIMEOUT = 30000; // 30 seconds
49
+ class SessionStartup {
50
+ checkpoints;
51
+ workDir;
52
+ constructor(workDir, checkpoints) {
53
+ this.workDir = workDir;
54
+ this.checkpoints = checkpoints;
55
+ }
56
+ async run() {
57
+ const results = [];
58
+ const errors = [];
59
+ // 1. Run required checkpoints
60
+ for (const type of this.checkpoints.required) {
61
+ const result = await this.runCheckpoint(type);
62
+ results.push(result);
63
+ if (!result.success) {
64
+ errors.push(`Required checkpoint failed: ${type} - ${result.error}`);
65
+ }
66
+ }
67
+ // 2. Run optional checkpoints (don't fail on error)
68
+ for (const type of this.checkpoints.optional || []) {
69
+ const result = await this.runCheckpoint(type);
70
+ results.push(result);
71
+ }
72
+ return {
73
+ success: errors.length === 0,
74
+ results,
75
+ errors,
76
+ };
77
+ }
78
+ async runCheckpoint(type) {
79
+ const start = Date.now();
80
+ try {
81
+ let data;
82
+ switch (type) {
83
+ case 'pwd':
84
+ data = await this.checkPwd();
85
+ break;
86
+ case 'git_log':
87
+ data = await this.checkGitLog();
88
+ break;
89
+ case 'git_status':
90
+ data = await this.checkGitStatus();
91
+ break;
92
+ case 'read_progress':
93
+ data = await this.checkProgress();
94
+ break;
95
+ case 'read_task_list':
96
+ data = await this.checkTaskList();
97
+ break;
98
+ case 'init_sh':
99
+ data = await this.checkInitSh();
100
+ break;
101
+ case 'basic_verification':
102
+ data = await this.checkBasicVerification();
103
+ break;
104
+ case 'load_context':
105
+ data = await this.checkLoadContext();
106
+ break;
107
+ default:
108
+ throw new Error(`Unknown checkpoint type: ${type}`);
109
+ }
110
+ return { type, success: true, data, duration: Date.now() - start };
111
+ }
112
+ catch (error) {
113
+ return { type, success: false, error: error.message, duration: Date.now() - start };
114
+ }
115
+ }
116
+ async checkPwd() {
117
+ return this.workDir;
118
+ }
119
+ async checkGitLog() {
120
+ try {
121
+ const { stdout } = await execAsync('git log --oneline -10', { cwd: this.workDir });
122
+ return stdout.split('\n').filter(Boolean);
123
+ }
124
+ catch {
125
+ return [];
126
+ }
127
+ }
128
+ async checkGitStatus() {
129
+ try {
130
+ const { stdout } = await execAsync('git status --porcelain', { cwd: this.workDir });
131
+ const staged = [], unstaged = [], untracked = [];
132
+ for (const line of stdout.split('\n').filter(Boolean)) {
133
+ const status = line.substring(0, 2);
134
+ const file = line.substring(3);
135
+ if (status.includes('??'))
136
+ untracked.push(file);
137
+ else if (status.match(/[MADRC]/))
138
+ staged.push(file);
139
+ else
140
+ unstaged.push(file);
141
+ }
142
+ return { staged, unstaged, untracked };
143
+ }
144
+ catch {
145
+ return { staged: [], unstaged: [], untracked: [] };
146
+ }
147
+ }
148
+ async checkProgress() {
149
+ const progressPath = path.join(this.workDir, '.agent', 'progress.yml');
150
+ try {
151
+ const content = await fs.readFile(progressPath, 'utf-8');
152
+ return yaml.load(content);
153
+ }
154
+ catch {
155
+ return null;
156
+ }
157
+ }
158
+ async checkTaskList() {
159
+ // Try tasks.yml first (existing format)
160
+ const tasksPath = path.join(this.workDir, 'tasks.yml');
161
+ try {
162
+ const content = await fs.readFile(tasksPath, 'utf-8');
163
+ return yaml.load(content);
164
+ }
165
+ catch {
166
+ // Try tasks.json
167
+ const jsonPath = path.join(this.workDir, 'tasks.json');
168
+ try {
169
+ const content = await fs.readFile(jsonPath, 'utf-8');
170
+ return JSON.parse(content);
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ }
177
+ async checkInitSh() {
178
+ const initPath = path.join(this.workDir, 'init.sh');
179
+ try {
180
+ await fs.access(initPath);
181
+ return true;
182
+ }
183
+ catch {
184
+ return false;
185
+ }
186
+ }
187
+ async checkBasicVerification() {
188
+ const [hasPackageJson, hasTests, hasReadme] = await Promise.all([
189
+ fs.access(path.join(this.workDir, 'package.json')).then(() => true).catch(() => false),
190
+ this.hasTestFiles(),
191
+ fs.access(path.join(this.workDir, 'README.md')).then(() => true).catch(() => false),
192
+ ]);
193
+ return { hasPackageJson, hasTests, hasReadme };
194
+ }
195
+ async hasTestFiles() {
196
+ const testPatterns = ['test', 'spec', '__tests__'];
197
+ try {
198
+ const files = await fs.readdir(this.workDir);
199
+ return files.some(f => testPatterns.some(p => f.toLowerCase().includes(p)));
200
+ }
201
+ catch {
202
+ return false;
203
+ }
204
+ }
205
+ async checkLoadContext() {
206
+ // Load AGENTS.md, USER.md, SOUL.md if present
207
+ const context = {};
208
+ const files = ['AGENTS.md', 'USER.md', 'SOUL.md', 'MEMORY.md'];
209
+ for (const file of files) {
210
+ try {
211
+ context[file] = await fs.readFile(path.join(this.workDir, file), 'utf-8');
212
+ }
213
+ catch { }
214
+ }
215
+ return context;
216
+ }
217
+ /**
218
+ * Get current task from task list
219
+ */
220
+ async getCurrentTask() {
221
+ const taskList = await this.checkTaskList();
222
+ if (!taskList?.tasks)
223
+ return null;
224
+ for (let i = 0; i < taskList.tasks.length; i++) {
225
+ const task = taskList.tasks[i];
226
+ if (task && !task.passes) {
227
+ return { task, index: i };
228
+ }
229
+ }
230
+ return null;
231
+ }
232
+ /**
233
+ * Generate startup report
234
+ */
235
+ generateReport(results) {
236
+ const lines = ['## Session Startup Report\n'];
237
+ for (const result of results) {
238
+ const icon = result.success ? '✅' : '❌';
239
+ lines.push(`${icon} ${result.type} (${result.duration}ms)`);
240
+ if (result.error) {
241
+ lines.push(` Error: ${result.error}`);
242
+ }
243
+ }
244
+ return lines.join('\n');
245
+ }
246
+ }
247
+ exports.SessionStartup = SessionStartup;
248
+ const createSessionStartup = (workDir, checkpoints) => new SessionStartup(workDir, checkpoints);
249
+ exports.createSessionStartup = createSessionStartup;
250
+ /**
251
+ * Default startup checkpoints for code workflows
252
+ */
253
+ exports.DEFAULT_CODE_CHECKPOINTS = {
254
+ required: ['pwd', 'git_log', 'read_task_list'],
255
+ optional: ['read_progress', 'init_sh', 'basic_verification'],
256
+ timeout: DEFAULT_TIMEOUT,
257
+ };
258
+ /**
259
+ * Minimal startup checkpoints
260
+ */
261
+ exports.MINIMAL_CHECKPOINTS = {
262
+ required: ['pwd', 'read_task_list'],
263
+ optional: [],
264
+ timeout: DEFAULT_TIMEOUT,
265
+ };
266
+ //# sourceMappingURL=startup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/session/startup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * 检查点验证引擎
3
+ *
4
+ * 在每个步骤执行后,自动验证检查点是否满足
5
+ */
6
+ import type { Checkpoint, CheckpointResult, CheckpointContext } from '../../types/checkpoint';
7
+ /**
8
+ * 检查点验证器
9
+ */
10
+ export declare class CheckpointValidator {
11
+ private static instance;
12
+ private constructor();
13
+ static getInstance(): CheckpointValidator;
14
+ /**
15
+ * 验证检查点
16
+ */
17
+ validate(checkpoint: Checkpoint, context: CheckpointContext): Promise<CheckpointResult>;
18
+ /**
19
+ * 执行单个检查项
20
+ */
21
+ private executeCheck;
22
+ /**
23
+ * 检查文件是否存在
24
+ */
25
+ private checkFileExists;
26
+ /**
27
+ * 检查文件非空
28
+ */
29
+ private checkFileNotEmpty;
30
+ /**
31
+ * 检查文件包含内容
32
+ */
33
+ private checkFileContains;
34
+ /**
35
+ * 检查命令执行成功
36
+ */
37
+ private checkCommandSuccess;
38
+ /**
39
+ * 检查命令输出
40
+ */
41
+ private checkCommandOutput;
42
+ /**
43
+ * 检查输出包含内容
44
+ */
45
+ private checkOutputContains;
46
+ /**
47
+ * 检查输出不包含内容
48
+ */
49
+ private checkOutputNotContains;
50
+ /**
51
+ * 检查输出匹配正则
52
+ */
53
+ private checkOutputMatches;
54
+ /**
55
+ * 检查 JSON 路径
56
+ */
57
+ private checkJsonPath;
58
+ /**
59
+ * 检查 HTTP 状态码
60
+ */
61
+ private checkHttpStatus;
62
+ /**
63
+ * 检查 HTTP 响应体
64
+ */
65
+ private checkHttpBody;
66
+ /**
67
+ * 自定义检查
68
+ */
69
+ private checkCustom;
70
+ /**
71
+ * 解析路径
72
+ */
73
+ private resolvePath;
74
+ /**
75
+ * 将输出转换为字符串
76
+ */
77
+ private stringifyOutput;
78
+ /**
79
+ * 获取 JSON 值
80
+ */
81
+ private getJsonValue;
82
+ }
83
+ export declare const checkpointValidator: CheckpointValidator;
84
+ /**
85
+ * 快捷函数:验证检查点
86
+ */
87
+ export declare function validateCheckpoint(checkpoint: Checkpoint, context: CheckpointContext): Promise<CheckpointResult>;
88
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/core/validators/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,UAAU,EAEV,gBAAgB,EAEhB,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAE7C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6B7F;;OAEG;YACW,YAAY;IA6C1B;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,kBAAkB;IA4BhC;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,sBAAsB;IAcpC;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA4B7B;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,WAAW;IAgBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAarB;AAGD,eAAO,MAAM,mBAAmB,qBAAoC,CAAC;AAErE;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B"}