@dommaker/harness 1.5.0 → 1.7.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 (209) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +0 -2
  3. package/dist/cli/commands/definitions.d.ts.map +1 -1
  4. package/dist/cli/commands/definitions.js +1 -32
  5. package/dist/cli/commands/definitions.js.map +1 -1
  6. package/dist/cli/commands/passes-gate.d.ts +0 -2
  7. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  8. package/dist/cli/commands/passes-gate.js +0 -1
  9. package/dist/cli/commands/passes-gate.js.map +1 -1
  10. package/dist/cli/commands/performance.d.ts +0 -4
  11. package/dist/cli/commands/performance.d.ts.map +1 -1
  12. package/dist/cli/commands/performance.js +10 -20
  13. package/dist/cli/commands/performance.js.map +1 -1
  14. package/dist/cli/commands/report.d.ts +1 -1
  15. package/dist/cli/commands/report.d.ts.map +1 -1
  16. package/dist/cli/commands/report.js +2 -55
  17. package/dist/cli/commands/report.js.map +1 -1
  18. package/dist/cli/commands/status.d.ts.map +1 -1
  19. package/dist/cli/commands/status.js +4 -8
  20. package/dist/cli/commands/status.js.map +1 -1
  21. package/dist/context/index.d.ts +2 -5
  22. package/dist/context/index.d.ts.map +1 -1
  23. package/dist/context/index.js +2 -8
  24. package/dist/context/index.js.map +1 -1
  25. package/dist/context/token-budget.d.ts +0 -29
  26. package/dist/context/token-budget.d.ts.map +1 -1
  27. package/dist/context/token-budget.js +1 -65
  28. package/dist/context/token-budget.js.map +1 -1
  29. package/dist/context/types.d.ts +0 -1
  30. package/dist/context/types.d.ts.map +1 -1
  31. package/dist/context/types.js +0 -9
  32. package/dist/context/types.js.map +1 -1
  33. package/dist/core/constraints/checker.d.ts +14 -0
  34. package/dist/core/constraints/checker.d.ts.map +1 -1
  35. package/dist/core/constraints/checker.js +22 -2
  36. package/dist/core/constraints/checker.js.map +1 -1
  37. package/dist/core/constraints/git-evidence.d.ts +6 -3
  38. package/dist/core/constraints/git-evidence.d.ts.map +1 -1
  39. package/dist/core/constraints/git-evidence.js +6 -3
  40. package/dist/core/constraints/git-evidence.js.map +1 -1
  41. package/dist/core/index.d.ts +1 -2
  42. package/dist/core/index.d.ts.map +1 -1
  43. package/dist/core/index.js +1 -9
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/spec/validator.d.ts +2 -0
  46. package/dist/core/spec/validator.d.ts.map +1 -1
  47. package/dist/core/spec/validator.js +9 -11
  48. package/dist/core/spec/validator.js.map +1 -1
  49. package/dist/core/validators/index.d.ts +1 -1
  50. package/dist/core/validators/index.d.ts.map +1 -1
  51. package/dist/core/validators/passes-gate.d.ts +1 -15
  52. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  53. package/dist/core/validators/passes-gate.js +2 -127
  54. package/dist/core/validators/passes-gate.js.map +1 -1
  55. package/dist/failure/index.d.ts +0 -1
  56. package/dist/failure/index.d.ts.map +1 -1
  57. package/dist/failure/index.js +1 -7
  58. package/dist/failure/index.js.map +1 -1
  59. package/dist/gates/definitions.d.ts.map +1 -1
  60. package/dist/gates/definitions.js +0 -4
  61. package/dist/gates/definitions.js.map +1 -1
  62. package/dist/gates/performance.d.ts +7 -22
  63. package/dist/gates/performance.d.ts.map +1 -1
  64. package/dist/gates/performance.js +7 -89
  65. package/dist/gates/performance.js.map +1 -1
  66. package/dist/gates/types.d.ts +2 -8
  67. package/dist/gates/types.d.ts.map +1 -1
  68. package/dist/index.d.ts +6 -8
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +4 -22
  71. package/dist/index.js.map +1 -1
  72. package/dist/knowledge/index.d.ts +0 -1
  73. package/dist/knowledge/index.d.ts.map +1 -1
  74. package/dist/knowledge/index.js +1 -3
  75. package/dist/knowledge/index.js.map +1 -1
  76. package/dist/monitoring/trace-analyzer.d.ts +25 -10
  77. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  78. package/dist/monitoring/trace-analyzer.js +147 -116
  79. package/dist/monitoring/trace-analyzer.js.map +1 -1
  80. package/dist/types/passes-gate.d.ts +0 -32
  81. package/dist/types/passes-gate.d.ts.map +1 -1
  82. package/package.json +1 -1
  83. package/src/__tests__/passes-gate-check.test.ts +20 -4
  84. package/src/__tests__/passes-gate.test.ts +5 -99
  85. package/src/__tests__/performance-gate.test.ts +3 -11
  86. package/src/__tests__/public-exports.test.ts +68 -16
  87. package/src/__tests__/public-type-surface.test.ts +359 -0
  88. package/src/__tests__/trace-analyzer.test.ts +52 -2
  89. package/src/cli/commands/CONTEXT.md +3 -2
  90. package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +158 -0
  91. package/src/cli/commands/__tests__/passes-gate.test.ts +7 -3
  92. package/src/cli/commands/__tests__/performance.test.ts +5 -16
  93. package/src/cli/commands/__tests__/registry.test.ts +46 -3
  94. package/src/cli/commands/__tests__/report-extra.test.ts +0 -19
  95. package/src/cli/commands/__tests__/report-false-green.test.ts +46 -0
  96. package/src/cli/commands/__tests__/report.test.ts +0 -20
  97. package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +68 -0
  98. package/src/cli/commands/__tests__/status-extra.test.ts +63 -116
  99. package/src/cli/commands/__tests__/status.test.ts +66 -148
  100. package/src/cli/commands/definitions.ts +1 -32
  101. package/src/cli/commands/passes-gate.ts +0 -3
  102. package/src/cli/commands/performance.ts +13 -27
  103. package/src/cli/commands/report.ts +3 -61
  104. package/src/cli/commands/status.ts +5 -10
  105. package/src/context/CONTEXT.md +2 -3
  106. package/src/context/__tests__/token-budget.test.ts +1 -81
  107. package/src/context/index.ts +2 -7
  108. package/src/context/token-budget.ts +0 -73
  109. package/src/context/types.ts +0 -9
  110. package/src/core/CONTEXT.md +5 -6
  111. package/src/core/constraints/__tests__/collect-constraints.test.ts +66 -0
  112. package/src/core/constraints/checker.ts +33 -2
  113. package/src/core/constraints/git-evidence.ts +6 -3
  114. package/src/core/index.ts +0 -12
  115. package/src/core/spec/__tests__/validator.test.ts +24 -0
  116. package/src/core/spec/validator.ts +9 -10
  117. package/src/core/validators/__tests__/passes-gate.test.ts +2 -9
  118. package/src/core/validators/index.ts +0 -2
  119. package/src/core/validators/passes-gate.ts +3 -152
  120. package/src/failure/CONTEXT.md +8 -6
  121. package/src/failure/index.ts +0 -10
  122. package/src/gates/CONTEXT.md +3 -2
  123. package/src/gates/__tests__/performance.test.ts +6 -74
  124. package/src/gates/definitions.ts +0 -4
  125. package/src/gates/performance.ts +9 -111
  126. package/src/gates/types.ts +2 -8
  127. package/src/index.ts +1 -37
  128. package/src/knowledge/CONTEXT.md +1 -2
  129. package/src/knowledge/index.ts +0 -1
  130. package/src/monitoring/CONTEXT.md +2 -2
  131. package/src/monitoring/trace-analyzer.ts +160 -126
  132. package/src/types/passes-gate.ts +0 -43
  133. package/src/utils/__tests__/jsonl-skip-disposition.test.ts +0 -1
  134. package/dist/cli/commands/analyze-sessions.d.ts +0 -20
  135. package/dist/cli/commands/analyze-sessions.d.ts.map +0 -1
  136. package/dist/cli/commands/analyze-sessions.js +0 -290
  137. package/dist/cli/commands/analyze-sessions.js.map +0 -1
  138. package/dist/cli/commands/update-user-model.d.ts +0 -30
  139. package/dist/cli/commands/update-user-model.d.ts.map +0 -1
  140. package/dist/cli/commands/update-user-model.js +0 -406
  141. package/dist/cli/commands/update-user-model.js.map +0 -1
  142. package/dist/cli/session-mining/corrections.d.ts +0 -17
  143. package/dist/cli/session-mining/corrections.d.ts.map +0 -1
  144. package/dist/cli/session-mining/corrections.js +0 -58
  145. package/dist/cli/session-mining/corrections.js.map +0 -1
  146. package/dist/cli/session-mining/index.d.ts +0 -13
  147. package/dist/cli/session-mining/index.d.ts.map +0 -1
  148. package/dist/cli/session-mining/index.js +0 -29
  149. package/dist/cli/session-mining/index.js.map +0 -1
  150. package/dist/cli/session-mining/text.d.ts +0 -31
  151. package/dist/cli/session-mining/text.d.ts.map +0 -1
  152. package/dist/cli/session-mining/text.js +0 -126
  153. package/dist/cli/session-mining/text.js.map +0 -1
  154. package/dist/cli/session-mining/transcript.d.ts +0 -34
  155. package/dist/cli/session-mining/transcript.d.ts.map +0 -1
  156. package/dist/cli/session-mining/transcript.js +0 -130
  157. package/dist/cli/session-mining/transcript.js.map +0 -1
  158. package/dist/context/compaction.d.ts +0 -57
  159. package/dist/context/compaction.d.ts.map +0 -1
  160. package/dist/context/compaction.js +0 -165
  161. package/dist/context/compaction.js.map +0 -1
  162. package/dist/core/session/clean-state.d.ts +0 -17
  163. package/dist/core/session/clean-state.d.ts.map +0 -1
  164. package/dist/core/session/clean-state.js +0 -192
  165. package/dist/core/session/clean-state.js.map +0 -1
  166. package/dist/core/session/index.d.ts +0 -6
  167. package/dist/core/session/index.d.ts.map +0 -1
  168. package/dist/core/session/index.js +0 -15
  169. package/dist/core/session/index.js.map +0 -1
  170. package/dist/core/session/startup.d.ts +0 -47
  171. package/dist/core/session/startup.d.ts.map +0 -1
  172. package/dist/core/session/startup.js +0 -263
  173. package/dist/core/session/startup.js.map +0 -1
  174. package/dist/failure/constraint-handler.d.ts +0 -83
  175. package/dist/failure/constraint-handler.d.ts.map +0 -1
  176. package/dist/failure/constraint-handler.js +0 -138
  177. package/dist/failure/constraint-handler.js.map +0 -1
  178. package/dist/knowledge/lifecycle-hooks.d.ts +0 -62
  179. package/dist/knowledge/lifecycle-hooks.d.ts.map +0 -1
  180. package/dist/knowledge/lifecycle-hooks.js +0 -143
  181. package/dist/knowledge/lifecycle-hooks.js.map +0 -1
  182. package/dist/types/session.d.ts +0 -113
  183. package/dist/types/session.d.ts.map +0 -1
  184. package/dist/types/session.js +0 -6
  185. package/dist/types/session.js.map +0 -1
  186. package/src/__tests__/clean-state-extra.test.ts +0 -301
  187. package/src/__tests__/clean-state.test.ts +0 -169
  188. package/src/__tests__/constraint-handler.test.ts +0 -132
  189. package/src/__tests__/passes-gate-extra.test.ts +0 -93
  190. package/src/__tests__/session-startup.test.ts +0 -334
  191. package/src/cli/commands/__tests__/analyze-sessions.test.ts +0 -184
  192. package/src/cli/commands/__tests__/update-user-model.test.ts +0 -268
  193. package/src/cli/commands/analyze-sessions.ts +0 -335
  194. package/src/cli/commands/update-user-model.ts +0 -476
  195. package/src/cli/session-mining/__tests__/transcript.test.ts +0 -118
  196. package/src/cli/session-mining/corrections.ts +0 -56
  197. package/src/cli/session-mining/index.ts +0 -13
  198. package/src/cli/session-mining/text.ts +0 -117
  199. package/src/cli/session-mining/transcript.ts +0 -125
  200. package/src/context/__tests__/compaction.test.ts +0 -169
  201. package/src/context/compaction.ts +0 -201
  202. package/src/core/session/__tests__/startup.test.ts +0 -281
  203. package/src/core/session/clean-state.ts +0 -178
  204. package/src/core/session/index.ts +0 -15
  205. package/src/core/session/startup.ts +0 -253
  206. package/src/failure/constraint-handler.ts +0 -171
  207. package/src/knowledge/__tests__/lifecycle-hooks.test.ts +0 -140
  208. package/src/knowledge/lifecycle-hooks.ts +0 -202
  209. package/src/types/session.ts +0 -132
