@dommaker/harness 0.12.2 → 0.12.6

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 (111) hide show
  1. package/bin/harness-knowledge-capture.js +99 -0
  2. package/bin/harness-knowledge-check.js +63 -0
  3. package/bin/harness-knowledge-track.js +92 -0
  4. package/bin/harness-knowledge-track.sh +34 -0
  5. package/bin/harness.js +81 -0
  6. package/dist/cli/commands/analyze-sessions.d.ts +17 -0
  7. package/dist/cli/commands/analyze-sessions.d.ts.map +1 -0
  8. package/dist/cli/commands/analyze-sessions.js +445 -0
  9. package/dist/cli/commands/analyze-sessions.js.map +1 -0
  10. package/dist/cli/commands/diagnose.d.ts +16 -0
  11. package/dist/cli/commands/diagnose.d.ts.map +1 -0
  12. package/dist/cli/commands/diagnose.js +195 -0
  13. package/dist/cli/commands/diagnose.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +5 -1
  15. package/dist/cli/commands/index.d.ts.map +1 -1
  16. package/dist/cli/commands/index.js +12 -1
  17. package/dist/cli/commands/index.js.map +1 -1
  18. package/dist/cli/commands/init.js +28 -6
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/knowledge.d.ts +23 -0
  21. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  22. package/dist/cli/commands/knowledge.js +164 -0
  23. package/dist/cli/commands/knowledge.js.map +1 -1
  24. package/dist/cli/commands/posteval-plan.d.ts +11 -0
  25. package/dist/cli/commands/posteval-plan.d.ts.map +1 -0
  26. package/dist/cli/commands/posteval-plan.js +76 -0
  27. package/dist/cli/commands/posteval-plan.js.map +1 -0
  28. package/dist/cli/commands/propose.d.ts +18 -0
  29. package/dist/cli/commands/propose.d.ts.map +1 -0
  30. package/dist/cli/commands/propose.js +331 -0
  31. package/dist/cli/commands/propose.js.map +1 -0
  32. package/dist/cli/commands/release.d.ts +13 -0
  33. package/dist/cli/commands/release.d.ts.map +1 -0
  34. package/dist/cli/commands/release.js +175 -0
  35. package/dist/cli/commands/release.js.map +1 -0
  36. package/dist/cli/commands/traces.d.ts +15 -0
  37. package/dist/cli/commands/traces.d.ts.map +1 -0
  38. package/dist/cli/commands/traces.js +167 -0
  39. package/dist/cli/commands/traces.js.map +1 -0
  40. package/dist/cli/commands/update-user-model.d.ts +21 -0
  41. package/dist/cli/commands/update-user-model.d.ts.map +1 -0
  42. package/dist/cli/commands/update-user-model.js +475 -0
  43. package/dist/cli/commands/update-user-model.js.map +1 -0
  44. package/dist/constraints/definitions.d.ts +39 -0
  45. package/dist/constraints/definitions.d.ts.map +1 -0
  46. package/dist/constraints/definitions.js +71 -0
  47. package/dist/constraints/definitions.js.map +1 -0
  48. package/dist/constraints/quality.d.ts +11 -0
  49. package/dist/constraints/quality.d.ts.map +1 -0
  50. package/dist/constraints/quality.js +257 -0
  51. package/dist/constraints/quality.js.map +1 -0
  52. package/dist/constraints/safety.d.ts +13 -0
  53. package/dist/constraints/safety.d.ts.map +1 -0
  54. package/dist/constraints/safety.js +103 -0
  55. package/dist/constraints/safety.js.map +1 -0
  56. package/dist/core/constraints/checker.d.ts +5 -0
  57. package/dist/core/constraints/checker.d.ts.map +1 -1
  58. package/dist/core/constraints/checker.js +44 -11
  59. package/dist/core/constraints/checker.js.map +1 -1
  60. package/dist/core/constraints/definitions.d.ts.map +1 -1
  61. package/dist/core/constraints/definitions.js +28 -0
  62. package/dist/core/constraints/definitions.js.map +1 -1
  63. package/dist/core/constraints/index.d.ts +1 -0
  64. package/dist/core/constraints/index.d.ts.map +1 -1
  65. package/dist/core/constraints/index.js +4 -1
  66. package/dist/core/constraints/index.js.map +1 -1
  67. package/dist/core/constraints/prompt-injection.d.ts +13 -0
  68. package/dist/core/constraints/prompt-injection.d.ts.map +1 -0
  69. package/dist/core/constraints/prompt-injection.js +67 -0
  70. package/dist/core/constraints/prompt-injection.js.map +1 -0
  71. package/dist/extensions/long-running/constraints.d.ts +38 -0
  72. package/dist/extensions/long-running/constraints.d.ts.map +1 -0
  73. package/dist/extensions/long-running/constraints.js +153 -0
  74. package/dist/extensions/long-running/constraints.js.map +1 -0
  75. package/dist/extensions/long-running/index.d.ts +30 -0
  76. package/dist/extensions/long-running/index.d.ts.map +1 -0
  77. package/dist/extensions/long-running/index.js +50 -0
  78. package/dist/extensions/long-running/index.js.map +1 -0
  79. package/dist/extensions/long-running/types.d.ts +154 -0
  80. package/dist/extensions/long-running/types.d.ts.map +1 -0
  81. package/dist/extensions/long-running/types.js +9 -0
  82. package/dist/extensions/long-running/types.js.map +1 -0
  83. package/dist/knowledge/doctor.d.ts +37 -0
  84. package/dist/knowledge/doctor.d.ts.map +1 -0
  85. package/dist/knowledge/doctor.js +81 -0
  86. package/dist/knowledge/doctor.js.map +1 -0
  87. package/dist/knowledge/index.d.ts +1 -0
  88. package/dist/knowledge/index.d.ts.map +1 -1
  89. package/dist/knowledge/index.js +3 -1
  90. package/dist/knowledge/index.js.map +1 -1
  91. package/dist/knowledge/ingest.js +1 -1
  92. package/dist/knowledge/ingest.js.map +1 -1
  93. package/dist/knowledge/lifecycle.d.ts +4 -2
  94. package/dist/knowledge/lifecycle.d.ts.map +1 -1
  95. package/dist/knowledge/lifecycle.js +18 -3
  96. package/dist/knowledge/lifecycle.js.map +1 -1
  97. package/dist/knowledge/lint.d.ts +16 -0
  98. package/dist/knowledge/lint.d.ts.map +1 -1
  99. package/dist/knowledge/lint.js +84 -0
  100. package/dist/knowledge/lint.js.map +1 -1
  101. package/dist/knowledge/query.d.ts +3 -1
  102. package/dist/knowledge/query.d.ts.map +1 -1
  103. package/dist/knowledge/query.js +11 -1
  104. package/dist/knowledge/query.js.map +1 -1
  105. package/dist/knowledge/types.d.ts +2 -2
  106. package/dist/knowledge/types.d.ts.map +1 -1
  107. package/dist/presets/long-running.d.ts +33 -0
  108. package/dist/presets/long-running.d.ts.map +1 -0
  109. package/dist/presets/long-running.js +52 -0
  110. package/dist/presets/long-running.js.map +1 -0
  111. package/package.json +6 -1
