@tom2012/cc-web 1.5.110 → 1.5.112

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 (31) hide show
  1. package/README.md +1 -1
  2. package/backend/dist/index.d.ts.map +1 -1
  3. package/backend/dist/index.js +21 -0
  4. package/backend/dist/index.js.map +1 -1
  5. package/backend/dist/information/condenser.d.ts.map +1 -1
  6. package/backend/dist/information/condenser.js +362 -140
  7. package/backend/dist/information/condenser.js.map +1 -1
  8. package/backend/dist/memory-pool/templates.d.ts +1 -0
  9. package/backend/dist/memory-pool/templates.d.ts.map +1 -1
  10. package/backend/dist/memory-pool/templates.js +19 -0
  11. package/backend/dist/memory-pool/templates.js.map +1 -1
  12. package/frontend/dist/assets/{GraphPreview-B651ffK1.js → GraphPreview-DYuRcUjF.js} +1 -1
  13. package/frontend/dist/assets/{OfficePreview-B9UjWFU1.js → OfficePreview-B6NucFpx.js} +2 -2
  14. package/frontend/dist/assets/{PlanPanel-Bo0aQY-U.js → PlanPanel-B_muilQ8.js} +1 -1
  15. package/frontend/dist/assets/{ProjectPage-BBXTlrKW.js → ProjectPage-2Iq-zPKT.js} +3 -3
  16. package/frontend/dist/assets/{SettingsPage-BKutAZys.js → SettingsPage-Bal81q9c.js} +1 -1
  17. package/frontend/dist/assets/{ShareViewPage-37Cpdq_M.js → ShareViewPage-CBuw4gRz.js} +1 -1
  18. package/frontend/dist/assets/{SkillHubPage-50E8eqaP.js → SkillHubPage-Cu2lihcp.js} +1 -1
  19. package/frontend/dist/assets/{bot-azy4nLNO.js → bot-bkBE5Xrf.js} +1 -1
  20. package/frontend/dist/assets/{chevron-down-Bvlu2a9y.js → chevron-down-CSBT_L3w.js} +1 -1
  21. package/frontend/dist/assets/{index-BOl3UU4w.js → index-C3pyHC8a.js} +2 -2
  22. package/frontend/dist/assets/{index-CpwuAowt.js → index-D-5MomMV.js} +1 -1
  23. package/frontend/dist/assets/{index-C6UsCwmm.css → index-Dha4HlOZ.css} +1 -1
  24. package/frontend/dist/assets/{jszip.min-0YFGWkUy.js → jszip.min-DohPrhoA.js} +1 -1
  25. package/frontend/dist/assets/{matter-BLxVbDs5.js → matter-Clog--f-.js} +1 -1
  26. package/frontend/dist/assets/{maximize-2-CpaJgDYz.js → maximize-2-DFp4HnHz.js} +1 -1
  27. package/frontend/dist/assets/{save-CBYBgNfh.js → save-DzeZJzB3.js} +1 -1
  28. package/frontend/dist/assets/{search-CO7iZRaW.js → search-DPBqFbAe.js} +1 -1
  29. package/frontend/dist/assets/{user-BLmgyTXf.js → user-DHblJPz0.js} +1 -1
  30. package/frontend/dist/index.html +2 -2
  31. package/package.json +1 -1
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  // backend/src/information/condenser.ts
3
3
  //
4
- // Condense and reorganize conversations using Claude CLI (haiku).
4
+ // Iterative condense and reorganize using Claude CLI (haiku).
5
+ // Implements: half-window segmentation, cohesion tracking, context summary injection,
6
+ // single-turn overflow handling, guard rails.
5
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
8
  if (k2 === undefined) k2 = k;
7
9
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -43,74 +45,303 @@ const path = __importStar(require("path"));
43
45
  const child_process_1 = require("child_process");
44
46
  const config_1 = require("../config");
45
47
  const conversation_sync_1 = require("./conversation-sync");
48
+ // Haiku context: ~200K tokens. Half window for input, half for output.
49
+ const HALF_WINDOW_TOKENS = 80000;
50
+ // Keywords that mark uncondensable user turns
51
+ const UNCONDENSABLE_RE = /不要|别|错了|改成|不是这样|必须|禁止|永远不要|以后请/;
46
52
  function estimateTokens(text) {
47
53
  return Math.ceil(text.length / 4);
48
54
  }