@@ -1,192 +0,0 @@
1
- "use strict";
2
- /**
3
- * CleanStateManager - 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.createCleanStateManager = exports.CleanStateManager = void 0;
42
- const exec_1 = require("../../utils/exec");
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 DEFAULT_CONFIG = {
48
- enabled: true,
49
- autoCommit: true,
50
- detectBugs: true,
51
- updateProgress: true,
52
- commitMessageTemplate: '[{taskId}] {description} - {status}',
53
- };
54
- const BUG_PATTERNS = [
55
- { pattern: /console\.(error|warn)\(/, severity: 'low', type: 'logic' },
56
- { pattern: /FIXME|HACK/i, severity: 'medium', type: 'logic' },
57
- { pattern: /eval\s*\(/, severity: 'high', type: 'security' },
58
- { pattern: /dangerouslySetInnerHTML/, severity: 'medium', type: 'security' },
59
- ];
60
- class CleanStateManager {
61
- config;
62
- constructor(config = {}) {
63
- this.config = { ...DEFAULT_CONFIG, ...config };
64
- }
65
- async onSessionEnd(workDir, sessionInfo) {
66
- const result = {
67
- isClean: true,
68
- hasUncommittedChanges: false,
69
- progressUpdated: false,
70
- errors: []
71
- };
72
- if (!this.config.enabled)
73
- return result;
74
- try {
75
- // 1. 检查未提交变更
76
- result.hasUncommittedChanges = await this.hasUncommittedChanges(workDir);
77
- // 2. 自动提交(如果配置开启)
78
- if (result.hasUncommittedChanges && this.config.autoCommit) {
79
- result.committedFiles = await this.autoCommit(workDir, sessionInfo);
80
- }
81
- // 3. 检测 bug(如果配置开启)
82
- if (this.config.detectBugs) {
83
- result.bugs = await this.detectBugs(workDir);
84
- if (result.bugs.length > 0)
85
- result.isClean = false;
86
- }
87
- // 4. 更新 progress(如果配置开启)
88
- if (this.config.updateProgress) {
89
- result.progressUpdated = await this.updateProgress(workDir, sessionInfo, result);
90
- }
91
- }
92
- catch (e) {
93
- result.errors?.push(e.message);
94
- result.isClean = false;
95
- }
96
- return result;
97
- }
98
- async hasUncommittedChanges(workDir) {
99
- try {
100
- const { stdout } = await (0, exec_1.execAsync)('git status --porcelain', { cwd: workDir });
101
- return stdout.trim().length > 0;
102
- }
103
- catch {
104
- return false;
105
- }
106
- }
107
- async autoCommit(workDir, sessionInfo) {
108
- try {
109
- const { stdout } = await (0, exec_1.execAsync)('git status --porcelain', { cwd: workDir });
110
- const files = stdout.split('\n').filter(Boolean).map(l => l.substring(3).trim());
111
- await (0, exec_1.execAsync)('git add -A', { cwd: workDir });
112
- // 生成提交消息
113
- const msg = sessionInfo.task
114
- ? `[${sessionInfo.task.id}] ${sessionInfo.task.name || sessionInfo.task.id}`
115
- : `[session] ${sessionInfo.workflowId}`;
116
- // 使用 execFile 避免 shell 注入
117
- const { execFile: execFileCb } = await Promise.resolve().then(() => __importStar(require('child_process')));
118
- const execFileAsync = (0, util_1.promisify)(execFileCb);
119
- await execFileAsync('git', ['commit', '-m', msg], { cwd: workDir });
120
- return files;
121
- }
122
- catch {
123
- return [];
124
- }
125
- }
126
- async detectBugs(workDir) {
127
- const bugs = [];
128
- try {
129
- // 获取最近变更的文件
130
- const { stdout } = await (0, exec_1.execAsync)('git diff --name-only HEAD~1', { cwd: workDir });
131
- for (const file of stdout.split('\n').filter(Boolean)) {
132
- // 只检查代码文件
133
- if (!['.ts', '.tsx', '.js', '.jsx', '.py', '.go'].some(e => file.endsWith(e)))
134
- continue;
135
- try {
136
- const content = await fs.readFile(path.join(workDir, file), 'utf-8');
137
- const lines = content.split('\n');
138
- lines.forEach((line, i) => {
139
- for (const { pattern, severity, type } of BUG_PATTERNS) {
140
- if (pattern.test(line)) {
141
- bugs.push({
142
- file,
143
- line: i + 1,
144
- message: `Detected pattern: ${pattern.source}`,
145
- severity,
146
- type
147
- });
148
- }
149
- }
150
- });
151
- }
152
- catch {
153
- // 文件读取失败,跳过
154
- }
155
- }
156
- }
157
- catch { }
158
- return bugs;
159
- }
160
- async updateProgress(workDir, sessionInfo, cleanResult) {
161
- const progressPath = path.join(workDir, '.harness', 'progress.yml');
162
- try {
163
- await fs.mkdir(path.dirname(progressPath), { recursive: true });
164
- // 读取现有 progress 或创建新的
165
- let data = { sessions: [], last_updated: new Date().toISOString() };
166
- try {
167
- data = yaml.load(await fs.readFile(progressPath, 'utf-8')) || data;
168
- }
169
- catch { }
170
- // 添加本次 session 记录
171
- data.sessions.push({
172
- id: sessionInfo.sessionId,
173
- workflow: sessionInfo.workflowId,
174
- task: sessionInfo.task?.id,
175
- timestamp: new Date().toISOString(),
176
- clean: cleanResult.isClean,
177
- bugs: cleanResult.bugs?.length || 0,
178
- committed: cleanResult.committedFiles?.length || 0,
179
- });
180
- data.last_updated = new Date().toISOString();
181
- await fs.writeFile(progressPath, yaml.dump(data));
182
- return true;
183
- }
184
- catch {
185
- return false;
186
- }
187
- }
188
- }
189
- exports.CleanStateManager = CleanStateManager;
190
- const createCleanStateManager = (config) => new CleanStateManager(config);
191
- exports.createCleanStateManager = createCleanStateManager;
192
- //# sourceMappingURL=clean-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean-state.js","sourceRoot":"","sources":["../../../src/core/session/clean-state.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,15 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,47 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/session/startup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EAGxB,MAAM,qBAAqB,CAAC;AAK7B,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;IAa9B;;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"}
@@ -1,263 +0,0 @@
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 exec_1 = require("../../utils/exec");
43
- const fs = __importStar(require("fs/promises"));
44
- const path = __importStar(require("path"));
45
- const yaml = __importStar(require("js-yaml"));
46
- const DEFAULT_TIMEOUT = 30000; // 30 seconds
47
- class SessionStartup {
48
- checkpoints;
49
- workDir;
50
- constructor(workDir, checkpoints) {
51
- this.workDir = workDir;
52
- this.checkpoints = checkpoints;
53
- }
54
- async run() {
55
- const results = [];
56
- const errors = [];
57
- // 1. Run required checkpoints
58
- for (const type of this.checkpoints.required) {
59
- const result = await this.runCheckpoint(type);
60
- results.push(result);
61
- if (!result.success) {
62
- errors.push(`Required checkpoint failed: ${type} - ${result.error}`);
63
- }
64
- }
65
- // 2. Run optional checkpoints (don't fail on error)
66
- for (const type of this.checkpoints.optional || []) {
67
- const result = await this.runCheckpoint(type);
68
- results.push(result);
69
- }
70
- return {
71
- success: errors.length === 0,
72
- results,
73
- errors,
74
- };
75
- }
76
- async runCheckpoint(type) {
77
- const start = Date.now();
78
- try {
79
- let data;
80
- switch (type) {
81
- case 'pwd':
82
- data = await this.checkPwd();
83
- break;
84
- case 'git_log':
85
- data = await this.checkGitLog();
86
- break;
87
- case 'git_status':
88
- data = await this.checkGitStatus();
89
- break;
90
- case 'read_progress':
91
- data = await this.checkProgress();
92
- break;
93
- case 'read_task_list':
94
- data = await this.checkTaskList();
95
- break;
96
- case 'init_sh':
97
- data = await this.checkInitSh();
98
- break;
99
- case 'basic_verification':
100
- data = await this.checkBasicVerification();
101
- break;
102
- case 'load_context':
103
- data = await this.checkLoadContext();
104
- break;
105
- default:
106
- throw new Error(`Unknown checkpoint type: ${type}`);
107
- }
108
- return { type, success: true, data, duration: Date.now() - start };
109
- }
110
- catch (error) {
111
- return { type, success: false, error: error.message, duration: Date.now() - start };
112
- }
113
- }
114
- async checkPwd() {
115
- return this.workDir;
116
- }
117
- async checkGitLog() {
118
- try {
119
- const { stdout } = await (0, exec_1.execAsync)('git log --oneline -10', { cwd: this.workDir });
120
- return stdout.split('\n').filter(Boolean);
121
- }
122
- catch {
123
- return [];
124
- }
125
- }
126
- async checkGitStatus() {
127
- try {
128
- const { stdout } = await (0, exec_1.execAsync)('git status --porcelain', { cwd: this.workDir });
129
- const staged = [], unstaged = [], untracked = [];
130
- for (const line of stdout.split('\n').filter(Boolean)) {
131
- const status = line.substring(0, 2);
132
- const file = line.substring(3);
133
- if (status.includes('??'))
134
- untracked.push(file);
135
- else if (status.match(/[MADRC]/))
136
- staged.push(file);
137
- else
138
- unstaged.push(file);
139
- }
140
- return { staged, unstaged, untracked };
141
- }
142
- catch {
143
- return { staged: [], unstaged: [], untracked: [] };
144
- }
145
- }
146
- async checkProgress() {
147
- const progressPath = path.join(this.workDir, '.harness', 'progress.yml');
148
- try {
149
- const content = await fs.readFile(progressPath, 'utf-8');
150
- return yaml.load(content);
151
- }
152
- catch {
153
- return null;
154
- }
155
- }
156
- async checkTaskList() {
157
- // Try tasks.yml first (existing format)
158
- const tasksPath = path.join(this.workDir, 'tasks.yml');
159
- try {
160
- const content = await fs.readFile(tasksPath, 'utf-8');
161
- return yaml.load(content);
162
- }
163
- catch {
164
- // Try tasks.json
165
- const jsonPath = path.join(this.workDir, 'tasks.json');
166
- try {
167
- const content = await fs.readFile(jsonPath, 'utf-8');
168
- return JSON.parse(content);
169
- }
170
- catch {
171
- return null;
172
- }
173
- }
174
- }
175
- async checkInitSh() {
176
- const initPath = path.join(this.workDir, 'init.sh');
177
- try {
178
- await fs.access(initPath);
179
- return true;
180
- }
181
- catch {
182
- return false;
183
- }
184
- }
185
- async checkBasicVerification() {
186
- const [hasPackageJson, hasTests, hasReadme] = await Promise.all([
187
- fs.access(path.join(this.workDir, 'package.json')).then(() => true).catch(() => false),
188
- this.hasTestFiles(),
189
- fs.access(path.join(this.workDir, 'README.md')).then(() => true).catch(() => false),
190
- ]);
191
- return { hasPackageJson, hasTests, hasReadme };
192
- }
193
- async hasTestFiles() {
194
- const testPatterns = ['test', 'spec', '__tests__'];
195
- try {
196
- const files = await fs.readdir(this.workDir);
197
- return files.some(f => testPatterns.some(p => f.toLowerCase().includes(p)));
198
- }
199
- catch {
200
- return false;
201
- }
202
- }
203
- async checkLoadContext() {
204
- const context = {};
205
- const files = this.checkpoints.contextFiles || [];
206
- for (const file of files) {
207
- try {
208
- context[file] = await fs.readFile(path.join(this.workDir, file), 'utf-8');
209
- }
210
- catch { }
211
- }
212
- return context;
213
- }
214
- /**
215
- * Get current task from task list
216
- */
217
- async getCurrentTask() {
218
- const taskList = await this.checkTaskList();
219
- if (!taskList?.tasks)
220
- return null;
221
- for (let i = 0; i < taskList.tasks.length; i++) {
222
- const task = taskList.tasks[i];
223
- if (task && !task.passes) {
224
- return { task, index: i };
225
- }
226
- }
227
- return null;
228
- }
229
- /**
230
- * Generate startup report
231
- */
232
- generateReport(results) {
233
- const lines = ['## Session Startup Report\n'];
234
- for (const result of results) {
235
- const icon = result.success ? '✅' : '❌';
236
- lines.push(`${icon} ${result.type} (${result.duration}ms)`);
237
- if (result.error) {
238
- lines.push(` Error: ${result.error}`);
239
- }
240
- }
241
- return lines.join('\n');
242
- }
243
- }
244
- exports.SessionStartup = SessionStartup;
245
- const createSessionStartup = (workDir, checkpoints) => new SessionStartup(workDir, checkpoints);
246
- exports.createSessionStartup = createSessionStartup;
247
- /**
248
- * Default startup checkpoints for code workflows
249
- */
250
- exports.DEFAULT_CODE_CHECKPOINTS = {
251
- required: ['pwd', 'git_log', 'read_task_list'],
252
- optional: ['read_progress', 'init_sh', 'basic_verification'],
253
- timeout: DEFAULT_TIMEOUT,
254
- };
255
- /**
256
- * Minimal startup checkpoints
257
- */
258
- exports.MINIMAL_CHECKPOINTS = {
259
- required: ['pwd', 'read_task_list'],
260
- optional: [],
261
- timeout: DEFAULT_TIMEOUT,
262
- };
263
- //# sourceMappingURL=startup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/session/startup.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- /**
2
- * ConstraintViolationHandler — 约束违规统一处理(S4)
3
- *
4
- * 问题:ConstraintViolationError 在 4 个调用点有 4 种行为:
5
- * 1. 抛异常阻断(checker.ts)
6
- * 2. 返回 null(report.ts catch 后返回空数据)
7
- * 3. 返回 403 HTTP 状态
8
- * 4. console.warn 静默吞掉
9
- *
10
- * 解决:提供 3 种标准化处理策略,消除 ad-hoc catch 行为。
11
- */
12
- import type { ConstraintCheckResult } from '../types/constraint';
13
- /**
14
- * 违规处理策略
15
- */
16
- export type ViolationStrategy = 'BLOCK' | 'COLLECT' | 'SAFE_BOOLEAN';
17
- /**
18
- * 违规处理结果
19
- */
20
- export interface ViolationHandlingResult {
21
- /** 策略 */
22
- strategy: ViolationStrategy;
23
- /** 检查结果(COLLECT 策略时总是有值) */
24
- checkResult?: ConstraintCheckResult;
25
- /** 是否有违规(SAFE_BOOLEAN 策略时为 false) */
26
- hasViolation: boolean;
27
- /** 违规数量 */
28
- violationCount: number;
29
- }
30
- /**
31
- * 约束违规处理器
32
- *
33
- * 用法:
34
- * ```typescript
35
- * const handler = new ConstraintViolationHandler();
36
- *
37
- * // 策略 1: BLOCK — 抛异常阻断(Iron Laws 默认)
38
- * await handler.execute(checkFn, 'BLOCK');
39
- *
40
- * // 策略 2: COLLECT — 收集违规不抛异常(用于报告生成)
41
- * const result = await handler.execute(checkFn, 'COLLECT');
42
- * // result.checkResult 总是有值
43
- *
44
- * // 策略 3: SAFE_BOOLEAN — 返回真/假(用于 canProceed 类方法)
45
- * const ok = await handler.execute(checkFn, 'SAFE_BOOLEAN');
46
- * // ok.hasViolation 为 true/false
47
- * ```
48
- */
49
- export declare class ConstraintViolationHandler {
50
- /**
51
- * 执行约束检查并统一处理结果
52
- *
53
- * @param checkFn 约束检查函数(可能抛出 ConstraintViolationError)
54
- * @param strategy 处理策略
55
- * @returns 标准化结果
56
- */
57
- execute(checkFn: () => Promise<ConstraintCheckResult>, strategy: ViolationStrategy): Promise<ViolationHandlingResult>;
58
- /**
59
- * BLOCK 策略:违规即抛出,无违规返回结果
60
- */
61
- private handleBlock;
62
- /**
63
- * COLLECT 策略:捕获异常,收集所有违规,不抛出
64
- */
65
- private handleCollect;
66
- /**
67
- * SAFE_BOOLEAN 策略:不抛异常,只返回 boolean
68
- */
69
- private handleSafeBoolean;
70
- }
71
- /**
72
- * 快捷:BLOCK 策略执行检查
73
- */
74
- export declare function executeWithBlock(checkFn: () => Promise<ConstraintCheckResult>): Promise<ViolationHandlingResult>;
75
- /**
76
- * 快捷:COLLECT 策略执行检查
77
- */
78
- export declare function executeWithCollect(checkFn: () => Promise<ConstraintCheckResult>): Promise<ViolationHandlingResult>;
79
- /**
80
- * 快捷:SAFE_BOOLEAN 策略执行检查
81
- */
82
- export declare function executeWithSafeBoolean(checkFn: () => Promise<ConstraintCheckResult>): Promise<ViolationHandlingResult>;
83
- //# sourceMappingURL=constraint-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-handler.d.ts","sourceRoot":"","sources":["../../src/failure/constraint-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS;IACT,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW;IACX,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,0BAA0B;IACrC;;;;;;OAMG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,EAC7C,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,uBAAuB,CAAC;IAWnC;;OAEG;YACW,WAAW;IAYzB;;OAEG;YACW,aAAa;IA8B3B;;OAEG;YACW,iBAAiB;CAkBhC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAElC"}