@dommaker/harness 1.4.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 (258) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +0 -2
  3. package/dist/cli/commands/check.d.ts.map +1 -1
  4. package/dist/cli/commands/check.js +28 -0
  5. package/dist/cli/commands/check.js.map +1 -1
  6. package/dist/cli/commands/definitions.d.ts.map +1 -1
  7. package/dist/cli/commands/definitions.js +1 -39
  8. package/dist/cli/commands/definitions.js.map +1 -1
  9. package/dist/cli/commands/knowledge.d.ts +0 -19
  10. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  11. package/dist/cli/commands/knowledge.js +0 -105
  12. package/dist/cli/commands/knowledge.js.map +1 -1
  13. package/dist/cli/commands/passes-gate.d.ts +0 -2
  14. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  15. package/dist/cli/commands/passes-gate.js +0 -1
  16. package/dist/cli/commands/passes-gate.js.map +1 -1
  17. package/dist/cli/commands/performance.d.ts +0 -4
  18. package/dist/cli/commands/performance.d.ts.map +1 -1
  19. package/dist/cli/commands/performance.js +10 -20
  20. package/dist/cli/commands/performance.js.map +1 -1
  21. package/dist/cli/commands/report.d.ts +1 -1
  22. package/dist/cli/commands/report.d.ts.map +1 -1
  23. package/dist/cli/commands/report.js +2 -55
  24. package/dist/cli/commands/report.js.map +1 -1
  25. package/dist/cli/commands/status.d.ts.map +1 -1
  26. package/dist/cli/commands/status.js +4 -8
  27. package/dist/cli/commands/status.js.map +1 -1
  28. package/dist/context/index.d.ts +2 -5
  29. package/dist/context/index.d.ts.map +1 -1
  30. package/dist/context/index.js +2 -8
  31. package/dist/context/index.js.map +1 -1
  32. package/dist/context/token-budget.d.ts +0 -29
  33. package/dist/context/token-budget.d.ts.map +1 -1
  34. package/dist/context/token-budget.js +1 -65
  35. package/dist/context/token-budget.js.map +1 -1
  36. package/dist/context/types.d.ts +0 -1
  37. package/dist/context/types.d.ts.map +1 -1
  38. package/dist/context/types.js +0 -9
  39. package/dist/context/types.js.map +1 -1
  40. package/dist/core/constraints/checker.d.ts +14 -0
  41. package/dist/core/constraints/checker.d.ts.map +1 -1
  42. package/dist/core/constraints/checker.js +27 -5
  43. package/dist/core/constraints/checker.js.map +1 -1
  44. package/dist/core/constraints/checkers/capability-sync.d.ts +17 -6
  45. package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
  46. package/dist/core/constraints/checkers/capability-sync.js +48 -19
  47. package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
  48. package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
  49. package/dist/core/constraints/checkers/docs-freshness.js +15 -6
  50. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
  51. package/dist/core/constraints/checkers/index.d.ts +2 -2
  52. package/dist/core/constraints/checkers/index.d.ts.map +1 -1
  53. package/dist/core/constraints/checkers/index.js +2 -1
  54. package/dist/core/constraints/checkers/index.js.map +1 -1
  55. package/dist/core/constraints/checkers/types.d.ts +41 -2
  56. package/dist/core/constraints/checkers/types.d.ts.map +1 -1
  57. package/dist/core/constraints/checkers/types.js +33 -0
  58. package/dist/core/constraints/checkers/types.js.map +1 -1
  59. package/dist/core/constraints/git-evidence.d.ts +6 -3
  60. package/dist/core/constraints/git-evidence.d.ts.map +1 -1
  61. package/dist/core/constraints/git-evidence.js +6 -3
  62. package/dist/core/constraints/git-evidence.js.map +1 -1
  63. package/dist/core/index.d.ts +1 -2
  64. package/dist/core/index.d.ts.map +1 -1
  65. package/dist/core/index.js +1 -9
  66. package/dist/core/index.js.map +1 -1
  67. package/dist/core/spec/validator.d.ts +2 -0
  68. package/dist/core/spec/validator.d.ts.map +1 -1
  69. package/dist/core/spec/validator.js +9 -11
  70. package/dist/core/spec/validator.js.map +1 -1
  71. package/dist/core/validators/index.d.ts +1 -1
  72. package/dist/core/validators/index.d.ts.map +1 -1
  73. package/dist/core/validators/passes-gate.d.ts +1 -15
  74. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  75. package/dist/core/validators/passes-gate.js +0 -125
  76. package/dist/core/validators/passes-gate.js.map +1 -1
  77. package/dist/failure/index.d.ts +0 -1
  78. package/dist/failure/index.d.ts.map +1 -1
  79. package/dist/failure/index.js +1 -7
  80. package/dist/failure/index.js.map +1 -1
  81. package/dist/gates/checker-gate.d.ts +2 -1
  82. package/dist/gates/checker-gate.d.ts.map +1 -1
  83. package/dist/gates/checker-gate.js +10 -7
  84. package/dist/gates/checker-gate.js.map +1 -1
  85. package/dist/gates/definitions.d.ts.map +1 -1
  86. package/dist/gates/definitions.js +0 -4
  87. package/dist/gates/definitions.js.map +1 -1
  88. package/dist/gates/performance.d.ts +7 -22
  89. package/dist/gates/performance.d.ts.map +1 -1
  90. package/dist/gates/performance.js +7 -89
  91. package/dist/gates/performance.js.map +1 -1
  92. package/dist/gates/types.d.ts +2 -8
  93. package/dist/gates/types.d.ts.map +1 -1
  94. package/dist/index.d.ts +6 -8
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +4 -22
  97. package/dist/index.js.map +1 -1
  98. package/dist/knowledge/index.d.ts +0 -1
  99. package/dist/knowledge/index.d.ts.map +1 -1
  100. package/dist/knowledge/index.js +1 -3
  101. package/dist/knowledge/index.js.map +1 -1
  102. package/dist/monitoring/trace-analyzer.d.ts +25 -10
  103. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  104. package/dist/monitoring/trace-analyzer.js +147 -116
  105. package/dist/monitoring/trace-analyzer.js.map +1 -1
  106. package/dist/types/constraint.d.ts +8 -0
  107. package/dist/types/constraint.d.ts.map +1 -1
  108. package/dist/types/constraint.js +6 -1
  109. package/dist/types/constraint.js.map +1 -1
  110. package/dist/types/passes-gate.d.ts +0 -19
  111. package/dist/types/passes-gate.d.ts.map +1 -1
  112. package/dist/types/trace.d.ts +9 -0
  113. package/dist/types/trace.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/src/CONTEXT.md +1 -0
  116. package/src/__tests__/passes-gate-check.test.ts +20 -4
  117. package/src/__tests__/passes-gate.test.ts +18 -119
  118. package/src/__tests__/performance-gate.test.ts +3 -11
  119. package/src/__tests__/public-exports.test.ts +46 -16
  120. package/src/__tests__/trace-analyzer.test.ts +52 -2
  121. package/src/cli/commands/CONTEXT.md +5 -4
  122. package/src/cli/commands/__tests__/bin-exit-mapping.test.ts +6 -0
  123. package/src/cli/commands/__tests__/check.test.ts +74 -0
  124. package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +70 -0
  125. package/src/cli/commands/__tests__/passes-gate.test.ts +7 -3
  126. package/src/cli/commands/__tests__/performance.test.ts +5 -16
  127. package/src/cli/commands/__tests__/project-path-convention.test.ts +85 -23
  128. package/src/cli/commands/__tests__/registry.test.ts +52 -3
  129. package/src/cli/commands/__tests__/report-extra.test.ts +0 -19
  130. package/src/cli/commands/__tests__/report-false-green.test.ts +46 -0
  131. package/src/cli/commands/__tests__/report.test.ts +0 -20
  132. package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +68 -0
  133. package/src/cli/commands/__tests__/status-extra.test.ts +63 -116
  134. package/src/cli/commands/__tests__/status.test.ts +66 -148
  135. package/src/cli/commands/check.ts +39 -1
  136. package/src/cli/commands/definitions.ts +1 -39
  137. package/src/cli/commands/knowledge.ts +0 -119
  138. package/src/cli/commands/passes-gate.ts +0 -3
  139. package/src/cli/commands/performance.ts +13 -27
  140. package/src/cli/commands/report.ts +3 -61
  141. package/src/cli/commands/status.ts +5 -10
  142. package/src/context/CONTEXT.md +2 -3
  143. package/src/context/__tests__/token-budget.test.ts +1 -81
  144. package/src/context/index.ts +2 -7
  145. package/src/context/token-budget.ts +0 -73
  146. package/src/context/types.ts +0 -9
  147. package/src/core/CONTEXT.md +6 -6
  148. package/src/core/constraints/__tests__/collect-constraints.test.ts +66 -0
  149. package/src/core/constraints/checker.ts +41 -6
  150. package/src/core/constraints/checkers/__tests__/capability-sync.test.ts +90 -31
  151. package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +176 -0
  152. package/src/core/constraints/checkers/__tests__/docs-freshness.test.ts +18 -9
  153. package/src/core/constraints/checkers/__tests__/three-state-consistency.test.ts +12 -4
  154. package/src/core/constraints/checkers/capability-sync.ts +56 -18
  155. package/src/core/constraints/checkers/docs-freshness.ts +18 -5
  156. package/src/core/constraints/checkers/index.ts +9 -2
  157. package/src/core/constraints/checkers/types.ts +58 -2
  158. package/src/core/constraints/git-evidence.ts +6 -3
  159. package/src/core/index.ts +0 -11
  160. package/src/core/spec/__tests__/validator.test.ts +24 -0
  161. package/src/core/spec/validator.ts +9 -10
  162. package/src/core/validators/__tests__/passes-gate.test.ts +2 -9
  163. package/src/core/validators/index.ts +0 -1
  164. package/src/core/validators/passes-gate.ts +1 -149
  165. package/src/failure/CONTEXT.md +8 -6
  166. package/src/failure/index.ts +0 -10
  167. package/src/gates/CONTEXT.md +4 -3
  168. package/src/gates/__tests__/checker-gate.test.ts +24 -0
  169. package/src/gates/__tests__/performance.test.ts +6 -74
  170. package/src/gates/checker-gate.ts +11 -15
  171. package/src/gates/definitions.ts +0 -4
  172. package/src/gates/performance.ts +9 -111
  173. package/src/gates/types.ts +2 -8
  174. package/src/index.ts +1 -36
  175. package/src/knowledge/CONTEXT.md +1 -2
  176. package/src/knowledge/index.ts +0 -1
  177. package/src/monitoring/CONTEXT.md +2 -2
  178. package/src/monitoring/trace-analyzer.ts +160 -126
  179. package/src/types/constraint.ts +16 -2
  180. package/src/types/passes-gate.ts +0 -26
  181. package/src/types/trace.ts +10 -0
  182. package/src/utils/__tests__/jsonl-skip-disposition.test.ts +0 -1
  183. package/dist/cli/commands/analyze-sessions.d.ts +0 -20
  184. package/dist/cli/commands/analyze-sessions.d.ts.map +0 -1
  185. package/dist/cli/commands/analyze-sessions.js +0 -290
  186. package/dist/cli/commands/analyze-sessions.js.map +0 -1
  187. package/dist/cli/commands/update-user-model.d.ts +0 -25
  188. package/dist/cli/commands/update-user-model.d.ts.map +0 -1
  189. package/dist/cli/commands/update-user-model.js +0 -397
  190. package/dist/cli/commands/update-user-model.js.map +0 -1
  191. package/dist/cli/session-mining/corrections.d.ts +0 -17
  192. package/dist/cli/session-mining/corrections.d.ts.map +0 -1
  193. package/dist/cli/session-mining/corrections.js +0 -58
  194. package/dist/cli/session-mining/corrections.js.map +0 -1
  195. package/dist/cli/session-mining/index.d.ts +0 -13
  196. package/dist/cli/session-mining/index.d.ts.map +0 -1
  197. package/dist/cli/session-mining/index.js +0 -29
  198. package/dist/cli/session-mining/index.js.map +0 -1
  199. package/dist/cli/session-mining/text.d.ts +0 -31
  200. package/dist/cli/session-mining/text.d.ts.map +0 -1
  201. package/dist/cli/session-mining/text.js +0 -126
  202. package/dist/cli/session-mining/text.js.map +0 -1
  203. package/dist/cli/session-mining/transcript.d.ts +0 -34
  204. package/dist/cli/session-mining/transcript.d.ts.map +0 -1
  205. package/dist/cli/session-mining/transcript.js +0 -130
  206. package/dist/cli/session-mining/transcript.js.map +0 -1
  207. package/dist/context/compaction.d.ts +0 -57
  208. package/dist/context/compaction.d.ts.map +0 -1
  209. package/dist/context/compaction.js +0 -165
  210. package/dist/context/compaction.js.map +0 -1
  211. package/dist/core/session/clean-state.d.ts +0 -17
  212. package/dist/core/session/clean-state.d.ts.map +0 -1
  213. package/dist/core/session/clean-state.js +0 -192
  214. package/dist/core/session/clean-state.js.map +0 -1
  215. package/dist/core/session/index.d.ts +0 -6
  216. package/dist/core/session/index.d.ts.map +0 -1
  217. package/dist/core/session/index.js +0 -15
  218. package/dist/core/session/index.js.map +0 -1
  219. package/dist/core/session/startup.d.ts +0 -47
  220. package/dist/core/session/startup.d.ts.map +0 -1
  221. package/dist/core/session/startup.js +0 -263
  222. package/dist/core/session/startup.js.map +0 -1
  223. package/dist/failure/constraint-handler.d.ts +0 -83
  224. package/dist/failure/constraint-handler.d.ts.map +0 -1
  225. package/dist/failure/constraint-handler.js +0 -138
  226. package/dist/failure/constraint-handler.js.map +0 -1
  227. package/dist/knowledge/lifecycle-hooks.d.ts +0 -62
  228. package/dist/knowledge/lifecycle-hooks.d.ts.map +0 -1
  229. package/dist/knowledge/lifecycle-hooks.js +0 -143
  230. package/dist/knowledge/lifecycle-hooks.js.map +0 -1
  231. package/dist/types/session.d.ts +0 -113
  232. package/dist/types/session.d.ts.map +0 -1
  233. package/dist/types/session.js +0 -6
  234. package/dist/types/session.js.map +0 -1
  235. package/src/__tests__/clean-state-extra.test.ts +0 -301
  236. package/src/__tests__/clean-state.test.ts +0 -169
  237. package/src/__tests__/constraint-handler.test.ts +0 -132
  238. package/src/__tests__/passes-gate-extra.test.ts +0 -93
  239. package/src/__tests__/session-startup.test.ts +0 -334
  240. package/src/cli/commands/__tests__/analyze-sessions.test.ts +0 -184
  241. package/src/cli/commands/__tests__/update-user-model.test.ts +0 -234
  242. package/src/cli/commands/analyze-sessions.ts +0 -335
  243. package/src/cli/commands/update-user-model.ts +0 -461
  244. package/src/cli/session-mining/__tests__/transcript.test.ts +0 -118
  245. package/src/cli/session-mining/corrections.ts +0 -56
  246. package/src/cli/session-mining/index.ts +0 -13
  247. package/src/cli/session-mining/text.ts +0 -117
  248. package/src/cli/session-mining/transcript.ts +0 -125
  249. package/src/context/__tests__/compaction.test.ts +0 -169
  250. package/src/context/compaction.ts +0 -201
  251. package/src/core/session/__tests__/startup.test.ts +0 -281
  252. package/src/core/session/clean-state.ts +0 -178
  253. package/src/core/session/index.ts +0 -15
  254. package/src/core/session/startup.ts +0 -253
  255. package/src/failure/constraint-handler.ts +0 -171
  256. package/src/knowledge/__tests__/lifecycle-hooks.test.ts +0 -140
  257. package/src/knowledge/lifecycle-hooks.ts +0 -202
  258. package/src/types/session.ts +0 -132
