@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.
Files changed (237) hide show
  1. package/CHANGELOG.json +92 -20
  2. package/backend/dist/adapters/claude-adapter.d.ts +4 -0
  3. package/backend/dist/adapters/claude-adapter.d.ts.map +1 -1
  4. package/backend/dist/adapters/claude-adapter.js +18 -2
  5. package/backend/dist/adapters/claude-adapter.js.map +1 -1
  6. package/backend/dist/adapters/types.d.ts +8 -0
  7. package/backend/dist/adapters/types.d.ts.map +1 -1
  8. package/backend/dist/auth.d.ts.map +0 -0
  9. package/backend/dist/config.d.ts +0 -0
  10. package/backend/dist/config.js +0 -0
  11. package/backend/dist/config.js.map +0 -0
  12. package/backend/dist/hooks-manager.d.ts.map +1 -1
  13. package/backend/dist/hooks-manager.js +19 -3
  14. package/backend/dist/hooks-manager.js.map +1 -1
  15. package/backend/dist/index.d.ts.map +1 -1
  16. package/backend/dist/index.js +53 -1
  17. package/backend/dist/index.js.map +1 -1
  18. package/backend/dist/routes/auth.d.ts +0 -0
  19. package/backend/dist/routes/auth.d.ts.map +0 -0
  20. package/backend/dist/routes/auth.js.map +0 -0
  21. package/backend/dist/routes/projects.d.ts.map +0 -0
  22. package/backend/dist/routes/projects.js.map +0 -0
  23. package/backend/dist/session-manager.d.ts +0 -0
  24. package/backend/dist/session-manager.d.ts.map +0 -0
  25. package/backend/dist/session-manager.js +0 -0
  26. package/backend/dist/session-manager.js.map +0 -0
  27. package/backend/dist/terminal-manager.d.ts +10 -1
  28. package/backend/dist/terminal-manager.d.ts.map +1 -1
  29. package/backend/dist/terminal-manager.js +19 -2
  30. package/backend/dist/terminal-manager.js.map +1 -1
  31. package/backend/dist/types.d.ts +0 -0
  32. package/backend/dist/types.d.ts.map +0 -0
  33. package/backend/dist/types.js +0 -0
  34. package/backend/dist/types.js.map +0 -0
  35. package/bin/ccweb.js +1 -2
  36. package/frontend/dist/assets/{ChatOverlay-Jcso3jnE.js → ChatOverlay-BoPckOLq.js} +1 -1
  37. package/frontend/dist/assets/{ClaudeMemPage-egGwexFX.js → ClaudeMemPage-CeaZSvKE.js} +1 -1
  38. package/frontend/dist/assets/{GraphPreview-CYBEhXG-.js → GraphPreview-Ch6KZFsK.js} +2 -2
  39. package/frontend/dist/assets/{MobilePage-tc43L2Lz.js → MobilePage-JiqI8CSK.js} +3 -3
  40. package/frontend/dist/assets/NotebookPage-Ci_tsAYM.js +13 -0
  41. package/frontend/dist/assets/{OfficePreview-DtFr2tIA.js → OfficePreview-76Lw49uc.js} +2 -2
  42. package/frontend/dist/assets/{PdfPreview-jE4EtPVP.js → PdfPreview-DEsqK0ec.js} +1 -1
  43. package/frontend/dist/assets/{ProjectPage-BURCf2Do.js → ProjectPage-v7j0VJzB.js} +5 -5
  44. package/frontend/dist/assets/{ProjectSettingsPage-BSS5ICpz.js → ProjectSettingsPage-BlxBcXB4.js} +1 -1
  45. package/frontend/dist/assets/{SettingsPage-Bg1PltuQ.js → SettingsPage-eRuTffii.js} +1 -1
  46. package/frontend/dist/assets/{SkillHubPage-Dkfphglo.js → SkillHubPage-DTTbUlQD.js} +1 -1
  47. package/frontend/dist/assets/{check-circle-2-D4xZVklI.js → check-circle-2-CuGGbYqq.js} +1 -1
  48. package/frontend/dist/assets/{chevron-down-Bzyofau8.js → chevron-down-DqJlk-z-.js} +1 -1
  49. package/frontend/dist/assets/chevron-left-ADs1oMLf.js +7 -0
  50. package/frontend/dist/assets/{file-text-eaaujWBr.js → file-text-0i5NEvQ3.js} +1 -1
  51. package/frontend/dist/assets/{index-BRZSUCNz.js → index-BcTWKUVp.js} +1 -1
  52. package/frontend/dist/assets/{index-BXMeGbDt.js → index-BicNGyh6.js} +1 -1
  53. package/frontend/dist/assets/{index-BN_T0UV9.js → index-Bni5vqf8.js} +1 -1
  54. package/frontend/dist/assets/index-BpdaJxoa.css +1 -0
  55. package/frontend/dist/assets/{index-DXjluyd1.js → index-D5jbTY4Z.js} +3 -3
  56. package/frontend/dist/assets/{jszip.min-DPhtdqr8.js → jszip.min-CXhYhQvA.js} +1 -1
  57. package/frontend/dist/assets/{save-B8Uv2Egn.js → save-BFBfbWoK.js} +1 -1
  58. package/frontend/dist/assets/{search-Duax5rfs.js → search-DUINGkQd.js} +1 -1
  59. package/frontend/dist/assets/{select-CbDg1CtL.js → select-DxHj2qKT.js} +1 -1
  60. package/frontend/dist/assets/{tabs-8Bm08Uka.js → tabs-6zanHiRL.js} +1 -1
  61. package/frontend/dist/assets/{textarea-CpK1BCh-.js → textarea-DdVP5OsI.js} +1 -1
  62. package/frontend/dist/index.html +2 -2
  63. package/package.json +36 -10
  64. package/backend/dist/backup/config.d.ts +0 -10
  65. package/backend/dist/backup/config.d.ts.map +0 -1
  66. package/backend/dist/backup/config.js +0 -128
  67. package/backend/dist/backup/config.js.map +0 -1
  68. package/backend/dist/backup/engine.d.ts +0 -22
  69. package/backend/dist/backup/engine.d.ts.map +0 -1
  70. package/backend/dist/backup/engine.js +0 -298
  71. package/backend/dist/backup/engine.js.map +0 -1
  72. package/backend/dist/backup/providers/dropbox.d.ts +0 -25
  73. package/backend/dist/backup/providers/dropbox.d.ts.map +0 -1
  74. package/backend/dist/backup/providers/dropbox.js +0 -320
  75. package/backend/dist/backup/providers/dropbox.js.map +0 -1
  76. package/backend/dist/backup/providers/google-drive.d.ts +0 -29
  77. package/backend/dist/backup/providers/google-drive.d.ts.map +0 -1
  78. package/backend/dist/backup/providers/google-drive.js +0 -303
  79. package/backend/dist/backup/providers/google-drive.js.map +0 -1
  80. package/backend/dist/backup/providers/index.d.ts +0 -3
  81. package/backend/dist/backup/providers/index.d.ts.map +0 -1
  82. package/backend/dist/backup/providers/index.js +0 -19
  83. package/backend/dist/backup/providers/index.js.map +0 -1
  84. package/backend/dist/backup/providers/onedrive.d.ts +0 -29
  85. package/backend/dist/backup/providers/onedrive.d.ts.map +0 -1
  86. package/backend/dist/backup/providers/onedrive.js +0 -317
  87. package/backend/dist/backup/providers/onedrive.js.map +0 -1
  88. package/backend/dist/backup/scheduler.d.ts +0 -6
  89. package/backend/dist/backup/scheduler.d.ts.map +0 -1
  90. package/backend/dist/backup/scheduler.js +0 -55
  91. package/backend/dist/backup/scheduler.js.map +0 -1
  92. package/backend/dist/backup/types.d.ts +0 -73
  93. package/backend/dist/backup/types.d.ts.map +0 -1
  94. package/backend/dist/backup/types.js +0 -4
  95. package/backend/dist/backup/types.js.map +0 -1
  96. package/backend/dist/chat-process-manager.d.ts +0 -45
  97. package/backend/dist/chat-process-manager.d.ts.map +0 -1
  98. package/backend/dist/chat-process-manager.js +0 -258
  99. package/backend/dist/chat-process-manager.js.map +0 -1
  100. package/backend/dist/flows/runner.d.ts +0 -37
  101. package/backend/dist/flows/runner.d.ts.map +0 -1
  102. package/backend/dist/flows/runner.js +0 -660
  103. package/backend/dist/flows/runner.js.map +0 -1
  104. package/backend/dist/flows/store.d.ts +0 -40
  105. package/backend/dist/flows/store.d.ts.map +0 -1
  106. package/backend/dist/flows/store.js +0 -284
  107. package/backend/dist/flows/store.js.map +0 -1
  108. package/backend/dist/flows/types.d.ts +0 -176
  109. package/backend/dist/flows/types.d.ts.map +0 -1
  110. package/backend/dist/flows/types.js +0 -25
  111. package/backend/dist/flows/types.js.map +0 -1
  112. package/backend/dist/information/condenser.d.ts +0 -12
  113. package/backend/dist/information/condenser.d.ts.map +0 -1
  114. package/backend/dist/information/condenser.js +0 -568
  115. package/backend/dist/information/condenser.js.map +0 -1
  116. package/backend/dist/information/conversation-sync.d.ts +0 -22
  117. package/backend/dist/information/conversation-sync.d.ts.map +0 -1
  118. package/backend/dist/information/conversation-sync.js +0 -500
  119. package/backend/dist/information/conversation-sync.js.map +0 -1
  120. package/backend/dist/information/types.d.ts +0 -36
  121. package/backend/dist/information/types.d.ts.map +0 -1
  122. package/backend/dist/information/types.js +0 -4
  123. package/backend/dist/information/types.js.map +0 -1
  124. package/backend/dist/memory-pool/buoyancy.d.ts +0 -2
  125. package/backend/dist/memory-pool/buoyancy.d.ts.map +0 -1
  126. package/backend/dist/memory-pool/buoyancy.js +0 -12
  127. package/backend/dist/memory-pool/buoyancy.js.map +0 -1
  128. package/backend/dist/memory-pool/global-pool-manager.d.ts +0 -12
  129. package/backend/dist/memory-pool/global-pool-manager.d.ts.map +0 -1
  130. package/backend/dist/memory-pool/global-pool-manager.js +0 -295
  131. package/backend/dist/memory-pool/global-pool-manager.js.map +0 -1
  132. package/backend/dist/memory-pool/pool-lock.d.ts +0 -2
  133. package/backend/dist/memory-pool/pool-lock.d.ts.map +0 -1
  134. package/backend/dist/memory-pool/pool-lock.js +0 -31
  135. package/backend/dist/memory-pool/pool-lock.js.map +0 -1
  136. package/backend/dist/memory-pool/pool-manager.d.ts +0 -57
  137. package/backend/dist/memory-pool/pool-manager.d.ts.map +0 -1
  138. package/backend/dist/memory-pool/pool-manager.js +0 -322
  139. package/backend/dist/memory-pool/pool-manager.js.map +0 -1
  140. package/backend/dist/memory-pool/templates.d.ts +0 -5
  141. package/backend/dist/memory-pool/templates.d.ts.map +0 -1
  142. package/backend/dist/memory-pool/templates.js +0 -234
  143. package/backend/dist/memory-pool/templates.js.map +0 -1
  144. package/backend/dist/memory-pool/types.d.ts +0 -61
  145. package/backend/dist/memory-pool/types.d.ts.map +0 -1
  146. package/backend/dist/memory-pool/types.js +0 -4
  147. package/backend/dist/memory-pool/types.js.map +0 -1
  148. package/backend/dist/plan-control/checker.d.ts +0 -3
  149. package/backend/dist/plan-control/checker.d.ts.map +0 -1
  150. package/backend/dist/plan-control/checker.js +0 -103
  151. package/backend/dist/plan-control/checker.js.map +0 -1
  152. package/backend/dist/plan-control/executor.d.ts +0 -93
  153. package/backend/dist/plan-control/executor.d.ts.map +0 -1
  154. package/backend/dist/plan-control/executor.js +0 -955
  155. package/backend/dist/plan-control/executor.js.map +0 -1
  156. package/backend/dist/plan-control/parser.d.ts +0 -12
  157. package/backend/dist/plan-control/parser.d.ts.map +0 -1
  158. package/backend/dist/plan-control/parser.js +0 -216
  159. package/backend/dist/plan-control/parser.js.map +0 -1
  160. package/backend/dist/plan-control/templates.d.ts +0 -4
  161. package/backend/dist/plan-control/templates.d.ts.map +0 -1
  162. package/backend/dist/plan-control/templates.js +0 -271
  163. package/backend/dist/plan-control/templates.js.map +0 -1
  164. package/backend/dist/plan-control/types.d.ts +0 -102
  165. package/backend/dist/plan-control/types.d.ts.map +0 -1
  166. package/backend/dist/plan-control/types.js +0 -12
  167. package/backend/dist/plan-control/types.js.map +0 -1
  168. package/backend/dist/routes/backup.d.ts +0 -4
  169. package/backend/dist/routes/backup.d.ts.map +0 -1
  170. package/backend/dist/routes/backup.js +0 -274
  171. package/backend/dist/routes/backup.js.map +0 -1
  172. package/backend/dist/routes/flows.d.ts +0 -5
  173. package/backend/dist/routes/flows.d.ts.map +0 -1
  174. package/backend/dist/routes/flows.js +0 -457
  175. package/backend/dist/routes/flows.js.map +0 -1
  176. package/backend/dist/routes/global-flows.d.ts +0 -3
  177. package/backend/dist/routes/global-flows.d.ts.map +0 -1
  178. package/backend/dist/routes/global-flows.js +0 -90
  179. package/backend/dist/routes/global-flows.js.map +0 -1
  180. package/backend/dist/routes/information.d.ts +0 -3
  181. package/backend/dist/routes/information.d.ts.map +0 -1
  182. package/backend/dist/routes/information.js +0 -159
  183. package/backend/dist/routes/information.js.map +0 -1
  184. package/backend/dist/routes/memory-pool.d.ts +0 -3
  185. package/backend/dist/routes/memory-pool.d.ts.map +0 -1
  186. package/backend/dist/routes/memory-pool.js +0 -837
  187. package/backend/dist/routes/memory-pool.js.map +0 -1
  188. package/backend/dist/routes/plan-control.d.ts +0 -15
  189. package/backend/dist/routes/plan-control.d.ts.map +0 -1
  190. package/backend/dist/routes/plan-control.js +0 -337
  191. package/backend/dist/routes/plan-control.js.map +0 -1
  192. package/backend/dist/routes/share.d.ts +0 -3
  193. package/backend/dist/routes/share.d.ts.map +0 -1
  194. package/backend/dist/routes/share.js +0 -167
  195. package/backend/dist/routes/share.js.map +0 -1
  196. package/backend/dist/routes/sounds.d.ts +0 -3
  197. package/backend/dist/routes/sounds.d.ts.map +0 -1
  198. package/backend/dist/routes/sounds.js +0 -285
  199. package/backend/dist/routes/sounds.js.map +0 -1
  200. package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts +0 -24
  201. package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts.map +0 -1
  202. package/backend/dist/tracks/__tests__/verify-starter-templates.js +0 -175
  203. package/backend/dist/tracks/__tests__/verify-starter-templates.js.map +0 -1
  204. package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts +0 -23
  205. package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts.map +0 -1
  206. package/backend/dist/tracks/__tests__/verify-track-cancel.js +0 -153
  207. package/backend/dist/tracks/__tests__/verify-track-cancel.js.map +0 -1
  208. package/backend/dist/tracks/__tests__/verify-track-t1.d.ts +0 -11
  209. package/backend/dist/tracks/__tests__/verify-track-t1.d.ts.map +0 -1
  210. package/backend/dist/tracks/__tests__/verify-track-t1.js +0 -293
  211. package/backend/dist/tracks/__tests__/verify-track-t1.js.map +0 -1
  212. package/backend/dist/tracks/__tests__/verify-track.d.ts +0 -20
  213. package/backend/dist/tracks/__tests__/verify-track.d.ts.map +0 -1
  214. package/backend/dist/tracks/__tests__/verify-track.js +0 -187
  215. package/backend/dist/tracks/__tests__/verify-track.js.map +0 -1
  216. package/backend/dist/tracks/registry.d.ts +0 -61
  217. package/backend/dist/tracks/registry.d.ts.map +0 -1
  218. package/backend/dist/tracks/registry.js +0 -202
  219. package/backend/dist/tracks/registry.js.map +0 -1
  220. package/backend/dist/tracks/track-runner.d.ts +0 -69
  221. package/backend/dist/tracks/track-runner.d.ts.map +0 -1
  222. package/backend/dist/tracks/track-runner.js +0 -158
  223. package/backend/dist/tracks/track-runner.js.map +0 -1
  224. package/backend/dist/tracks/train-loader.d.ts +0 -44
  225. package/backend/dist/tracks/train-loader.d.ts.map +0 -1
  226. package/backend/dist/tracks/train-loader.js +0 -32
  227. package/backend/dist/tracks/train-loader.js.map +0 -1
  228. package/backend/dist/tracks/types-train.d.ts +0 -12
  229. package/backend/dist/tracks/types-train.d.ts.map +0 -1
  230. package/backend/dist/tracks/types-train.js +0 -13
  231. package/backend/dist/tracks/types-train.js.map +0 -1
  232. package/backend/dist/usage-terminal.d.ts +0 -18
  233. package/backend/dist/usage-terminal.d.ts.map +0 -1
  234. package/backend/dist/usage-terminal.js +0 -191
  235. package/backend/dist/usage-terminal.js.map +0 -1
  236. package/frontend/dist/assets/NotebookPage-Dy1fFqcp.js +0 -13
  237. 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"}