@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,290 +0,0 @@
1
- "use strict";
2
- /**
3
- * harness analyze-sessions — 对话模式发现引擎
4
- *
5
- * 扫描 transcript 文件,不预设关键词,挖掘:
6
- * 1. 纠正信号(用户反复指出的问题)
7
- * 2. 高频 N-gram(跨会话重复出现的概念)
8
- * 3. 规则缺口(高频模式未被现有 memory 覆盖)
9
- *
10
- * 输出候选规则建议,供用户审核后写入 memory。
11
- *
12
- * 工单 19-C:transcript 解析/纠正模式/分词相似度收敛至 cli/session-mining/。
13
- */
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- var __importDefault = (this && this.__importDefault) || function (mod) {
48
- return (mod && mod.__esModule) ? mod : { "default": mod };
49
- };
50
- Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.analyzeSessions = analyzeSessions;
52
- const chalk_1 = __importDefault(require("chalk"));
53
- const fs = __importStar(require("fs"));
54
- const path = __importStar(require("path"));
55
- const os = __importStar(require("os"));
56
- const session_mining_1 = require("../session-mining");
57
- const command_contract_1 = require("../command-contract");
58
- // ── Main ──
59
- async function analyzeSessions(options, io = command_contract_1.processIO) {
60
- const transcriptDir = process.env.CLAUDE_TRANSCRIPTS_DIR
61
- || path.join(os.homedir(), '.claude', 'projects', '-root--claude');
62
- const memoryDir = path.join(os.homedir(), '.claude', 'projects', '-root-projects', 'memory');
63
- const days = options.days || 7;
64
- if (!fs.existsSync(transcriptDir)) {
65
- (0, command_contract_1.log)(io, chalk_1.default.yellow('No transcripts directory found'));
66
- return { kind: 'skip', reason: `会话记录目录不存在: ${transcriptDir}` };
67
- }
68
- // 1. Scan transcripts(since 下推 seam(harness#112):stat 级过滤,窗口外不 parse;倒序)
69
- const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
70
- const sessions = (0, session_mining_1.readTranscriptSessions)(transcriptDir, { since: cutoff })
71
- .sort((a, b) => b.date.localeCompare(a.date));
72
- if (sessions.length === 0) {
73
- (0, command_contract_1.log)(io, chalk_1.default.yellow(`No sessions found in the last ${days} days`));
74
- return { kind: 'skip', reason: `最近 ${days} 天没有会话` };
75
- }
76
- // 2. Extract corrections + N-grams
77
- const corrections = extractCorrections(sessions);
78
- const ngrams = extractNGrams(sessions, { minLen: 4, maxLen: 24, minFreq: 2 });
79
- // 3. Load existing memory rules for gap detection
80
- const existingRules = loadExistingRules(memoryDir);
81
- // 4. Generate candidates
82
- const candidates = generateCandidates(corrections, ngrams, existingRules);
83
- // 5. Output
84
- if (options.json) {
85
- (0, command_contract_1.log)(io, JSON.stringify({ sessions: sessions.length, corrections: corrections.length, candidates }, null, 2));
86
- return { kind: 'ok' };
87
- }
88
- (0, command_contract_1.log)(io, chalk_1.default.blue(`🔍 Analyzing ${sessions.length} sessions (last ${days} days)...\n`));
89
- printCorrectionSummary(corrections, io);
90
- printCandidates(candidates, io);
91
- return { kind: 'ok' };
92
- }
93
- // ── Correction Extraction ──
94
- function extractCorrections(sessions) {
95
- const corrections = [];
96
- for (const session of sessions) {
97
- for (const turn of session.turns) {
98
- if (turn.role !== 'user')
99
- continue;
100
- const text = (0, session_mining_1.stripCodeBlocks)(turn.content);
101
- for (const sentence of (0, session_mining_1.extractCorrectionMatches)(text)) {
102
- if (sentence.length > 3 && sentence.length < 200) {
103
- corrections.push({
104
- sentence,
105
- sessionId: session.id,
106
- timestamp: session.date,
107
- });
108
- }
109
- }
110
- }
111
- }
112
- return corrections;
113
- }
114
- function extractNGrams(sessions, opts) {
115
- const phraseMap = new Map();
116
- for (const session of sessions) {
117
- const userTexts = session.turns
118
- .filter(t => t.role === 'user' && !t.content.startsWith('{') && !t.content.startsWith('[') && t.content.length > 10)
119
- .map(t => (0, session_mining_1.stripCodeBlocks)(t.content));
120
- const combined = userTexts.join(' ');
121
- // Extract meaningful word sequences (Chinese chars + meaningful words)
122
- const words = (0, session_mining_1.tokenize)(combined);
123
- for (let n = 2; n <= 5; n++) {
124
- for (let i = 0; i <= words.length - n; i++) {
125
- const phrase = words.slice(i, i + n).join('');
126
- const clean = phrase.replace(/[,。!?、;:""''()\s]/g, '');
127
- if (clean.length < opts.minLen || clean.length > opts.maxLen)
128
- continue;
129
- if (/^\d+$/.test(clean))
130
- continue;
131
- if (session_mining_1.STOP_WORDS.has(clean))
132
- continue;
133
- if ((0, session_mining_1.isPunctuation)(clean))
134
- continue;
135
- const existing = phraseMap.get(clean) || { count: 0, sessions: new Set() };
136
- existing.count++;
137
- existing.sessions.add(session.id);
138
- phraseMap.set(clean, existing);
139
- }
140
- }
141
- }
142
- // Filter by minimum frequency and sort
143
- return Array.from(phraseMap.entries())
144
- .filter(([, v]) => v.count >= opts.minFreq && v.sessions.size >= 2)
145
- .map(([phrase, v]) => ({ phrase, frequency: v.count, sessions: Array.from(v.sessions) }))
146
- .filter(r => !(0, session_mining_1.isCodeNoise)(r.phrase) && (0, session_mining_1.hasSemanticContent)(r.phrase))
147
- .sort((a, b) => b.frequency - a.frequency || b.sessions.length - a.sessions.length);
148
- }
149
- // ── Existing Rules ──
150
- function isInExistingRules(concept, existingRules) {
151
- const lower = concept.toLowerCase();
152
- if (existingRules.has(lower))
153
- return true;
154
- // Partial match: concept appears in any rule name
155
- for (const rule of existingRules) {
156
- if (rule.includes(lower) || lower.includes(rule))
157
- return true;
158
- }
159
- return false;
160
- }
161
- function loadExistingRules(memoryDir) {
162
- const concepts = new Set();
163
- try {
164
- if (!fs.existsSync(memoryDir))
165
- return concepts;
166
- for (const file of fs.readdirSync(memoryDir)) {
167
- if (!file.endsWith('.md'))
168
- continue;
169
- const content = fs.readFileSync(path.join(memoryDir, file), 'utf-8');
170
- // Extract key concepts from rule titles
171
- const titleMatch = content.match(/#\s+(.+)/);
172
- if (titleMatch) {
173
- const words = (0, session_mining_1.tokenize)(titleMatch[1]);
174
- for (const w of words) {
175
- if (w.length >= 4)
176
- concepts.add(w.toLowerCase());
177
- }
178
- }
179
- }
180
- }
181
- catch { }
182
- return concepts;
183
- }
184
- // ── Candidate Generation ──
185
- function generateCandidates(corrections, ngrams, existingRules) {
186
- const candidates = [];
187
- // From corrections: cluster similar sentences
188
- const correctionClusters = clusterCorrections(corrections);
189
- for (const cluster of correctionClusters) {
190
- // Must appear at least 3 times total
191
- if (cluster.sentences.length < 3)
192
- continue;
193
- const concept = extractConcept(cluster.sentences);
194
- if (isInExistingRules(concept, existingRules))
195
- continue;
196
- candidates.push({
197
- pattern: concept,
198
- frequency: cluster.sentences.length,
199
- sessions: cluster.sessions,
200
- source: 'correction',
201
- confidence: Math.min(1, cluster.sentences.length / 10),
202
- suggestedRule: `feedback_auto_${concept.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]/g, '_').slice(0, 40)}.md`,
203
- });
204
- }
205
- // From N-grams: high-frequency concepts not in corrections
206
- const correctionConcepts = new Set(correctionClusters.map(c => extractConcept(c.sentences).toLowerCase()));
207
- for (const ng of ngrams) {
208
- const concept = ng.phrase;
209
- if (correctionConcepts.has(concept.toLowerCase()))
210
- continue; // already covered
211
- if (isInExistingRules(concept, existingRules))
212
- continue;
213
- if (ng.frequency < 2)
214
- continue;
215
- const crossSessionStrength = ng.sessions.length >= 2;
216
- const highFreqSingle = ng.sessions.length === 1 && ng.frequency >= 4;
217
- if (!crossSessionStrength && !highFreqSingle)
218
- continue;
219
- candidates.push({
220
- pattern: concept,
221
- frequency: ng.frequency,
222
- sessions: ng.sessions,
223
- source: 'ngram',
224
- confidence: Math.min(1, ng.frequency / 10),
225
- suggestedRule: `feedback_recurring_${concept.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]/g, '_').slice(0, 40)}.md`,
226
- });
227
- }
228
- return candidates.sort((a, b) => b.confidence - a.confidence);
229
- }
230
- function clusterCorrections(corrections) {
231
- const clusters = [];
232
- const used = new Set();
233
- for (let i = 0; i < corrections.length; i++) {
234
- if (used.has(i))
235
- continue;
236
- const cluster = {
237
- sentences: [corrections[i].sentence],
238
- sessions: [corrections[i].sessionId],
239
- };
240
- used.add(i);
241
- for (let j = i + 1; j < corrections.length; j++) {
242
- if (used.has(j))
243
- continue;
244
- const similarity = (0, session_mining_1.jaccardSimilarity)(corrections[i].sentence, corrections[j].sentence);
245
- if (similarity > 0.3) {
246
- cluster.sentences.push(corrections[j].sentence);
247
- if (!cluster.sessions.includes(corrections[j].sessionId)) {
248
- cluster.sessions.push(corrections[j].sessionId);
249
- }
250
- used.add(j);
251
- }
252
- }
253
- clusters.push(cluster);
254
- }
255
- return clusters;
256
- }
257
- function extractConcept(sentences) {
258
- // Take the longest sentence and extract the noun phrase after the correction marker
259
- const longest = sentences.reduce((a, b) => a.length > b.length ? a : b, '');
260
- const cleaned = (0, session_mining_1.cleanCorrectionConcept)(longest);
261
- return cleaned.slice(0, 60) || longest.slice(0, 60);
262
- }
263
- // ── Output ──
264
- function printCorrectionSummary(corrections, io) {
265
- if (corrections.length === 0) {
266
- (0, command_contract_1.log)(io, chalk_1.default.green('No correction patterns found'));
267
- return;
268
- }
269
- (0, command_contract_1.log)(io, chalk_1.default.yellow(`📢 ${corrections.length} correction signals detected\n`));
270
- }
271
- function printCandidates(candidates, io) {
272
- if (candidates.length === 0) {
273
- (0, command_contract_1.log)(io, chalk_1.default.green('✅ No new pattern candidates — all recurring concepts already have rules\n'));
274
- return;
275
- }
276
- (0, command_contract_1.log)(io, chalk_1.default.bold('🔔 Pattern Candidates (suggested rules)\n'));
277
- const topK = candidates.slice(0, 10);
278
- for (const c of topK) {
279
- const icon = c.source === 'correction' ? '🔴' : '🟡';
280
- const confBar = '█'.repeat(Math.round(c.confidence * 10)) + '░'.repeat(10 - Math.round(c.confidence * 10));
281
- (0, command_contract_1.log)(io, chalk_1.default.bold(`${icon} ${c.pattern}`));
282
- (0, command_contract_1.log)(io, chalk_1.default.gray(` Source: ${c.source} | Freq: ${c.frequency} | Sessions: ${c.sessions.length} | Confidence: ${confBar}`));
283
- (0, command_contract_1.log)(io, chalk_1.default.cyan(` → Rule: ${c.suggestedRule}`));
284
- (0, command_contract_1.log)(io);
285
- }
286
- if (candidates.length > 10) {
287
- (0, command_contract_1.log)(io, chalk_1.default.gray(`... and ${candidates.length - 10} more candidates. Run with --json for full list.`));
288
- }
289
- }
290
- //# sourceMappingURL=analyze-sessions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-sessions.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze-sessions.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * harness update-user-model — 用户模型持续演化引擎
3
- *
4
- * 不依赖固定规则快照。每天从最新数据中提取增量信号,
5
- * 对比昨天状态,输出变化,更新模型。
6
- *
7
- * 数据源:
8
- * ~/.claude/projects/-root--claude/*.jsonl (对话)
9
- * /tmp/claude-knowledge-hooks.log (行为信号)
10
- * studio/.harness/knowledge/ (知识新鲜度)
11
- * ~/.claude/projects/-root-projects/memory/ (规则库)
12
- *
13
- * 模型状态: $HARNESS_UUM_STATE_FILE,默认 ~/.claude/user-model-state.json
14
- * 画像输出: $HARNESS_UUM_PROFILE_FILE,默认 ~/.claude/projects/-root-projects/memory/user_profile.md
15
- *
16
- * 工单 19-C:transcript 解析/纠正模式/相似度收敛至 cli/session-mining/。
17
- */
18
- import { type CommandIO, type CommandResult } from '../command-contract';
19
- export interface UpdateUserModelOptions {
20
- days?: number;
21
- json?: boolean;
22
- dryRun?: boolean;
23
- }
24
- export interface UserModelPaths {
25
- stateFile: string;
26
- profileFile: string;
27
- }
28
- export declare function resolveUserModelPaths(env?: NodeJS.ProcessEnv): UserModelPaths;
29
- export declare function updateUserModel(options: UpdateUserModelOptions, io?: CommandIO): Promise<CommandResult>;
30
- //# sourceMappingURL=update-user-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-user-model.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update-user-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzF,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmBD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAQ1F;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,GAAE,SAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmDxH"}