@dommaker/harness 1.5.0 → 1.6.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 (208) hide show
  1. package/CHANGELOG.md +11 -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 +0 -125
  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 -19
  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 +46 -16
  87. package/src/__tests__/trace-analyzer.test.ts +52 -2
  88. package/src/cli/commands/CONTEXT.md +3 -2
  89. package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +70 -0
  90. package/src/cli/commands/__tests__/passes-gate.test.ts +7 -3
  91. package/src/cli/commands/__tests__/performance.test.ts +5 -16
  92. package/src/cli/commands/__tests__/registry.test.ts +46 -3
  93. package/src/cli/commands/__tests__/report-extra.test.ts +0 -19
  94. package/src/cli/commands/__tests__/report-false-green.test.ts +46 -0
  95. package/src/cli/commands/__tests__/report.test.ts +0 -20
  96. package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +68 -0
  97. package/src/cli/commands/__tests__/status-extra.test.ts +63 -116
  98. package/src/cli/commands/__tests__/status.test.ts +66 -148
  99. package/src/cli/commands/definitions.ts +1 -32
  100. package/src/cli/commands/passes-gate.ts +0 -3
  101. package/src/cli/commands/performance.ts +13 -27
  102. package/src/cli/commands/report.ts +3 -61
  103. package/src/cli/commands/status.ts +5 -10
  104. package/src/context/CONTEXT.md +2 -3
  105. package/src/context/__tests__/token-budget.test.ts +1 -81
  106. package/src/context/index.ts +2 -7
  107. package/src/context/token-budget.ts +0 -73
  108. package/src/context/types.ts +0 -9
  109. package/src/core/CONTEXT.md +5 -6
  110. package/src/core/constraints/__tests__/collect-constraints.test.ts +66 -0
  111. package/src/core/constraints/checker.ts +33 -2
  112. package/src/core/constraints/git-evidence.ts +6 -3
  113. package/src/core/index.ts +0 -11
  114. package/src/core/spec/__tests__/validator.test.ts +24 -0
  115. package/src/core/spec/validator.ts +9 -10
  116. package/src/core/validators/__tests__/passes-gate.test.ts +2 -9
  117. package/src/core/validators/index.ts +0 -1
  118. package/src/core/validators/passes-gate.ts +1 -149
  119. package/src/failure/CONTEXT.md +8 -6
  120. package/src/failure/index.ts +0 -10
  121. package/src/gates/CONTEXT.md +3 -2
  122. package/src/gates/__tests__/performance.test.ts +6 -74
  123. package/src/gates/definitions.ts +0 -4
  124. package/src/gates/performance.ts +9 -111
  125. package/src/gates/types.ts +2 -8
  126. package/src/index.ts +1 -36
  127. package/src/knowledge/CONTEXT.md +1 -2
  128. package/src/knowledge/index.ts +0 -1
  129. package/src/monitoring/CONTEXT.md +2 -2
  130. package/src/monitoring/trace-analyzer.ts +160 -126
  131. package/src/types/passes-gate.ts +0 -26
  132. package/src/utils/__tests__/jsonl-skip-disposition.test.ts +0 -1
  133. package/dist/cli/commands/analyze-sessions.d.ts +0 -20
  134. package/dist/cli/commands/analyze-sessions.d.ts.map +0 -1
  135. package/dist/cli/commands/analyze-sessions.js +0 -290
  136. package/dist/cli/commands/analyze-sessions.js.map +0 -1
  137. package/dist/cli/commands/update-user-model.d.ts +0 -30
  138. package/dist/cli/commands/update-user-model.d.ts.map +0 -1
  139. package/dist/cli/commands/update-user-model.js +0 -406
  140. package/dist/cli/commands/update-user-model.js.map +0 -1
  141. package/dist/cli/session-mining/corrections.d.ts +0 -17
  142. package/dist/cli/session-mining/corrections.d.ts.map +0 -1
  143. package/dist/cli/session-mining/corrections.js +0 -58
  144. package/dist/cli/session-mining/corrections.js.map +0 -1
  145. package/dist/cli/session-mining/index.d.ts +0 -13
  146. package/dist/cli/session-mining/index.d.ts.map +0 -1
  147. package/dist/cli/session-mining/index.js +0 -29
  148. package/dist/cli/session-mining/index.js.map +0 -1
  149. package/dist/cli/session-mining/text.d.ts +0 -31
  150. package/dist/cli/session-mining/text.d.ts.map +0 -1
  151. package/dist/cli/session-mining/text.js +0 -126
  152. package/dist/cli/session-mining/text.js.map +0 -1
  153. package/dist/cli/session-mining/transcript.d.ts +0 -34
  154. package/dist/cli/session-mining/transcript.d.ts.map +0 -1
  155. package/dist/cli/session-mining/transcript.js +0 -130
  156. package/dist/cli/session-mining/transcript.js.map +0 -1
  157. package/dist/context/compaction.d.ts +0 -57
  158. package/dist/context/compaction.d.ts.map +0 -1
  159. package/dist/context/compaction.js +0 -165
  160. package/dist/context/compaction.js.map +0 -1
  161. package/dist/core/session/clean-state.d.ts +0 -17
  162. package/dist/core/session/clean-state.d.ts.map +0 -1
  163. package/dist/core/session/clean-state.js +0 -192
  164. package/dist/core/session/clean-state.js.map +0 -1
  165. package/dist/core/session/index.d.ts +0 -6
  166. package/dist/core/session/index.d.ts.map +0 -1
  167. package/dist/core/session/index.js +0 -15
  168. package/dist/core/session/index.js.map +0 -1
  169. package/dist/core/session/startup.d.ts +0 -47
  170. package/dist/core/session/startup.d.ts.map +0 -1
  171. package/dist/core/session/startup.js +0 -263
  172. package/dist/core/session/startup.js.map +0 -1
  173. package/dist/failure/constraint-handler.d.ts +0 -83
  174. package/dist/failure/constraint-handler.d.ts.map +0 -1
  175. package/dist/failure/constraint-handler.js +0 -138
  176. package/dist/failure/constraint-handler.js.map +0 -1
  177. package/dist/knowledge/lifecycle-hooks.d.ts +0 -62
  178. package/dist/knowledge/lifecycle-hooks.d.ts.map +0 -1
  179. package/dist/knowledge/lifecycle-hooks.js +0 -143
  180. package/dist/knowledge/lifecycle-hooks.js.map +0 -1
  181. package/dist/types/session.d.ts +0 -113
  182. package/dist/types/session.d.ts.map +0 -1
  183. package/dist/types/session.js +0 -6
  184. package/dist/types/session.js.map +0 -1
  185. package/src/__tests__/clean-state-extra.test.ts +0 -301
  186. package/src/__tests__/clean-state.test.ts +0 -169
  187. package/src/__tests__/constraint-handler.test.ts +0 -132
  188. package/src/__tests__/passes-gate-extra.test.ts +0 -93
  189. package/src/__tests__/session-startup.test.ts +0 -334
  190. package/src/cli/commands/__tests__/analyze-sessions.test.ts +0 -184
  191. package/src/cli/commands/__tests__/update-user-model.test.ts +0 -268
  192. package/src/cli/commands/analyze-sessions.ts +0 -335
  193. package/src/cli/commands/update-user-model.ts +0 -476
  194. package/src/cli/session-mining/__tests__/transcript.test.ts +0 -118
  195. package/src/cli/session-mining/corrections.ts +0 -56
  196. package/src/cli/session-mining/index.ts +0 -13
  197. package/src/cli/session-mining/text.ts +0 -117
  198. package/src/cli/session-mining/transcript.ts +0 -125
  199. package/src/context/__tests__/compaction.test.ts +0 -169
  200. package/src/context/compaction.ts +0 -201
  201. package/src/core/session/__tests__/startup.test.ts +0 -281
  202. package/src/core/session/clean-state.ts +0 -178
  203. package/src/core/session/index.ts +0 -15
  204. package/src/core/session/startup.ts +0 -253
  205. package/src/failure/constraint-handler.ts +0 -171
  206. package/src/knowledge/__tests__/lifecycle-hooks.test.ts +0 -140
  207. package/src/knowledge/lifecycle-hooks.ts +0 -202
  208. package/src/types/session.ts +0 -132
