mycohive-claw 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/dist/circuit-breaker.d.ts +82 -0
  4. package/dist/circuit-breaker.d.ts.map +1 -0
  5. package/dist/circuit-breaker.js +214 -0
  6. package/dist/circuit-breaker.js.map +1 -0
  7. package/dist/context-tree.d.ts +94 -0
  8. package/dist/context-tree.d.ts.map +1 -0
  9. package/dist/context-tree.js +624 -0
  10. package/dist/context-tree.js.map +1 -0
  11. package/dist/event-bus.d.ts +174 -0
  12. package/dist/event-bus.d.ts.map +1 -0
  13. package/dist/event-bus.js +750 -0
  14. package/dist/event-bus.js.map +1 -0
  15. package/dist/i18n.d.ts +91 -0
  16. package/dist/i18n.d.ts.map +1 -0
  17. package/dist/i18n.js +150 -0
  18. package/dist/i18n.js.map +1 -0
  19. package/dist/index.d.ts +38 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +301 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/intent-analyzer.d.ts +119 -0
  24. package/dist/intent-analyzer.d.ts.map +1 -0
  25. package/dist/intent-analyzer.js +563 -0
  26. package/dist/intent-analyzer.js.map +1 -0
  27. package/dist/logger.d.ts +46 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +126 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/metrics.d.ts +98 -0
  32. package/dist/metrics.d.ts.map +1 -0
  33. package/dist/metrics.js +192 -0
  34. package/dist/metrics.js.map +1 -0
  35. package/dist/openclaw-api.d.ts +122 -0
  36. package/dist/openclaw-api.d.ts.map +1 -0
  37. package/dist/openclaw-api.js +8 -0
  38. package/dist/openclaw-api.js.map +1 -0
  39. package/dist/rate-limiter.d.ts +46 -0
  40. package/dist/rate-limiter.d.ts.map +1 -0
  41. package/dist/rate-limiter.js +134 -0
  42. package/dist/rate-limiter.js.map +1 -0
  43. package/dist/result-cache.d.ts +76 -0
  44. package/dist/result-cache.d.ts.map +1 -0
  45. package/dist/result-cache.js +158 -0
  46. package/dist/result-cache.js.map +1 -0
  47. package/dist/router.d.ts +90 -0
  48. package/dist/router.d.ts.map +1 -0
  49. package/dist/router.js +447 -0
  50. package/dist/router.js.map +1 -0
  51. package/dist/setup-entry.d.ts +18 -0
  52. package/dist/setup-entry.d.ts.map +1 -0
  53. package/dist/setup-entry.js +64 -0
  54. package/dist/setup-entry.js.map +1 -0
  55. package/dist/token-counter.d.ts +57 -0
  56. package/dist/token-counter.d.ts.map +1 -0
  57. package/dist/token-counter.js +125 -0
  58. package/dist/token-counter.js.map +1 -0
  59. package/dist/tool-handlers.d.ts +52 -0
  60. package/dist/tool-handlers.d.ts.map +1 -0
  61. package/dist/tool-handlers.js +317 -0
  62. package/dist/tool-handlers.js.map +1 -0
  63. package/dist/tools/mycohive-tools.d.ts +11 -0
  64. package/dist/tools/mycohive-tools.d.ts.map +1 -0
  65. package/dist/tools/mycohive-tools.js +160 -0
  66. package/dist/tools/mycohive-tools.js.map +1 -0
  67. package/dist/types.d.ts +58 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +57 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/workspace-loader.d.ts +67 -0
  72. package/dist/workspace-loader.d.ts.map +1 -0
  73. package/dist/workspace-loader.js +175 -0
  74. package/dist/workspace-loader.js.map +1 -0
  75. package/package.json +52 -0
  76. package/workspaces/api_dev/CONFIG.md +31 -0
  77. package/workspaces/api_dev/RULES.md +8 -0
  78. package/workspaces/api_dev/SKILL.md +69 -0
  79. package/workspaces/api_dev/SOUL.md +19 -0
  80. package/workspaces/architect/CONFIG.md +32 -0
  81. package/workspaces/architect/RULES.md +8 -0
  82. package/workspaces/architect/SKILL.md +63 -0
  83. package/workspaces/architect/SOUL.md +19 -0
  84. package/workspaces/backend_dev/CONFIG.md +42 -0
  85. package/workspaces/backend_dev/RULES.md +8 -0
  86. package/workspaces/backend_dev/SKILL.md +41 -0
  87. package/workspaces/backend_dev/SOUL.md +19 -0
  88. package/workspaces/browser/CONFIG.md +42 -0
  89. package/workspaces/browser/RULES.md +8 -0
  90. package/workspaces/browser/SKILL.md +57 -0
  91. package/workspaces/browser/SOUL.md +19 -0
  92. package/workspaces/builder/CONFIG.md +31 -0
  93. package/workspaces/builder/RULES.md +8 -0
  94. package/workspaces/builder/SKILL.md +39 -0
  95. package/workspaces/builder/SOUL.md +18 -0
  96. package/workspaces/coder/CONFIG.md +44 -0
  97. package/workspaces/coder/RULES.md +9 -0
  98. package/workspaces/coder/SKILL.md +53 -0
  99. package/workspaces/coder/SOUL.md +19 -0
  100. package/workspaces/coordinator/CONFIG.md +62 -0
  101. package/workspaces/coordinator/RULES.md +8 -0
  102. package/workspaces/coordinator/SKILL.md +77 -0
  103. package/workspaces/coordinator/SOUL.md +20 -0
  104. package/workspaces/data_engineer/CONFIG.md +32 -0
  105. package/workspaces/data_engineer/RULES.md +8 -0
  106. package/workspaces/data_engineer/SKILL.md +44 -0
  107. package/workspaces/data_engineer/SOUL.md +19 -0
  108. package/workspaces/deployer/CONFIG.md +45 -0
  109. package/workspaces/deployer/RULES.md +8 -0
  110. package/workspaces/deployer/SKILL.md +74 -0
  111. package/workspaces/deployer/SOUL.md +19 -0
  112. package/workspaces/dreamer/CONFIG.md +34 -0
  113. package/workspaces/dreamer/RULES.md +8 -0
  114. package/workspaces/dreamer/SKILL.md +48 -0
  115. package/workspaces/dreamer/SOUL.md +19 -0
  116. package/workspaces/evaluator/CONFIG.md +40 -0
  117. package/workspaces/evaluator/RULES.md +21 -0
  118. package/workspaces/evaluator/SKILL.md +65 -0
  119. package/workspaces/evaluator/SOUL.md +20 -0
  120. package/workspaces/front_director/CONFIG.md +54 -0
  121. package/workspaces/front_director/RULES.md +8 -0
  122. package/workspaces/front_director/SKILL.md +52 -0
  123. package/workspaces/front_director/SOUL.md +20 -0
  124. package/workspaces/frontend_dev/CONFIG.md +33 -0
  125. package/workspaces/frontend_dev/RULES.md +8 -0
  126. package/workspaces/frontend_dev/SKILL.md +42 -0
  127. package/workspaces/frontend_dev/SOUL.md +19 -0
  128. package/workspaces/observer/CONFIG.md +60 -0
  129. package/workspaces/observer/RULES.md +7 -0
  130. package/workspaces/observer/SKILL.md +77 -0
  131. package/workspaces/observer/SOUL.md +19 -0
  132. package/workspaces/planner/CONFIG.md +43 -0
  133. package/workspaces/planner/RULES.md +8 -0
  134. package/workspaces/planner/SKILL.md +65 -0
  135. package/workspaces/planner/SOUL.md +20 -0
  136. package/workspaces/qa/CONFIG.md +32 -0
  137. package/workspaces/qa/RULES.md +8 -0
  138. package/workspaces/qa/SKILL.md +52 -0
  139. package/workspaces/qa/SOUL.md +19 -0
  140. package/workspaces/researcher/CONFIG.md +32 -0
  141. package/workspaces/researcher/RULES.md +8 -0
  142. package/workspaces/researcher/SKILL.md +58 -0
  143. package/workspaces/researcher/SOUL.md +20 -0
  144. package/workspaces/reviewer/CONFIG.md +41 -0
  145. package/workspaces/reviewer/RULES.md +17 -0
  146. package/workspaces/reviewer/SKILL.md +56 -0
  147. package/workspaces/reviewer/SOUL.md +20 -0
  148. package/workspaces/router/CONFIG.md +58 -0
  149. package/workspaces/router/RULES.md +8 -0
  150. package/workspaces/router/SKILL.md +97 -0
  151. package/workspaces/router/SOUL.md +20 -0
  152. package/workspaces/scraper/CONFIG.md +41 -0
  153. package/workspaces/scraper/RULES.md +8 -0
  154. package/workspaces/scraper/SKILL.md +51 -0
  155. package/workspaces/scraper/SOUL.md +19 -0
  156. package/workspaces/scripter/CONFIG.md +42 -0
  157. package/workspaces/scripter/RULES.md +8 -0
  158. package/workspaces/scripter/SKILL.md +54 -0
  159. package/workspaces/scripter/SOUL.md +18 -0
  160. package/workspaces/security/CONFIG.md +47 -0
  161. package/workspaces/security/RULES.md +8 -0
  162. package/workspaces/security/SKILL.md +50 -0
  163. package/workspaces/security/SOUL.md +19 -0
  164. package/workspaces/translator/CONFIG.md +43 -0
  165. package/workspaces/translator/RULES.md +8 -0
  166. package/workspaces/translator/SKILL.md +35 -0
  167. package/workspaces/translator/SOUL.md +19 -0
  168. package/workspaces/writer/CONFIG.md +31 -0
  169. package/workspaces/writer/RULES.md +8 -0
  170. package/workspaces/writer/SKILL.md +40 -0
  171. package/workspaces/writer/SOUL.md +19 -0