49
- /** Call Claude CLI in non-interactive mode with haiku. */
55
+ // ── Claude CLI ──
50
56
  function callHaiku(prompt) {
51
57
  return new Promise((resolve, reject) => {
52
- (0, child_process_1.execFile)('claude', ['-p', prompt, '--model', 'haiku'], { timeout: 90000, maxBuffer: 4 * 1024 * 1024 }, (err, stdout) => {
58
+ (0, child_process_1.execFile)('claude', ['-p', prompt, '--model', 'haiku'], { timeout: 120000, maxBuffer: 8 * 1024 * 1024 }, (err, stdout) => {
53
59
  if (err)
54
60
  return reject(err);
55
61
  resolve(stdout);
56
62
  });
57
63
  });
58
64
  }
59
- /** Parse v0.md into turn sections. */
65
+ function extractJsonArray(text) {
66
+ let cleaned = text.replace(/```json\s*/gi, '').replace(/```\s*/g, '');
67
+ const start = cleaned.indexOf('[');
68
+ if (start === -1)
69
+ throw new Error('No JSON array found');
70
+ let depth = 0;
71
+ let end = -1;
72
+ for (let i = start; i < cleaned.length; i++) {
73
+ if (cleaned[i] === '[')
74
+ depth++;
75
+ else if (cleaned[i] === ']') {
76
+ depth--;
77
+ if (depth === 0) {
78
+ end = i;
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ if (end === -1) {
84
+ cleaned = cleaned.slice(start);
85
+ cleaned = cleaned.replace(/,\s*\{[^}]*$/, '') + ']';
86
+ }
87
+ else {
88
+ cleaned = cleaned.slice(start, end + 1);
89
+ }
90
+ return JSON.parse(cleaned);
91
+ }
60
92
  function parseTurns(content) {
61
93
  const sections = content.split(/(?=^## [UA]\d+)/m).filter(Boolean);
62
94
  return sections.map(s => {
63
95
  const match = s.match(/^(## [UA]\d+.*)\n/);
64
96
  if (!match)
65
- return { id: '', header: '', body: s };
66
- return { id: match[1].replace(/^## /, '').split(/[\s\[]/)[0], header: match[1], body: s.slice(match[0].length).trim() };
67
- }).filter(t => t.id);
97
+ return null;
98
+ const header = match[1];
99
+ const id = header.replace(/^## /, '').split(/[\s\[]/)[0];
100
+ const body = s.slice(match[0].length).trim();
101
+ const hasMarker = /\[c\d+/.test(header);
102
+ return { id, header, body, tokens: estimateTokens(body), condensed: hasMarker, cohesion: null };
103
+ }).filter(Boolean);
104
+ }
105
+ function extractMarkerChain(header) {
106
+ const match = header.match(/\[(.+)\]\s*$/);
107
+ return match ? match[1] : '';
108
+ }
109
+ // ── Prompt building ──
110
+ const CONDENSE_RULES = `你是一个对话缩减器。对以下对话中未标记 [已缩减] 的轮次进行缩减。
111
+
112
+ 判断标准:如果未来的 LLM 只看到缩减后的版本,行为是否会与看到原文时不同?
113
+ - 不同 → 高增益,condensed 设为 null(保留原文)
114
+ - 相同 → 低增益,大幅缩减
115
+
116
+ 硬性规则:
117
+ 1. 标记了 [已缩减] 的轮次 → condensed 必须为 null
118
+ 2. 用户纠正/否定行为的发言(含"不要""错了""改成""必须""禁止")→ condensed 必须为 null
119
+ 3. 绝不改变语义方向(肯定↔否定)
120
+ 4. 保留所有数字、标识符、文件路径
121
+ 5. 构建/部署日志 → 一句话结果
122
+ 6. 确认性回复("好""继续")→ 保留原文
123
+
124
+ 对每轮输出 JSON:
125
+ [{"turn":"U1","condensed":"缩减内容或null","cohesion":0.8},...]
126
+ cohesion: 该轮与上一轮的上下文相关性(0=完全独立话题,1=紧密承接)`;
127
+ function buildSegmentPrompt(turns, condensedUpTo, contextSummary) {
128
+ const parts = [CONDENSE_RULES, ''];
129
+ if (contextSummary) {
130
+ parts.push(`[前文摘要:${contextSummary}]`, '');
131
+ }
132
+ parts.push('对话:');
133
+ for (let i = 0; i < turns.length; i++) {
134
+ const t = turns[i];
135
+ if (i < condensedUpTo) {
136
+ // Already condensed in previous iteration — mark as [已缩减]
137
+ parts.push(`## ${t.id} [已缩减]`);
138
+ parts.push(t.body);
139
+ }
140
+ else {
141
+ parts.push(`## ${t.id}`);
142
+ parts.push(t.body);
143
+ }
144
+ parts.push('');
145
+ }
146
+ return parts.join('\n');
147
+ }
148
+ // ── Context summary generation ──
149
+ function generateContextSummary(turns) {
150
+ // Take first sentence of each turn, max 5 turns
151
+ const summaryParts = [];
152
+ for (const t of turns.slice(0, 5)) {
153
+ const firstSentence = t.body.split(/[。!?\n]/)[0].slice(0, 40);
154
+ summaryParts.push(`${t.id}: ${firstSentence}`);
155
+ }
156
+ if (turns.length > 5)
157
+ summaryParts.push(`...共${turns.length}轮`);
158
+ return summaryParts.join(';');
159
+ }
160
+ // ── Select segment that fits in half window ──
161
+ function selectSegment(turns, startIdx, halfWindow) {
162
+ let total = 0;
163
+ const promptOverhead = estimateTokens(CONDENSE_RULES) + 200; // rules + formatting
164
+ total += promptOverhead;
165
+ for (let i = startIdx; i < turns.length; i++) {
166
+ const turnCost = turns[i].tokens + 20; // header + formatting overhead
167
+ if (total + turnCost > halfWindow && i > startIdx) {
168
+ // Ensure we end on a complete U-A pair
169
+ let endIdx = i;
170
+ // If endIdx splits a U-A pair (ends on U without A), back up one
171
+ if (endIdx > startIdx && turns[endIdx - 1]?.id.startsWith('U')) {
172
+ endIdx--;
173
+ }
174
+ return { endIdx: Math.max(startIdx + 2, endIdx), totalTokens: total };
175
+ }
176
+ total += turnCost;
177
+ }
178
+ return { endIdx: turns.length, totalTokens: total };
179
+ }
180
+ // ── Find lowest cohesion cut point ──
181
+ function findLowestCohesionCut(turns, startIdx, endIdx) {
182
+ let minCohesion = 2;
183
+ let cutIdx = Math.floor((startIdx + endIdx) / 2); // fallback: midpoint
184
+ for (let i = startIdx + 2; i < endIdx; i += 2) { // step by 2 to cut at U-A pair boundaries
185
+ const c = turns[i].cohesion;
186
+ if (c !== null && c < minCohesion) {
187
+ minCohesion = c;
188
+ cutIdx = i;
189
+ }
190
+ }
191
+ // If all cohesion > 0.8, use midpoint fallback
192
+ if (minCohesion > 0.8)
193
+ cutIdx = Math.floor((startIdx + endIdx) / 2);
194
+ return cutIdx;
195
+ }
196
+ // ── Pre-truncate oversized single turn ──
197
+ function truncateTurn(turn, maxTokens) {
198
+ const headTokens = Math.floor(maxTokens * 0.7);
199
+ const tailTokens = Math.floor(maxTokens * 0.2);
200
+ const headChars = headTokens * 4;
201
+ const tailChars = tailTokens * 4;
202
+ const omitted = estimateTokens(turn.body) - maxTokens;
203
+ const truncatedBody = turn.body.slice(0, headChars) +
204
+ `\n\n[...省略约 ${omitted} tokens...]\n\n` +
205
+ turn.body.slice(-tailChars);
206
+ return { ...turn, body: truncatedBody, tokens: estimateTokens(truncatedBody) };
207
+ }
208
+ // ── Iterative condense ──
209
+ async function iterativeCondense(turns) {
210
+ const halfWindow = HALF_WINDOW_TOKENS;
211
+ let condensedUpTo = 0;
212
+ const cohesionMap = {};
213
+ // Pre-truncate any single turn larger than half window
214
+ for (let i = 0; i < turns.length; i++) {
215
+ if (turns[i].tokens > halfWindow * 0.8) {
216
+ turns[i] = truncateTurn(turns[i], Math.floor(halfWindow * 0.7));
217
+ }
218
+ }
219
+ while (condensedUpTo < turns.length) {
220
+ // Determine segment start: usually 0, but may skip forward via cohesion cut
221
+ let segStart = 0;
222
+ let contextSummary = '';
223
+ // If already-condensed prefix is too large, cut it
224
+ const prefixTokens = turns.slice(0, condensedUpTo).reduce((s, t) => s + t.tokens + 20, 0);
225
+ if (prefixTokens > halfWindow * 0.5 && condensedUpTo > 0) {
226
+ const cutIdx = findLowestCohesionCut(turns, 0, condensedUpTo);
227
+ contextSummary = generateContextSummary(turns.slice(0, cutIdx));
228
+ segStart = cutIdx;
229
+ }
230
+ // Select segment from segStart that fits in half window
231
+ const segTurns = turns.slice(segStart);
232
+ const { endIdx: relEnd } = selectSegment(segTurns, 0, halfWindow);
233
+ const absEnd = segStart + relEnd;
234
+ // Check if segment covers any new (uncondensed) turns
235
+ if (absEnd <= condensedUpTo) {
236
+ // Cannot fit any new turns — force cut more aggressively
237
+ const forceCut = Math.max(condensedUpTo - 4, 0); // keep last 4 condensed turns
238
+ contextSummary = generateContextSummary(turns.slice(0, forceCut));
239
+ const forceTurns = turns.slice(forceCut);
240
+ const { endIdx: forceRelEnd } = selectSegment(forceTurns, 0, halfWindow);
241
+ const forceAbsEnd = forceCut + forceRelEnd;
242
+ if (forceAbsEnd <= condensedUpTo)
243
+ break; // Truly stuck, stop
244
+ // Call Haiku with force-cut segment
245
+ const prompt = buildSegmentPrompt(turns.slice(forceCut, forceAbsEnd), condensedUpTo - forceCut, contextSummary);
246
+ const results = await callHaikuAndParse(prompt, turns, forceCut, forceAbsEnd, condensedUpTo);
247
+ applyResults(turns, results, condensedUpTo, forceAbsEnd, cohesionMap);
248
+ condensedUpTo = forceAbsEnd;
249
+ continue;
250
+ }
251
+ // Build prompt for this segment
252
+ const prompt = buildSegmentPrompt(turns.slice(segStart, absEnd), condensedUpTo - segStart, contextSummary);
253
+ // Call Haiku
254
+ const results = await callHaikuAndParse(prompt, turns, segStart, absEnd, condensedUpTo);
255
+ applyResults(turns, results, condensedUpTo, absEnd, cohesionMap);
256
+ condensedUpTo = absEnd;
257
+ }
258
+ return { condensedTurns: turns, cohesionMap };
259
+ }
260
+ async function callHaikuAndParse(prompt, allTurns, segStart, segEnd, condensedUpTo) {
261
+ let rawResult;
262
+ try {
263
+ rawResult = await callHaiku(prompt);
264
+ }
265
+ catch (err) {
266
+ // On failure, skip this segment (leave turns as-is)
267
+ console.error('[condenser] Haiku call failed:', err instanceof Error ? err.message : err);
268
+ return new Map();
269
+ }
270
+ let parsed;
271
+ try {
272
+ parsed = extractJsonArray(rawResult);
273
+ }
274
+ catch {
275
+ console.error('[condenser] JSON parse failed, skipping segment');
276
+ return new Map();
277
+ }
278
+ const resultMap = new Map();
279
+ for (const r of parsed) {
280
+ resultMap.set(r.turn, r);
281
+ }
282
+ return resultMap;
283
+ }
284
+ function applyResults(turns, results, condensedUpTo, segEnd, cohesionMap) {
285
+ for (let i = condensedUpTo; i < segEnd && i < turns.length; i++) {
286
+ const t = turns[i];
287
+ const r = results.get(t.id);
288
+ // Record cohesion
289
+ if (r?.cohesion !== undefined) {
290
+ t.cohesion = r.cohesion;
291
+ cohesionMap[t.id] = r.cohesion;
292
+ }
293
+ // Guard rail: protect uncondensable user turns
294
+ if (t.id.startsWith('U') && UNCONDENSABLE_RE.test(t.body)) {
295
+ t.condensed = true; // Mark as processed but keep original
296
+ continue;
297
+ }
298
+ // Guard rail: already condensed turns must not be re-condensed
299
+ if (t.condensed)
300
+ continue;
301
+ // Apply condensation
302
+ if (r && r.condensed !== null && r.condensed !== undefined) {
303
+ t.body = r.condensed;
304
+ t.tokens = estimateTokens(r.condensed);
305
+ }
306
+ t.condensed = true;
307
+ }
68
308
  }
69
- /** Build condensed content from turns with [cN,P%] markers. */
70
- function buildCondensedContent(originalTurns, condensedBodies, // turnId condensed text (null = keep original)
71
- prevMarkers, // turnId → existing marker chain from previous version
72
- level) {
309
+ // ── Build final content with markers ──
310
+ function buildFinalContent(originalTurns, // from v0.md (for token % calculation)
311
+ condensedTurns, prevMarkers, level) {
73
312
  const lines = [];
74
- for (const turn of originalTurns) {
75
- const condensed = condensedBodies.get(turn.id);
76
- const body = condensed ?? turn.body;
77
- const origTokens = estimateTokens(turn.body);
78
- const newTokens = estimateTokens(body);
313
+ for (let i = 0; i < condensedTurns.length; i++) {
314
+ const ct = condensedTurns[i];
315
+ const ot = originalTurns.find(t => t.id === ct.id);
316
+ const origTokens = ot ? ot.tokens : ct.tokens;
317
+ const newTokens = ct.tokens;
79
318
  let marker = '';
80
- if (condensed !== null && condensed !== undefined) {
81
- // This turn was condensed
82
- const pct = origTokens > 0 ? Math.round(newTokens / origTokens * 100) : 100;
83
- const prevChain = prevMarkers.get(turn.id) || '';
319
+ if (origTokens > 0 && newTokens < origTokens * 0.95) {
320
+ // Content was actually condensed (>5% reduction)
321
+ const pct = Math.round(newTokens / origTokens * 100);
322
+ const prevChain = prevMarkers.get(ct.id) || '';
84
323
  marker = prevChain ? ` [c${level},${pct}%;${prevChain}]` : ` [c${level},${pct}%]`;
85
324
  }
86
325
  else {
87
- // Keep existing marker from previous version
88
- const existing = prevMarkers.get(turn.id);
326
+ const existing = prevMarkers.get(ct.id);
89
327
  if (existing)
90
328
  marker = ` [${existing}]`;
91
329
  }
92
- lines.push(`## ${turn.id}${marker}`);
93
- lines.push(body);
330
+ lines.push(`## ${ct.id}${marker}`);
331
+ lines.push(ct.body);
94
332
  lines.push('');
95
333
  }
96
334
  return lines.join('\n');
97
335
  }
98
- /** Extract existing [cN,P%] marker chain from a header. */
99
- function extractMarkerChain(header) {
100
- const match = header.match(/\[(.+)\]\s*$/);
101
- return match ? match[1] : '';
102
- }
103
- // ── Condense ──
336
+ // ── Public: condenseConversation ──
104
337
  async function condenseConversation(convDir) {
105
338
  const meta = (0, conversation_sync_1.readMeta)(convDir);
106
339
  if (!meta)
107
340
  return null;
108
- // Read the latest version as base
109
341
  const latestEntry = meta.versions[meta.latest];
110
342
  if (!latestEntry)
111
343
  return null;
112
344
  const baseContent = fs.readFileSync(path.join(convDir, latestEntry.file), 'utf-8');
113
- // Read original for token comparison
114
345
  const v0Content = fs.readFileSync(path.join(convDir, 'v0.md'), 'utf-8');
115
346
  const originalTurns = parseTurns(v0Content);
116
347
  const baseTurns = parseTurns(baseContent);
@@ -121,65 +352,15 @@ async function condenseConversation(convDir) {
121
352
  if (chain)
122
353
  prevMarkers.set(t.id, chain);
123
354
  }
124
- // Build prompt
125
- const prompt = `你是一个对话缩减器。对以下对话的每一轮进行缩减。
126
-
127
- 判断标准:如果未来的 LLM 只看到缩减后的版本,行为是否会与看到原文时不同?
128
- - 不同 保留原文
129
- - 相同 → 大幅缩减
130
-
131
- 硬性规则:
132
- 1. 用户纠正/否定行为的发言 → 必须保留原文
133
- 2. 绝不改变语义方向(肯定↔否定)
134
- 3. 保留所有数字、标识符、文件路径
135
- 4. 构建/部署日志 → 一句话结果
136
- 5. 确认性回复 → 保留原文
137
-
138
- 对每轮输出 JSON 数组:
139
- [{"turn":"U1","condensed":"缩减后的内容或null表示保留原文"},...]
140
-
141
- 对话:
142
- ${baseContent.slice(0, 80000)}`;
143
- let result;
144
- try {
145
- result = await callHaiku(prompt);
146
- }
147
- catch (err) {
148
- throw new Error('Claude CLI 调用失败: ' + (err instanceof Error ? err.message : String(err)));
149
- }
150
- // Parse JSON from response
151
- let condensedArray;
152
- try {
153
- const jsonMatch = result.match(/\[[\s\S]*\]/);
154
- if (!jsonMatch)
155
- throw new Error('No JSON array in response');
156
- condensedArray = JSON.parse(jsonMatch[0]);
157
- }
158
- catch {
159
- throw new Error('无法解析 Haiku 返回的 JSON');
160
- }
161
- // Build condensed bodies map
162
- const condensedBodies = new Map();
163
- for (const item of condensedArray) {
164
- condensedBodies.set(item.turn, item.condensed);
165
- }
166
- // Guard rail: protect uncondensable turns
167
- for (const turn of originalTurns) {
168
- if (turn.id.startsWith('U')) {
169
- const body = turn.body.toLowerCase();
170
- if (/不要|别|错了|改成|不是|必须|禁止/.test(body)) {
171
- condensedBodies.set(turn.id, null); // Force keep original
172
- }
173
- }
174
- }
175
- // Determine next version number
176
- const versionNumbers = Object.keys(meta.versions)
177
- .map(v => parseInt(v.replace('v', '')))
178
- .filter(n => !isNaN(n));
355
+ // Run iterative condense on base turns (deep copy bodies)
356
+ const workingTurns = baseTurns.map(t => ({ ...t, condensed: /\[c\d+/.test(t.header) }));
357
+ const { condensedTurns, cohesionMap } = await iterativeCondense(workingTurns);
358
+ // Determine next version
359
+ const versionNumbers = Object.keys(meta.versions).map(v => parseInt(v.replace('v', ''))).filter(n => !isNaN(n));
179
360
  const nextNum = Math.max(...versionNumbers) + 1;
180
361
  const nextVersion = `v${nextNum}`;
181
- // Build condensed content
182
- const condensedContent = buildCondensedContent(originalTurns, condensedBodies, prevMarkers, nextNum);
362
+ // Build final content with markers
363
+ const condensedContent = buildFinalContent(originalTurns, condensedTurns, prevMarkers, nextNum);
183
364
  const afterTokens = estimateTokens(condensedContent);
184
365
  const beforeTokens = latestEntry.tokens;
185
366
  // Write file
@@ -194,23 +375,24 @@ ${baseContent.slice(0, 80000)}`;
194
375
  base: meta.latest,
195
376
  };
196
377
  meta.latest = nextVersion;
378
+ // Merge cohesion map
379
+ meta.cohesion_map = { ...meta.cohesion_map, ...cohesionMap };
197
380
  (0, conversation_sync_1.writeMeta)(convDir, meta);
198
381
  return { version: nextVersion, before_tokens: beforeTokens, after_tokens: afterTokens };
199
382
  }
200
- // ── Reorganize ──
383
+ // ── Public: reorganizeConversation ──
201
384
  async function reorganizeConversation(convDir) {
202
385
  const meta = (0, conversation_sync_1.readMeta)(convDir);
203
386
  if (!meta)
204
387
  return null;
205
388
  if (meta.reorganize_count >= 2)
206
- return null; // Max 2 reorganizations
207
- // Classify turns by expand stats
389
+ return null;
208
390
  const byTurn = meta.expand_stats.by_turn;
391
+ const v0Content = fs.readFileSync(path.join(convDir, 'v0.md'), 'utf-8');
392
+ const originalTurns = parseTurns(v0Content);
209
393
  const highAttention = [];
210
394
  const lowAttention = [];
211
395
  const neverAccessed = [];
212
- const v0Content = fs.readFileSync(path.join(convDir, 'v0.md'), 'utf-8');
213
- const originalTurns = parseTurns(v0Content);
214
396
  for (const turn of originalTurns) {
215
397
  const count = byTurn[turn.id] || 0;
216
398
  if (count >= 3)
@@ -221,57 +403,96 @@ async function reorganizeConversation(convDir) {
221
403
  neverAccessed.push(turn.id);
222
404
  }
223
405
  if (highAttention.length === 0)
224
- return null; // Nothing to reorganize
225
- const prompt = `你是一个对话重整器。以下对话被缩减后,用户反复需要展开某些轮次。
226
- 请从原始对话重新生成缩减版,调整策略:
227
-
228
- 高关注轮次(保留更多细节):${highAttention.join(', ')}
229
- 低关注轮次(大幅缩减):${lowAttention.join(', ')}
230
- 从未访问的轮次(高度缩减为一句话):${neverAccessed.join(', ')}
231
-
232
- 硬性规则:
233
- 1. 用户纠正/否定行为的发言 必须保留原文
234
- 2. 绝不改变语义方向
235
- 3. 保留所有数字、标识符、文件路径
236
-
237
- 对每轮输出 JSON 数组:
238
- [{"turn":"U1","condensed":"缩减后的内容或null表示保留原文"},...]
239
-
240
- 原始对话:
241
- ${v0Content.slice(0, 80000)}`;
242
- let result;
243
- try {
244
- result = await callHaiku(prompt);
245
- }
246
- catch (err) {
247
- throw new Error('Claude CLI 调用失败: ' + (err instanceof Error ? err.message : String(err)));
248
- }
249
- let condensedArray;
250
- try {
251
- const jsonMatch = result.match(/\[[\s\S]*\]/);
252
- if (!jsonMatch)
253
- throw new Error('No JSON array');
254
- condensedArray = JSON.parse(jsonMatch[0]);
255
- }
256
- catch {
257
- throw new Error('无法解析 Haiku 返回的 JSON');
258
- }
259
- const condensedBodies = new Map();
260
- for (const item of condensedArray) {
261
- condensedBodies.set(item.turn, item.condensed);
406
+ return null;
407
+ // For reorganize, we use iterative condense on v0 turns with attention hints in prompt
408
+ const workingTurns = originalTurns.map(t => ({ ...t, condensed: false }));
409
+ // Mark high-attention turns as uncondensable (force keep)
410
+ const highSet = new Set(highAttention);
411
+ // Custom iterative condense with attention-aware prompt
412
+ const halfWindow = HALF_WINDOW_TOKENS;
413
+ let condensedUpTo = 0;
414
+ const cohesionMap = {};
415
+ // Pre-truncate oversized turns
416
+ for (let i = 0; i < workingTurns.length; i++) {
417
+ if (workingTurns[i].tokens > halfWindow * 0.8) {
418
+ workingTurns[i] = truncateTurn(workingTurns[i], Math.floor(halfWindow * 0.7));
419
+ }
262
420
  }
263
- // Guard rail
264
- for (const turn of originalTurns) {
265
- if (turn.id.startsWith('U') && /不要|别|错了|改成|不是|必须|禁止/.test(turn.body.toLowerCase())) {
266
- condensedBodies.set(turn.id, null);
421
+ while (condensedUpTo < workingTurns.length) {
422
+ let segStart = 0;
423
+ let contextSummary = '';
424
+ const prefixTokens = workingTurns.slice(0, condensedUpTo).reduce((s, t) => s + t.tokens + 20, 0);
425
+ if (prefixTokens > halfWindow * 0.5 && condensedUpTo > 0) {
426
+ const cutIdx = findLowestCohesionCut(workingTurns, 0, condensedUpTo);
427
+ contextSummary = generateContextSummary(workingTurns.slice(0, cutIdx));
428
+ segStart = cutIdx;
429
+ }
430
+ const segTurns = workingTurns.slice(segStart);
431
+ const { endIdx: relEnd } = selectSegment(segTurns, 0, halfWindow);
432
+ const absEnd = segStart + relEnd;
433
+ if (absEnd <= condensedUpTo)
434
+ break;
435
+ // Build reorganize prompt
436
+ const promptParts = [
437
+ `你是一个对话重整器。基于使用数据重新缩减对话。`,
438
+ ``,
439
+ `高关注轮次(保留更多细节,轻度缩减或不缩减):${highAttention.join(', ')}`,
440
+ `低关注轮次(大幅缩减):${lowAttention.join(', ')}`,
441
+ `从未访问的轮次(高度缩减为一句话):${neverAccessed.join(', ')}`,
442
+ ``,
443
+ `硬性规则:`,
444
+ `1. 标记了 [已缩减] 的轮次 → condensed 必须为 null`,
445
+ `2. 用户纠正/否定行为的发言 → condensed 必须为 null`,
446
+ `3. 绝不改变语义方向`,
447
+ `4. 保留所有数字、标识符、文件路径`,
448
+ ``,
449
+ `对每轮输出 JSON:[{"turn":"U1","condensed":"缩减内容或null","cohesion":0.8},...]`,
450
+ ``,
451
+ ];
452
+ if (contextSummary)
453
+ promptParts.push(`[前文摘要:${contextSummary}]`, '');
454
+ promptParts.push('对话:');
455
+ for (let i = segStart; i < absEnd; i++) {
456
+ const t = workingTurns[i];
457
+ if (i < condensedUpTo) {
458
+ promptParts.push(`## ${t.id} [已缩减]`, t.body, '');
459
+ }
460
+ else {
461
+ promptParts.push(`## ${t.id}`, t.body, '');
462
+ }
463
+ }
464
+ const results = await callHaikuAndParse(promptParts.join('\n'), workingTurns, segStart, absEnd, condensedUpTo);
465
+ // Apply with high-attention protection
466
+ for (let i = condensedUpTo; i < absEnd && i < workingTurns.length; i++) {
467
+ const t = workingTurns[i];
468
+ const r = results.get(t.id);
469
+ if (r?.cohesion !== undefined) {
470
+ t.cohesion = r.cohesion;
471
+ cohesionMap[t.id] = r.cohesion;
472
+ }
473
+ if (t.condensed)
474
+ continue;
475
+ if (t.id.startsWith('U') && UNCONDENSABLE_RE.test(t.body)) {
476
+ t.condensed = true;
477
+ continue;
478
+ }
479
+ if (highSet.has(t.id)) {
480
+ t.condensed = true;
481
+ continue;
482
+ } // Protect high-attention
483
+ if (r && r.condensed !== null && r.condensed !== undefined) {
484
+ t.body = r.condensed;
485
+ t.tokens = estimateTokens(r.condensed);
486
+ }
487
+ t.condensed = true;
267
488
  }
489
+ condensedUpTo = absEnd;
268
490
  }
269
- const versionNumbers = Object.keys(meta.versions)
270
- .map(v => parseInt(v.replace('v', '')))
271
- .filter(n => !isNaN(n));
491
+ // Build final
492
+ const versionNumbers = Object.keys(meta.versions).map(v => parseInt(v.replace('v', ''))).filter(n => !isNaN(n));
272
493
  const nextNum = Math.max(...versionNumbers) + 1;
273
494
  const nextVersion = `v${nextNum}`;
274
- const condensedContent = buildCondensedContent(originalTurns, condensedBodies, new Map(), nextNum);
495
+ const condensedContent = buildFinalContent(originalTurns, workingTurns, new Map(), nextNum);
275
496
  const afterTokens = estimateTokens(condensedContent);
276
497
  const latestEntry = meta.versions[meta.latest];
277
498
  const beforeTokens = latestEntry?.tokens ?? meta.original_tokens;
@@ -288,6 +509,7 @@ ${v0Content.slice(0, 80000)}`;
288
509
  meta.latest = nextVersion;
289
510
  meta.reorganize_count += 1;
290
511
  meta.last_reorganize_at = new Date().toISOString();
512
+ meta.cohesion_map = { ...meta.cohesion_map, ...cohesionMap };
291
513
  (0, conversation_sync_1.writeMeta)(convDir, meta);
292
514
  return { version: nextVersion, before_tokens: beforeTokens, after_tokens: afterTokens, high_attention_turns: highAttention };
293
515
  }
@@ -1 +1 @@
1
- {"version":3,"file":"condenser.js","sourceRoot":"","sources":["../../src/information/condenser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"condenser.js","sourceRoot":"","sources":["../../src/information/condenser.ts"],"names":[],"mappings":"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"}