@@ -0,0 +1,445 @@
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
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.analyzeSessions = analyzeSessions;
50
+ const chalk_1 = __importDefault(require("chalk"));
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ // ── Correction pattern templates ──
55
+ // Match user sentences that indicate repeating a request
56
+ const CORRECTION_PATTERNS = [
57
+ /你(?:又|还是)(?:在)?(?:犯|忘|没|不).{0,20}?[了]?/g,
58
+ /我不是(?:说|让|让做|讲)[了过]?.{0,30}?[了吗?]?/g,
59
+ /怎么(?:又|还|老)(?:是|在)?.{0,20}?[了]?/g,
60
+ /我(?:一直|反复|总是)(?:在|说|强调)?.{0,20}?[了]?/g,
61
+ /老(?:是|在|犯|忘)(?:了)?.{0,20}?[了]?/g,
62
+ /这(?:个|种)(?:问题|模式|错误).{0,20}?[.。!]?/g,
63
+ /(?:第[一二三四五六七八九十\d]+次|反复|重复)(?:说|提醒|强调).{0,20}?/g,
64
+ /不(?:要|能|想|愿意).{0,20}?老.{0,10}?[了]?/g,
65
+ /(?:补上|加上|记上|修复).{0,10}?[了吗??]?/g,
66
+ /(?:沉淀|监控|日志|记录).{0,5}?[了吗??]?/g,
67
+ ];
68
+ // ── N-gram stop words ──
69
+ const STOP_WORDS = new Set([
70
+ '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一',
71
+ '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着',
72
+ '没有', '看', '好', '自己', '这', '他', '她', '它', '们', '那',
73
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
74
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
75
+ 'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
76
+ 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
77
+ 'before', 'after', 'above', 'below', 'between', 'under', 'again',
78
+ 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why',
79
+ 'how', 'all', 'both', 'each', 'few', 'more', 'most', 'other', 'some',
80
+ 'such', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just',
81
+ '因为', '所以', '但是', '而且', '如果', '虽然', '可以', '这个', '那个',
82
+ '什么', '怎么', '哪', '吗', '吧', '呢', '啊', '嗯', '哦',
83
+ ]);
84
+ // ── Main ──
85
+ async function analyzeSessions(options) {
86
+ const transcriptDir = process.env.CLAUDE_TRANSCRIPTS_DIR
87
+ || path.join(os.homedir(), '.claude', 'projects', '-root--claude');
88
+ const memoryDir = path.join(os.homedir(), '.claude', 'projects', '-root-projects', 'memory');
89
+ const days = options.days || 7;
90
+ if (!fs.existsSync(transcriptDir)) {
91
+ console.log(chalk_1.default.yellow('No transcripts directory found'));
92
+ return;
93
+ }
94
+ // 1. Scan transcripts
95
+ const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
96
+ const sessions = findSessions(transcriptDir, cutoff);
97
+ if (sessions.length === 0) {
98
+ console.log(chalk_1.default.yellow(`No sessions found in the last ${days} days`));
99
+ return;
100
+ }
101
+ // 2. Extract corrections + N-grams
102
+ const corrections = extractCorrections(sessions);
103
+ const ngrams = extractNGrams(sessions, { minLen: 4, maxLen: 24, minFreq: 2 });
104
+ // 3. Load existing memory rules for gap detection
105
+ const existingRules = loadExistingRules(memoryDir);
106
+ // 4. Generate candidates
107
+ const candidates = generateCandidates(corrections, ngrams, existingRules);
108
+ // 5. Output
109
+ if (options.json) {
110
+ console.log(JSON.stringify({ sessions: sessions.length, corrections: corrections.length, candidates }, null, 2));
111
+ return;
112
+ }
113
+ console.log(chalk_1.default.blue(`🔍 Analyzing ${sessions.length} sessions (last ${days} days)...\n`));
114
+ printCorrectionSummary(corrections);
115
+ printCandidates(candidates, existingRules);
116
+ }
117
+ function findSessions(dir, cutoff) {
118
+ const sessions = [];
119
+ try {
120
+ for (const file of fs.readdirSync(dir)) {
121
+ if (!file.endsWith('.jsonl'))
122
+ continue;
123
+ const filePath = path.join(dir, file);
124
+ const stat = fs.statSync(filePath);
125
+ if (stat.mtimeMs < cutoff)
126
+ continue;
127
+ const turns = [];
128
+ const content = fs.readFileSync(filePath, 'utf-8');
129
+ for (const line of content.split('\n')) {
130
+ if (!line.trim())
131
+ continue;
132
+ try {
133
+ const entry = JSON.parse(line);
134
+ // Claude Code transcript format: { type: "user"|"assistant", message: { role, content } }
135
+ const msg = entry.message;
136
+ if (msg?.role && (msg.content || entry.type === 'user')) {
137
+ const text = typeof msg.content === 'string'
138
+ ? msg.content
139
+ : Array.isArray(msg.content)
140
+ ? msg.content.filter((b) => b.type === 'text').map((b) => b.text).join(' ')
141
+ : '';
142
+ turns.push({ role: msg.role, content: text });
143
+ }
144
+ }
145
+ catch { }
146
+ }
147
+ if (turns.length > 0) {
148
+ sessions.push({
149
+ id: file.replace('.jsonl', '').slice(0, 40),
150
+ date: stat.mtime.toISOString().slice(0, 10),
151
+ turns,
152
+ });
153
+ }
154
+ }
155
+ }
156
+ catch (e) {
157
+ // Directory might not exist
158
+ }
159
+ return sessions.sort((a, b) => b.date.localeCompare(a.date));
160
+ }
161
+ // ── Correction Extraction ──
162
+ function extractCorrections(sessions) {
163
+ const corrections = [];
164
+ for (const session of sessions) {
165
+ for (const turn of session.turns) {
166
+ if (turn.role !== 'user')
167
+ continue;
168
+ const text = stripCodeBlocks(turn.content);
169
+ for (const pattern of CORRECTION_PATTERNS) {
170
+ pattern.lastIndex = 0;
171
+ let match;
172
+ while ((match = pattern.exec(text)) !== null) {
173
+ const sentence = match[0].trim();
174
+ if (sentence.length > 3 && sentence.length < 200) {
175
+ corrections.push({
176
+ sentence,
177
+ sessionId: session.id,
178
+ timestamp: session.date,
179
+ });
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return corrections;
186
+ }
187
+ function extractNGrams(sessions, opts) {
188
+ const phraseMap = new Map();
189
+ for (const session of sessions) {
190
+ const userTexts = session.turns
191
+ .filter(t => t.role === 'user' && !t.content.startsWith('{') && !t.content.startsWith('[') && t.content.length > 10)
192
+ .map(t => stripCodeBlocks(t.content));
193
+ const combined = userTexts.join(' ');
194
+ // Extract meaningful word sequences (Chinese chars + meaningful words)
195
+ const words = tokenize(combined);
196
+ for (let n = 2; n <= 5; n++) {
197
+ for (let i = 0; i <= words.length - n; i++) {
198
+ const phrase = words.slice(i, i + n).join('');
199
+ const clean = phrase.replace(/[,。!?、;:""''()\s]/g, '');
200
+ if (clean.length < opts.minLen || clean.length > opts.maxLen)
201
+ continue;
202
+ if (/^\d+$/.test(clean))
203
+ continue;
204
+ if (STOP_WORDS.has(clean))
205
+ continue;
206
+ if (isPunctuation(clean))
207
+ continue;
208
+ const existing = phraseMap.get(clean) || { count: 0, sessions: new Set() };
209
+ existing.count++;
210
+ existing.sessions.add(session.id);
211
+ phraseMap.set(clean, existing);
212
+ }
213
+ }
214
+ }
215
+ // Filter by minimum frequency and sort
216
+ return Array.from(phraseMap.entries())
217
+ .filter(([, v]) => v.count >= opts.minFreq && v.sessions.size >= 2)
218
+ .map(([phrase, v]) => ({ phrase, frequency: v.count, sessions: Array.from(v.sessions) }))
219
+ .filter(r => !isCodeNoise(r.phrase) && hasSemanticContent(r.phrase))
220
+ .sort((a, b) => b.frequency - a.frequency || b.sessions.length - a.sessions.length);
221
+ }
222
+ function tokenize(text) {
223
+ const tokens = [];
224
+ let current = '';
225
+ const CN = /[\u4e00-\u9fff\u3400-\u4dbf]/;
226
+ for (const char of text) {
227
+ if (CN.test(char)) {
228
+ current += char;
229
+ }
230
+ else if (/[a-zA-Z0-9_\-/.]/.test(char)) {
231
+ current += char;
232
+ }
233
+ else {
234
+ pushToken(current, tokens, CN);
235
+ current = '';
236
+ }
237
+ }
238
+ pushToken(current, tokens, CN);
239
+ return tokens;
240
+ }
241
+ function pushToken(current, tokens, CN) {
242
+ if (current.length < 2)
243
+ return;
244
+ if (CN.test(current)) {
245
+ // Chinese: character bigrams + trigrams + the full sequence
246
+ for (let i = 0; i <= current.length - 2; i++) {
247
+ tokens.push(current.slice(i, i + 2));
248
+ }
249
+ for (let i = 0; i <= current.length - 3; i++) {
250
+ tokens.push(current.slice(i, i + 3));
251
+ }
252
+ if (current.length <= 6)
253
+ tokens.push(current); // keep short full sequences too
254
+ }
255
+ else {
256
+ tokens.push(current);
257
+ }
258
+ }
259
+ // ── Existing Rules ──
260
+ function isInExistingRules(concept, existingRules) {
261
+ const lower = concept.toLowerCase();
262
+ if (existingRules.has(lower))
263
+ return true;
264
+ // Partial match: concept appears in any rule name
265
+ for (const rule of existingRules) {
266
+ if (rule.includes(lower) || lower.includes(rule))
267
+ return true;
268
+ }
269
+ return false;
270
+ }
271
+ function loadExistingRules(memoryDir) {
272
+ const concepts = new Set();
273
+ try {
274
+ if (!fs.existsSync(memoryDir))
275
+ return concepts;
276
+ for (const file of fs.readdirSync(memoryDir)) {
277
+ if (!file.endsWith('.md'))
278
+ continue;
279
+ const content = fs.readFileSync(path.join(memoryDir, file), 'utf-8');
280
+ // Extract key concepts from rule titles
281
+ const titleMatch = content.match(/#\s+(.+)/);
282
+ if (titleMatch) {
283
+ const words = tokenize(titleMatch[1]);
284
+ for (const w of words) {
285
+ if (w.length >= 4)
286
+ concepts.add(w.toLowerCase());
287
+ }
288
+ }
289
+ }
290
+ }
291
+ catch { }
292
+ return concepts;
293
+ }
294
+ // ── Candidate Generation ──
295
+ function generateCandidates(corrections, ngrams, existingRules) {
296
+ const candidates = [];
297
+ // From corrections: cluster similar sentences
298
+ const correctionClusters = clusterCorrections(corrections);
299
+ for (const cluster of correctionClusters) {
300
+ // Must appear at least 3 times total
301
+ if (cluster.sentences.length < 3)
302
+ continue;
303
+ const concept = extractConcept(cluster.sentences);
304
+ if (isInExistingRules(concept, existingRules))
305
+ continue;
306
+ candidates.push({
307
+ pattern: concept,
308
+ frequency: cluster.sentences.length,
309
+ sessions: cluster.sessions,
310
+ source: 'correction',
311
+ confidence: Math.min(1, cluster.sentences.length / 10),
312
+ suggestedRule: `feedback_auto_${concept.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]/g, '_').slice(0, 40)}.md`,
313
+ });
314
+ }
315
+ // From N-grams: high-frequency concepts not in corrections
316
+ const correctionConcepts = new Set(correctionClusters.map(c => extractConcept(c.sentences).toLowerCase()));
317
+ for (const ng of ngrams) {
318
+ const concept = ng.phrase;
319
+ if (correctionConcepts.has(concept.toLowerCase()))
320
+ continue; // already covered
321
+ if (isInExistingRules(concept, existingRules))
322
+ continue;
323
+ if (ng.frequency < 2)
324
+ continue;
325
+ const crossSessionStrength = ng.sessions.length >= 2;
326
+ const highFreqSingle = ng.sessions.length === 1 && ng.frequency >= 4;
327
+ if (!crossSessionStrength && !highFreqSingle)
328
+ continue;
329
+ candidates.push({
330
+ pattern: concept,
331
+ frequency: ng.frequency,
332
+ sessions: ng.sessions,
333
+ source: 'ngram',
334
+ confidence: Math.min(1, ng.frequency / 10),
335
+ suggestedRule: `feedback_recurring_${concept.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]/g, '_').slice(0, 40)}.md`,
336
+ });
337
+ }
338
+ return candidates.sort((a, b) => b.confidence - a.confidence);
339
+ }
340
+ function clusterCorrections(corrections) {
341
+ const clusters = [];
342
+ const used = new Set();
343
+ for (let i = 0; i < corrections.length; i++) {
344
+ if (used.has(i))
345
+ continue;
346
+ const cluster = {
347
+ sentences: [corrections[i].sentence],
348
+ sessions: [corrections[i].sessionId],
349
+ };
350
+ used.add(i);
351
+ for (let j = i + 1; j < corrections.length; j++) {
352
+ if (used.has(j))
353
+ continue;
354
+ const similarity = jaccardSimilarity(corrections[i].sentence, corrections[j].sentence);
355
+ if (similarity > 0.3) {
356
+ cluster.sentences.push(corrections[j].sentence);
357
+ if (!cluster.sessions.includes(corrections[j].sessionId)) {
358
+ cluster.sessions.push(corrections[j].sessionId);
359
+ }
360
+ used.add(j);
361
+ }
362
+ }
363
+ clusters.push(cluster);
364
+ }
365
+ return clusters;
366
+ }
367
+ function extractConcept(sentences) {
368
+ // Take the longest sentence and extract the noun phrase after the correction marker
369
+ const longest = sentences.reduce((a, b) => a.length > b.length ? a : b, '');
370
+ // Remove correction patterns, keep the concept
371
+ const cleaned = longest
372
+ .replace(/你(?:又|还是)(?:在)?(?:犯|忘|没|不)/g, '')
373
+ .replace(/我不是(?:说|让|让做|讲)[了过]?/g, '')
374
+ .replace(/怎么(?:又|还|老)(?:是|在)?/g, '')
375
+ .replace(/我(?:一直|反复|总是)(?:在|说|强调)?/g, '')
376
+ .replace(/老(?:是|在|犯|忘)(?:了)?/g, '')
377
+ .replace(/[,。!?、;:""''()\s]+/g, '')
378
+ .trim();
379
+ return cleaned.slice(0, 60) || longest.slice(0, 60);
380
+ }
381
+ // ── Output ──
382
+ function printCorrectionSummary(corrections) {
383
+ if (corrections.length === 0) {
384
+ console.log(chalk_1.default.green('No correction patterns found'));
385
+ return;
386
+ }
387
+ console.log(chalk_1.default.yellow(`📢 ${corrections.length} correction signals detected\n`));
388
+ }
389
+ function printCandidates(candidates, existingRules) {
390
+ if (candidates.length === 0) {
391
+ console.log(chalk_1.default.green('✅ No new pattern candidates — all recurring concepts already have rules\n'));
392
+ return;
393
+ }
394
+ console.log(chalk_1.default.bold('🔔 Pattern Candidates (suggested rules)\n'));
395
+ const topK = candidates.slice(0, 10);
396
+ for (const c of topK) {
397
+ const icon = c.source === 'correction' ? '🔴' : '🟡';
398
+ const confBar = '█'.repeat(Math.round(c.confidence * 10)) + '░'.repeat(10 - Math.round(c.confidence * 10));
399
+ console.log(chalk_1.default.bold(`${icon} ${c.pattern}`));
400
+ console.log(chalk_1.default.gray(` Source: ${c.source} | Freq: ${c.frequency} | Sessions: ${c.sessions.length} | Confidence: ${confBar}`));
401
+ console.log(chalk_1.default.cyan(` → Rule: ${c.suggestedRule}`));
402
+ console.log();
403
+ }
404
+ if (candidates.length > 10) {
405
+ console.log(chalk_1.default.gray(`... and ${candidates.length - 10} more candidates. Run with --json for full list.`));
406
+ }
407
+ }
408
+ // ── Utilities ──
409
+ function stripCodeBlocks(text) {
410
+ return text
411
+ .replace(/```[\s\S]*?```/g, '')
412
+ .replace(/`[^`]+`/g, '')
413
+ .replace(/\{[^{}]*"[^"]+"\s*:\s*"[^"]*"[^}]*\}/g, '') // strip JSON objects
414
+ .replace(/\[[\s\S]*?\]/g, '') // strip JSON arrays
415
+ .replace(/\\n/g, ' ') // strip escaped newlines
416
+ .replace(/[{}[\]"':,\\]+/g, ' '); // strip JSON punctuation
417
+ }
418
+ function hasSemanticContent(phrase) {
419
+ // Must contain Chinese characters or be a meaningful English word (≥7 chars)
420
+ if (/[\u4e00-\u9fff]/.test(phrase))
421
+ return true;
422
+ if (phrase.length >= 7 && /^[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z]$/.test(phrase))
423
+ return true;
424
+ return false;
425
+ }
426
+ function isCodeNoise(phrase) {
427
+ // Pure Latin chars without Chinese → likely JSON/code artifact
428
+ if (!/[\u4e00-\u9fff]/.test(phrase) && phrase.length <= 6)
429
+ return true;
430
+ // Common JSON field name fragments
431
+ if (/^(?:clla|cood|odde|oppe|laaw|peen|enne|ennc|ddec|deco|ecod|code|type|role|name|text|file|path|tool|user|session)$/i.test(phrase))
432
+ return true;
433
+ return false;
434
+ }
435
+ function isPunctuation(str) {
436
+ return /^[,。!?、;:""''()\[\]【】「」『』《》〈〉\s]+$/.test(str);
437
+ }
438
+ function jaccardSimilarity(a, b) {
439
+ const setA = new Set(tokenize(a));
440
+ const setB = new Set(tokenize(b));
441
+ const intersection = new Set([...setA].filter(x => setB.has(x)));
442
+ const union = new Set([...setA, ...setB]);
443
+ return union.size === 0 ? 0 : intersection.size / union.size;
444
+ }
445
+ //# sourceMappingURL=analyze-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-sessions.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Diagnose CLI 命令
3
+ *
4
+ * 运行诊断分析异常
5
+ */
6
+ /**
7
+ * diagnose 命令
8
+ */
9
+ export declare function diagnoseCommand(subcommand: string, options: {
10
+ hours?: number;
11
+ constraintId?: string;
12
+ anomalyId?: string;
13
+ format?: 'json' | 'text';
14
+ save?: boolean;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diagnose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Bf"}