@@ -0,0 +1,624 @@
1
+ /**
2
+ * Context Tree 实现
3
+ * 版本: v4.0.0
4
+ *
5
+ * 全局共享上下文树,支持惰性加载,修复内存泄漏风险。
6
+ * 增量持久化:WAL(Write-Ahead Log)+ 定期 checkpoint + 批量写入
7
+ */
8
+ import { nodeFromJSON, nodeToJSON, } from "./types.js";
9
+ import * as fs from "fs";
10
+ import * as path from "path";
11
+ const STORAGE_VERSION = "4.0.0";
12
+ const CHECKPOINT_INTERVAL = 50; // 每 N 次增量写后触发一次全量 checkpoint
13
+ const WAL_FLUSH_INTERVAL = 1000; // 最多缓存 N ms 后强制刷 WAL
14
+ const WAL_MAX_SIZE = 100; // WAL 超过此条目数时强制 flush
15
+ function computeCRC(entry) {
16
+ const data = JSON.stringify({ op: entry.op, nodeId: entry.nodeId, parentId: entry.parentId, data: entry.data, timestamp: entry.timestamp });
17
+ let crc = 0xFFFFFFFF;
18
+ for (let i = 0; i < data.length; i++) {
19
+ crc ^= data.charCodeAt(i);
20
+ for (let j = 0; j < 8; j++) {
21
+ crc = (crc >>> 1) ^ (crc & 1 ? 0xEDB88320 : 0);
22
+ }
23
+ }
24
+ return (crc ^ 0xFFFFFFFF) >>> 0;
25
+ }
26
+ function validateWALEntry(entry) {
27
+ if (entry.crc === undefined)
28
+ return true; // 旧格式无 CRC,跳过校验
29
+ return entry.crc === computeCRC(entry);
30
+ }
31
+ export class ContextTree {
32
+ storagePath;
33
+ root;
34
+ loadedNodes = new Map();
35
+ dirtyNodes = new Set();
36
+ wal = [];
37
+ walFlushTimer = null;
38
+ writeCountSinceCheckpoint = 0;
39
+ pendingWrites = new Map();
40
+ constructor(storagePath = "data/context_tree.json") {
41
+ this.storagePath = storagePath;
42
+ this.root = this.createRoot();
43
+ this.load();
44
+ this.startWalFlushTimer();
45
+ }
46
+ startWalFlushTimer() {
47
+ if (this.walFlushTimer)
48
+ return;
49
+ this.walFlushTimer = setTimeout(() => {
50
+ this.flushWal();
51
+ }, WAL_FLUSH_INTERVAL);
52
+ }
53
+ stopWalFlushTimer() {
54
+ if (this.walFlushTimer) {
55
+ clearTimeout(this.walFlushTimer);
56
+ this.walFlushTimer = null;
57
+ }
58
+ }
59
+ /**
60
+ * 刷新 WAL 到磁盘(增量写)
61
+ */
62
+ flushWal() {
63
+ // :memory: 模式不写 WAL
64
+ if (this.isMemoryMode() || this.pendingWrites.size === 0)
65
+ return;
66
+ try {
67
+ const dir = path.dirname(this.storagePath);
68
+ if (!fs.existsSync(dir)) {
69
+ fs.mkdirSync(dir, { recursive: true });
70
+ }
71
+ // 构建 WAL 文件路径
72
+ const walPath = `${this.storagePath}.wal`;
73
+ const checkpointPath = `${this.storagePath}.ckpt`;
74
+ // 读取现有 WAL
75
+ let walState = { version: STORAGE_VERSION, lastCheckpoint: Date.now(), sequence: 0, entries: [] };
76
+ if (fs.existsSync(walPath)) {
77
+ try {
78
+ const raw = fs.readFileSync(walPath, "utf-8");
79
+ walState = JSON.parse(raw);
80
+ }
81
+ catch {
82
+ // WAL 损坏,从 checkpoint 恢复
83
+ this.restoreFromCheckpoint();
84
+ }
85
+ }
86
+ // 合并 pending writes(同一节点的多次操作只保留最新)
87
+ for (const entry of this.pendingWrites.values()) {
88
+ const existingIdx = walState.entries.findIndex(e => e.nodeId === entry.nodeId && !e.timestamp);
89
+ if (existingIdx >= 0) {
90
+ walState.entries[existingIdx] = entry;
91
+ }
92
+ else {
93
+ walState.entries.push(entry);
94
+ }
95
+ }
96
+ this.pendingWrites.clear();
97
+ // 写入 WAL(带 fsync 强制刷盘,防止 OS crash 丢失数据)
98
+ const walFd = fs.openSync(walPath, fs.existsSync(walPath) ? "r+" : "w");
99
+ try {
100
+ fs.writeFileSync(walFd, JSON.stringify(walState, null, 2), "utf-8");
101
+ fs.fsyncSync(walFd);
102
+ }
103
+ finally {
104
+ fs.closeSync(walFd);
105
+ }
106
+ // 检查是否需要 checkpoint
107
+ this.writeCountSinceCheckpoint++;
108
+ if (this.writeCountSinceCheckpoint >= CHECKPOINT_INTERVAL || walState.entries.length > WAL_MAX_SIZE) {
109
+ this.performCheckpoint(walState);
110
+ this.writeCountSinceCheckpoint = 0;
111
+ }
112
+ }
113
+ catch (error) {
114
+ console.error("[ContextTree] WAL flush failed:", error);
115
+ }
116
+ finally {
117
+ this.startWalFlushTimer();
118
+ }
119
+ }
120
+ /**
121
+ * 执行全量 checkpoint(合并 WAL 到主文件)
122
+ */
123
+ performCheckpoint(walState) {
124
+ try {
125
+ const ckptPath = `${this.storagePath}.ckpt`;
126
+ // 构建 checkpoint 数据
127
+ const ckptData = {
128
+ version: STORAGE_VERSION,
129
+ last_updated: Date.now(),
130
+ root: nodeToJSON(this.root),
131
+ wal_sequence: walState.sequence,
132
+ };
133
+ // 原子写入 checkpoint
134
+ const tmpPath = `${ckptPath}.tmp.${process.pid}`;
135
+ fs.writeFileSync(tmpPath, JSON.stringify(ckptData, null, 2), "utf-8");
136
+ fs.renameSync(tmpPath, ckptPath);
137
+ // 清空 WAL(只保留 sequence 号)
138
+ walState.entries = [];
139
+ walState.lastCheckpoint = Date.now();
140
+ walState.sequence++;
141
+ const walPath = `${this.storagePath}.wal`;
142
+ fs.writeFileSync(walPath, JSON.stringify(walState, null, 2), "utf-8");
143
+ console.log(`[ContextTree] Checkpoint created, sequence: ${walState.sequence}`);
144
+ }
145
+ catch (error) {
146
+ console.error("[ContextTree] Checkpoint failed:", error);
147
+ }
148
+ }
149
+ /**
150
+ * 从 checkpoint 恢复
151
+ */
152
+ restoreFromCheckpoint() {
153
+ const ckptPath = `${this.storagePath}.ckpt`;
154
+ if (!fs.existsSync(ckptPath)) {
155
+ console.warn("[ContextTree] No checkpoint found, starting fresh");
156
+ return;
157
+ }
158
+ try {
159
+ const raw = fs.readFileSync(ckptPath, "utf-8");
160
+ const ckpt = JSON.parse(raw);
161
+ this.root = nodeFromJSON(ckpt.root || ckpt);
162
+ this.loadedNodes.set("root", this.root);
163
+ console.log("[ContextTree] Restored from checkpoint");
164
+ }
165
+ catch (error) {
166
+ console.error("[ContextTree] Restore from checkpoint failed:", error);
167
+ this.root = this.createRoot();
168
+ }
169
+ }
170
+ /**
171
+ * 将待写入操作加入 pending WAL(用于批量合并)
172
+ */
173
+ queueWalEntry(entry) {
174
+ const fullEntry = { ...entry, timestamp: Date.now(), crc: computeCRC({ ...entry, timestamp: Date.now() }) };
175
+ this.pendingWrites.set(entry.nodeId, fullEntry);
176
+ }
177
+ /**
178
+ * 标记节点为脏
179
+ */
180
+ markDirty(nodeId) {
181
+ this.dirtyNodes.add(nodeId);
182
+ }
183
+ /**
184
+ * 移除脏标记
185
+ */
186
+ clearDirty(nodeId) {
187
+ this.dirtyNodes.delete(nodeId);
188
+ }
189
+ createRoot() {
190
+ return {
191
+ id: "root",
192
+ type: "root",
193
+ state: "active",
194
+ children: {},
195
+ data: {},
196
+ total_steps: 0,
197
+ progress_steps: [],
198
+ created_at: Date.now(),
199
+ updated_at: Date.now(),
200
+ };
201
+ }
202
+ load() {
203
+ // 优先从 checkpoint 恢复(更快)
204
+ const ckptPath = `${this.storagePath}.ckpt`;
205
+ const walPath = `${this.storagePath}.wal`;
206
+ try {
207
+ // 检查是否有 checkpoint + WAL
208
+ if (fs.existsSync(ckptPath)) {
209
+ const ckptRaw = fs.readFileSync(ckptPath, "utf-8");
210
+ const ckpt = JSON.parse(ckptRaw);
211
+ this.root = nodeFromJSON(ckpt.root || ckpt);
212
+ this.loadedNodes.set("root", this.root);
213
+ // 如果有 WAL,合并增量
214
+ if (fs.existsSync(walPath)) {
215
+ try {
216
+ const walRaw = fs.readFileSync(walPath, "utf-8");
217
+ const walState = JSON.parse(walRaw);
218
+ this.applyWalEntries(walState.entries);
219
+ }
220
+ catch {
221
+ console.warn("[ContextTree] WAL apply failed, using checkpoint only");
222
+ }
223
+ }
224
+ console.log("[ContextTree] Loaded from checkpoint");
225
+ return;
226
+ }
227
+ // 没有 checkpoint,从主文件加载
228
+ if (fs.existsSync(this.storagePath)) {
229
+ const data = JSON.parse(fs.readFileSync(this.storagePath, "utf-8"));
230
+ this.root = nodeFromJSON(data.root || data);
231
+ this.loadedNodes.set("root", this.root);
232
+ }
233
+ }
234
+ catch (error) {
235
+ console.error("[ContextTree] Load failed:", error);
236
+ this.root = this.createRoot();
237
+ }
238
+ }
239
+ /**
240
+ * 应用 WAL 条目到内存树
241
+ */
242
+ applyWalEntries(entries) {
243
+ for (const entry of entries) {
244
+ try {
245
+ // 校验 CRC(如果存在)
246
+ if (!validateWALEntry(entry)) {
247
+ console.warn(`[ContextTree] WAL entry corrupted: ${entry.nodeId}, skipping`);
248
+ continue;
249
+ }
250
+ switch (entry.op) {
251
+ case "add":
252
+ if (entry.parentId && entry.data) {
253
+ const parent = this.findNode(entry.parentId);
254
+ if (parent) {
255
+ const node = {
256
+ id: entry.nodeId,
257
+ type: entry.data.type,
258
+ state: entry.data.state || "active",
259
+ parent_id: entry.parentId,
260
+ children: {},
261
+ data: entry.data,
262
+ total_steps: entry.data.total_steps || 0,
263
+ progress_steps: entry.data.progress_steps || [],
264
+ created_at: entry.timestamp,
265
+ updated_at: entry.timestamp,
266
+ };
267
+ parent.children[entry.nodeId] = node;
268
+ }
269
+ }
270
+ break;
271
+ case "update":
272
+ const nodeToUpdate = this.findNode(entry.nodeId);
273
+ if (nodeToUpdate && entry.data) {
274
+ Object.assign(nodeToUpdate.data, entry.data);
275
+ nodeToUpdate.updated_at = entry.timestamp;
276
+ }
277
+ break;
278
+ case "delete":
279
+ // 软删除:通过状态标记
280
+ const nodeToDelete = this.findNode(entry.nodeId);
281
+ if (nodeToDelete) {
282
+ nodeToDelete.state = "stale";
283
+ nodeToDelete.updated_at = entry.timestamp;
284
+ }
285
+ break;
286
+ }
287
+ }
288
+ catch (error) {
289
+ console.warn(`[ContextTree] WAL entry apply failed for ${entry.nodeId}:`, error);
290
+ }
291
+ }
292
+ }
293
+ isMemoryMode() {
294
+ return this.storagePath === ":memory:" || this.storagePath.startsWith(":memory:");
295
+ }
296
+ /**
297
+ * 增量保存(仅保存脏节点,不保存整个树)
298
+ * 注意:为了兼容性,仍然提供全量保存方法 saveFull()
299
+ */
300
+ save() {
301
+ // :memory: 模式不持久化
302
+ if (this.isMemoryMode()) {
303
+ return;
304
+ }
305
+ // 刷新 pending writes
306
+ this.flushWal();
307
+ }
308
+ /**
309
+ * 全量保存(强制保存整个树,用于 shutdown 等场景)
310
+ */
311
+ saveFull() {
312
+ try {
313
+ this.stopWalFlushTimer();
314
+ // :memory: 模式不持久化
315
+ if (this.storagePath === ":memory:" || this.storagePath.startsWith(":memory:")) {
316
+ return;
317
+ }
318
+ const dir = path.dirname(this.storagePath);
319
+ if (!fs.existsSync(dir)) {
320
+ fs.mkdirSync(dir, { recursive: true });
321
+ }
322
+ const data = {
323
+ version: STORAGE_VERSION,
324
+ last_updated: Date.now(),
325
+ root: nodeToJSON(this.root),
326
+ };
327
+ // 原子写入: temp file + rename
328
+ const tmpPath = `${this.storagePath}.tmp.${process.pid}`;
329
+ fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2), "utf-8");
330
+ fs.renameSync(tmpPath, this.storagePath);
331
+ // 清空 WAL
332
+ this.pendingWrites.clear();
333
+ const walPath = `${this.storagePath}.wal`;
334
+ if (fs.existsSync(walPath)) {
335
+ fs.unlinkSync(walPath);
336
+ }
337
+ }
338
+ catch (error) {
339
+ console.error("[ContextTree] Save failed:", error);
340
+ throw error;
341
+ }
342
+ finally {
343
+ this.startWalFlushTimer();
344
+ }
345
+ }
346
+ // === 节点查询 ===
347
+ findNode(nodeId, start = this.root) {
348
+ if (start.id === nodeId)
349
+ return start;
350
+ for (const child of Object.values(start.children)) {
351
+ const found = this.findNode(nodeId, child);
352
+ if (found)
353
+ return found;
354
+ }
355
+ return null;
356
+ }
357
+ getNode(nodeId) {
358
+ return this.findNode(nodeId);
359
+ }
360
+ getTopic(topicId) {
361
+ return this.root.children[topicId] || null;
362
+ }
363
+ getActiveTopics() {
364
+ return Object.values(this.root.children).filter((n) => n.type === "topic" && ["active", "running", "routed"].includes(n.state));
365
+ }
366
+ getTasks(topicId) {
367
+ const topic = this.getTopic(topicId);
368
+ if (!topic)
369
+ return [];
370
+ return Object.values(topic.children).filter((n) => n.type === "task");
371
+ }
372
+ getArtifacts(taskId) {
373
+ const task = this.findNode(taskId);
374
+ if (!task)
375
+ return [];
376
+ return Object.values(task.children).filter((n) => n.type === "artifact");
377
+ }
378
+ getArtifact(artifactId) {
379
+ return this.findNode(artifactId);
380
+ }
381
+ getMessages(topicId) {
382
+ const topic = this.getTopic(topicId);
383
+ if (!topic)
384
+ return [];
385
+ return Object.values(topic.children).filter((n) => n.type === "message");
386
+ }
387
+ // === 节点创建 ===
388
+ addTopic(topicId, label) {
389
+ if (this.root.children[topicId]) {
390
+ throw new Error(`Topic ${topicId} already exists`);
391
+ }
392
+ const node = {
393
+ id: topicId,
394
+ type: "topic",
395
+ label,
396
+ state: "active",
397
+ parent_id: "root",
398
+ children: {},
399
+ data: {},
400
+ total_steps: 0,
401
+ progress_steps: [],
402
+ created_at: Date.now(),
403
+ updated_at: Date.now(),
404
+ };
405
+ this.root.children[topicId] = node;
406
+ this.markDirty(topicId);
407
+ // 队列 WAL 条目(不立即刷盘)
408
+ this.queueWalEntry({
409
+ op: "add",
410
+ nodeId: topicId,
411
+ parentId: "root",
412
+ data: nodeToJSON(node),
413
+ });
414
+ return node;
415
+ }
416
+ addTask(topicId, taskId, agent, taskDesc) {
417
+ const topic = this.getTopic(topicId);
418
+ if (!topic) {
419
+ throw new Error(`Topic ${topicId} not found`);
420
+ }
421
+ if (topic.children[taskId]) {
422
+ throw new Error(`Task ${taskId} already exists`);
423
+ }
424
+ const node = {
425
+ id: taskId,
426
+ type: "task",
427
+ label: taskDesc,
428
+ state: "active",
429
+ parent_id: topicId,
430
+ children: {},
431
+ data: { agent, desc: taskDesc, task_status: "PENDING" },
432
+ total_steps: 0,
433
+ progress_steps: [],
434
+ created_at: Date.now(),
435
+ updated_at: Date.now(),
436
+ };
437
+ topic.children[taskId] = node;
438
+ this.markDirty(taskId);
439
+ this.queueWalEntry({
440
+ op: "add",
441
+ nodeId: taskId,
442
+ parentId: topicId,
443
+ data: nodeToJSON(node),
444
+ });
445
+ return node;
446
+ }
447
+ addArtifact(taskId, artifactId, artifactData) {
448
+ const task = this.findNode(taskId);
449
+ if (!task) {
450
+ throw new Error(`Task ${taskId} not found`);
451
+ }
452
+ const node = {
453
+ id: artifactId,
454
+ type: "artifact",
455
+ state: "active",
456
+ parent_id: taskId,
457
+ children: {},
458
+ data: artifactData,
459
+ total_steps: 0,
460
+ progress_steps: [],
461
+ created_at: Date.now(),
462
+ updated_at: Date.now(),
463
+ };
464
+ task.children[artifactId] = node;
465
+ this.markDirty(artifactId);
466
+ this.queueWalEntry({
467
+ op: "add",
468
+ nodeId: artifactId,
469
+ parentId: taskId,
470
+ data: nodeToJSON(node),
471
+ });
472
+ return node;
473
+ }
474
+ addMessage(topicId, messageId, role, content, contextAnnotation) {
475
+ const topic = this.getTopic(topicId);
476
+ if (!topic) {
477
+ throw new Error(`Topic ${topicId} not found`);
478
+ }
479
+ const node = {
480
+ id: messageId,
481
+ type: "message",
482
+ state: "active",
483
+ parent_id: topicId,
484
+ children: {},
485
+ data: {
486
+ role,
487
+ content,
488
+ context_annotation: contextAnnotation,
489
+ },
490
+ total_steps: 0,
491
+ progress_steps: [],
492
+ created_at: Date.now(),
493
+ updated_at: Date.now(),
494
+ };
495
+ topic.children[messageId] = node;
496
+ this.markDirty(messageId);
497
+ this.queueWalEntry({
498
+ op: "add",
499
+ nodeId: messageId,
500
+ parentId: topicId,
501
+ data: nodeToJSON(node),
502
+ });
503
+ return node;
504
+ }
505
+ // === 状态更新 ===
506
+ updateTopicState(topicId, state, updates) {
507
+ const topic = this.getTopic(topicId);
508
+ if (!topic)
509
+ return;
510
+ topic.state = state;
511
+ topic.updated_at = Date.now();
512
+ if (updates) {
513
+ Object.assign(topic, updates);
514
+ }
515
+ this.markDirty(topicId);
516
+ this.queueWalEntry({
517
+ op: "update",
518
+ nodeId: topicId,
519
+ data: { state, ...updates },
520
+ });
521
+ }
522
+ updateTaskState(taskId, state, updates) {
523
+ const task = this.findNode(taskId);
524
+ if (!task)
525
+ return;
526
+ task.state = state;
527
+ task.updated_at = Date.now();
528
+ if (updates?.task_status) {
529
+ task.data.task_status = updates.task_status;
530
+ }
531
+ if (updates) {
532
+ const { task_status, ...rest } = updates;
533
+ Object.assign(task, rest);
534
+ }
535
+ this.markDirty(taskId);
536
+ const updateData = { state };
537
+ if (updates?.task_status) {
538
+ updateData.task_status = updates.task_status;
539
+ }
540
+ this.queueWalEntry({
541
+ op: "update",
542
+ nodeId: taskId,
543
+ data: updateData,
544
+ });
545
+ }
546
+ addProgressStep(taskId, step) {
547
+ const task = this.findNode(taskId);
548
+ if (!task)
549
+ return;
550
+ task.progress_steps.push(step);
551
+ task.total_steps = task.progress_steps.length;
552
+ task.current_step = step.action;
553
+ task.updated_at = Date.now();
554
+ this.markDirty(taskId);
555
+ this.queueWalEntry({
556
+ op: "update",
557
+ nodeId: taskId,
558
+ data: { progress_steps: task.progress_steps, current_step: step.action },
559
+ });
560
+ }
561
+ // === 查询接口 ===
562
+ findTasksByState(state) {
563
+ const results = [];
564
+ this.findTasksRecursive(this.root, state, results);
565
+ return results;
566
+ }
567
+ findTasksRecursive(node, state, results) {
568
+ for (const child of Object.values(node.children)) {
569
+ if (child.type === "task" && child.state === state) {
570
+ results.push(child);
571
+ }
572
+ this.findTasksRecursive(child, state, results);
573
+ }
574
+ }
575
+ findTopicsByState(state) {
576
+ return Object.values(this.root.children).filter((n) => n.type === "topic" && n.state === state);
577
+ }
578
+ // === 统计 ===
579
+ getStats() {
580
+ let tasks = 0;
581
+ let activeTasks = 0;
582
+ for (const topic of Object.values(this.root.children)) {
583
+ if (topic.type === "topic") {
584
+ for (const child of Object.values(topic.children)) {
585
+ if (child.type === "task") {
586
+ tasks++;
587
+ if (child.state === "active" || child.state === "running") {
588
+ activeTasks++;
589
+ }
590
+ }
591
+ }
592
+ }
593
+ }
594
+ return {
595
+ topics: Object.keys(this.root.children).length,
596
+ tasks,
597
+ activeTopics: this.getActiveTopics().length,
598
+ activeTasks,
599
+ };
600
+ }
601
+ /**
602
+ * 销毁实例(清理定时器,强制刷盘)
603
+ */
604
+ dispose() {
605
+ this.stopWalFlushTimer();
606
+ // 强制刷盘
607
+ this.saveFull();
608
+ }
609
+ }
610
+ // 全局单例
611
+ let globalTree = null;
612
+ export function getContextTree(storagePath) {
613
+ if (!globalTree) {
614
+ globalTree = new ContextTree(storagePath);
615
+ }
616
+ return globalTree;
617
+ }
618
+ export function resetContextTree() {
619
+ if (globalTree) {
620
+ globalTree.dispose();
621
+ }
622
+ globalTree = null;
623
+ }
624
+ //# sourceMappingURL=context-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tree.js","sourceRoot":"","sources":["../src/context-tree.ts"],"names":[],"mappings":"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"}