@@ -1,406 +0,0 @@
1
- "use strict";
2
- /**
3
- * harness update-user-model — 用户模型持续演化引擎
4
- *
5
- * 不依赖固定规则快照。每天从最新数据中提取增量信号,
6
- * 对比昨天状态,输出变化,更新模型。
7
- *
8
- * 数据源:
9
- * ~/.claude/projects/-root--claude/*.jsonl (对话)
10
- * /tmp/claude-knowledge-hooks.log (行为信号)
11
- * studio/.harness/knowledge/ (知识新鲜度)
12
- * ~/.claude/projects/-root-projects/memory/ (规则库)
13
- *
14
- * 模型状态: $HARNESS_UUM_STATE_FILE,默认 ~/.claude/user-model-state.json
15
- * 画像输出: $HARNESS_UUM_PROFILE_FILE,默认 ~/.claude/projects/-root-projects/memory/user_profile.md
16
- *
17
- * 工单 19-C:transcript 解析/纠正模式/相似度收敛至 cli/session-mining/。
18
- */
19
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- var desc = Object.getOwnPropertyDescriptor(m, k);
22
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
- desc = { enumerable: true, get: function() { return m[k]; } };
24
- }
25
- Object.defineProperty(o, k2, desc);
26
- }) : (function(o, m, k, k2) {
27
- if (k2 === undefined) k2 = k;
28
- o[k2] = m[k];
29
- }));
30
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
- Object.defineProperty(o, "default", { enumerable: true, value: v });
32
- }) : function(o, v) {
33
- o["default"] = v;
34
- });
35
- var __importStar = (this && this.__importStar) || (function () {
36
- var ownKeys = function(o) {
37
- ownKeys = Object.getOwnPropertyNames || function (o) {
38
- var ar = [];
39
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
- return ar;
41
- };
42
- return ownKeys(o);
43
- };
44
- return function (mod) {
45
- if (mod && mod.__esModule) return mod;
46
- var result = {};
47
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
- __setModuleDefault(result, mod);
49
- return result;
50
- };
51
- })();
52
- var __importDefault = (this && this.__importDefault) || function (mod) {
53
- return (mod && mod.__esModule) ? mod : { "default": mod };
54
- };
55
- Object.defineProperty(exports, "__esModule", { value: true });
56
- exports.resolveUserModelPaths = resolveUserModelPaths;
57
- exports.updateUserModel = updateUserModel;
58
- const chalk_1 = __importDefault(require("chalk"));
59
- const fs = __importStar(require("fs"));
60
- const path = __importStar(require("path"));
61
- const os = __importStar(require("os"));
62
- const session_mining_1 = require("../session-mining");
63
- const command_contract_1 = require("../command-contract");
64
- function resolveUserModelPaths(env = process.env) {
65
- const home = os.homedir();
66
- return {
67
- stateFile: env.HARNESS_UUM_STATE_FILE
68
- || path.join(home, '.claude', 'user-model-state.json'),
69
- profileFile: env.HARNESS_UUM_PROFILE_FILE
70
- || path.join(home, '.claude', 'projects', '-root-projects', 'memory', 'user_profile.md'),
71
- };
72
- }
73
- async function updateUserModel(options, io = command_contract_1.processIO) {
74
- const transcriptDir = process.env.CLAUDE_TRANSCRIPTS_DIR
75
- || path.join(os.homedir(), '.claude', 'projects', '-root--claude');
76
- // 1. Load previous state
77
- const paths = resolveUserModelPaths();
78
- const state = loadState(paths);
79
- // 2. Scan new data
80
- const newSessions = findNewSessions(transcriptDir, state.sessionsProcessed, options.days);
81
- if (newSessions.length === 0) {
82
- (0, command_contract_1.log)(io, chalk_1.default.gray('No new sessions to process'));
83
- return { kind: 'skip', reason: '没有新会话可处理' };
84
- }
85
- // 3. Extract signals from new data
86
- const signals = extractSignals(newSessions);
87
- // 4. Build concept clusters (semantic dedup)
88
- const mergedConcepts = buildMergedConcepts(signals);
89
- // 5. Diff against previous state → find changes
90
- const changes = diffState(state, mergedConcepts, signals);
91
- // 6. Update state
92
- if (!options.dryRun) {
93
- for (const sid of newSessions.map(s => s.id)) {
94
- if (!state.sessionsProcessed.includes(sid)) {
95
- state.sessionsProcessed.push(sid);
96
- }
97
- }
98
- applySignals(state, signals, mergedConcepts);
99
- state.lastUpdated = new Date().toISOString();
100
- if (state.sessionsProcessed.length > 200) {
101
- state.sessionsProcessed = state.sessionsProcessed.slice(-200);
102
- }
103
- saveState(state, paths);
104
- updateProfile(state, paths);
105
- }
106
- // 6. Output
107
- if (options.json) {
108
- (0, command_contract_1.log)(io, JSON.stringify({ newSessions: newSessions.length, changes }, null, 2));
109
- return { kind: 'ok' };
110
- }
111
- (0, command_contract_1.log)(io, chalk_1.default.blue(`📊 Processed ${newSessions.length} new sessions\n`));
112
- printChanges(changes, signals, io);
113
- return { kind: 'ok' };
114
- }
115
- // ── State I/O ──
116
- function loadState(paths) {
117
- try {
118
- if (fs.existsSync(paths.stateFile)) {
119
- return JSON.parse(fs.readFileSync(paths.stateFile, 'utf-8'));
120
- }
121
- }
122
- catch { }
123
- return {
124
- lastUpdated: new Date(0).toISOString(),
125
- sessionsProcessed: [],
126
- patterns: {},
127
- lensWeights: {},
128
- principleWeights: {},
129
- evolutionLog: [],
130
- };
131
- }
132
- function saveState(state, paths) {
133
- try {
134
- const dir = path.dirname(paths.stateFile);
135
- if (!fs.existsSync(dir))
136
- fs.mkdirSync(dir, { recursive: true });
137
- fs.writeFileSync(paths.stateFile, JSON.stringify(state, null, 2), 'utf-8');
138
- }
139
- catch { }
140
- }
141
- function findNewSessions(dir, processed, days) {
142
- // 过滤下推 seam(harness#112):excludeIds 走文件名、since 走 stat,未命中不 parse
143
- const filter = { excludeIds: processed };
144
- // 「最近 N 天」:自然日窗口(含今天)。days<=0 视为不过滤,与缺省一致。
145
- // date 是 mtime 的 UTC 日,date >= cutoff ⟺ mtimeMs >= cutoff 日 UTC 零点
146
- if (days !== undefined && days > 0) {
147
- const cutoff = new Date(Date.now() - (days - 1) * 86_400_000)
148
- .toISOString()
149
- .slice(0, 10);
150
- filter.since = Date.parse(cutoff);
151
- }
152
- const sessions = (0, session_mining_1.readTranscriptSessions)(dir, filter);
153
- sessions.sort((a, b) => a.date.localeCompare(b.date));
154
- return sessions.map(s => ({
155
- id: s.id,
156
- date: s.date,
157
- userText: s.turns.filter(t => t.role === 'user').map(t => t.content).join('\n'),
158
- assistantText: s.turns.filter(t => t.role === 'assistant').map(t => t.content).join('\n'),
159
- toolCalls: s.toolCalls,
160
- }));
161
- }
162
- function extractCorrectionConcepts(userText) {
163
- const concepts = [];
164
- for (const sentence of (0, session_mining_1.extractCorrectionMatches)(userText)) {
165
- const cleaned = (0, session_mining_1.cleanCorrectionConcept)(sentence);
166
- if (cleaned.length >= 4 && cleaned.length <= 60)
167
- concepts.push(cleaned);
168
- }
169
- return [...new Set(concepts)];
170
- }
171
- // ── Semantic clustering ──
172
- function clusterConcepts(agg) {
173
- const entries = Object.entries(agg).filter(([k]) => k.length >= 4);
174
- if (entries.length <= 1)
175
- return agg;
176
- const merged = {};
177
- const used = new Set();
178
- for (let i = 0; i < entries.length; i++) {
179
- if (used.has(i))
180
- continue;
181
- const [concept, data] = entries[i];
182
- let clusterName = concept;
183
- let clusterCount = data.count;
184
- const clusterSessions = new Set(data.sessions);
185
- used.add(i);
186
- for (let j = i + 1; j < entries.length; j++) {
187
- if (used.has(j))
188
- continue;
189
- const [other, otherData] = entries[j];
190
- const sim = (0, session_mining_1.jaccardChinese)(concept, other);
191
- if (sim > 0.5) {
192
- clusterCount += otherData.count;
193
- for (const s of otherData.sessions)
194
- clusterSessions.add(s);
195
- // Use the shorter name as cluster label
196
- if (other.length < clusterName.length)
197
- clusterName = other;
198
- used.add(j);
199
- }
200
- }
201
- merged[clusterName] = { count: clusterCount, sessions: [...clusterSessions] };
202
- }
203
- return merged;
204
- }
205
- function extractSignals(sessions) {
206
- return sessions.map(s => {
207
- const correctionPhrases = extractCorrectionConcepts(s.userText);
208
- // Concept extraction (Chinese char N-grams, etc.)
209
- const concepts = {};
210
- const cleanText = s.userText
211
- .replace(/```[\s\S]*?```/g, '')
212
- .replace(/\{[^{}]*\}/g, '')
213
- .replace(/[{}[\]"':,\\]+/g, ' ');
214
- let cnSeq = '';
215
- for (const char of cleanText) {
216
- if (/[\u4e00-\u9fff]/.test(char)) {
217
- cnSeq += char;
218
- }
219
- else {
220
- if (cnSeq.length >= 4)
221
- concepts[cnSeq] = (concepts[cnSeq] || 0) + 1;
222
- cnSeq = '';
223
- }
224
- }
225
- if (cnSeq.length >= 4)
226
- concepts[cnSeq] = (concepts[cnSeq] || 0) + 1;
227
- // Tool patterns
228
- const toolPatterns = {};
229
- for (const t of s.toolCalls) {
230
- toolPatterns[t] = (toolPatterns[t] || 0) + 1;
231
- }
232
- return {
233
- sessionId: s.id,
234
- date: s.date,
235
- correctionPhrases,
236
- concepts,
237
- toolPatterns,
238
- sessionDuration: s.userText.length + s.assistantText.length, // proxy
239
- turnCount: (s.userText.match(/\n/g) || []).length,
240
- deepAnalysis: s.toolCalls.includes('EnterPlanMode') || s.toolCalls.includes('Agent'),
241
- knowledgeCaptured: s.toolCalls.includes('Write') && (s.assistantText.includes('.harness/knowledge-docs/') ||
242
- s.assistantText.includes('.harness/knowledge/')),
243
- };
244
- });
245
- }
246
- function buildMergedConcepts(signals) {
247
- const agg = {};
248
- for (const sig of signals) {
249
- for (const [concept, count] of Object.entries(sig.concepts)) {
250
- if (!agg[concept])
251
- agg[concept] = { count: 0, sessions: [] };
252
- agg[concept].count += count;
253
- if (!agg[concept].sessions.includes(sig.sessionId)) {
254
- agg[concept].sessions.push(sig.sessionId);
255
- }
256
- }
257
- for (const phrase of sig.correctionPhrases) {
258
- if (phrase.length < 4)
259
- continue;
260
- if (!agg[phrase])
261
- agg[phrase] = { count: 0, sessions: [] };
262
- agg[phrase].count += 3;
263
- if (!agg[phrase].sessions.includes(sig.sessionId)) {
264
- agg[phrase].sessions.push(sig.sessionId);
265
- }
266
- }
267
- }
268
- return clusterConcepts(agg);
269
- }
270
- function diffState(state, mergedConcepts, signals) {
271
- const changes = [];
272
- // Detect new/rising/falling/gone concepts (from merged clusters)
273
- for (const [concept, agg] of Object.entries(mergedConcepts)) {
274
- const existing = state.patterns[concept];
275
- if (!existing) {
276
- if (agg.sessions.length >= 2) {
277
- changes.push({ type: 'new_pattern', key: concept, detail: `Appeared in ${agg.sessions.length} sessions` });
278
- }
279
- }
280
- else if (existing.trend === 'gone' || existing.trend === 'falling') {
281
- changes.push({ type: 'rising', key: concept, detail: `Re-emerged after being ${existing.trend}` });
282
- }
283
- }
284
- // Detect lens weight shifts (from correction patterns)
285
- const totalCorrections = signals.reduce((sum, s) => sum + s.correctionPhrases.length, 0);
286
- if (totalCorrections >= 3) {
287
- changes.push({ type: 'lens_shift', key: 'completeness',
288
- detail: `${totalCorrections} corrections in these sessions — completeness lens may need weight increase` });
289
- }
290
- return changes;
291
- }
292
- function applySignals(state, signals, mergedConcepts) {
293
- const now = new Date().toISOString().slice(0, 10);
294
- // Update patterns from merged concept clusters
295
- // occurrences 唯一来源:mergedConcepts 聚合值(含 correction phrase 的 ×3 加权,
296
- // 见 buildMergedConcepts)。不再叠加 per-session 原始 count —— 那是 #113 裁决的双计 bug。
297
- for (const [concept, agg] of Object.entries(mergedConcepts)) {
298
- if (!state.patterns[concept]) {
299
- state.patterns[concept] = {
300
- firstSeen: now, occurrences: 0, sessions: [], trend: 'new', lastSeen: now,
301
- };
302
- }
303
- const p = state.patterns[concept];
304
- p.occurrences += agg.count;
305
- for (const sid of agg.sessions) {
306
- if (!p.sessions.includes(sid))
307
- p.sessions.push(sid);
308
- }
309
- p.lastSeen = now;
310
- p.trend = p.occurrences >= 5 ? 'stable' : 'rising';
311
- }
312
- // Update lens weights from correction signals
313
- for (const sig of signals) {
314
- if (sig.correctionPhrases.length > 0) {
315
- state.lensWeights.completeness = (state.lensWeights.completeness || 0) + 1;
316
- state.lensWeights.automation = (state.lensWeights.automation || 0) + (sig.correctionPhrases.length > 2 ? 1 : 0);
317
- }
318
- if (sig.deepAnalysis) {
319
- state.lensWeights.first_principles = (state.lensWeights.first_principles || 0) + 1;
320
- }
321
- }
322
- // Detect falling/stable shifts
323
- for (const [, p] of Object.entries(state.patterns)) {
324
- if (p.trend === 'stable' && p.lastSeen < new Date(Date.now() - 7 * 86400000).toISOString().slice(0, 10)) {
325
- p.trend = 'falling';
326
- }
327
- }
328
- }
329
- // ── Profile update ──
330
- function updateProfile(state, paths) {
331
- try {
332
- let content = fs.readFileSync(paths.profileFile, 'utf-8');
333
- // Replace Derived Rules section
334
- const derivedStart = '## Derived Rules';
335
- const derivedEnd = '\n## Evolution';
336
- const derivedIdx = content.indexOf(derivedStart);
337
- const activePatterns = Object.entries(state.patterns)
338
- .filter(([, p]) => (p.trend === 'rising' || p.trend === 'stable') && p.sessions.length >= 2)
339
- .sort(([, a], [, b]) => b.occurrences - a.occurrences)
340
- .slice(0, 10);
341
- const derivedContent = [
342
- '## Derived Rules (auto-generated by update-user-model)',
343
- `Last scan: ${state.lastUpdated}. ${state.sessionsProcessed.length} sessions analyzed.`,
344
- '',
345
- '| Pattern | Trend | Occurrences | Sessions |',
346
- '|---------|-------|-------------|----------|',
347
- ...activePatterns.map(([k, p]) => `| ${k} | ${p.trend} | ${p.occurrences} | ${p.sessions.length} |`),
348
- '',
349
- ].join('\n');
350
- if (derivedIdx >= 0) {
351
- content = content.slice(0, derivedIdx) + derivedContent + '\n' + content.slice(content.indexOf(derivedEnd, derivedIdx));
352
- }
353
- else {
354
- // No derived section yet — append before Evolution
355
- const evIdx = content.indexOf('## Evolution');
356
- if (evIdx >= 0) {
357
- content = content.slice(0, evIdx) + derivedContent + '\n' + content.slice(evIdx);
358
- }
359
- else {
360
- content += '\n' + derivedContent;
361
- }
362
- }
363
- fs.writeFileSync(paths.profileFile, content, 'utf-8');
364
- }
365
- catch (e) {
366
- // Profile file might not exist yet — skip
367
- }
368
- }
369
- // ── Output ──
370
- function printChanges(changes, signals, io) {
371
- if (changes.length === 0) {
372
- (0, command_contract_1.log)(io, chalk_1.default.green('No significant changes detected'));
373
- return;
374
- }
375
- const byType = {
376
- new_pattern: changes.filter(c => c.type === 'new_pattern'),
377
- rising: changes.filter(c => c.type === 'rising'),
378
- lens_shift: changes.filter(c => c.type === 'lens_shift'),
379
- };
380
- if (byType.new_pattern.length > 0) {
381
- (0, command_contract_1.log)(io, chalk_1.default.yellow(`🌱 New patterns: ${byType.new_pattern.length}`));
382
- for (const c of byType.new_pattern.slice(0, 5)) {
383
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
384
- }
385
- (0, command_contract_1.log)(io);
386
- }
387
- if (byType.rising.length > 0) {
388
- (0, command_contract_1.log)(io, chalk_1.default.green(`📈 Re-emerging: ${byType.rising.length}`));
389
- for (const c of byType.rising.slice(0, 5)) {
390
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
391
- }
392
- (0, command_contract_1.log)(io);
393
- }
394
- if (byType.lens_shift.length > 0) {
395
- (0, command_contract_1.log)(io, chalk_1.default.cyan(`🎯 Lens shifts:`));
396
- for (const c of byType.lens_shift) {
397
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
398
- }
399
- (0, command_contract_1.log)(io);
400
- }
401
- (0, command_contract_1.log)(io, chalk_1.default.bold(`Total signals processed:`));
402
- (0, command_contract_1.log)(io, ` Sessions: ${signals.length}`);
403
- (0, command_contract_1.log)(io, ` Correction phrases: ${signals.reduce((s, sig) => s + sig.correctionPhrases.length, 0)}`);
404
- (0, command_contract_1.log)(io, ` Concepts extracted: ${signals.reduce((s, sig) => s + Object.keys(sig.concepts).length, 0)}`);
405
- }
406
- //# sourceMappingURL=update-user-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-user-model.js","sourceRoot":"","sources":["../../../src/cli/commands/update-user-model.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 纠正信号模式表与概念清洗(工单 19-C)
3
- *
4
- * 合并 analyze-sessions 与 update-user-model 两份几乎相同的模式表,
5
- * 采用较宽窗口(update-user-model 版本)作为唯一实现。
6
- */
7
- /** 用户纠正/重复强调语句的匹配模式(两命令合并后的超集,取较宽窗口) */
8
- export declare const CORRECTION_PATTERNS: RegExp[];
9
- /**
10
- * 从纠正语句中提取概念:剥离纠正前缀与标点
11
- */
12
- export declare function cleanCorrectionConcept(sentence: string): string;
13
- /**
14
- * 用模式表在文本中抽取纠正语句(去重)
15
- */
16
- export declare function extractCorrectionMatches(text: string): string[];
17
- //# sourceMappingURL=corrections.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"corrections.d.ts","sourceRoot":"","sources":["../../../src/cli/session-mining/corrections.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAWvC,CAAC;AAWF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAU/D"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- /**
3
- * 纠正信号模式表与概念清洗(工单 19-C)
4
- *
5
- * 合并 analyze-sessions 与 update-user-model 两份几乎相同的模式表,
6
- * 采用较宽窗口(update-user-model 版本)作为唯一实现。
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.CORRECTION_PATTERNS = void 0;
10
- exports.cleanCorrectionConcept = cleanCorrectionConcept;
11
- exports.extractCorrectionMatches = extractCorrectionMatches;
12
- /** 用户纠正/重复强调语句的匹配模式(两命令合并后的超集,取较宽窗口) */
13
- exports.CORRECTION_PATTERNS = [
14
- /你(?:又|还是)(?:在)?(?:犯|忘|没|不).{0,30}?[了]?/g,
15
- /我不是(?:说|让|让做|讲)[了过]?.{0,50}?[了吗??]?/g,
16
- /怎么(?:又|还|老)(?:是|在)?.{0,30}?[了]?/g,
17
- /我(?:一直|反复|总是)(?:在|说|强调)?.{0,30}?[了]?/g,
18
- /老(?:是|在|犯|忘)(?:了)?.{0,20}?[了]?/g,
19
- /这(?:个|种)(?:问题|模式|错误).{0,20}?[.。!]?/g,
20
- /(?:第[一二三四五六七八九十\d]+次|反复|重复)(?:说|提醒|强调).{0,20}?/g,
21
- /不(?:要|能|想|愿意).{0,20}?老.{0,10}?[了]?/g,
22
- /(?:补上|加上|记上|修复).{0,10}?[了吗??]?/g,
23
- /(?:沉淀|监控|日志|记录).{0,5}?[了吗??]?/g,
24
- ];
25
- /** 纠正语句前缀(提取概念时剥离) */
26
- const CORRECTION_PREFIX_STRIP = [
27
- /你(?:又|还是)(?:在)?(?:犯|忘|没|不)/g,
28
- /我不是(?:说|让|让做|讲)[了过]?/g,
29
- /怎么(?:又|还|老)(?:是|在)?/g,
30
- /我(?:一直|反复|总是)(?:在|说|强调)?/g,
31
- /老(?:是|在|犯|忘)(?:了)?/g,
32
- ];
33
- /**
34
- * 从纠正语句中提取概念:剥离纠正前缀与标点
35
- */
36
- function cleanCorrectionConcept(sentence) {
37
- let cleaned = sentence;
38
- for (const re of CORRECTION_PREFIX_STRIP) {
39
- re.lastIndex = 0;
40
- cleaned = cleaned.replace(re, '');
41
- }
42
- return cleaned.replace(/[,。!?、;:""''()\s]+/g, '').trim();
43
- }
44
- /**
45
- * 用模式表在文本中抽取纠正语句(去重)
46
- */
47
- function extractCorrectionMatches(text) {
48
- const matches = [];
49
- for (const pattern of exports.CORRECTION_PATTERNS) {
50
- pattern.lastIndex = 0;
51
- let match;
52
- while ((match = pattern.exec(text)) !== null) {
53
- matches.push(match[0].trim());
54
- }
55
- }
56
- return matches;
57
- }
58
- //# sourceMappingURL=corrections.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"corrections.js","sourceRoot":"","sources":["../../../src/cli/session-mining/corrections.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA4BH,wDAOC;AAKD,4DAUC;AAhDD,wCAAwC;AAC3B,QAAA,mBAAmB,GAAa;IAC3C,yCAAyC;IACzC,sCAAsC;IACtC,kCAAkC;IAClC,uCAAuC;IACvC,iCAAiC;IACjC,qCAAqC;IACrC,iDAAiD;IACjD,qCAAqC;IACrC,iCAAiC;IACjC,gCAAgC;CACjC,CAAC;AAEF,sBAAsB;AACtB,MAAM,uBAAuB,GAAa;IACxC,6BAA6B;IAC7B,uBAAuB;IACvB,sBAAsB;IACtB,2BAA2B;IAC3B,qBAAqB;CACtB,CAAC;AAEF;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,KAAK,MAAM,EAAE,IAAI,uBAAuB,EAAE,CAAC;QACzC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;QACjB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,IAAY;IACnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,2BAAmB,EAAE,CAAC;QAC1C,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * 会话挖掘共享层(工单 19-C)
3
- *
4
- * update-user-model 与 analyze-sessions 两个命令此前各自维护一份
5
- * transcript 解析 / 纠正模式 / 分词与相似度实现,收敛到本目录:
6
- * - transcript.ts Claude Code transcript(.jsonl)读取
7
- * - corrections.ts 纠正信号模式表与概念清洗
8
- * - text.ts 分词 / 停用词 / Jaccard / 文本清洗
9
- */
10
- export * from './transcript';
11
- export * from './corrections';
12
- export * from './text';
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/session-mining/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- /**
3
- * 会话挖掘共享层(工单 19-C)
4
- *
5
- * update-user-model 与 analyze-sessions 两个命令此前各自维护一份
6
- * transcript 解析 / 纠正模式 / 分词与相似度实现,收敛到本目录:
7
- * - transcript.ts Claude Code transcript(.jsonl)读取
8
- * - corrections.ts 纠正信号模式表与概念清洗
9
- * - text.ts 分词 / 停用词 / Jaccard / 文本清洗
10
- */
11
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- var desc = Object.getOwnPropertyDescriptor(m, k);
14
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
- desc = { enumerable: true, get: function() { return m[k]; } };
16
- }
17
- Object.defineProperty(o, k2, desc);
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- __exportStar(require("./transcript"), exports);
27
- __exportStar(require("./corrections"), exports);
28
- __exportStar(require("./text"), exports);
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/session-mining/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,gDAA8B;AAC9B,yCAAuB"}
@@ -1,31 +0,0 @@
1
- /**
2
- * 分词 / 停用词 / 相似度 / 文本清洗(工单 19-C)
3
- *
4
- * 合并 analyze-sessions 与 update-user-model 的重复实现。
5
- */
6
- /** N-gram 停用词表(中英) */
7
- export declare const STOP_WORDS: Set<string>;
8
- /**
9
- * 中英文混合分词:中文产出 bigram/trigram(短序列保留整体),
10
- * 连续的拉丁/数字/路径字符作为整体 token。
11
- */
12
- export declare function tokenize(text: string): string[];
13
- /**
14
- * 基于 tokenize 的 Jaccard 相似度
15
- */
16
- export declare function jaccardSimilarity(a: string, b: string): number;
17
- /**
18
- * 仅取汉字字符集的 Jaccard 相似度(概念聚类用)
19
- */
20
- export declare function jaccardChinese(a: string, b: string): number;
21
- /**
22
- * 剥离代码块 / 行内代码 / JSON 片段,保留自然语言
23
- */
24
- export declare function stripCodeBlocks(text: string): string;
25
- /** 是否纯标点/空白 */
26
- export declare function isPunctuation(str: string): boolean;
27
- /** 是否含语义内容(汉字,或 ≥7 字符的合法英文标识词) */
28
- export declare function hasSemanticContent(phrase: string): boolean;
29
- /** 是否代码噪声(短拉丁片段 / 常见 JSON 字段名碎片) */
30
- export declare function isCodeNoise(phrase: string): boolean;
31
- //# sourceMappingURL=text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/session-mining/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,eAAO,MAAM,UAAU,aAcrB,CAAC;AAIH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB/C;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,eAAe;AACf,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAInD"}