@tom2012/cc-web 1.5.92 → 1.5.94

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 (44) hide show
  1. package/README.md +1 -1
  2. package/backend/dist/memory-pool/global-pool-manager.d.ts +12 -0
  3. package/backend/dist/memory-pool/global-pool-manager.d.ts.map +1 -0
  4. package/backend/dist/memory-pool/global-pool-manager.js +290 -0
  5. package/backend/dist/memory-pool/global-pool-manager.js.map +1 -0
  6. package/backend/dist/memory-pool/pool-lock.d.ts +2 -0
  7. package/backend/dist/memory-pool/pool-lock.d.ts.map +1 -0
  8. package/backend/dist/memory-pool/pool-lock.js +31 -0
  9. package/backend/dist/memory-pool/pool-lock.js.map +1 -0
  10. package/backend/dist/memory-pool/pool-manager.d.ts +34 -0
  11. package/backend/dist/memory-pool/pool-manager.d.ts.map +1 -1
  12. package/backend/dist/memory-pool/pool-manager.js +91 -0
  13. package/backend/dist/memory-pool/pool-manager.js.map +1 -1
  14. package/backend/dist/memory-pool/templates.d.ts.map +1 -1
  15. package/backend/dist/memory-pool/templates.js +98 -127
  16. package/backend/dist/memory-pool/templates.js.map +1 -1
  17. package/backend/dist/memory-pool/types.d.ts +34 -0
  18. package/backend/dist/memory-pool/types.d.ts.map +1 -1
  19. package/backend/dist/routes/hooks.d.ts.map +1 -1
  20. package/backend/dist/routes/hooks.js +14 -0
  21. package/backend/dist/routes/hooks.js.map +1 -1
  22. package/backend/dist/routes/memory-pool.d.ts.map +1 -1
  23. package/backend/dist/routes/memory-pool.js +617 -57
  24. package/backend/dist/routes/memory-pool.js.map +1 -1
  25. package/frontend/dist/assets/{GraphPreview-QiSxy4LP.js → GraphPreview-BFYA_WA5.js} +1 -1
  26. package/frontend/dist/assets/{OfficePreview-DlUCjmFD.js → OfficePreview-DN-it4Af.js} +2 -2
  27. package/frontend/dist/assets/{PlanPanel-Dn5PCqCc.js → PlanPanel-DYupjf3X.js} +1 -1
  28. package/frontend/dist/assets/{ProjectPage-XG9MZm7t.js → ProjectPage-B6tVjIYr.js} +5 -5
  29. package/frontend/dist/assets/{SettingsPage-ofs1M1K_.js → SettingsPage-CQL_FfkR.js} +2 -2
  30. package/frontend/dist/assets/{ShareViewPage-u8FXEdhC.js → ShareViewPage-C_x31zAw.js} +1 -1
  31. package/frontend/dist/assets/{SkillHubPage-DYQ3--oW.js → SkillHubPage-Cgoxl30L.js} +2 -2
  32. package/frontend/dist/assets/{bot-63iGenXw.js → bot-Dst2XqWX.js} +1 -1
  33. package/frontend/dist/assets/{chevron-down-CzkwkeMW.js → chevron-down-DsAldQb3.js} +1 -1
  34. package/frontend/dist/assets/{download-DhFx0Fu-.js → download-YA6lXM4C.js} +1 -1
  35. package/frontend/dist/assets/{index-DVUjdhq8.css → index-BDYnq-Fr.css} +1 -1
  36. package/frontend/dist/assets/{index-C8aR4tRp.js → index-CY9Au1bg.js} +9 -9
  37. package/frontend/dist/assets/{index-DKsG2yPY.js → index-_m8u9esJ.js} +1 -1
  38. package/frontend/dist/assets/{jszip.min-B9vwwWDL.js → jszip.min-BC9RCrTS.js} +1 -1
  39. package/frontend/dist/assets/{matter-CCkX66fz.js → matter-Mm9BJmx6.js} +1 -1
  40. package/frontend/dist/assets/{maximize-2-B3mAuuFs.js → maximize-2-CuzznumM.js} +1 -1
  41. package/frontend/dist/assets/{save-CxQAMJ-_.js → save-Q2W6S7fk.js} +1 -1
  42. package/frontend/dist/assets/{user-DxwkzcYb.js → user-BM9GY1Xb.js} +1 -1
  43. package/frontend/dist/index.html +2 -2
  44. package/package.json +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A self-hosted web application (distributed as npm package) that provides a browser-based interface for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI sessions. Create projects, each with a persistent terminal running Claude Code, and interact with them through a real-time terminal UI.