@@ -1,397 +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
- * 模型状态: ~/.claude/user-model-state.json
15
- * 画像输出: ~/.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.updateUserModel = updateUserModel;
57
- const chalk_1 = __importDefault(require("chalk"));
58
- const fs = __importStar(require("fs"));
59
- const path = __importStar(require("path"));
60
- const os = __importStar(require("os"));
61
- const session_mining_1 = require("../session-mining");
62
- const command_contract_1 = require("../command-contract");
63
- const STATE_FILE = path.join(os.homedir(), '.claude', 'user-model-state.json');
64
- const PROFILE_FILE = path.join(os.homedir(), '.claude', 'projects', '-root-projects', 'memory', 'user_profile.md');
65
- async function updateUserModel(options, io = command_contract_1.processIO) {
66
- const transcriptDir = process.env.CLAUDE_TRANSCRIPTS_DIR
67
- || path.join(os.homedir(), '.claude', 'projects', '-root--claude');
68
- // 1. Load previous state
69
- const state = loadState();
70
- // 2. Scan new data
71
- const newSessions = findNewSessions(transcriptDir, state.sessionsProcessed, options.days);
72
- if (newSessions.length === 0) {
73
- (0, command_contract_1.log)(io, chalk_1.default.gray('No new sessions to process'));
74
- return { kind: 'skip', reason: '没有新会话可处理' };
75
- }
76
- // 3. Extract signals from new data
77
- const signals = extractSignals(newSessions);
78
- // 4. Build concept clusters (semantic dedup)
79
- const mergedConcepts = buildMergedConcepts(signals);
80
- // 5. Diff against previous state → find changes
81
- const changes = diffState(state, mergedConcepts, signals);
82
- // 6. Update state
83
- if (!options.dryRun) {
84
- for (const sid of newSessions.map(s => s.id)) {
85
- if (!state.sessionsProcessed.includes(sid)) {
86
- state.sessionsProcessed.push(sid);
87
- }
88
- }
89
- applySignals(state, signals, mergedConcepts);
90
- state.lastUpdated = new Date().toISOString();
91
- if (state.sessionsProcessed.length > 200) {
92
- state.sessionsProcessed = state.sessionsProcessed.slice(-200);
93
- }
94
- saveState(state);
95
- updateProfile(state);
96
- }
97
- // 6. Output
98
- if (options.json) {
99
- (0, command_contract_1.log)(io, JSON.stringify({ newSessions: newSessions.length, changes }, null, 2));
100
- return { kind: 'ok' };
101
- }
102
- (0, command_contract_1.log)(io, chalk_1.default.blue(`📊 Processed ${newSessions.length} new sessions\n`));
103
- printChanges(changes, signals, io);
104
- return { kind: 'ok' };
105
- }
106
- // ── State I/O ──
107
- function loadState() {
108
- try {
109
- if (fs.existsSync(STATE_FILE)) {
110
- return JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'));
111
- }
112
- }
113
- catch { }
114
- return {
115
- lastUpdated: new Date(0).toISOString(),
116
- sessionsProcessed: [],
117
- patterns: {},
118
- lensWeights: {},
119
- principleWeights: {},
120
- evolutionLog: [],
121
- };
122
- }
123
- function saveState(state) {
124
- try {
125
- const dir = path.dirname(STATE_FILE);
126
- if (!fs.existsSync(dir))
127
- fs.mkdirSync(dir, { recursive: true });
128
- fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf-8');
129
- }
130
- catch { }
131
- }
132
- function findNewSessions(dir, processed, days) {
133
- // 过滤下推 seam(harness#112):excludeIds 走文件名、since 走 stat,未命中不 parse
134
- const filter = { excludeIds: processed };
135
- // 「最近 N 天」:自然日窗口(含今天)。days<=0 视为不过滤,与缺省一致。
136
- // date 是 mtime 的 UTC 日,date >= cutoff ⟺ mtimeMs >= cutoff 日 UTC 零点
137
- if (days !== undefined && days > 0) {
138
- const cutoff = new Date(Date.now() - (days - 1) * 86_400_000)
139
- .toISOString()
140
- .slice(0, 10);
141
- filter.since = Date.parse(cutoff);
142
- }
143
- const sessions = (0, session_mining_1.readTranscriptSessions)(dir, filter);
144
- sessions.sort((a, b) => a.date.localeCompare(b.date));
145
- return sessions.map(s => ({
146
- id: s.id,
147
- date: s.date,
148
- userText: s.turns.filter(t => t.role === 'user').map(t => t.content).join('\n'),
149
- assistantText: s.turns.filter(t => t.role === 'assistant').map(t => t.content).join('\n'),
150
- toolCalls: s.toolCalls,
151
- }));
152
- }
153
- function extractCorrectionConcepts(userText) {
154
- const concepts = [];
155
- for (const sentence of (0, session_mining_1.extractCorrectionMatches)(userText)) {
156
- const cleaned = (0, session_mining_1.cleanCorrectionConcept)(sentence);
157
- if (cleaned.length >= 4 && cleaned.length <= 60)
158
- concepts.push(cleaned);
159
- }
160
- return [...new Set(concepts)];
161
- }
162
- // ── Semantic clustering ──
163
- function clusterConcepts(agg) {
164
- const entries = Object.entries(agg).filter(([k]) => k.length >= 4);
165
- if (entries.length <= 1)
166
- return agg;
167
- const merged = {};
168
- const used = new Set();
169
- for (let i = 0; i < entries.length; i++) {
170
- if (used.has(i))
171
- continue;
172
- const [concept, data] = entries[i];
173
- let clusterName = concept;
174
- let clusterCount = data.count;
175
- const clusterSessions = new Set(data.sessions);
176
- used.add(i);
177
- for (let j = i + 1; j < entries.length; j++) {
178
- if (used.has(j))
179
- continue;
180
- const [other, otherData] = entries[j];
181
- const sim = (0, session_mining_1.jaccardChinese)(concept, other);
182
- if (sim > 0.5) {
183
- clusterCount += otherData.count;
184
- for (const s of otherData.sessions)
185
- clusterSessions.add(s);
186
- // Use the shorter name as cluster label
187
- if (other.length < clusterName.length)
188
- clusterName = other;
189
- used.add(j);
190
- }
191
- }
192
- merged[clusterName] = { count: clusterCount, sessions: [...clusterSessions] };
193
- }
194
- return merged;
195
- }
196
- function extractSignals(sessions) {
197
- return sessions.map(s => {
198
- const correctionPhrases = extractCorrectionConcepts(s.userText);
199
- // Concept extraction (Chinese char N-grams, etc.)
200
- const concepts = {};
201
- const cleanText = s.userText
202
- .replace(/```[\s\S]*?```/g, '')
203
- .replace(/\{[^{}]*\}/g, '')
204
- .replace(/[{}[\]"':,\\]+/g, ' ');
205
- let cnSeq = '';
206
- for (const char of cleanText) {
207
- if (/[\u4e00-\u9fff]/.test(char)) {
208
- cnSeq += char;
209
- }
210
- else {
211
- if (cnSeq.length >= 4)
212
- concepts[cnSeq] = (concepts[cnSeq] || 0) + 1;
213
- cnSeq = '';
214
- }
215
- }
216
- if (cnSeq.length >= 4)
217
- concepts[cnSeq] = (concepts[cnSeq] || 0) + 1;
218
- // Tool patterns
219
- const toolPatterns = {};
220
- for (const t of s.toolCalls) {
221
- toolPatterns[t] = (toolPatterns[t] || 0) + 1;
222
- }
223
- return {
224
- sessionId: s.id,
225
- date: s.date,
226
- correctionPhrases,
227
- concepts,
228
- toolPatterns,
229
- sessionDuration: s.userText.length + s.assistantText.length, // proxy
230
- turnCount: (s.userText.match(/\n/g) || []).length,
231
- deepAnalysis: s.toolCalls.includes('EnterPlanMode') || s.toolCalls.includes('Agent'),
232
- knowledgeCaptured: s.toolCalls.includes('Write') && (s.assistantText.includes('.harness/knowledge-docs/') ||
233
- s.assistantText.includes('.harness/knowledge/')),
234
- };
235
- });
236
- }
237
- function buildMergedConcepts(signals) {
238
- const agg = {};
239
- for (const sig of signals) {
240
- for (const [concept, count] of Object.entries(sig.concepts)) {
241
- if (!agg[concept])
242
- agg[concept] = { count: 0, sessions: [] };
243
- agg[concept].count += count;
244
- if (!agg[concept].sessions.includes(sig.sessionId)) {
245
- agg[concept].sessions.push(sig.sessionId);
246
- }
247
- }
248
- for (const phrase of sig.correctionPhrases) {
249
- if (phrase.length < 4)
250
- continue;
251
- if (!agg[phrase])
252
- agg[phrase] = { count: 0, sessions: [] };
253
- agg[phrase].count += 3;
254
- if (!agg[phrase].sessions.includes(sig.sessionId)) {
255
- agg[phrase].sessions.push(sig.sessionId);
256
- }
257
- }
258
- }
259
- return clusterConcepts(agg);
260
- }
261
- function diffState(state, mergedConcepts, signals) {
262
- const changes = [];
263
- // Detect new/rising/falling/gone concepts (from merged clusters)
264
- for (const [concept, agg] of Object.entries(mergedConcepts)) {
265
- const existing = state.patterns[concept];
266
- if (!existing) {
267
- if (agg.sessions.length >= 2) {
268
- changes.push({ type: 'new_pattern', key: concept, detail: `Appeared in ${agg.sessions.length} sessions` });
269
- }
270
- }
271
- else if (existing.trend === 'gone' || existing.trend === 'falling') {
272
- changes.push({ type: 'rising', key: concept, detail: `Re-emerged after being ${existing.trend}` });
273
- }
274
- }
275
- // Detect lens weight shifts (from correction patterns)
276
- const totalCorrections = signals.reduce((sum, s) => sum + s.correctionPhrases.length, 0);
277
- if (totalCorrections >= 3) {
278
- changes.push({ type: 'lens_shift', key: 'completeness',
279
- detail: `${totalCorrections} corrections in these sessions — completeness lens may need weight increase` });
280
- }
281
- return changes;
282
- }
283
- function applySignals(state, signals, mergedConcepts) {
284
- const now = new Date().toISOString().slice(0, 10);
285
- // Update patterns from merged concept clusters
286
- // occurrences 唯一来源:mergedConcepts 聚合值(含 correction phrase 的 ×3 加权,
287
- // 见 buildMergedConcepts)。不再叠加 per-session 原始 count —— 那是 #113 裁决的双计 bug。
288
- for (const [concept, agg] of Object.entries(mergedConcepts)) {
289
- if (!state.patterns[concept]) {
290
- state.patterns[concept] = {
291
- firstSeen: now, occurrences: 0, sessions: [], trend: 'new', lastSeen: now,
292
- };
293
- }
294
- const p = state.patterns[concept];
295
- p.occurrences += agg.count;
296
- for (const sid of agg.sessions) {
297
- if (!p.sessions.includes(sid))
298
- p.sessions.push(sid);
299
- }
300
- p.lastSeen = now;
301
- p.trend = p.occurrences >= 5 ? 'stable' : 'rising';
302
- }
303
- // Update lens weights from correction signals
304
- for (const sig of signals) {
305
- if (sig.correctionPhrases.length > 0) {
306
- state.lensWeights.completeness = (state.lensWeights.completeness || 0) + 1;
307
- state.lensWeights.automation = (state.lensWeights.automation || 0) + (sig.correctionPhrases.length > 2 ? 1 : 0);
308
- }
309
- if (sig.deepAnalysis) {
310
- state.lensWeights.first_principles = (state.lensWeights.first_principles || 0) + 1;
311
- }
312
- }
313
- // Detect falling/stable shifts
314
- for (const [, p] of Object.entries(state.patterns)) {
315
- if (p.trend === 'stable' && p.lastSeen < new Date(Date.now() - 7 * 86400000).toISOString().slice(0, 10)) {
316
- p.trend = 'falling';
317
- }
318
- }
319
- }
320
- // ── Profile update ──
321
- function updateProfile(state) {
322
- try {
323
- let content = fs.readFileSync(PROFILE_FILE, 'utf-8');
324
- // Replace Derived Rules section
325
- const derivedStart = '## Derived Rules';
326
- const derivedEnd = '\n## Evolution';
327
- const derivedIdx = content.indexOf(derivedStart);
328
- const activePatterns = Object.entries(state.patterns)
329
- .filter(([, p]) => (p.trend === 'rising' || p.trend === 'stable') && p.sessions.length >= 2)
330
- .sort(([, a], [, b]) => b.occurrences - a.occurrences)
331
- .slice(0, 10);
332
- const derivedContent = [
333
- '## Derived Rules (auto-generated by update-user-model)',
334
- `Last scan: ${state.lastUpdated}. ${state.sessionsProcessed.length} sessions analyzed.`,
335
- '',
336
- '| Pattern | Trend | Occurrences | Sessions |',
337
- '|---------|-------|-------------|----------|',
338
- ...activePatterns.map(([k, p]) => `| ${k} | ${p.trend} | ${p.occurrences} | ${p.sessions.length} |`),
339
- '',
340
- ].join('\n');
341
- if (derivedIdx >= 0) {
342
- content = content.slice(0, derivedIdx) + derivedContent + '\n' + content.slice(content.indexOf(derivedEnd, derivedIdx));
343
- }
344
- else {
345
- // No derived section yet — append before Evolution
346
- const evIdx = content.indexOf('## Evolution');
347
- if (evIdx >= 0) {
348
- content = content.slice(0, evIdx) + derivedContent + '\n' + content.slice(evIdx);
349
- }
350
- else {
351
- content += '\n' + derivedContent;
352
- }
353
- }
354
- fs.writeFileSync(PROFILE_FILE, content, 'utf-8');
355
- }
356
- catch (e) {
357
- // Profile file might not exist yet — skip
358
- }
359
- }
360
- // ── Output ──
361
- function printChanges(changes, signals, io) {
362
- if (changes.length === 0) {
363
- (0, command_contract_1.log)(io, chalk_1.default.green('No significant changes detected'));
364
- return;
365
- }
366
- const byType = {
367
- new_pattern: changes.filter(c => c.type === 'new_pattern'),
368
- rising: changes.filter(c => c.type === 'rising'),
369
- lens_shift: changes.filter(c => c.type === 'lens_shift'),
370
- };
371
- if (byType.new_pattern.length > 0) {
372
- (0, command_contract_1.log)(io, chalk_1.default.yellow(`🌱 New patterns: ${byType.new_pattern.length}`));
373
- for (const c of byType.new_pattern.slice(0, 5)) {
374
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
375
- }
376
- (0, command_contract_1.log)(io);
377
- }
378
- if (byType.rising.length > 0) {
379
- (0, command_contract_1.log)(io, chalk_1.default.green(`📈 Re-emerging: ${byType.rising.length}`));
380
- for (const c of byType.rising.slice(0, 5)) {
381
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
382
- }
383
- (0, command_contract_1.log)(io);
384
- }
385
- if (byType.lens_shift.length > 0) {
386
- (0, command_contract_1.log)(io, chalk_1.default.cyan(`🎯 Lens shifts:`));
387
- for (const c of byType.lens_shift) {
388
- (0, command_contract_1.log)(io, chalk_1.default.gray(` ${c.key}: ${c.detail}`));
389
- }
390
- (0, command_contract_1.log)(io);
391
- }
392
- (0, command_contract_1.log)(io, chalk_1.default.bold(`Total signals processed:`));
393
- (0, command_contract_1.log)(io, ` Sessions: ${signals.length}`);
394
- (0, command_contract_1.log)(io, ` Correction phrases: ${signals.reduce((s, sig) => s + sig.correctionPhrases.length, 0)}`);
395
- (0, command_contract_1.log)(io, ` Concepts extracted: ${signals.reduce((s, sig) => s + Object.keys(sig.concepts).length, 0)}`);
396
- }
397
- //# 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"}