@dommaker/harness 0.12.5 → 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 (64) 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/index.d.ts +5 -1
  11. package/dist/cli/commands/index.d.ts.map +1 -1
  12. package/dist/cli/commands/index.js +12 -1
  13. package/dist/cli/commands/index.js.map +1 -1
  14. package/dist/cli/commands/init.js +28 -6
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/knowledge.d.ts +23 -0
  17. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  18. package/dist/cli/commands/knowledge.js +164 -0
  19. package/dist/cli/commands/knowledge.js.map +1 -1
  20. package/dist/cli/commands/posteval-plan.d.ts +11 -0
  21. package/dist/cli/commands/posteval-plan.d.ts.map +1 -0
  22. package/dist/cli/commands/posteval-plan.js +76 -0
  23. package/dist/cli/commands/posteval-plan.js.map +1 -0
  24. package/dist/cli/commands/release.d.ts +13 -0
  25. package/dist/cli/commands/release.d.ts.map +1 -0
  26. package/dist/cli/commands/release.js +175 -0
  27. package/dist/cli/commands/release.js.map +1 -0
  28. package/dist/cli/commands/update-user-model.d.ts +21 -0
  29. package/dist/cli/commands/update-user-model.d.ts.map +1 -0
  30. package/dist/cli/commands/update-user-model.js +475 -0
  31. package/dist/cli/commands/update-user-model.js.map +1 -0
  32. package/dist/core/constraints/index.d.ts +1 -0
  33. package/dist/core/constraints/index.d.ts.map +1 -1
  34. package/dist/core/constraints/index.js +4 -1
  35. package/dist/core/constraints/index.js.map +1 -1
  36. package/dist/core/constraints/prompt-injection.d.ts +13 -0
  37. package/dist/core/constraints/prompt-injection.d.ts.map +1 -0
  38. package/dist/core/constraints/prompt-injection.js +67 -0
  39. package/dist/core/constraints/prompt-injection.js.map +1 -0
  40. package/dist/knowledge/doctor.d.ts +37 -0
  41. package/dist/knowledge/doctor.d.ts.map +1 -0
  42. package/dist/knowledge/doctor.js +81 -0
  43. package/dist/knowledge/doctor.js.map +1 -0
  44. package/dist/knowledge/index.d.ts +1 -0
  45. package/dist/knowledge/index.d.ts.map +1 -1
  46. package/dist/knowledge/index.js +3 -1
  47. package/dist/knowledge/index.js.map +1 -1
  48. package/dist/knowledge/ingest.js +1 -1
  49. package/dist/knowledge/ingest.js.map +1 -1
  50. package/dist/knowledge/lifecycle.d.ts +4 -2
  51. package/dist/knowledge/lifecycle.d.ts.map +1 -1
  52. package/dist/knowledge/lifecycle.js +18 -3
  53. package/dist/knowledge/lifecycle.js.map +1 -1
  54. package/dist/knowledge/lint.d.ts +16 -0
  55. package/dist/knowledge/lint.d.ts.map +1 -1
  56. package/dist/knowledge/lint.js +84 -0
  57. package/dist/knowledge/lint.js.map +1 -1
  58. package/dist/knowledge/query.d.ts +3 -1
  59. package/dist/knowledge/query.d.ts.map +1 -1
  60. package/dist/knowledge/query.js +11 -1
  61. package/dist/knowledge/query.js.map +1 -1
  62. package/dist/knowledge/types.d.ts +2 -2
  63. package/dist/knowledge/types.d.ts.map +1 -1
  64. package/package.json +1 -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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"}
@@ -16,6 +16,10 @@ export { contract, validateSchema, type ContractOptions } from './contract';
16
16
  export { review, reviewStatus, type ReviewOptions } from './review';
17
17
  export { executeCommand, type CommandCheckOptions } from './command';
18
18
  export { syncDocs, type SyncDocsOptions } from './sync-docs';
19
- export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, type KnowledgeOptions } from './knowledge';
19
+ export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, knowledgeUpsert, knowledgeSyncStatus, knowledgeSyncRag, type KnowledgeOptions, type KnowledgeUpsertOptions } from './knowledge';
20
20
  export { failureList, failureStats, failureClear, type FailureOptions } from './failure';
21
+ export { postevalPlan, type PostEvalPlanOptions } from './posteval-plan';
22
+ export { release, type ReleaseOptions } from './release';
23
+ export { analyzeSessions, type AnalyzeSessionsOptions } from './analyze-sessions';
24
+ export { updateUserModel, type UpdateUserModelOptions } from './update-user-model';
21
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrI,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1N,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * CLI 命令导出
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
6
+ exports.updateUserModel = exports.analyzeSessions = exports.release = exports.postevalPlan = exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeSyncRag = exports.knowledgeSyncStatus = exports.knowledgeUpsert = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
7
7
  var check_1 = require("./check");
8
8
  Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
9
9
  Object.defineProperty(exports, "listLaws", { enumerable: true, get: function () { return check_1.listLaws; } });