4
4
 
5
- **Current version**: v1.5.90 | [GitHub](https://github.com/zbc0315/cc-web) | MIT License
5
+ **Current version**: v1.5.94 | [GitHub](https://github.com/zbc0315/cc-web) | MIT License
6
6
 
7
7
  ## Features
8
8
 
@@ -0,0 +1,12 @@
1
+ import { PoolJson, SourcesJson, SyncResult } from './types';
2
+ export declare function getGlobalPoolDir(): string;
3
+ export declare function readSources(): SourcesJson;
4
+ export declare function writeSources(data: SourcesJson): void;
5
+ export declare function isGlobalPoolInitialized(): boolean;
6
+ export declare function ensureGlobalPool(): void;
7
+ export declare function readGlobalPool(): PoolJson | null;
8
+ export declare function computeGlobalT(initializedAt: string): number;
9
+ export declare function registerProject(projectId: string, projectName: string, poolPath: string): void;
10
+ export declare function removeSource(projectId: string): boolean;
11
+ export declare function syncToGlobal(): Promise<SyncResult>;
12
+ //# sourceMappingURL=global-pool-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-pool-manager.d.ts","sourceRoot":"","sources":["../../src/memory-pool/global-pool-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAe,UAAU,EAAgB,MAAM,SAAS,CAAC;AAWvF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAQD,wBAAgB,WAAW,IAAI,WAAW,CAQzC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAEpD;AAID,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAoBvC;AAED,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CAEhD;AAID,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAI5D;AAID,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsB9F;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOvD;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CA8JxD"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ // backend/src/memory-pool/global-pool-manager.ts
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.getGlobalPoolDir = getGlobalPoolDir;
38
+ exports.readSources = readSources;
39
+ exports.writeSources = writeSources;
40
+ exports.isGlobalPoolInitialized = isGlobalPoolInitialized;
41
+ exports.ensureGlobalPool = ensureGlobalPool;
42
+ exports.readGlobalPool = readGlobalPool;
43
+ exports.computeGlobalT = computeGlobalT;
44
+ exports.registerProject = registerProject;
45
+ exports.removeSource = removeSource;
46
+ exports.syncToGlobal = syncToGlobal;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const os = __importStar(require("os"));
50
+ const config_1 = require("../config");
51
+ const pool_manager_1 = require("./pool-manager");
52
+ const pool_lock_1 = require("./pool-lock");
53
+ const buoyancy_1 = require("./buoyancy");
54
+ const GLOBAL_POOL_DIR = path.join(os.homedir(), '.ccweb', 'memory-pool');
55
+ const SOURCES_FILE = 'sources.json';
56
+ // Concurrency guard
57
+ let syncInProgress = false;
58
+ function getGlobalPoolDir() {
59
+ return GLOBAL_POOL_DIR;
60
+ }
61
+ // ── Sources management ──
62
+ function sourcesPath() {
63
+ return path.join(GLOBAL_POOL_DIR, SOURCES_FILE);
64
+ }
65
+ function readSources() {
66
+ const file = sourcesPath();
67
+ if (!fs.existsSync(file))
68
+ return { version: 1, sources: [] };
69
+ try {
70
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
71
+ }
72
+ catch {
73
+ return { version: 1, sources: [] };
74
+ }
75
+ }
76
+ function writeSources(data) {
77
+ (0, config_1.atomicWriteSync)(sourcesPath(), JSON.stringify(data, null, 2));
78
+ }
79
+ // ── Global pool init ──
80
+ function isGlobalPoolInitialized() {
81
+ return fs.existsSync(path.join(GLOBAL_POOL_DIR, 'pool.json'));
82
+ }
83
+ function ensureGlobalPool() {
84
+ if (isGlobalPoolInitialized())
85
+ return;
86
+ fs.mkdirSync(path.join(GLOBAL_POOL_DIR, 'balls'), { recursive: true });
87
+ const now = new Date().toISOString();
88
+ const pool = {
89
+ version: 2,
90
+ t: 0,
91
+ lambda: 0.99,
92
+ alpha: 1.0,
93
+ active_capacity: 40,
94
+ surface_width: 10000,
95
+ next_id: 1,
96
+ pool: 'global',
97
+ initialized_at: now,
98
+ balls: [],
99
+ };
100
+ (0, pool_manager_1.writePool)(GLOBAL_POOL_DIR, pool);
101
+ writeSources({ version: 1, sources: [] });
102
+ }
103
+ function readGlobalPool() {
104
+ return (0, pool_manager_1.readPool)(GLOBAL_POOL_DIR);
105
+ }
106
+ // ── Calendar-based t ──
107
+ function computeGlobalT(initializedAt) {
108
+ const epochDay = Math.floor(new Date(initializedAt).getTime() / 86400000);
109
+ const nowDay = Math.floor(Date.now() / 86400000);
110
+ return Math.max(0, nowDay - epochDay);
111
+ }
112
+ // ── Register project ──
113
+ function registerProject(projectId, projectName, poolPath) {
114
+ ensureGlobalPool();
115
+ const sources = readSources();
116
+ const existing = sources.sources.find((s) => s.pool_path === poolPath);
117
+ if (existing) {
118
+ // Refresh metadata
119
+ existing.project_id = projectId;
120
+ existing.project_name = projectName;
121
+ existing.status = 'active';
122
+ existing.unreachable_count = 0;
123
+ }
124
+ else {
125
+ sources.sources.push({
126
+ project_id: projectId,
127
+ project_name: projectName,
128
+ pool_path: poolPath,
129
+ registered_at: new Date().toISOString(),
130
+ last_synced_at: null,
131
+ status: 'active',
132
+ unreachable_count: 0,
133
+ });
134
+ }
135
+ writeSources(sources);
136
+ }
137
+ function removeSource(projectId) {
138
+ const sources = readSources();
139
+ const idx = sources.sources.findIndex((s) => s.project_id === projectId);
140
+ if (idx === -1)
141
+ return false;
142
+ sources.sources.splice(idx, 1);
143
+ writeSources(sources);
144
+ return true;
145
+ }
146
+ // ── Sync (global operation) ──
147
+ async function syncToGlobal() {
148
+ if (syncInProgress) {
149
+ throw new Error('SYNC_IN_PROGRESS');
150
+ }
151
+ syncInProgress = true;
152
+ try {
153
+ return await (0, pool_lock_1.withPoolLock)(GLOBAL_POOL_DIR, () => {
154
+ ensureGlobalPool();
155
+ const globalPool = readGlobalPool();
156
+ const sources = readSources();
157
+ const globalT = computeGlobalT(globalPool.initialized_at);
158
+ globalPool.t = globalT;
159
+ const result = {
160
+ added: 0,
161
+ updated: 0,
162
+ skipped: 0,
163
+ orphaned: 0,
164
+ unreachable_projects: [],
165
+ synced_projects: [],
166
+ };
167
+ // Build origin lookup: "projectId:ballId" → global ball index
168
+ const originMap = new Map();
169
+ globalPool.balls.forEach((gb, idx) => {
170
+ if (gb.origins) {
171
+ for (const o of gb.origins) {
172
+ originMap.set(`${o.source_project}:${o.source_ball_id}`, idx);
173
+ }
174
+ }
175
+ });
176
+ // Track which origins are still alive (from synced projects only)
177
+ const aliveOrigins = new Set();
178
+ // Track projects that were actually synced (for orphan detection scoping)
179
+ const syncedProjectIds = new Set();
180
+ // Step 1 & 2: Collect and merge
181
+ for (const source of sources.sources) {
182
+ if (source.status === 'unreachable')
183
+ continue;
184
+ const projectPool = (0, pool_manager_1.readPool)(source.pool_path);
185
+ if (!projectPool) {
186
+ source.unreachable_count = (source.unreachable_count ?? 0) + 1;
187
+ if (source.unreachable_count >= 3) {
188
+ source.status = 'unreachable';
189
+ }
190
+ result.unreachable_projects.push(source.project_name);
191
+ continue;
192
+ }
193
+ // Reset unreachable count on success
194
+ source.unreachable_count = 0;
195
+ source.last_synced_at = new Date().toISOString();
196
+ result.synced_projects.push(source.project_name);
197
+ syncedProjectIds.add(source.project_id);
198
+ for (const ball of projectPool.balls) {
199
+ const originKey = `${source.project_id}:${ball.id}`;
200
+ aliveOrigins.add(originKey);
201
+ const existingIdx = originMap.get(originKey);
202
+ if (existingIdx !== undefined) {
203
+ // Already exists — check content change
204
+ const globalBall = globalPool.balls[existingIdx];
205
+ const projectContent = (0, pool_manager_1.readBallContent)(source.pool_path, ball.id);
206
+ const globalContent = (0, pool_manager_1.readBallContent)(GLOBAL_POOL_DIR, globalBall.id);
207
+ if (projectContent !== null && projectContent !== globalContent) {
208
+ // Content changed — update content, keep global H
209
+ (0, pool_manager_1.writeBallContent)(GLOBAL_POOL_DIR, globalBall.id, projectContent);
210
+ globalBall.summary = ball.summary;
211
+ globalBall.t_last = globalT;
212
+ result.updated++;
213
+ }
214
+ else {
215
+ // Touch: refresh t_last
216
+ globalBall.t_last = globalT;
217
+ result.skipped++;
218
+ }
219
+ }
220
+ else {
221
+ // New ball — compute project buoyancy as B0
222
+ const projectBuoyancy = (0, buoyancy_1.computeBuoyancy)(ball.B0, ball.H, projectPool.alpha, projectPool.lambda, projectPool.t, ball.t_last, ball.permanent);
223
+ const newId = `ball_${String(globalPool.next_id).padStart(4, '0')}`;
224
+ globalPool.next_id++;
225
+ const newBall = {
226
+ id: newId,
227
+ type: ball.type,
228
+ summary: ball.summary,
229
+ B0: Math.round(projectBuoyancy * 100) / 100,
230
+ H: 0,
231
+ t_last: globalT,
232
+ hardness: ball.hardness,
233
+ permanent: ball.permanent,
234
+ links: [], // Links resolved separately
235
+ created_at: ball.created_at,
236
+ origins: [{
237
+ source_project: source.project_id,
238
+ source_ball_id: ball.id,
239
+ synced_at: new Date().toISOString(),
240
+ }],
241
+ };
242
+ // Write ball content first (gate pattern)
243
+ const content = (0, pool_manager_1.readBallContent)(source.pool_path, ball.id);
244
+ if (content !== null) {
245
+ (0, pool_manager_1.writeBallContent)(GLOBAL_POOL_DIR, newId, content);
246
+ }
247
+ globalPool.balls.push(newBall);
248
+ originMap.set(originKey, globalPool.balls.length - 1);
249
+ result.added++;
250
+ }
251
+ }
252
+ }
253
+ // Step 3: Orphan detection (only check origins from synced projects)
254
+ for (const gb of globalPool.balls) {
255
+ if (!gb.origins || gb.origins.length === 0)
256
+ continue;
257
+ // Only remove origins whose source project was actually synced and ball is gone
258
+ gb.origins = gb.origins.filter((o) => {
259
+ if (!syncedProjectIds.has(o.source_project))
260
+ return true; // preserve unreachable/unsynced origins
261
+ return aliveOrigins.has(`${o.source_project}:${o.source_ball_id}`);
262
+ });
263
+ if (gb.origins.length === 0 && !gb.orphaned) {
264
+ gb.pre_orphan_B0 = gb.B0;
265
+ gb.orphaned = true;
266
+ gb.B0 = Math.round(gb.B0 * 0.5 * 100) / 100;
267
+ result.orphaned++;
268
+ }
269
+ else if (gb.origins.length > 0 && gb.orphaned) {
270
+ // Restore orphaned ball when origins reappear
271
+ if (gb.pre_orphan_B0 !== undefined) {
272
+ gb.B0 = gb.pre_orphan_B0;
273
+ delete gb.pre_orphan_B0;
274
+ }
275
+ gb.orphaned = false;
276
+ }
277
+ }
278
+ // Step 4: Write pool.json LAST (gate)
279
+ (0, pool_manager_1.writePool)(GLOBAL_POOL_DIR, globalPool);
280
+ writeSources(sources);
281
+ // Step 5: Rebuild global surface.md
282
+ (0, pool_manager_1.buildSurface)(GLOBAL_POOL_DIR);
283
+ return result;
284
+ });
285
+ }
286
+ finally {
287
+ syncInProgress = false;
288
+ }
289
+ }
290
+ //# sourceMappingURL=global-pool-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-pool-manager.js","sourceRoot":"","sources":["../../src/memory-pool/global-pool-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function withPoolLock<T>(poolDir: string, fn: () => T): Promise<T>;
2
+ //# sourceMappingURL=pool-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-lock.d.ts","sourceRoot":"","sources":["../../src/memory-pool/pool-lock.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BxE"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ // backend/src/memory-pool/pool-lock.ts
3
+ // Per-project Promise-chain mutex for serializing pool.json writes.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.withPoolLock = withPoolLock;
6
+ const locks = new Map();
7
+ function withPoolLock(poolDir, fn) {
8
+ const prev = locks.get(poolDir) ?? Promise.resolve();
9
+ let resolve;
10
+ let reject;
11
+ const resultPromise = new Promise((res, rej) => { resolve = res; reject = rej; });
12
+ const next = prev.then(() => {
13
+ try {
14
+ const result = fn();
15
+ if (result instanceof Promise) {
16
+ return result.then((v) => resolve(v), (e) => reject(e));
17
+ }
18
+ resolve(result);
19
+ }
20
+ catch (e) {
21
+ reject(e);
22
+ }
23
+ });
24
+ // Keep chain alive (swallow rejections so next caller can proceed)
25
+ const chain = next.catch(() => { });
26
+ locks.set(poolDir, chain);
27
+ chain.then(() => { if (locks.get(poolDir) === chain)
28
+ locks.delete(poolDir); });
29
+ return resultPromise;
30
+ }
31
+ //# sourceMappingURL=pool-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-lock.js","sourceRoot":"","sources":["../../src/memory-pool/pool-lock.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,oEAAoE;;AAIpE,oCA4BC;AA9BD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE/C,SAAgB,YAAY,CAAI,OAAe,EAAE,EAAW;IAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAErD,IAAI,OAAwB,CAAC;IAC7B,IAAI,MAA6B,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;YACpB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,OAAQ,MAA2B,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAM,CAAC,EACtB,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CACjB,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;QAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -5,6 +5,40 @@ export declare function readBallContent(poolDir: string, ballId: string): string
5
5
  export declare function writeBallContent(poolDir: string, ballId: string, content: string): void;
6
6
  export declare function enrichBallsWithBuoyancy(pool: PoolJson): PoolBallWithBuoyancy[];
7
7
  export declare function generateSnapshot(pool: PoolJson): string;
8
+ /**
9
+ * Estimate token count from text content (rough: ~4 chars per token for mixed CJK/EN).
10
+ */
11
+ export declare function estimateTokens(text: string): number;
12
+ export interface SurfaceBall {
13
+ id: string;
14
+ type: string;
15
+ summary: string;
16
+ buoyancy: number;
17
+ diameter: number;
18
+ links: string[];
19
+ }
20
+ /**
21
+ * Build surface.md — the set of top-buoyancy balls whose total token diameter
22
+ * fits within the wedge top width (surface_width). Writes surface.md to poolDir.
23
+ * MUST be called within withPoolLock when pool.json may be concurrently modified.
24
+ */
25
+ export declare function buildSurface(poolDir: string): {
26
+ surfaceBalls: SurfaceBall[];
27
+ totalTokens: number;
28
+ };
29
+ /**
30
+ * Compute and cache the diameter (token estimate) for a ball.
31
+ */
32
+ export declare function computeDiameter(poolDir: string, ballId: string): number;
33
+ /**
34
+ * Tick the pool: increment t with session-based dedup.
35
+ * Returns { t, deduplicated } or null if pool not found.
36
+ * MUST be called within withPoolLock to prevent concurrent read-modify-write races.
37
+ */
38
+ export declare function tickPool(poolDir: string, session?: string): {
39
+ t: number;
40
+ deduplicated: boolean;
41
+ } | null;
8
42
  /**
9
43
  * Migrate from v1 (state.json + index.json + frontmatter balls) to v2 (pool.json + pure content balls).
10
44
  * Idempotent: if pool.json already exists with version >= 2, returns empty changes.
@@ -1 +1 @@
1
- {"version":3,"file":"pool-manager.d.ts","sourceRoot":"","sources":["../../src/memory-pool/pool-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAgB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAOvE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQzD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIvF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB,EAAE,CAQ9E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAkBvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAqGpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKtD"}
1
+ {"version":3,"file":"pool-manager.d.ts","sourceRoot":"","sources":["../../src/memory-pool/pool-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAgB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAOvE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQzD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIvF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB,EAAE,CAQ9E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAkBvD;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAsDlG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAevG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAsGpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKtD"}
@@ -40,6 +40,10 @@ exports.readBallContent = readBallContent;
40
40
  exports.writeBallContent = writeBallContent;
41
41
  exports.enrichBallsWithBuoyancy = enrichBallsWithBuoyancy;
42
42
  exports.generateSnapshot = generateSnapshot;
43
+ exports.estimateTokens = estimateTokens;
44
+ exports.buildSurface = buildSurface;
45
+ exports.computeDiameter = computeDiameter;
46
+ exports.tickPool = tickPool;
43
47
  exports.migrateV1toV2 = migrateV1toV2;
44
48
  exports.needsUpgrade = needsUpgrade;
45
49
  exports.isInitialized = isInitialized;
@@ -106,6 +110,92 @@ function generateSnapshot(pool) {
106
110
  }
107
111
  return lines.join('\n');
108
112
  }
113
+ // ── Surface builder ──
114
+ /**
115
+ * Estimate token count from text content (rough: ~4 chars per token for mixed CJK/EN).
116
+ */
117
+ function estimateTokens(text) {
118
+ return Math.ceil(text.length / 4);
119
+ }
120
+ /**
121
+ * Build surface.md — the set of top-buoyancy balls whose total token diameter
122
+ * fits within the wedge top width (surface_width). Writes surface.md to poolDir.
123
+ * MUST be called within withPoolLock when pool.json may be concurrently modified.
124
+ */
125
+ function buildSurface(poolDir) {
126
+ const pool = readPool(poolDir);
127
+ if (!pool)
128
+ return { surfaceBalls: [], totalTokens: 0 };
129
+ const surfaceWidth = pool.surface_width ?? 10000;
130
+ const enriched = enrichBallsWithBuoyancy(pool);
131
+ const surfaceBalls = [];
132
+ let totalTokens = 0;
133
+ for (const ball of enriched) {
134
+ // Use cached diameter if available, otherwise read and estimate
135
+ let diameter = ball.diameter ?? 0;
136
+ if (!diameter) {
137
+ const content = readBallContent(poolDir, ball.id);
138
+ diameter = content ? estimateTokens(content) : 0;
139
+ }
140
+ // M-1 fix: skip ghost entries (pool.json has ball but file missing → diameter=0)
141
+ if (diameter === 0)
142
+ continue;
143
+ if (totalTokens + diameter > surfaceWidth && surfaceBalls.length > 0) {
144
+ break; // Surface full — but always include at least 1 ball
145
+ }
146
+ surfaceBalls.push({
147
+ id: ball.id,
148
+ type: ball.type,
149
+ summary: ball.summary,
150
+ buoyancy: ball.buoyancy,
151
+ diameter,
152
+ links: ball.links,
153
+ });
154
+ totalTokens += diameter;
155
+ }
156
+ // Write surface.md
157
+ const lines = [
158
+ `# Memory Pool Surface`,
159
+ ``,
160
+ `> t=${pool.t} | surface_width=${surfaceWidth} | used≈${totalTokens} tokens | ${surfaceBalls.length}/${pool.balls.length} balls`,
161
+ ``,
162
+ ];
163
+ for (const b of surfaceBalls) {
164
+ const linksStr = b.links.length > 0 ? ` → links: ${b.links.join(', ')}` : '';
165
+ lines.push(`- **[${b.type}]** ${b.summary} — \`${b.id}\` (B=${b.buoyancy.toFixed(1)}, ~${b.diameter}tok${linksStr})`);
166
+ }
167
+ lines.push('', `读取内容: \`.memory-pool/balls/{id}.md\``, `探索关系: 通过 links 字段读取关联球`);
168
+ (0, config_1.atomicWriteSync)(path.join(poolDir, 'surface.md'), lines.join('\n'));
169
+ return { surfaceBalls, totalTokens };
170
+ }
171
+ /**
172
+ * Compute and cache the diameter (token estimate) for a ball.
173
+ */
174
+ function computeDiameter(poolDir, ballId) {
175
+ const content = readBallContent(poolDir, ballId);
176
+ return content ? estimateTokens(content) : 0;
177
+ }
178
+ /**
179
+ * Tick the pool: increment t with session-based dedup.
180
+ * Returns { t, deduplicated } or null if pool not found.
181
+ * MUST be called within withPoolLock to prevent concurrent read-modify-write races.
182
+ */
183
+ function tickPool(poolDir, session) {
184
+ const pool = readPool(poolDir);
185
+ if (!pool)
186
+ return null;
187
+ // Session-based dedup: same session won't tick twice
188
+ if (session && pool.last_tick_session === session) {
189
+ return { t: pool.t, deduplicated: true };
190
+ }
191
+ pool.t += 1;
192
+ pool.last_tick_at = new Date().toISOString();
193
+ if (session)
194
+ pool.last_tick_session = session;
195
+ writePool(poolDir, pool);
196
+ buildSurface(poolDir);
197
+ return { t: pool.t, deduplicated: false };
198
+ }
109
199
  /**
110
200
  * Migrate from v1 (state.json + index.json + frontmatter balls) to v2 (pool.json + pure content balls).
111
201
  * Idempotent: if pool.json already exists with version >= 2, returns empty changes.
@@ -190,6 +280,7 @@ function migrateV1toV2(poolDir) {
190
280
  lambda: state.lambda ?? 0.97,
191
281
  alpha: state.alpha ?? 1.0,
192
282
  active_capacity: state.active_capacity ?? 20,
283
+ surface_width: state.surface_width ?? 10000,
193
284
  next_id: state.next_id ?? 1,
194
285
  pool: state.pool ?? 'project',
195
286
  initialized_at: state.initialized_at ?? new Date().toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"pool-manager.js","sourceRoot":"","sources":["../../src/memory-pool/pool-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool-manager.js","sourceRoot":"","sources":["../../src/memory-pool/pool-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/memory-pool/templates.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,IAAI,MAAM,CA6IvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CA2D3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAiB9C"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/memory-pool/templates.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,IAAI,MAAM,CAgGvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CA2E3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAiB9C"}