@tom2012/cc-web 2026.6.17-a → 2026.9.6-b
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.
- package/CHANGELOG.json +92 -20
- package/backend/dist/adapters/claude-adapter.d.ts +4 -0
- package/backend/dist/adapters/claude-adapter.d.ts.map +1 -1
- package/backend/dist/adapters/claude-adapter.js +18 -2
- package/backend/dist/adapters/claude-adapter.js.map +1 -1
- package/backend/dist/adapters/types.d.ts +8 -0
- package/backend/dist/adapters/types.d.ts.map +1 -1
- package/backend/dist/auth.d.ts.map +0 -0
- package/backend/dist/config.d.ts +0 -0
- package/backend/dist/config.js +0 -0
- package/backend/dist/config.js.map +0 -0
- package/backend/dist/hooks-manager.d.ts.map +1 -1
- package/backend/dist/hooks-manager.js +19 -3
- package/backend/dist/hooks-manager.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +53 -1
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/auth.d.ts +0 -0
- package/backend/dist/routes/auth.d.ts.map +0 -0
- package/backend/dist/routes/auth.js.map +0 -0
- package/backend/dist/routes/projects.d.ts.map +0 -0
- package/backend/dist/routes/projects.js.map +0 -0
- package/backend/dist/session-manager.d.ts +0 -0
- package/backend/dist/session-manager.d.ts.map +0 -0
- package/backend/dist/session-manager.js +0 -0
- package/backend/dist/session-manager.js.map +0 -0
- package/backend/dist/terminal-manager.d.ts +10 -1
- package/backend/dist/terminal-manager.d.ts.map +1 -1
- package/backend/dist/terminal-manager.js +19 -2
- package/backend/dist/terminal-manager.js.map +1 -1
- package/backend/dist/types.d.ts +0 -0
- package/backend/dist/types.d.ts.map +0 -0
- package/backend/dist/types.js +0 -0
- package/backend/dist/types.js.map +0 -0
- package/bin/ccweb.js +1 -2
- package/frontend/dist/assets/{ChatOverlay-Jcso3jnE.js → ChatOverlay-BoPckOLq.js} +1 -1
- package/frontend/dist/assets/{ClaudeMemPage-egGwexFX.js → ClaudeMemPage-CeaZSvKE.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-CYBEhXG-.js → GraphPreview-Ch6KZFsK.js} +2 -2
- package/frontend/dist/assets/{MobilePage-tc43L2Lz.js → MobilePage-JiqI8CSK.js} +3 -3
- package/frontend/dist/assets/NotebookPage-Ci_tsAYM.js +13 -0
- package/frontend/dist/assets/{OfficePreview-DtFr2tIA.js → OfficePreview-76Lw49uc.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-jE4EtPVP.js → PdfPreview-DEsqK0ec.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-BURCf2Do.js → ProjectPage-v7j0VJzB.js} +5 -5
- package/frontend/dist/assets/{ProjectSettingsPage-BSS5ICpz.js → ProjectSettingsPage-BlxBcXB4.js} +1 -1
- package/frontend/dist/assets/{SettingsPage-Bg1PltuQ.js → SettingsPage-eRuTffii.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-Dkfphglo.js → SkillHubPage-DTTbUlQD.js} +1 -1
- package/frontend/dist/assets/{check-circle-2-D4xZVklI.js → check-circle-2-CuGGbYqq.js} +1 -1
- package/frontend/dist/assets/{chevron-down-Bzyofau8.js → chevron-down-DqJlk-z-.js} +1 -1
- package/frontend/dist/assets/chevron-left-ADs1oMLf.js +7 -0
- package/frontend/dist/assets/{file-text-eaaujWBr.js → file-text-0i5NEvQ3.js} +1 -1
- package/frontend/dist/assets/{index-BRZSUCNz.js → index-BcTWKUVp.js} +1 -1
- package/frontend/dist/assets/{index-BXMeGbDt.js → index-BicNGyh6.js} +1 -1
- package/frontend/dist/assets/{index-BN_T0UV9.js → index-Bni5vqf8.js} +1 -1
- package/frontend/dist/assets/index-BpdaJxoa.css +1 -0
- package/frontend/dist/assets/{index-DXjluyd1.js → index-D5jbTY4Z.js} +3 -3
- package/frontend/dist/assets/{jszip.min-DPhtdqr8.js → jszip.min-CXhYhQvA.js} +1 -1
- package/frontend/dist/assets/{save-B8Uv2Egn.js → save-BFBfbWoK.js} +1 -1
- package/frontend/dist/assets/{search-Duax5rfs.js → search-DUINGkQd.js} +1 -1
- package/frontend/dist/assets/{select-CbDg1CtL.js → select-DxHj2qKT.js} +1 -1
- package/frontend/dist/assets/{tabs-8Bm08Uka.js → tabs-6zanHiRL.js} +1 -1
- package/frontend/dist/assets/{textarea-CpK1BCh-.js → textarea-DdVP5OsI.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +36 -10
- package/backend/dist/backup/config.d.ts +0 -10
- package/backend/dist/backup/config.d.ts.map +0 -1
- package/backend/dist/backup/config.js +0 -128
- package/backend/dist/backup/config.js.map +0 -1
- package/backend/dist/backup/engine.d.ts +0 -22
- package/backend/dist/backup/engine.d.ts.map +0 -1
- package/backend/dist/backup/engine.js +0 -298
- package/backend/dist/backup/engine.js.map +0 -1
- package/backend/dist/backup/providers/dropbox.d.ts +0 -25
- package/backend/dist/backup/providers/dropbox.d.ts.map +0 -1
- package/backend/dist/backup/providers/dropbox.js +0 -320
- package/backend/dist/backup/providers/dropbox.js.map +0 -1
- package/backend/dist/backup/providers/google-drive.d.ts +0 -29
- package/backend/dist/backup/providers/google-drive.d.ts.map +0 -1
- package/backend/dist/backup/providers/google-drive.js +0 -303
- package/backend/dist/backup/providers/google-drive.js.map +0 -1
- package/backend/dist/backup/providers/index.d.ts +0 -3
- package/backend/dist/backup/providers/index.d.ts.map +0 -1
- package/backend/dist/backup/providers/index.js +0 -19
- package/backend/dist/backup/providers/index.js.map +0 -1
- package/backend/dist/backup/providers/onedrive.d.ts +0 -29
- package/backend/dist/backup/providers/onedrive.d.ts.map +0 -1
- package/backend/dist/backup/providers/onedrive.js +0 -317
- package/backend/dist/backup/providers/onedrive.js.map +0 -1
- package/backend/dist/backup/scheduler.d.ts +0 -6
- package/backend/dist/backup/scheduler.d.ts.map +0 -1
- package/backend/dist/backup/scheduler.js +0 -55
- package/backend/dist/backup/scheduler.js.map +0 -1
- package/backend/dist/backup/types.d.ts +0 -73
- package/backend/dist/backup/types.d.ts.map +0 -1
- package/backend/dist/backup/types.js +0 -4
- package/backend/dist/backup/types.js.map +0 -1
- package/backend/dist/chat-process-manager.d.ts +0 -45
- package/backend/dist/chat-process-manager.d.ts.map +0 -1
- package/backend/dist/chat-process-manager.js +0 -258
- package/backend/dist/chat-process-manager.js.map +0 -1
- package/backend/dist/flows/runner.d.ts +0 -37
- package/backend/dist/flows/runner.d.ts.map +0 -1
- package/backend/dist/flows/runner.js +0 -660
- package/backend/dist/flows/runner.js.map +0 -1
- package/backend/dist/flows/store.d.ts +0 -40
- package/backend/dist/flows/store.d.ts.map +0 -1
- package/backend/dist/flows/store.js +0 -284
- package/backend/dist/flows/store.js.map +0 -1
- package/backend/dist/flows/types.d.ts +0 -176
- package/backend/dist/flows/types.d.ts.map +0 -1
- package/backend/dist/flows/types.js +0 -25
- package/backend/dist/flows/types.js.map +0 -1
- package/backend/dist/information/condenser.d.ts +0 -12
- package/backend/dist/information/condenser.d.ts.map +0 -1
- package/backend/dist/information/condenser.js +0 -568
- package/backend/dist/information/condenser.js.map +0 -1
- package/backend/dist/information/conversation-sync.d.ts +0 -22
- package/backend/dist/information/conversation-sync.d.ts.map +0 -1
- package/backend/dist/information/conversation-sync.js +0 -500
- package/backend/dist/information/conversation-sync.js.map +0 -1
- package/backend/dist/information/types.d.ts +0 -36
- package/backend/dist/information/types.d.ts.map +0 -1
- package/backend/dist/information/types.js +0 -4
- package/backend/dist/information/types.js.map +0 -1
- package/backend/dist/memory-pool/buoyancy.d.ts +0 -2
- package/backend/dist/memory-pool/buoyancy.d.ts.map +0 -1
- package/backend/dist/memory-pool/buoyancy.js +0 -12
- package/backend/dist/memory-pool/buoyancy.js.map +0 -1
- package/backend/dist/memory-pool/global-pool-manager.d.ts +0 -12
- package/backend/dist/memory-pool/global-pool-manager.d.ts.map +0 -1
- package/backend/dist/memory-pool/global-pool-manager.js +0 -295
- package/backend/dist/memory-pool/global-pool-manager.js.map +0 -1
- package/backend/dist/memory-pool/pool-lock.d.ts +0 -2
- package/backend/dist/memory-pool/pool-lock.d.ts.map +0 -1
- package/backend/dist/memory-pool/pool-lock.js +0 -31
- package/backend/dist/memory-pool/pool-lock.js.map +0 -1
- package/backend/dist/memory-pool/pool-manager.d.ts +0 -57
- package/backend/dist/memory-pool/pool-manager.d.ts.map +0 -1
- package/backend/dist/memory-pool/pool-manager.js +0 -322
- package/backend/dist/memory-pool/pool-manager.js.map +0 -1
- package/backend/dist/memory-pool/templates.d.ts +0 -5
- package/backend/dist/memory-pool/templates.d.ts.map +0 -1
- package/backend/dist/memory-pool/templates.js +0 -234
- package/backend/dist/memory-pool/templates.js.map +0 -1
- package/backend/dist/memory-pool/types.d.ts +0 -61
- package/backend/dist/memory-pool/types.d.ts.map +0 -1
- package/backend/dist/memory-pool/types.js +0 -4
- package/backend/dist/memory-pool/types.js.map +0 -1
- package/backend/dist/plan-control/checker.d.ts +0 -3
- package/backend/dist/plan-control/checker.d.ts.map +0 -1
- package/backend/dist/plan-control/checker.js +0 -103
- package/backend/dist/plan-control/checker.js.map +0 -1
- package/backend/dist/plan-control/executor.d.ts +0 -93
- package/backend/dist/plan-control/executor.d.ts.map +0 -1
- package/backend/dist/plan-control/executor.js +0 -955
- package/backend/dist/plan-control/executor.js.map +0 -1
- package/backend/dist/plan-control/parser.d.ts +0 -12
- package/backend/dist/plan-control/parser.d.ts.map +0 -1
- package/backend/dist/plan-control/parser.js +0 -216
- package/backend/dist/plan-control/parser.js.map +0 -1
- package/backend/dist/plan-control/templates.d.ts +0 -4
- package/backend/dist/plan-control/templates.d.ts.map +0 -1
- package/backend/dist/plan-control/templates.js +0 -271
- package/backend/dist/plan-control/templates.js.map +0 -1
- package/backend/dist/plan-control/types.d.ts +0 -102
- package/backend/dist/plan-control/types.d.ts.map +0 -1
- package/backend/dist/plan-control/types.js +0 -12
- package/backend/dist/plan-control/types.js.map +0 -1
- package/backend/dist/routes/backup.d.ts +0 -4
- package/backend/dist/routes/backup.d.ts.map +0 -1
- package/backend/dist/routes/backup.js +0 -274
- package/backend/dist/routes/backup.js.map +0 -1
- package/backend/dist/routes/flows.d.ts +0 -5
- package/backend/dist/routes/flows.d.ts.map +0 -1
- package/backend/dist/routes/flows.js +0 -457
- package/backend/dist/routes/flows.js.map +0 -1
- package/backend/dist/routes/global-flows.d.ts +0 -3
- package/backend/dist/routes/global-flows.d.ts.map +0 -1
- package/backend/dist/routes/global-flows.js +0 -90
- package/backend/dist/routes/global-flows.js.map +0 -1
- package/backend/dist/routes/information.d.ts +0 -3
- package/backend/dist/routes/information.d.ts.map +0 -1
- package/backend/dist/routes/information.js +0 -159
- package/backend/dist/routes/information.js.map +0 -1
- package/backend/dist/routes/memory-pool.d.ts +0 -3
- package/backend/dist/routes/memory-pool.d.ts.map +0 -1
- package/backend/dist/routes/memory-pool.js +0 -837
- package/backend/dist/routes/memory-pool.js.map +0 -1
- package/backend/dist/routes/plan-control.d.ts +0 -15
- package/backend/dist/routes/plan-control.d.ts.map +0 -1
- package/backend/dist/routes/plan-control.js +0 -337
- package/backend/dist/routes/plan-control.js.map +0 -1
- package/backend/dist/routes/share.d.ts +0 -3
- package/backend/dist/routes/share.d.ts.map +0 -1
- package/backend/dist/routes/share.js +0 -167
- package/backend/dist/routes/share.js.map +0 -1
- package/backend/dist/routes/sounds.d.ts +0 -3
- package/backend/dist/routes/sounds.d.ts.map +0 -1
- package/backend/dist/routes/sounds.js +0 -285
- package/backend/dist/routes/sounds.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts +0 -24
- package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-starter-templates.js +0 -175
- package/backend/dist/tracks/__tests__/verify-starter-templates.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts +0 -23
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-cancel.js +0 -153
- package/backend/dist/tracks/__tests__/verify-track-cancel.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts +0 -11
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-t1.js +0 -293
- package/backend/dist/tracks/__tests__/verify-track-t1.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track.d.ts +0 -20
- package/backend/dist/tracks/__tests__/verify-track.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track.js +0 -187
- package/backend/dist/tracks/__tests__/verify-track.js.map +0 -1
- package/backend/dist/tracks/registry.d.ts +0 -61
- package/backend/dist/tracks/registry.d.ts.map +0 -1
- package/backend/dist/tracks/registry.js +0 -202
- package/backend/dist/tracks/registry.js.map +0 -1
- package/backend/dist/tracks/track-runner.d.ts +0 -69
- package/backend/dist/tracks/track-runner.d.ts.map +0 -1
- package/backend/dist/tracks/track-runner.js +0 -158
- package/backend/dist/tracks/track-runner.js.map +0 -1
- package/backend/dist/tracks/train-loader.d.ts +0 -44
- package/backend/dist/tracks/train-loader.d.ts.map +0 -1
- package/backend/dist/tracks/train-loader.js +0 -32
- package/backend/dist/tracks/train-loader.js.map +0 -1
- package/backend/dist/tracks/types-train.d.ts +0 -12
- package/backend/dist/tracks/types-train.d.ts.map +0 -1
- package/backend/dist/tracks/types-train.js +0 -13
- package/backend/dist/tracks/types-train.js.map +0 -1
- package/backend/dist/usage-terminal.d.ts +0 -18
- package/backend/dist/usage-terminal.d.ts.map +0 -1
- package/backend/dist/usage-terminal.js +0 -191
- package/backend/dist/usage-terminal.js.map +0 -1
- package/frontend/dist/assets/NotebookPage-Dy1fFqcp.js +0 -13
- package/frontend/dist/assets/index-CgRMBOJu.css +0 -1
|
@@ -1,568 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// backend/src/information/condenser.ts
|
|
3
|
-
//
|
|
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.
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
-
}) : function(o, v) {
|
|
21
|
-
o["default"] = v;
|
|
22
|
-
});
|
|
23
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
-
var ownKeys = function(o) {
|
|
25
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
-
var ar = [];
|
|
27
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
-
return ar;
|
|
29
|
-
};
|
|
30
|
-
return ownKeys(o);
|
|
31
|
-
};
|
|
32
|
-
return function (mod) {
|
|
33
|
-
if (mod && mod.__esModule) return mod;
|
|
34
|
-
var result = {};
|
|
35
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
-
__setModuleDefault(result, mod);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
|
-
})();
|
|
40
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.condenseConversation = condenseConversation;
|
|
42
|
-
exports.reorganizeConversation = reorganizeConversation;
|
|
43
|
-
const fs = __importStar(require("fs"));
|
|
44
|
-
const path = __importStar(require("path"));
|
|
45
|
-
const child_process_1 = require("child_process");
|
|
46
|
-
const config_1 = require("../config");
|
|
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 = /不要|别|错了|改成|不是这样|必须|禁止|永远不要|以后请/;
|
|
52
|
-
function estimateTokens(text) {
|
|
53
|
-
return Math.ceil(text.length / 4);
|
|
54
|
-
}
|
|
55
|
-
// ── Claude CLI ──
|
|
56
|
-
function callHaiku(prompt) {
|
|
57
|
-
return new Promise((resolve, reject) => {
|
|
58
|
-
(0, child_process_1.execFile)('claude', ['-p', prompt, '--model', 'haiku'], { timeout: 120000, maxBuffer: 8 * 1024 * 1024 }, (err, stdout) => {
|
|
59
|
-
if (err)
|
|
60
|
-
return reject(err);
|
|
61
|
-
resolve(stdout);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
}
|
|
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
|
-
}
|
|
92
|
-
function parseTurns(content) {
|
|
93
|
-
const sections = content.split(/(?=^## [UA]\d+)/m).filter(Boolean);
|
|
94
|
-
return sections.map(s => {
|
|
95
|
-
const match = s.match(/^(## [UA]\d+.*)\n/);
|
|
96
|
-
if (!match)
|
|
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 = `你是一个对话缩减器。目标:大幅压缩对话,只保留对未来 LLM 行为有影响的信息。
|
|
111
|
-
|
|
112
|
-
## 必须激进缩减为一句话的内容(这些占对话的 80%+):
|
|
113
|
-
- LLM 的工具调用和输出 → "执行了 X,结果:Y"
|
|
114
|
-
- 构建/发布日志 → "构建成功" 或 "发布 vX.Y.Z"
|
|
115
|
-
- 代码修改的详细描述 → "修改了 file.ts 的 funcName"
|
|
116
|
-
- 文件内容展示 → "读取了 file.ts"
|
|
117
|
-
- 搜索/grep 结果 → "搜索 X,找到 N 处"
|
|
118
|
-
- LLM 的解释性文字("让我检查一下""我来看看"等) → 删除
|
|
119
|
-
- 重复的同类操作(多次发版、多次构建) → 只保留最后一次的结果
|
|
120
|
-
|
|
121
|
-
## 必须保留原文的内容(condensed 设为 null):
|
|
122
|
-
- 用户纠正 LLM 的发言("不对""错了""改成""不要")
|
|
123
|
-
- 用户表达需求或偏好("我希望""请实现""以后请")
|
|
124
|
-
- 设计决策讨论("为什么选 A 不选 B")
|
|
125
|
-
- 错误诊断("报错 X,原因是 Y")
|
|
126
|
-
- 标记了 [已缩减] 的轮次
|
|
127
|
-
|
|
128
|
-
## 不得违反:
|
|
129
|
-
- 绝不改变语义方向(肯定↔否定)
|
|
130
|
-
- 保留版本号、文件路径等标识符
|
|
131
|
-
|
|
132
|
-
对每轮输出 JSON:
|
|
133
|
-
[{"turn":"U1","condensed":"缩减内容或null","cohesion":0.8},...]
|
|
134
|
-
cohesion: 与上一轮的话题相关性(0-1)`;
|
|
135
|
-
function buildSegmentPrompt(turns, condensedUpTo, contextSummary) {
|
|
136
|
-
const parts = [CONDENSE_RULES, ''];
|
|
137
|
-
if (contextSummary) {
|
|
138
|
-
parts.push(`[前文摘要:${contextSummary}]`, '');
|
|
139
|
-
}
|
|
140
|
-
parts.push('对话:');
|
|
141
|
-
for (let i = 0; i < turns.length; i++) {
|
|
142
|
-
const t = turns[i];
|
|
143
|
-
if (i < condensedUpTo) {
|
|
144
|
-
// Already condensed in previous iteration — mark as [已缩减]
|
|
145
|
-
parts.push(`## ${t.id} [已缩减]`);
|
|
146
|
-
parts.push(t.body);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
parts.push(`## ${t.id}`);
|
|
150
|
-
parts.push(t.body);
|
|
151
|
-
}
|
|
152
|
-
parts.push('');
|
|
153
|
-
}
|
|
154
|
-
return parts.join('\n');
|
|
155
|
-
}
|
|
156
|
-
// ── Context summary generation ──
|
|
157
|
-
function generateContextSummary(turns) {
|
|
158
|
-
// Take first sentence of each turn, max 5 turns
|
|
159
|
-
const summaryParts = [];
|
|
160
|
-
for (const t of turns.slice(0, 5)) {
|
|
161
|
-
const firstSentence = t.body.split(/[。!?\n]/)[0].slice(0, 40);
|
|
162
|
-
summaryParts.push(`${t.id}: ${firstSentence}`);
|
|
163
|
-
}
|
|
164
|
-
if (turns.length > 5)
|
|
165
|
-
summaryParts.push(`...共${turns.length}轮`);
|
|
166
|
-
return summaryParts.join(';');
|
|
167
|
-
}
|
|
168
|
-
// ── Select segment that fits in half window ──
|
|
169
|
-
function selectSegment(turns, startIdx, halfWindow) {
|
|
170
|
-
let total = 0;
|
|
171
|
-
const promptOverhead = estimateTokens(CONDENSE_RULES) + 200; // rules + formatting
|
|
172
|
-
total += promptOverhead;
|
|
173
|
-
for (let i = startIdx; i < turns.length; i++) {
|
|
174
|
-
const turnCost = turns[i].tokens + 20; // header + formatting overhead
|
|
175
|
-
if (total + turnCost > halfWindow && i > startIdx) {
|
|
176
|
-
// Ensure we end on a complete U-A pair
|
|
177
|
-
let endIdx = i;
|
|
178
|
-
// If endIdx splits a U-A pair (ends on U without A), back up one
|
|
179
|
-
if (endIdx > startIdx && turns[endIdx - 1]?.id.startsWith('U')) {
|
|
180
|
-
endIdx--;
|
|
181
|
-
}
|
|
182
|
-
return { endIdx: Math.max(startIdx + 2, endIdx), totalTokens: total };
|
|
183
|
-
}
|
|
184
|
-
total += turnCost;
|
|
185
|
-
}
|
|
186
|
-
return { endIdx: turns.length, totalTokens: total };
|
|
187
|
-
}
|
|
188
|
-
// ── Find lowest cohesion cut point ──
|
|
189
|
-
function findLowestCohesionCut(turns, startIdx, endIdx) {
|
|
190
|
-
let minCohesion = 2;
|
|
191
|
-
let cutIdx = Math.floor((startIdx + endIdx) / 2); // fallback: midpoint
|
|
192
|
-
for (let i = startIdx + 2; i < endIdx; i += 2) { // step by 2 to cut at U-A pair boundaries
|
|
193
|
-
const c = turns[i].cohesion;
|
|
194
|
-
if (c !== null && c < minCohesion) {
|
|
195
|
-
minCohesion = c;
|
|
196
|
-
cutIdx = i;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// If all cohesion > 0.8, use midpoint fallback
|
|
200
|
-
if (minCohesion > 0.8)
|
|
201
|
-
cutIdx = Math.floor((startIdx + endIdx) / 2);
|
|
202
|
-
return cutIdx;
|
|
203
|
-
}
|
|
204
|
-
// ── Pre-truncate oversized single turn ──
|
|
205
|
-
function truncateTurn(turn, maxTokens) {
|
|
206
|
-
const headTokens = Math.floor(maxTokens * 0.7);
|
|
207
|
-
const tailTokens = Math.floor(maxTokens * 0.2);
|
|
208
|
-
const headChars = headTokens * 4;
|
|
209
|
-
const tailChars = tailTokens * 4;
|
|
210
|
-
const omitted = estimateTokens(turn.body) - maxTokens;
|
|
211
|
-
const truncatedBody = turn.body.slice(0, headChars) +
|
|
212
|
-
`\n\n[...省略约 ${omitted} tokens...]\n\n` +
|
|
213
|
-
turn.body.slice(-tailChars);
|
|
214
|
-
return { ...turn, body: truncatedBody, tokens: estimateTokens(truncatedBody) };
|
|
215
|
-
}
|
|
216
|
-
// ── Iterative condense ──
|
|
217
|
-
// Strategy: slide a window through turns. Each window includes:
|
|
218
|
-
// 1. Context prefix: last CONTEXT_OVERLAP condensed turns from previous window (marked [已缩减])
|
|
219
|
-
// 2. New turns to condense (fills remaining window space)
|
|
220
|
-
// Haiku sees the context to understand conversation flow, but only condenses new turns.
|
|
221
|
-
const CONTEXT_OVERLAP = 6; // number of condensed turns to carry as context
|
|
222
|
-
const BUDGET_FOR_CONTEXT = 8000; // max tokens for context prefix
|
|
223
|
-
async function iterativeCondense(turns) {
|
|
224
|
-
const halfWindow = HALF_WINDOW_TOKENS;
|
|
225
|
-
const cohesionMap = {};
|
|
226
|
-
let condensedUpTo = 0;
|
|
227
|
-
// Pre-truncate any single turn larger than half window
|
|
228
|
-
for (let i = 0; i < turns.length; i++) {
|
|
229
|
-
if (turns[i].tokens > halfWindow * 0.8) {
|
|
230
|
-
turns[i] = truncateTurn(turns[i], Math.floor(halfWindow * 0.7));
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
console.log(`[condenser] starting iterative condense: ${turns.length} turns`);
|
|
234
|
-
while (condensedUpTo < turns.length) {
|
|
235
|
-
// 1. Build context prefix from last few condensed turns
|
|
236
|
-
let contextTurns = [];
|
|
237
|
-
let contextTokens = 0;
|
|
238
|
-
if (condensedUpTo > 0) {
|
|
239
|
-
const contextStart = Math.max(0, condensedUpTo - CONTEXT_OVERLAP);
|
|
240
|
-
for (let i = contextStart; i < condensedUpTo; i++) {
|
|
241
|
-
if (contextTokens + turns[i].tokens + 20 > BUDGET_FOR_CONTEXT)
|
|
242
|
-
break;
|
|
243
|
-
contextTurns.push(turns[i]);
|
|
244
|
-
contextTokens += turns[i].tokens + 20;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
// Also prepend a summary of everything before the context window
|
|
248
|
-
let contextSummary = '';
|
|
249
|
-
const contextStartIdx = condensedUpTo > CONTEXT_OVERLAP ? condensedUpTo - CONTEXT_OVERLAP : 0;
|
|
250
|
-
if (contextStartIdx > 0) {
|
|
251
|
-
contextSummary = generateContextSummary(turns.slice(0, contextStartIdx));
|
|
252
|
-
}
|
|
253
|
-
// 2. Fill remaining window with new turns
|
|
254
|
-
const availableForNew = halfWindow - contextTokens - estimateTokens(CONDENSE_RULES) - 500;
|
|
255
|
-
let newEnd = condensedUpTo;
|
|
256
|
-
let newTokens = 0;
|
|
257
|
-
while (newEnd < turns.length) {
|
|
258
|
-
const cost = turns[newEnd].tokens + 20;
|
|
259
|
-
if (newTokens + cost > availableForNew && newEnd > condensedUpTo)
|
|
260
|
-
break;
|
|
261
|
-
newTokens += cost;
|
|
262
|
-
newEnd++;
|
|
263
|
-
}
|
|
264
|
-
if (newEnd <= condensedUpTo)
|
|
265
|
-
break; // Stuck — no new turns fit
|
|
266
|
-
// 3. Build prompt: context (marked [已缩减]) + new turns (to condense)
|
|
267
|
-
const segmentTurns = [...contextTurns, ...turns.slice(condensedUpTo, newEnd)];
|
|
268
|
-
const prompt = buildSegmentPrompt(segmentTurns, contextTurns.length, contextSummary);
|
|
269
|
-
// 4. Call Haiku
|
|
270
|
-
const results = await callHaikuAndParse(prompt, turns, condensedUpTo, newEnd, condensedUpTo);
|
|
271
|
-
applyResults(turns, results, condensedUpTo, newEnd, cohesionMap);
|
|
272
|
-
console.log(`[condenser] iteration: turns ${condensedUpTo}-${newEnd} (context: ${contextTurns.length} turns), ${results.size} results from Haiku`);
|
|
273
|
-
condensedUpTo = newEnd;
|
|
274
|
-
}
|
|
275
|
-
console.log(`[condenser] done: ${condensedUpTo}/${turns.length} turns processed`);
|
|
276
|
-
return { condensedTurns: turns, cohesionMap };
|
|
277
|
-
}
|
|
278
|
-
async function callHaikuAndParse(prompt, allTurns, segStart, segEnd, condensedUpTo) {
|
|
279
|
-
let rawResult;
|
|
280
|
-
try {
|
|
281
|
-
rawResult = await callHaiku(prompt);
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
// On failure, skip this segment (leave turns as-is)
|
|
285
|
-
console.error('[condenser] Haiku call failed:', err instanceof Error ? err.message : err);
|
|
286
|
-
return new Map();
|
|
287
|
-
}
|
|
288
|
-
let parsed;
|
|
289
|
-
try {
|
|
290
|
-
parsed = extractJsonArray(rawResult);
|
|
291
|
-
}
|
|
292
|
-
catch {
|
|
293
|
-
console.error('[condenser] JSON parse failed, skipping segment');
|
|
294
|
-
return new Map();
|
|
295
|
-
}
|
|
296
|
-
const resultMap = new Map();
|
|
297
|
-
for (const r of parsed) {
|
|
298
|
-
resultMap.set(r.turn, r);
|
|
299
|
-
}
|
|
300
|
-
return resultMap;
|
|
301
|
-
}
|
|
302
|
-
function applyResults(turns, results, condensedUpTo, segEnd, cohesionMap) {
|
|
303
|
-
let applied = 0;
|
|
304
|
-
let skippedUncondensable = 0;
|
|
305
|
-
let skippedAlready = 0;
|
|
306
|
-
let noResult = 0;
|
|
307
|
-
let keptNull = 0;
|
|
308
|
-
for (let i = condensedUpTo; i < segEnd && i < turns.length; i++) {
|
|
309
|
-
const t = turns[i];
|
|
310
|
-
const r = results.get(t.id);
|
|
311
|
-
// Record cohesion
|
|
312
|
-
if (r?.cohesion !== undefined) {
|
|
313
|
-
t.cohesion = r.cohesion;
|
|
314
|
-
cohesionMap[t.id] = r.cohesion;
|
|
315
|
-
}
|
|
316
|
-
// Guard rail: protect uncondensable user turns
|
|
317
|
-
if (t.id.startsWith('U') && UNCONDENSABLE_RE.test(t.body)) {
|
|
318
|
-
t.condensed = true;
|
|
319
|
-
skippedUncondensable++;
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
322
|
-
// Guard rail: already condensed turns must not be re-condensed
|
|
323
|
-
if (t.condensed) {
|
|
324
|
-
skippedAlready++;
|
|
325
|
-
continue;
|
|
326
|
-
}
|
|
327
|
-
if (!r) {
|
|
328
|
-
noResult++;
|
|
329
|
-
t.condensed = true;
|
|
330
|
-
continue;
|
|
331
|
-
}
|
|
332
|
-
// Apply condensation
|
|
333
|
-
if (r.condensed !== null && r.condensed !== undefined) {
|
|
334
|
-
t.body = r.condensed;
|
|
335
|
-
t.tokens = estimateTokens(r.condensed);
|
|
336
|
-
applied++;
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
keptNull++;
|
|
340
|
-
}
|
|
341
|
-
t.condensed = true;
|
|
342
|
-
}
|
|
343
|
-
console.log(`[condenser] applyResults: applied=${applied} keptNull=${keptNull} noResult=${noResult} skippedUncondensable=${skippedUncondensable} skippedAlready=${skippedAlready} totalResults=${results.size}`);
|
|
344
|
-
}
|
|
345
|
-
// ── Build final content with markers ──
|
|
346
|
-
function buildFinalContent(originalTurns, // from v0.md (for token % calculation)
|
|
347
|
-
condensedTurns, prevMarkers, level) {
|
|
348
|
-
const lines = [];
|
|
349
|
-
for (let i = 0; i < condensedTurns.length; i++) {
|
|
350
|
-
const ct = condensedTurns[i];
|
|
351
|
-
const ot = originalTurns.find(t => t.id === ct.id);
|
|
352
|
-
const origTokens = ot ? ot.tokens : ct.tokens;
|
|
353
|
-
const newTokens = ct.tokens;
|
|
354
|
-
let marker = '';
|
|
355
|
-
if (origTokens > 0 && newTokens < origTokens * 0.95) {
|
|
356
|
-
// Content was actually condensed (>5% reduction)
|
|
357
|
-
const pct = Math.round(newTokens / origTokens * 100);
|
|
358
|
-
const prevChain = prevMarkers.get(ct.id) || '';
|
|
359
|
-
marker = prevChain ? ` [c${level},${pct}%;${prevChain}]` : ` [c${level},${pct}%]`;
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
const existing = prevMarkers.get(ct.id);
|
|
363
|
-
if (existing)
|
|
364
|
-
marker = ` [${existing}]`;
|
|
365
|
-
}
|
|
366
|
-
lines.push(`## ${ct.id}${marker}`);
|
|
367
|
-
lines.push(ct.body);
|
|
368
|
-
lines.push('');
|
|
369
|
-
}
|
|
370
|
-
return lines.join('\n');
|
|
371
|
-
}
|
|
372
|
-
// ── Public: condenseConversation ──
|
|
373
|
-
async function condenseConversation(convDir) {
|
|
374
|
-
const meta = (0, conversation_sync_1.readMeta)(convDir);
|
|
375
|
-
if (!meta)
|
|
376
|
-
return null;
|
|
377
|
-
const latestEntry = meta.versions[meta.latest];
|
|
378
|
-
if (!latestEntry)
|
|
379
|
-
return null;
|
|
380
|
-
const baseContent = fs.readFileSync(path.join(convDir, latestEntry.file), 'utf-8');
|
|
381
|
-
const v0Content = fs.readFileSync(path.join(convDir, 'v0.md'), 'utf-8');
|
|
382
|
-
const originalTurns = parseTurns(v0Content);
|
|
383
|
-
const baseTurns = parseTurns(baseContent);
|
|
384
|
-
// Build prev markers map
|
|
385
|
-
const prevMarkers = new Map();
|
|
386
|
-
for (const t of baseTurns) {
|
|
387
|
-
const chain = extractMarkerChain(t.header);
|
|
388
|
-
if (chain)
|
|
389
|
-
prevMarkers.set(t.id, chain);
|
|
390
|
-
}
|
|
391
|
-
// Run iterative condense on base turns (deep copy bodies)
|
|
392
|
-
const workingTurns = baseTurns.map(t => ({ ...t, condensed: /\[c\d+/.test(t.header) }));
|
|
393
|
-
const { condensedTurns, cohesionMap } = await iterativeCondense(workingTurns);
|
|
394
|
-
// Determine next version
|
|
395
|
-
const versionNumbers = Object.keys(meta.versions).map(v => parseInt(v.replace('v', ''))).filter(n => !isNaN(n));
|
|
396
|
-
const nextNum = Math.max(...versionNumbers) + 1;
|
|
397
|
-
const nextVersion = `v${nextNum}`;
|
|
398
|
-
// Build final content with markers
|
|
399
|
-
const condensedContent = buildFinalContent(originalTurns, condensedTurns, prevMarkers, nextNum);
|
|
400
|
-
const afterTokens = estimateTokens(condensedContent);
|
|
401
|
-
const beforeTokens = latestEntry.tokens;
|
|
402
|
-
// Write file
|
|
403
|
-
const fileName = `${nextVersion}.md`;
|
|
404
|
-
(0, config_1.atomicWriteSync)(path.join(convDir, fileName), condensedContent);
|
|
405
|
-
// Update meta
|
|
406
|
-
meta.versions[nextVersion] = {
|
|
407
|
-
file: fileName,
|
|
408
|
-
tokens: afterTokens,
|
|
409
|
-
created_at: new Date().toISOString(),
|
|
410
|
-
action: 'condense',
|
|
411
|
-
base: meta.latest,
|
|
412
|
-
};
|
|
413
|
-
meta.latest = nextVersion;
|
|
414
|
-
// Merge cohesion map
|
|
415
|
-
meta.cohesion_map = { ...meta.cohesion_map, ...cohesionMap };
|
|
416
|
-
(0, conversation_sync_1.writeMeta)(convDir, meta);
|
|
417
|
-
return { version: nextVersion, before_tokens: beforeTokens, after_tokens: afterTokens };
|
|
418
|
-
}
|
|
419
|
-
// ── Public: reorganizeConversation ──
|
|
420
|
-
async function reorganizeConversation(convDir) {
|
|
421
|
-
const meta = (0, conversation_sync_1.readMeta)(convDir);
|
|
422
|
-
if (!meta)
|
|
423
|
-
return null;
|
|
424
|
-
if (meta.reorganize_count >= 2)
|
|
425
|
-
return null;
|
|
426
|
-
const byTurn = meta.expand_stats.by_turn;
|
|
427
|
-
const v0Content = fs.readFileSync(path.join(convDir, 'v0.md'), 'utf-8');
|
|
428
|
-
const originalTurns = parseTurns(v0Content);
|
|
429
|
-
const highAttention = [];
|
|
430
|
-
const lowAttention = [];
|
|
431
|
-
const neverAccessed = [];
|
|
432
|
-
for (const turn of originalTurns) {
|
|
433
|
-
const count = byTurn[turn.id] || 0;
|
|
434
|
-
if (count >= 3)
|
|
435
|
-
highAttention.push(turn.id);
|
|
436
|
-
else if (count >= 1)
|
|
437
|
-
lowAttention.push(turn.id);
|
|
438
|
-
else
|
|
439
|
-
neverAccessed.push(turn.id);
|
|
440
|
-
}
|
|
441
|
-
if (highAttention.length === 0)
|
|
442
|
-
return null;
|
|
443
|
-
const workingTurns = originalTurns.map(t => ({ ...t, condensed: false }));
|
|
444
|
-
const highSet = new Set(highAttention);
|
|
445
|
-
const halfWindow = HALF_WINDOW_TOKENS;
|
|
446
|
-
let condensedUpTo = 0;
|
|
447
|
-
const cohesionMap = {};
|
|
448
|
-
// Pre-truncate oversized turns
|
|
449
|
-
for (let i = 0; i < workingTurns.length; i++) {
|
|
450
|
-
if (workingTurns[i].tokens > halfWindow * 0.8) {
|
|
451
|
-
workingTurns[i] = truncateTurn(workingTurns[i], Math.floor(halfWindow * 0.7));
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
// Iterative sliding window (same strategy as condense)
|
|
455
|
-
while (condensedUpTo < workingTurns.length) {
|
|
456
|
-
let contextTurns = [];
|
|
457
|
-
let contextTokens = 0;
|
|
458
|
-
if (condensedUpTo > 0) {
|
|
459
|
-
const ctxStart = Math.max(0, condensedUpTo - CONTEXT_OVERLAP);
|
|
460
|
-
for (let i = ctxStart; i < condensedUpTo; i++) {
|
|
461
|
-
if (contextTokens + workingTurns[i].tokens + 20 > BUDGET_FOR_CONTEXT)
|
|
462
|
-
break;
|
|
463
|
-
contextTurns.push(workingTurns[i]);
|
|
464
|
-
contextTokens += workingTurns[i].tokens + 20;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
let contextSummary = '';
|
|
468
|
-
const ctxStartIdx = condensedUpTo > CONTEXT_OVERLAP ? condensedUpTo - CONTEXT_OVERLAP : 0;
|
|
469
|
-
if (ctxStartIdx > 0)
|
|
470
|
-
contextSummary = generateContextSummary(workingTurns.slice(0, ctxStartIdx));
|
|
471
|
-
const reorgRulesTokens = 600; // approximate
|
|
472
|
-
const availableForNew = halfWindow - contextTokens - reorgRulesTokens - estimateTokens(CONDENSE_RULES);
|
|
473
|
-
let newEnd = condensedUpTo;
|
|
474
|
-
let newTokens = 0;
|
|
475
|
-
while (newEnd < workingTurns.length) {
|
|
476
|
-
const cost = workingTurns[newEnd].tokens + 20;
|
|
477
|
-
if (newTokens + cost > availableForNew && newEnd > condensedUpTo)
|
|
478
|
-
break;
|
|
479
|
-
newTokens += cost;
|
|
480
|
-
newEnd++;
|
|
481
|
-
}
|
|
482
|
-
if (newEnd <= condensedUpTo)
|
|
483
|
-
break;
|
|
484
|
-
// Build reorganize prompt with attention hints
|
|
485
|
-
const promptParts = [
|
|
486
|
-
`你是一个对话重整器。基于使用数据,激进缩减对话。`,
|
|
487
|
-
``,
|
|
488
|
-
`高关注轮次(用户反复查看,保留更多细节):${highAttention.join(', ')}`,
|
|
489
|
-
`低关注轮次(大幅缩减为一句话):${lowAttention.join(', ')}`,
|
|
490
|
-
`从未访问的轮次(高度缩减为几个字):${neverAccessed.join(', ')}`,
|
|
491
|
-
``,
|
|
492
|
-
`## 必须激进缩减的内容:`,
|
|
493
|
-
`- 工具调用和输出 → "执行了 X,结果:Y"`,
|
|
494
|
-
`- 构建/发布日志 → "构建成功" 或 "发布 vX.Y.Z"`,
|
|
495
|
-
`- 代码修改描述 → "修改了 file.ts"`,
|
|
496
|
-
`- 文件内容展示 → "读取了 file.ts"`,
|
|
497
|
-
`- LLM 解释性文字("让我检查""我来看看") → 删除`,
|
|
498
|
-
``,
|
|
499
|
-
`## 必须保留原文(condensed 设为 null):`,
|
|
500
|
-
`- 高关注轮次中的用户需求和决策讨论`,
|
|
501
|
-
`- 用户纠正/否定("不对""错了""改成")`,
|
|
502
|
-
`- 标记了 [已缩减] 的轮次`,
|
|
503
|
-
``,
|
|
504
|
-
`## 不得违反:绝不改变语义方向,保留版本号和文件路径`,
|
|
505
|
-
``,
|
|
506
|
-
`对每轮输出 JSON:[{"turn":"U1","condensed":"缩减内容或null","cohesion":0.8},...]`,
|
|
507
|
-
];
|
|
508
|
-
if (contextSummary)
|
|
509
|
-
promptParts.push(``, `[前文摘要:${contextSummary}]`);
|
|
510
|
-
promptParts.push(``, `对话:`);
|
|
511
|
-
for (const ct of contextTurns) {
|
|
512
|
-
promptParts.push(`## ${ct.id} [已缩减]`, ct.body, '');
|
|
513
|
-
}
|
|
514
|
-
for (let i = condensedUpTo; i < newEnd; i++) {
|
|
515
|
-
promptParts.push(`## ${workingTurns[i].id}`, workingTurns[i].body, '');
|
|
516
|
-
}
|
|
517
|
-
const results = await callHaikuAndParse(promptParts.join('\n'), workingTurns, condensedUpTo, newEnd, condensedUpTo);
|
|
518
|
-
for (let i = condensedUpTo; i < newEnd && i < workingTurns.length; i++) {
|
|
519
|
-
const t = workingTurns[i];
|
|
520
|
-
const r = results.get(t.id);
|
|
521
|
-
if (r?.cohesion !== undefined) {
|
|
522
|
-
t.cohesion = r.cohesion;
|
|
523
|
-
cohesionMap[t.id] = r.cohesion;
|
|
524
|
-
}
|
|
525
|
-
if (t.condensed)
|
|
526
|
-
continue;
|
|
527
|
-
if (t.id.startsWith('U') && UNCONDENSABLE_RE.test(t.body)) {
|
|
528
|
-
t.condensed = true;
|
|
529
|
-
continue;
|
|
530
|
-
}
|
|
531
|
-
if (highSet.has(t.id)) {
|
|
532
|
-
t.condensed = true;
|
|
533
|
-
continue;
|
|
534
|
-
}
|
|
535
|
-
if (r && r.condensed !== null && r.condensed !== undefined) {
|
|
536
|
-
t.body = r.condensed;
|
|
537
|
-
t.tokens = estimateTokens(r.condensed);
|
|
538
|
-
}
|
|
539
|
-
t.condensed = true;
|
|
540
|
-
}
|
|
541
|
-
condensedUpTo = newEnd;
|
|
542
|
-
}
|
|
543
|
-
// Build final
|
|
544
|
-
const versionNumbers = Object.keys(meta.versions).map(v => parseInt(v.replace('v', ''))).filter(n => !isNaN(n));
|
|
545
|
-
const nextNum = Math.max(...versionNumbers) + 1;
|
|
546
|
-
const nextVersion = `v${nextNum}`;
|
|
547
|
-
const condensedContent = buildFinalContent(originalTurns, workingTurns, new Map(), nextNum);
|
|
548
|
-
const afterTokens = estimateTokens(condensedContent);
|
|
549
|
-
const latestEntry = meta.versions[meta.latest];
|
|
550
|
-
const beforeTokens = latestEntry?.tokens ?? meta.original_tokens;
|
|
551
|
-
const fileName = `${nextVersion}.md`;
|
|
552
|
-
(0, config_1.atomicWriteSync)(path.join(convDir, fileName), condensedContent);
|
|
553
|
-
meta.versions[nextVersion] = {
|
|
554
|
-
file: fileName,
|
|
555
|
-
tokens: afterTokens,
|
|
556
|
-
created_at: new Date().toISOString(),
|
|
557
|
-
action: 'reorganize',
|
|
558
|
-
base: 'v0',
|
|
559
|
-
high_attention_turns: highAttention,
|
|
560
|
-
};
|
|
561
|
-
meta.latest = nextVersion;
|
|
562
|
-
meta.reorganize_count += 1;
|
|
563
|
-
meta.last_reorganize_at = new Date().toISOString();
|
|
564
|
-
meta.cohesion_map = { ...meta.cohesion_map, ...cohesionMap };
|
|
565
|
-
(0, conversation_sync_1.writeMeta)(convDir, meta);
|
|
566
|
-
return { version: nextVersion, before_tokens: beforeTokens, after_tokens: afterTokens, high_attention_turns: highAttention };
|
|
567
|
-
}
|
|
568
|
-
//# sourceMappingURL=condenser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"condenser.js","sourceRoot":"","sources":["../../src/information/condenser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ChatBlock } from '../session-manager';
|
|
2
|
-
import { ConversationMeta } from './types';
|
|
3
|
-
export declare function infoDir(projectFolder: string): string;
|
|
4
|
-
export declare function readMeta(convDir: string): ConversationMeta | null;
|
|
5
|
-
export declare function writeMeta(convDir: string, meta: ConversationMeta): void;
|
|
6
|
-
/** List all conversation IDs by scanning the information directory. */
|
|
7
|
-
export declare function listConversationIds(projectFolder: string): string[];
|
|
8
|
-
/**
|
|
9
|
-
* Sync a JSONL file to .ccweb/information/{jsonlId}/.
|
|
10
|
-
* Overwrites v0.md if already exists (JSONL may have grown via --continue).
|
|
11
|
-
* Returns conversation ID or null if too short.
|
|
12
|
-
*/
|
|
13
|
-
export declare function syncFromJsonl(projectFolder: string, jsonlPath: string, chatBlocks: ChatBlock[]): string | null;
|
|
14
|
-
/**
|
|
15
|
-
* Scan JSONL files and sync any not yet in .ccweb/information/.
|
|
16
|
-
*/
|
|
17
|
-
export declare function compensationSync(projectFolder: string, cliTool: string, parseLineBlocksFn: (line: string) => ChatBlock | null, force?: boolean): {
|
|
18
|
-
synced: number;
|
|
19
|
-
updated: number;
|
|
20
|
-
errors: number;
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=conversation-sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-sync.d.ts","sourceRoot":"","sources":["../../src/information/conversation-sync.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQ3C,wBAAgB,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAErD;AAMD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQjE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEvE;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAWnE;AAyFD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,EAAE,GACtB,MAAM,GAAG,IAAI,CA2Of;AAgCD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,EACrD,KAAK,UAAQ,GACZ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwDrD"}
|