@@ -49,8 +49,19 @@ Object.defineProperty(exports, "knowledgeSearch", { enumerable: true, get: funct
49
49
  Object.defineProperty(exports, "knowledgeImport", { enumerable: true, get: function () { return knowledge_1.knowledgeImport; } });
50
50
  Object.defineProperty(exports, "knowledgeDecay", { enumerable: true, get: function () { return knowledge_1.knowledgeDecay; } });
51
51
  Object.defineProperty(exports, "knowledgeStats", { enumerable: true, get: function () { return knowledge_1.knowledgeStats; } });
52
+ Object.defineProperty(exports, "knowledgeUpsert", { enumerable: true, get: function () { return knowledge_1.knowledgeUpsert; } });
53
+ Object.defineProperty(exports, "knowledgeSyncStatus", { enumerable: true, get: function () { return knowledge_1.knowledgeSyncStatus; } });
54
+ Object.defineProperty(exports, "knowledgeSyncRag", { enumerable: true, get: function () { return knowledge_1.knowledgeSyncRag; } });
52
55
  var failure_1 = require("./failure");
53
56
  Object.defineProperty(exports, "failureList", { enumerable: true, get: function () { return failure_1.failureList; } });
54
57
  Object.defineProperty(exports, "failureStats", { enumerable: true, get: function () { return failure_1.failureStats; } });
55
58
  Object.defineProperty(exports, "failureClear", { enumerable: true, get: function () { return failure_1.failureClear; } });
59
+ var posteval_plan_1 = require("./posteval-plan");
60
+ Object.defineProperty(exports, "postevalPlan", { enumerable: true, get: function () { return posteval_plan_1.postevalPlan; } });
61
+ var release_1 = require("./release");
62
+ Object.defineProperty(exports, "release", { enumerable: true, get: function () { return release_1.release; } });
63
+ var analyze_sessions_1 = require("./analyze-sessions");
64
+ Object.defineProperty(exports, "analyzeSessions", { enumerable: true, get: function () { return analyze_sessions_1.analyzeSessions; } });
65
+ var update_user_model_1 = require("./update-user-model");
66
+ Object.defineProperty(exports, "updateUserModel", { enumerable: true, get: function () { return update_user_model_1.updateUserModel; } });
56
67
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,yCAAqI;AAA5H,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AACxF,qCAAyF;AAAhF,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,uGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,yCAA0N;AAAjN,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAChJ,qCAAyF;AAAhF,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,uGAAA,YAAY,OAAA;AAChD,iDAAyE;AAAhE,6GAAA,YAAY,OAAA;AACrB,qCAAyD;AAAhD,kGAAA,OAAO,OAAA;AAChB,uDAAkF;AAAzE,mHAAA,eAAe,OAAA;AACxB,yDAAmF;AAA1E,oHAAA,eAAe,OAAA"}
@@ -260,12 +260,18 @@ if [ $? -ne 0 ]; then
260
260
  exit 1
261
261
  fi
262
262
 
263
- # 覆盖率检查(仅检查变更文件)
264
- if command -v npm &> /dev/null; then
265
- npm test -- --coverage --coverageThreshold='{"global":{"lines":85}}' --passWithNoTests
266
- if [ $? -ne 0 ]; then
267
- echo "❌ Coverage below 85% threshold"
268
- exit 1
263
+ # Plan coverage check (via PostEval)
264
+ STAGED=$(git diff --cached --name-only --diff-filter=ACMR 2>/dev/null || true)
265
+ if command -v npx > /dev/null 2>&1; then
266
+ PLAN_FILES=$(echo "$STAGED" | grep -E 'plans/.*\.md$|\.plan\.md$' || true)
267
+ if [ -n "$PLAN_FILES" ]; then
268
+ echo "📋 Checking plan coverage..."
269
+ for plan in $PLAN_FILES; do
270
+ npx harness posteval-plan "$plan" || {
271
+ echo "🛑 Plan coverage incomplete. See above for missed items."
272
+ exit 1
273
+ }
274
+ done
269
275
  fi
270
276
  fi
271
277
  `;
@@ -315,6 +321,8 @@ async function setupGitHooks(projectPath) {
315
321
 
316
322
  echo "🔍 Running harness checks..."
317
323
 
324
+ STAGED=$(git diff --cached --name-only --diff-filter=ACMR 2>/dev/null || true)
325
+
318
326
  # 铁律检查
319
327
  npx harness check --staged
320
328
  if [ $? -ne 0 ]; then
@@ -322,6 +330,20 @@ if [ $? -ne 0 ]; then
322
330
  exit 1
323
331
  fi
324
332
 
333
+ # Plan coverage check (via PostEval)
334
+ if command -v npx > /dev/null 2>&1; then
335
+ PLAN_FILES=$(echo "$STAGED" | grep -E 'plans/.*\\.md$|\\.plan\\.md$' || true)
336
+ if [ -n "$PLAN_FILES" ]; then
337
+ echo "📋 Checking plan coverage..."
338
+ for plan in $PLAN_FILES; do
339
+ npx harness posteval-plan "$plan" || {
340
+ echo "🛑 Plan coverage incomplete. See above for missed items."
341
+ exit 1
342
+ }
343
+ done
344
+ fi
345
+ fi
346
+
325
347
  echo "✅ All checks passed"
326
348
  `;
327
349
  await fs.writeFile(preCommitPath, preCommitContent, 'utf-8');