@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,202 +0,0 @@
1
- /**
2
- * 知识生命周期钩子
3
- *
4
- * 与 Agent 生命周期集成:
5
- * - 启动时注入相关知识上下文
6
- * - 完成时提取新知识
7
- */
8
-
9
- import type { KnowledgeEntry, KnowledgeSubsystem } from './types';
10
- import type { KnowledgeStore } from './store';
11
- import { KnowledgeQuery } from './query';
12
- import type { ContextSource } from '../context/types';
13
-
14
- // ── 钩子配置 ─────────────────────────────────────────────
15
-
16
- export interface LifecycleHookConfig {
17
- store: KnowledgeStore;
18
- query: KnowledgeQuery;
19
- /** 启动时注入的最大 token 数 */
20
- injectionBudget?: number;
21
- /** 完成时提取的最大条目数 */
22
- maxExtractionEntries?: number;
23
- /** 当前阶段 */
24
- phase?: string;
25
- }
26
-
27
- // ── 提取结果 ─────────────────────────────────────────────
28
-
29
- export interface ExtractionResult {
30
- entries: KnowledgeEntry[];
31
- source: 'archive' | 'error' | 'decision';
32
- }
33
-
34
- // ── 生命周期钩子 ─────────────────────────────────────────
35
-
36
- export class KnowledgeLifecycleHooks {
37
- private config: LifecycleHookConfig;
38
-
39
- constructor(config: LifecycleHookConfig) {
40
- this.config = config;
41
- }
42
-
43
- /**
44
- * 启动钩子:注入相关知识到上下文
45
- *
46
- * 在 Agent session 启动时调用
47
- */
48
- onSessionStart(options?: {
49
- phase?: string;
50
- budget?: number;
51
- focusTypes?: KnowledgeSubsystem[];
52
- exclude?: string[];
53
- }): ContextSource[] {
54
- const budget = options?.budget ?? this.config.injectionBudget ?? 800;
55
- const phase = options?.phase ?? this.config.phase ?? 'default';
56
-
57
- const queryResult = this.config.query.query({
58
- phase,
59
- maxTokens: budget,
60
- maxEntries: 10,
61
- focusTypes: options?.focusTypes ?? [],
62
- });
63
-
64
- const sources: ContextSource[] = [];
65
- const excludeSet = new Set(options?.exclude ?? []);
66
-
67
- for (const entry of queryResult.entries) {
68
- if (excludeSet.has(entry.id)) continue;
69
-
70
- sources.push({
71
- type: 'knowledge',
72
- id: `knowledge-${entry.id}`,
73
- content: this.formatForContext(entry),
74
- priority: 3,
75
- metadata: { entryId: entry.id, maturity: entry.maturity },
76
- });
77
- }
78
-
79
- return sources;
80
- }
81
-
82
- /**
83
- * 完成钩子:从产物中提取新知识
84
- *
85
- * 在 Agent task 完成时调用(ARCHIVE 阶段)
86
- */
87
- onTaskComplete(context: {
88
- taskDescription: string;
89
- changedFiles?: string[];
90
- testResults?: string;
91
- errors?: string[];
92
- decisions?: string[];
93
- }): ExtractionResult {
94
- const entries: KnowledgeEntry[] = [];
95
-
96
- // 从错误中提取 pitfall
97
- if (context.errors && context.errors.length > 0) {
98
- for (const error of context.errors.slice(0, 3)) {
99
- entries.push(this.createExtractionEntry({
100
- title: `踩坑: ${error.slice(0, 100)}`,
101
- content: error,
102
- type: 'pitfall',
103
- tags: ['auto-extract', 'error'],
104
- }));
105
- }
106
- }
107
-
108
- // 从决策中提取 decision
109
- if (context.decisions && context.decisions.length > 0) {
110
- for (const decision of context.decisions.slice(0, 3)) {
111
- entries.push(this.createExtractionEntry({
112
- title: `决策: ${decision.slice(0, 100)}`,
113
- content: decision,
114
- type: 'decision',
115
- tags: ['auto-extract', 'decision'],
116
- }));
117
- }
118
- }
119
-
120
- // 保存到知识库
121
- for (const entry of entries) {
122
- this.config.store.save(entry);
123
- }
124
-
125
- return {
126
- entries,
127
- source: 'archive',
128
- };
129
- }
130
-
131
- /**
132
- * 错误钩子:从错误中提取知识
133
- */
134
- onError(error: Error, context?: {
135
- taskDescription?: string;
136
- stackTrace?: string;
137
- }): ExtractionResult {
138
- const content = [
139
- `错误: ${error.message}`,
140
- context?.stackTrace ? `\n堆栈:\n${context.stackTrace}` : '',
141
- context?.taskDescription ? `\n任务: ${context.taskDescription}` : '',
142
- ].filter(Boolean).join('\n');
143
-
144
- const entry = this.createExtractionEntry({
145
- title: `踩坑: ${error.message.slice(0, 100)}`,
146
- content,
147
- type: 'pitfall',
148
- tags: ['auto-extract', 'error', 'runtime'],
149
- });
150
-
151
- this.config.store.save(entry);
152
-
153
- return {
154
- entries: [entry],
155
- source: 'error',
156
- };
157
- }
158
-
159
- // ── 辅助方法 ───────────────────────────────────────────
160
-
161
- private formatForContext(entry: KnowledgeEntry): string {
162
- const parts: string[] = [];
163
- parts.push(`## [${entry.type.toUpperCase()}] ${entry.title}`);
164
- parts.push(`成熟度: ${entry.maturity}`);
165
- if (entry.tags.length > 0) {
166
- parts.push(`标签: ${entry.tags.join(', ')}`);
167
- }
168
- parts.push('');
169
- parts.push(entry.content);
170
- return parts.join('\n');
171
- }
172
-
173
- private createExtractionEntry(params: {
174
- title: string;
175
- content: string;
176
- type: KnowledgeSubsystem;
177
- tags: string[];
178
- }): KnowledgeEntry {
179
- return {
180
- id: `extract-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
181
- type: params.type,
182
- title: params.title,
183
- content: params.content,
184
- maturity: 'draft',
185
- layer: 'project',
186
- created: new Date().toISOString(),
187
- lastReferenced: '',
188
- contributors: [],
189
- projects: [],
190
- tags: params.tags,
191
- applicablePhases: [],
192
- sourceReferences: [{
193
- workflow: 'lifecycle-hook',
194
- timestamp: new Date().toISOString(),
195
- }],
196
- referencedBy: [],
197
- executionResults: [],
198
- consumptionMode: 'reference',
199
- origin: 'agent',
200
- };
201
- }
202
- }
@@ -1,132 +0,0 @@
1
- /**
2
- * Session 相关类型定义
3
- */
4
-
5
- /**
6
- * Session Startup 检查点配置
7
- */
8
- export interface StartupCheckpoints {
9
- required: StartupCheckpointType[];
10
- optional?: StartupCheckpointType[];
11
- timeout?: number; // 检查点超时(毫秒)
12
- contextFiles?: string[]; // 启动时加载的上下文文件
13
- }
14
-
15
- export type StartupCheckpointType =
16
- | 'pwd'
17
- | 'git_log'
18
- | 'git_status'
19
- | 'read_progress'
20
- | 'read_task_list'
21
- | 'init_sh'
22
- | 'basic_verification'
23
- | 'load_context';
24
-
25
- /**
26
- * Startup 检查点结果
27
- */
28
- export interface StartupCheckpointResult {
29
- type: StartupCheckpointType;
30
- success: boolean;
31
- data?: any;
32
- error?: string;
33
- duration: number; // 执行时长(毫秒)
34
- }
35
-
36
- /**
37
- * Clean State 配置
38
- */
39
- export interface CleanStateConfig {
40
- enabled: boolean;
41
- autoCommit?: boolean; // 是否自动提交未提交的变更
42
- detectBugs?: boolean; // 是否检测 bug
43
- updateProgress?: boolean; // 是否更新 progress 文件
44
- commitMessageTemplate?: string; // 提交消息模板
45
- }
46
-
47
- /**
48
- * Clean State 结果
49
- */
50
- export interface CleanStateResult {
51
- isClean: boolean;
52
- hasUncommittedChanges: boolean;
53
- committedFiles?: string[];
54
- bugs?: DetectedBug[];
55
- progressUpdated: boolean;
56
- errors?: string[];
57
- }
58
-
59
- /**
60
- * 检测到的 Bug
61
- */
62
- export interface DetectedBug {
63
- file: string;
64
- line?: number;
65
- message: string;
66
- severity: 'low' | 'medium' | 'high' | 'critical';
67
- type: 'syntax' | 'runtime' | 'logic' | 'security' | 'performance';
68
- }
69
-
70
- /**
71
- * Task List JSON 格式(扩展自 tasks.yml)
72
- */
73
- export interface TaskListJson {
74
- tasks: DynamicTask[];
75
- metadata?: {
76
- created_at?: string;
77
- updated_at?: string;
78
- workflow_id?: string;
79
- project_name?: string;
80
- };
81
- }
82
-
83
- /**
84
- * 动态任务定义(模块内类型:包根同名导出是 types/passes-gate 版,此处仅
85
- * TaskListJson/SessionInfo 结构引用;原 Extended* 别名导出已随 #85 删除)
86
- */
87
- interface DynamicTask {
88
- id: string;
89
- name?: string;
90
- category?: string;
91
- description?: string;
92
- type?: string;
93
- priority?: number;
94
- steps?: string[];
95
-
96
- // 约束机制字段
97
- passes?: boolean; // 任务是否通过(只能由测试结果修改)
98
- test_result?: TaskTestResult; // 测试证据
99
- step_status?: Record<string, TaskStepStatus>; // 步骤状态跟踪
100
- current_step?: string; // 当前执行的步骤
101
- current_step_index?: number; // 当前步骤索引
102
- }
103
-
104
- /**
105
- * 测试结果(模块内类型,理由同 DynamicTask)
106
- */
107
- interface TaskTestResult {
108
- passed: boolean;
109
- command: string;
110
- output?: string;
111
- failures?: string[];
112
- timestamp: Date;
113
- evidence?: string;
114
- }
115
-
116
- /**
117
- * 步骤状态
118
- */
119
- export interface TaskStepStatus {
120
- completed: boolean;
121
- result?: string;
122
- timestamp?: string;
123
- }
124
-
125
- /**
126
- * Session 信息
127
- */
128
- export interface SessionInfo {
129
- sessionId: string;
130
- workflowId: string;
131
- task?: DynamicTask;
132
- }