klaus-agent 0.4.0 → 0.4.1

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 (72) hide show
  1. package/dist/approval/approval.d.ts +8 -3
  2. package/dist/approval/approval.js +23 -23
  3. package/dist/approval/approval.js.map +1 -1
  4. package/dist/approval/types.d.ts +1 -0
  5. package/dist/background/task-manager.d.ts +2 -0
  6. package/dist/background/task-manager.js +14 -0
  7. package/dist/background/task-manager.js.map +1 -1
  8. package/dist/compaction/compaction.d.ts +0 -1
  9. package/dist/compaction/compaction.js +21 -35
  10. package/dist/compaction/compaction.js.map +1 -1
  11. package/dist/compaction/summarizer.js +2 -7
  12. package/dist/compaction/summarizer.js.map +1 -1
  13. package/dist/core/agent-loop.d.ts +2 -1
  14. package/dist/core/agent-loop.js +14 -9
  15. package/dist/core/agent-loop.js.map +1 -1
  16. package/dist/core/agent.d.ts +1 -0
  17. package/dist/core/agent.js +11 -3
  18. package/dist/core/agent.js.map +1 -1
  19. package/dist/injection/history-normalizer.js +20 -10
  20. package/dist/injection/history-normalizer.js.map +1 -1
  21. package/dist/llm/types.d.ts +2 -0
  22. package/dist/multi-agent/task-executor.d.ts +2 -1
  23. package/dist/multi-agent/types.d.ts +3 -0
  24. package/dist/planning/planning-manager.d.ts +2 -0
  25. package/dist/planning/planning-manager.js +6 -0
  26. package/dist/planning/planning-manager.js.map +1 -1
  27. package/dist/providers/anthropic.js +14 -6
  28. package/dist/providers/anthropic.js.map +1 -1
  29. package/dist/providers/google.js.map +1 -1
  30. package/dist/providers/openai-codex.js +5 -8
  31. package/dist/providers/openai-codex.js.map +1 -1
  32. package/dist/providers/openai.js +3 -2
  33. package/dist/providers/openai.js.map +1 -1
  34. package/dist/providers/shared.d.ts +2 -2
  35. package/dist/providers/shared.js +11 -6
  36. package/dist/providers/shared.js.map +1 -1
  37. package/dist/session/session-manager.d.ts +1 -0
  38. package/dist/session/session-manager.js +11 -1
  39. package/dist/session/session-manager.js.map +1 -1
  40. package/dist/task-graph/task-graph.d.ts +3 -0
  41. package/dist/task-graph/task-graph.js +38 -13
  42. package/dist/task-graph/task-graph.js.map +1 -1
  43. package/dist/tools/executor.d.ts +3 -2
  44. package/dist/tools/mcp-adapter.js +22 -5
  45. package/dist/tools/mcp-adapter.js.map +1 -1
  46. package/dist/utils/id.js +2 -6
  47. package/dist/utils/id.js.map +1 -1
  48. package/dist/wire/wire.d.ts +2 -1
  49. package/package.json +1 -1
  50. package/src/approval/approval.ts +29 -23
  51. package/src/approval/types.ts +1 -0
  52. package/src/background/task-manager.ts +17 -0
  53. package/src/compaction/compaction.ts +23 -36
  54. package/src/compaction/summarizer.ts +2 -7
  55. package/src/core/agent-loop.ts +17 -10
  56. package/src/core/agent.ts +12 -3
  57. package/src/injection/history-normalizer.ts +22 -12
  58. package/src/llm/types.ts +2 -0
  59. package/src/multi-agent/task-executor.ts +1 -1
  60. package/src/multi-agent/types.ts +3 -0
  61. package/src/planning/planning-manager.ts +8 -0
  62. package/src/providers/anthropic.ts +70 -57
  63. package/src/providers/google.ts +1 -1
  64. package/src/providers/openai-codex.ts +7 -2
  65. package/src/providers/openai.ts +8 -3
  66. package/src/providers/shared.ts +11 -6
  67. package/src/session/session-manager.ts +15 -4
  68. package/src/task-graph/task-graph.ts +41 -13
  69. package/src/tools/executor.ts +2 -2
  70. package/src/tools/mcp-adapter.ts +23 -7
  71. package/src/utils/id.ts +3 -6
  72. package/src/wire/wire.ts +1 -1
@@ -1,5 +1,6 @@
1
1
  // Task graph — dependency-aware DAG with background execution and auto-unlock
2
- import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync } from "fs";
2
+ import { readFileSync, mkdirSync, existsSync } from "fs";
3
+ import { writeFile, rename } from "fs/promises";
3
4
  import { join } from "path";
4
5
  import { generateId } from "../utils/id.js";
5
6
  export class TaskGraph {
@@ -16,10 +17,14 @@ export class TaskGraph {
16
17
  }
17
18
  get(id) {
18
19
  const task = this._tasks.get(id);
19
- return task ? { ...task } : undefined;
20
+ return task ? { ...task, blockedBy: [...task.blockedBy], blocks: [...task.blocks] } : undefined;
20
21
  }
21
22
  listAll() {
22
- return [...this._tasks.values()];
23
+ return [...this._tasks.values()].map((t) => ({
24
+ ...t,
25
+ blockedBy: [...t.blockedBy],
26
+ blocks: [...t.blocks],
27
+ }));
23
28
  }
24
29
  /** Tasks that are pending with no unfinished blockers. */
25
30
  listReady() {
@@ -47,7 +52,7 @@ export class TaskGraph {
47
52
  };
48
53
  this._tasks.set(node.id, node);
49
54
  this._persist();
50
- return { ...node };
55
+ return { ...node, blockedBy: [...node.blockedBy], blocks: [...node.blocks] };
51
56
  }
52
57
  /** Add a dependency: `taskId` is blocked by `blockedById`. */
53
58
  addDependency(taskId, blockedById) {
@@ -92,7 +97,7 @@ export class TaskGraph {
92
97
  }
93
98
  task.updatedAt = Date.now();
94
99
  this._persist();
95
- return { ...task };
100
+ return { ...task, blockedBy: [...task.blockedBy], blocks: [...task.blocks] };
96
101
  }
97
102
  /**
98
103
  * Run an async function in the background for a task.
@@ -208,14 +213,20 @@ export class TaskGraph {
208
213
  }
209
214
  return false;
210
215
  }
216
+ _persistPromise = Promise.resolve();
211
217
  _persist() {
212
218
  if (!this._config.persistDir)
213
219
  return;
214
- const data = JSON.stringify([...this._tasks.values()], null, 2);
215
- const target = join(this._config.persistDir, "tasks.json");
216
- const tmp = target + ".tmp";
217
- writeFileSync(tmp, data, "utf-8");
218
- renameSync(tmp, target);
220
+ const dir = this._config.persistDir;
221
+ const tasks = [...this._tasks.values()];
222
+ this._persistPromise = this._persistPromise
223
+ .then(() => {
224
+ const data = JSON.stringify(tasks, null, 2);
225
+ const target = join(dir, "tasks.json");
226
+ const tmp = target + ".tmp";
227
+ return writeFile(tmp, data, "utf-8").then(() => rename(tmp, target));
228
+ })
229
+ .catch(() => { });
219
230
  }
220
231
  _loadFromDisk() {
221
232
  if (!this._config.persistDir)
@@ -228,14 +239,28 @@ export class TaskGraph {
228
239
  if (!Array.isArray(raw))
229
240
  return;
230
241
  for (const entry of raw) {
231
- if (entry && typeof entry === "object" && typeof entry.id === "string" && typeof entry.subject === "string") {
232
- this._tasks.set(entry.id, entry);
233
- }
242
+ if (!this._isValidTaskNode(entry))
243
+ continue;
244
+ this._tasks.set(entry.id, entry);
234
245
  }
235
246
  }
236
247
  catch {
237
248
  // Corrupted file — start fresh
238
249
  }
239
250
  }
251
+ static _validStatuses = new Set(["pending", "in_progress", "completed", "failed"]);
252
+ _isValidTaskNode(entry) {
253
+ if (!entry || typeof entry !== "object")
254
+ return false;
255
+ const e = entry;
256
+ return (typeof e.id === "string" &&
257
+ typeof e.subject === "string" &&
258
+ typeof e.status === "string" &&
259
+ TaskGraph._validStatuses.has(e.status) &&
260
+ Array.isArray(e.blockedBy) &&
261
+ Array.isArray(e.blocks) &&
262
+ typeof e.createdAt === "number" &&
263
+ typeof e.updatedAt === "number");
264
+ }
240
265
  }
241
266
  //# sourceMappingURL=task-graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-graph.js","sourceRoot":"","sources":["../../src/task-graph/task-graph.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,OAAO,SAAS;IACZ,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrC,OAAO,CAAkB;IACzB,eAAe,GAA0B,EAAE,CAAC;IAC5C,iBAAiB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE/D,YAAY,SAA0B,EAAE;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAGD,GAAG,CAAC,EAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxC,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,0DAA0D;IAC1D,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CACxD,CAAC;IACJ,CAAC;IAGD,MAAM,CAAC,OAAe,EAAE,WAAW,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAa;YACrB,EAAE,EAAE,UAAU,EAAE;YAChB,OAAO;YACP,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,8DAA8D;IAC9D,aAAa,CAAC,MAAc,EAAE,WAAmB;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO;QAEjD,kGAAkG;QAClG,IAAI,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,WAAW,MAAM,MAAM,wBAAwB,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,MAAgE;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAEhD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,MAAM;oBACN,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,cAAc,EAAE,SAAS;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1D,uGAAuG;QACvG,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC3F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD;;;OAGG;IACH,aAAa,CACX,MAAc,EACd,EAA4C;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAChB,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC1G,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACzD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC,CACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,YAAY;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QACtB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,cAAc;QACZ,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK;gBAC3C,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK;oBAC/B,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK;wBACpC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;4BAChC,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7F,OAAO,UAAU,IAAI,IAAI,KAAK,CAAC,MAAM,UAAU,KAAK,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACpF,CAAC;IAED,OAAO;QACL,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAGO,QAAQ,CAAC,EAAU;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAClF,gBAAgB,CAAC,WAAmB;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,+DAA+D;IACvD,wBAAwB,CAAC,MAAc,EAAE,QAAgB;QAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YAC7B,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACtC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;QAC5B,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAClC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO;YAChC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC5G,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAiB,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"task-graph.js","sourceRoot":"","sources":["../../src/task-graph/task-graph.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,OAAO,SAAS;IACZ,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrC,OAAO,CAAkB;IACzB,eAAe,GAA0B,EAAE,CAAC;IAC5C,iBAAiB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE/D,YAAY,SAA0B,EAAE;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAGD,GAAG,CAAC,EAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,GAAG,CAAC;YACJ,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YAC3B,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;SACtB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,0DAA0D;IAC1D,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CACxD,CAAC;IACJ,CAAC;IAGD,MAAM,CAAC,OAAe,EAAE,WAAW,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAa;YACrB,EAAE,EAAE,UAAU,EAAE;YAChB,OAAO;YACP,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,8DAA8D;IAC9D,aAAa,CAAC,MAAc,EAAE,WAAmB;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO;QAEjD,kGAAkG;QAClG,IAAI,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,WAAW,MAAM,MAAM,wBAAwB,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,MAAgE;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAEhD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,MAAM;oBACN,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,cAAc,EAAE,SAAS;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1D,uGAAuG;QACvG,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC3F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/E,CAAC;IAGD;;;OAGG;IACH,aAAa,CACX,MAAc,EACd,EAA4C;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAChB,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC1G,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACzD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC,CACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,YAAY;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QACtB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,cAAc;QACZ,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK;gBAC3C,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK;oBAC/B,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK;wBACpC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;4BAChC,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7F,OAAO,UAAU,IAAI,IAAI,KAAK,CAAC,MAAM,UAAU,KAAK,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACpF,CAAC;IAED,OAAO;QACL,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAGO,QAAQ,CAAC,EAAU;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAClF,gBAAgB,CAAC,WAAmB;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,+DAA+D;IACvD,wBAAwB,CAAC,MAAc,EAAE,QAAgB;QAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YAC7B,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACtC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEnD,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;aACxC,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;YAC5B,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAsC,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO;YAChC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAiB,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAEO,MAAM,CAAU,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5F,gBAAgB,CAAC,KAAc;QACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,OAAO,CACL,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YACxB,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;YAC7B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;YAC5B,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAgB,CAAC;YAChD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;YAC/B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;IACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { AgentTool, AgentToolResult, BeforeToolCallContext, BeforeToolCallResult, AfterToolCallContext, AfterToolCallResult } from "./types.js";
2
2
  import type { ToolCallBlock } from "../llm/types.js";
3
3
  import type { Approval } from "../approval/types.js";
4
- export interface ToolExecutorConfig {
4
+ interface ToolExecutorConfig {
5
5
  tools: AgentTool[];
6
6
  mode: "sequential" | "parallel";
7
7
  approval: Approval;
@@ -11,7 +11,7 @@ export interface ToolExecutorConfig {
11
11
  afterToolCall?: (ctx: AfterToolCallContext) => Promise<AfterToolCallResult | void>;
12
12
  onEvent: (event: ToolExecutorEvent) => void;
13
13
  }
14
- export type ToolExecutorEvent = {
14
+ type ToolExecutorEvent = {
15
15
  type: "tool_execution_start";
16
16
  toolCallId: string;
17
17
  toolName: string;
@@ -35,3 +35,4 @@ export interface ToolCallResult {
35
35
  isError: boolean;
36
36
  }
37
37
  export declare function executeToolCalls(toolCalls: ToolCallBlock[], config: ToolExecutorConfig): Promise<ToolCallResult[]>;
38
+ export {};
@@ -88,15 +88,32 @@ export class MCPAdapter {
88
88
  async execute(toolCallId, params, context) {
89
89
  // Approval is handled by the executor via approvalAction field
90
90
  // No need to request approval here
91
- // Call with timeout
91
+ // Call with timeout and abort signal support
92
92
  const callPromise = client.callTool(def.name, params);
93
93
  let result;
94
+ let timer;
95
+ let abortHandler;
96
+ const racers = [callPromise];
94
97
  if (timeout) {
95
- const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`MCP tool ${def.name} timed out after ${timeout}ms`)), timeout));
96
- result = await Promise.race([callPromise, timeoutPromise]);
98
+ racers.push(new Promise((_, reject) => {
99
+ timer = setTimeout(() => reject(new Error(`MCP tool ${def.name} timed out after ${timeout}ms`)), timeout);
100
+ }));
97
101
  }
98
- else {
99
- result = await callPromise;
102
+ if (context.signal.aborted)
103
+ throw new Error("Aborted");
104
+ racers.push(new Promise((_, reject) => {
105
+ abortHandler = () => reject(new Error("Aborted"));
106
+ context.signal.addEventListener("abort", abortHandler, { once: true });
107
+ }));
108
+ try {
109
+ result = await Promise.race(racers);
110
+ }
111
+ finally {
112
+ if (timer !== undefined)
113
+ clearTimeout(timer);
114
+ if (abortHandler) {
115
+ context.signal.removeEventListener("abort", abortHandler);
116
+ }
100
117
  }
101
118
  // Convert MCP result to AgentToolResult
102
119
  const content = result.content
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,EAAE,IAAI,EAAgB,MAAM,mBAAmB,CAAC;AA2CvD,sBAAsB;AAEtB,MAAM,OAAO,UAAU;IAMX;IACA;IANF,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACxC,eAAe,GAAyB,IAAI,CAAC;IAErD,YACU,QAA2B,EAC3B,cAAsD;QADtD,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,mBAAc,GAAd,cAAc,CAAwC;QAE9D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,YAAY;QACV,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,eAAe,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,WAAW;QACT,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sBAAsB;IACtB,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,OAAO;QACX,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,mBAAmB;IAEX,KAAK,CAAC,QAAQ;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAuB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEvC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAEjG,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;YAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,YAAY,CAClB,UAAkB,EAClB,GAAsB,EACtB,MAAiB,EACjB,OAAgB;QAEhB,MAAM,QAAQ,GAAG,GAAG,UAAU,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAI,GAAG,CAAC,WAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE/D,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG,CAAC,IAAI;YACf,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,aAAa,GAAG,CAAC,IAAI,EAAE;YACvD,UAAU,EAAE,MAAM;YAClB,cAAc,EAAE,OAAO,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE;YAE/C,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,MAA+B,EAC/B,OAA6B;gBAE7B,+DAA+D;gBAC/D,mCAAmC;gBAEnC,6CAA6C;gBAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,MAAqB,CAAC;gBAE1B,IAAI,KAAgD,CAAC;gBACrD,IAAI,YAAsC,CAAC;gBAC3C,MAAM,MAAM,GAA6B,CAAC,WAAW,CAAC,CAAC;gBAEvD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;wBAC3C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,oBAAoB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC5G,CAAC,CAAC,CAAC,CAAC;gBACN,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBAC3C,YAAY,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;oBAClD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC,CAAC,CAAC,CAAC;gBAEJ,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,CAAC;wBAAS,CAAC;oBACT,IAAI,KAAK,KAAK,SAAS;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,YAAY,EAAE,CAAC;wBACjB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBAED,wCAAwC;gBACxC,MAAM,OAAO,GAAkB,MAAM,CAAC,OAAO;qBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;qBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,CAAC;gBAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
package/dist/utils/id.js CHANGED
@@ -1,9 +1,5 @@
1
+ import { randomBytes } from "node:crypto";
1
2
  export function generateId() {
2
- const chars = "0123456789abcdefghijklmnopqrstuvwxyz";
3
- let id = "";
4
- for (let i = 0; i < 12; i++) {
5
- id += chars[Math.floor(Math.random() * chars.length)];
6
- }
7
- return id;
3
+ return randomBytes(9).toString("base64url").slice(0, 12);
8
4
  }
9
5
  //# sourceMappingURL=id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,sCAAsC,CAAC;IACrD,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { WireMessage, WireSubscriber, WireSubscription } from "./types.js";
2
- export interface WireOptions {
2
+ interface WireOptions {
3
3
  /** Max messages to buffer for replay to late subscribers. 0 = no buffering. */
4
4
  bufferSize?: number;
5
5
  }
@@ -18,3 +18,4 @@ export declare class Wire {
18
18
  getBuffer(): readonly WireMessage[];
19
19
  dispose(): void;
20
20
  }
21
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "klaus-agent",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Universal agent framework",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,21 +8,27 @@ interface PendingRequest {
8
8
  resolve: (approved: boolean) => void;
9
9
  }
10
10
 
11
+ interface SharedApprovalState {
12
+ yolo: boolean;
13
+ autoApproveActions: Set<string>;
14
+ }
15
+
11
16
  export class ApprovalImpl implements Approval {
12
- private _yolo: boolean;
13
- private _autoApproveActions: Set<string>;
17
+ private _shared: SharedApprovalState;
14
18
  private _pending = new Map<string, PendingRequest>();
15
19
  private _queue: ApprovalRequest[] = [];
16
20
  private _waiters: ((req: ApprovalRequest) => void)[] = [];
17
21
 
18
- constructor(config?: ApprovalConfig) {
19
- this._yolo = config?.yolo ?? false;
20
- this._autoApproveActions = new Set(config?.autoApproveActions ?? []);
22
+ constructor(config?: ApprovalConfig, sharedState?: SharedApprovalState) {
23
+ this._shared = sharedState ?? {
24
+ yolo: config?.yolo ?? false,
25
+ autoApproveActions: new Set(config?.autoApproveActions ?? []),
26
+ };
21
27
  }
22
28
 
23
29
  async request(sender: string, action: string, description: string, toolCallId: string): Promise<boolean> {
24
- if (this._yolo) return true;
25
- if (this._autoApproveActions.has(action)) return true;
30
+ if (this._shared.yolo) return true;
31
+ if (this._shared.autoApproveActions.has(action)) return true;
26
32
 
27
33
  const req: ApprovalRequest = {
28
34
  id: generateId(),
@@ -72,7 +78,7 @@ export class ApprovalImpl implements Approval {
72
78
  this._pending.delete(requestId);
73
79
 
74
80
  if (response === "approve_for_session") {
75
- this._autoApproveActions.add(pending.request.action);
81
+ this._shared.autoApproveActions.add(pending.request.action);
76
82
  pending.resolve(true);
77
83
  } else {
78
84
  pending.resolve(response === "approve");
@@ -80,29 +86,29 @@ export class ApprovalImpl implements Approval {
80
86
  }
81
87
 
82
88
  setYolo(yolo: boolean): void {
83
- this._yolo = yolo;
89
+ this._shared.yolo = yolo;
84
90
  }
85
91
 
86
92
  isYolo(): boolean {
87
- return this._yolo;
93
+ return this._shared.yolo;
88
94
  }
89
95
 
90
96
  get autoApproveActions(): Set<string> {
91
- return this._autoApproveActions;
97
+ return this._shared.autoApproveActions;
92
98
  }
93
99
 
94
100
  share(): Approval {
95
- // Shared state (yolo, autoApproveActions), independent queue
96
- // Use a shared state object so changes propagate bidirectionally
97
- const shared = new ApprovalImpl();
98
- shared._autoApproveActions = this._autoApproveActions; // same reference
99
- // Share yolo via getter/setter delegation
100
- const parent = this;
101
- Object.defineProperty(shared, '_yolo', {
102
- get() { return parent._yolo; },
103
- set(v: boolean) { parent._yolo = v; },
104
- configurable: true,
105
- });
106
- return shared;
101
+ // Shared state (yolo, autoApproveActions) via same reference, independent queue
102
+ return new ApprovalImpl(undefined, this._shared);
103
+ }
104
+
105
+ dispose(): void {
106
+ this.cancelPendingWaiters();
107
+ // Reject all pending approval requests so blocked tools don't hang forever
108
+ for (const [id, pending] of this._pending) {
109
+ pending.resolve(false);
110
+ }
111
+ this._pending.clear();
112
+ this._queue = [];
107
113
  }
108
114
  }
@@ -23,4 +23,5 @@ export interface Approval {
23
23
  isYolo(): boolean;
24
24
  readonly autoApproveActions: Set<string>;
25
25
  share(): Approval;
26
+ dispose(): void;
26
27
  }
@@ -82,6 +82,23 @@ export class BackgroundTaskManager {
82
82
  }
83
83
  }
84
84
 
85
+ /** Remove completed/failed tasks older than `maxAgeMs` (default: 5 minutes). */
86
+ prune(maxAgeMs = 5 * 60 * 1000): number {
87
+ const now = Date.now();
88
+ let removed = 0;
89
+ for (const [id, task] of this._tasks) {
90
+ if (
91
+ (task.status === "completed" || task.status === "failed") &&
92
+ task.completedAt &&
93
+ now - task.completedAt > maxAgeMs
94
+ ) {
95
+ this._tasks.delete(id);
96
+ removed++;
97
+ }
98
+ }
99
+ return removed;
100
+ }
101
+
85
102
  dispose(): void {
86
103
  this.abortAll();
87
104
  this._tasks.clear();
@@ -75,6 +75,14 @@ export function findCutPoint(
75
75
  }
76
76
  }
77
77
 
78
+ // If all messages fit within keepRecentTokens, nothing can be discarded.
79
+ // Return firstKeptIndex: 0 so callers know there's nothing to cut —
80
+ // this prevents infinite compaction loops when context exceeds max but
81
+ // all messages fall within the keep window.
82
+ if (cutIndex >= messages.length) {
83
+ return { firstKeptIndex: 0, isSplitTurn: false };
84
+ }
85
+
78
86
  // Ensure we don't cut at a tool_result (must follow its tool_call)
79
87
  while (cutIndex < messages.length) {
80
88
  const msg = messages[cutIndex];
@@ -85,8 +93,8 @@ export function findCutPoint(
85
93
  }
86
94
  }
87
95
 
88
- // Don't cut if nothing to discard
89
- if (cutIndex <= 1) {
96
+ // After adjusting for tool_results, check if we've pushed past all messages
97
+ if (cutIndex >= messages.length || cutIndex <= 1) {
90
98
  return { firstKeptIndex: 0, isSplitTurn: false };
91
99
  }
92
100
 
@@ -108,25 +116,24 @@ export function microCompact(messages: Message[], keepRecent: number): Message[]
108
116
 
109
117
  if (toolResultIndices.length <= keepRecent) return messages;
110
118
 
119
+ // Build toolCallId → toolName map in one pass
120
+ const toolCallNames = new Map<string, string>();
121
+ for (const msg of messages) {
122
+ if (msg.role === "assistant") {
123
+ for (const b of msg.content) {
124
+ if (b.type === "tool_call") {
125
+ toolCallNames.set(b.id, b.name);
126
+ }
127
+ }
128
+ }
129
+ }
130
+
111
131
  const toReplace = toolResultIndices.slice(0, -keepRecent);
112
132
  const result = [...messages];
113
133
 
114
134
  for (const idx of toReplace) {
115
135
  const msg = result[idx] as ToolResultMessage;
116
-
117
- let toolName = "tool";
118
- for (let j = idx - 1; j >= 0; j--) {
119
- const prev = result[j];
120
- if (prev.role === "assistant") {
121
- const call = prev.content.find(
122
- (b): b is ToolCallBlock => b.type === "tool_call" && b.id === msg.toolCallId,
123
- );
124
- if (call) {
125
- toolName = call.name;
126
- break;
127
- }
128
- }
129
- }
136
+ const toolName = toolCallNames.get(msg.toolCallId) ?? "tool";
130
137
 
131
138
  result[idx] = {
132
139
  role: "tool_result",
@@ -139,23 +146,3 @@ export function microCompact(messages: Message[], keepRecent: number): Message[]
139
146
  return result;
140
147
  }
141
148
 
142
- export function messagesToText(messages: AgentMessage[]): string {
143
- const parts: string[] = [];
144
- for (const msg of messages) {
145
- if (!msg || typeof msg !== "object" || !("role" in msg)) continue;
146
- const m = msg as Message;
147
-
148
- if (m.role === "user") {
149
- const text = typeof m.content === "string" ? m.content : m.content.filter((b) => b.type === "text").map((b) => (b as { text: string }).text).join("\n");
150
- parts.push(`User: ${text}`);
151
- } else if (m.role === "assistant") {
152
- const text = m.content.filter((b) => b.type === "text").map((b) => (b as { text: string }).text).join("\n");
153
- const toolCalls = m.content.filter((b) => b.type === "tool_call").map((b) => (b as { name: string }).name);
154
- parts.push(`Assistant: ${text}${toolCalls.length ? ` [tools: ${toolCalls.join(", ")}]` : ""}`);
155
- } else if (m.role === "tool_result") {
156
- const text = typeof m.content === "string" ? m.content : m.content.filter((b) => b.type === "text").map((b) => (b as { text: string }).text).join("\n");
157
- parts.push(`Tool result: ${text.slice(0, 500)}`);
158
- }
159
- }
160
- return parts.join("\n");
161
- }
@@ -3,7 +3,6 @@
3
3
  import type { LLMProvider, LLMRequestOptions, AssistantMessage } from "../llm/types.js";
4
4
  import type { AgentMessage } from "../types.js";
5
5
  import type { CompactionSummarizer, CompactionInput } from "./types.js";
6
- import { messagesToText } from "./compaction.js";
7
6
 
8
7
  const SUMMARIZE_PROMPT = `You are a conversation summarizer. Summarize the following conversation history concisely, preserving:
9
8
  - Key decisions and outcomes
@@ -42,13 +41,9 @@ export class LLMSummarizer implements CompactionSummarizer {
42
41
 
43
42
  let result = "";
44
43
  for await (const event of this.provider.stream(options)) {
45
- if (event.type === "text") {
46
- result += event.text;
47
- } else if (event.type === "done") {
44
+ if (event.type === "done") {
48
45
  const textBlocks = event.message.content.filter((b) => b.type === "text");
49
- if (textBlocks.length > 0) {
50
- result = textBlocks.map((b) => (b as { text: string }).text).join("");
51
- }
46
+ result = textBlocks.map((b) => (b as { text: string }).text).join("");
52
47
  }
53
48
  }
54
49
 
@@ -29,7 +29,7 @@ import { estimateTokens, shouldCompact, findCutPoint, microCompact } from "../co
29
29
  import { normalizeHistory } from "../injection/history-normalizer.js";
30
30
  import { calculateCost } from "../providers/shared.js";
31
31
 
32
- export interface AgentLoopConfig {
32
+ interface AgentLoopConfig {
33
33
  provider: LLMProvider;
34
34
  modelId: string;
35
35
  systemPrompt: string;
@@ -91,7 +91,7 @@ function toolResultsToMessages(results: ToolCallResult[]): ToolResultMessage[] {
91
91
  role: "tool_result" as const,
92
92
  toolCallId: r.toolCallId,
93
93
  content: r.result.content,
94
- isError: r.isError || undefined,
94
+ isError: r.isError,
95
95
  }));
96
96
  }
97
97
 
@@ -185,14 +185,10 @@ export async function runAgentLoop(
185
185
  }
186
186
  allMessages.push(...toKeep);
187
187
 
188
- // Persist compaction to session
189
- // Append compaction entry as boundary marker, then re-append
190
- // kept messages after it so buildSessionContext picks them up
188
+ // Persist compaction boundary marker to session.
189
+ // Kept messages are already in the session tree — only append the compaction entry.
191
190
  if (sessionManager) {
192
191
  await sessionManager.appendCompaction(summary, sessionManager.getLeafId() ?? "", tokens);
193
- for (const msg of toKeep) {
194
- await sessionManager.appendMessage(msg);
195
- }
196
192
  }
197
193
 
198
194
  onEvent({ type: "compaction_end", summary });
@@ -257,7 +253,7 @@ export async function runAgentLoop(
257
253
 
258
254
  // --- Phase-aware tool filtering ---
259
255
  let visibleTools = allTools;
260
- if (config.planningManager?.phase === "planning" && config.planningManager.allowedInPlanning.size > 2) {
256
+ if (config.planningManager?.phase === "planning" && config.planningManager.hasConfiguredReadOnlyTools) {
261
257
  visibleTools = allTools.filter((t) => config.planningManager!.allowedInPlanning.has(t.name));
262
258
  }
263
259
 
@@ -442,9 +438,20 @@ export async function runAgentLoop(
442
438
  }
443
439
  }
444
440
  } catch (err) {
445
- if (!(err instanceof Error && err.name === "AbortError")) {
441
+ const isAbort = err instanceof Error && err.name === "AbortError";
442
+ if (!isAbort) {
446
443
  onEvent({ type: "error", error: err instanceof Error ? err : new Error(String(err)) });
447
444
  }
445
+
446
+ onEvent({ type: "agent_end", messages: allMessages });
447
+ await extensionRunner?.emitSimple("agent_end", { messages: allMessages });
448
+
449
+ // Re-throw non-abort errors so the caller (Agent._runLoop) can set error state.
450
+ // AbortError is intentional (user called agent.abort()), not an error condition.
451
+ if (!isAbort) {
452
+ throw err;
453
+ }
454
+ return allMessages;
448
455
  }
449
456
 
450
457
  onEvent({ type: "agent_end", messages: allMessages });
package/src/core/agent.ts CHANGED
@@ -43,6 +43,7 @@ import { PlanningNagProvider } from "../planning/nag-injection.js";
43
43
  import { TaskGraph } from "../task-graph/task-graph.js";
44
44
  import { createTaskGraphTools } from "../task-graph/tools.js";
45
45
  import { TaskResultInjectionProvider } from "../task-graph/result-injection.js";
46
+ import { resolveProvider } from "../llm/provider.js";
46
47
  import { runAgentLoop } from "./agent-loop.js";
47
48
 
48
49
  export interface AgentConfig {
@@ -95,6 +96,7 @@ export class Agent {
95
96
  private _backgroundTaskManager: BackgroundTaskManager | undefined;
96
97
  private _planningManager: PlanningManager | undefined;
97
98
  private _taskGraph: TaskGraph;
99
+ private _createdSubagents: Agent[] = [];
98
100
  private _initialized = false;
99
101
 
100
102
  constructor(config: AgentConfig) {
@@ -293,6 +295,9 @@ export class Agent {
293
295
  this._listeners.clear();
294
296
  this._steeringQueue = [];
295
297
  this._followUpQueue = [];
298
+ await Promise.allSettled(this._createdSubagents.map((sub) => sub.dispose()));
299
+ this._createdSubagents = [];
300
+ this._approval.dispose();
296
301
  await this._mcpAdapter?.dispose();
297
302
  this._backgroundTaskManager?.dispose();
298
303
  this._taskGraph.dispose();
@@ -303,7 +308,6 @@ export class Agent {
303
308
 
304
309
  private async _ensureInitialized(): Promise<void> {
305
310
  if (this._initialized) return;
306
- this._initialized = true;
307
311
 
308
312
  // Init session and restore messages
309
313
  if (this._sessionManager) {
@@ -362,14 +366,17 @@ export class Agent {
362
366
  // Init fixed subagents and create TaskTool
363
367
  if (this._config.subagents && this._laborMarket && this._taskExecutor) {
364
368
  for (const [name, subConfig] of Object.entries(this._config.subagents)) {
369
+ const subModel = subConfig.model ?? this._config.model;
370
+ const subProvider = subConfig.model ? resolveProvider(subConfig.model) : this._provider;
365
371
  const subAgent = new Agent({
366
- model: this._config.model,
372
+ model: subModel,
367
373
  systemPrompt: subConfig.systemPrompt,
368
374
  tools: subConfig.tools ?? [],
369
- provider: this._provider,
375
+ provider: subProvider,
370
376
  approval: this._approval.share(),
371
377
  name,
372
378
  });
379
+ this._createdSubagents.push(subAgent);
373
380
  this._laborMarket.addFixed(name, subAgent, subConfig.description);
374
381
  }
375
382
  // Add built-in TaskTool so LLM can delegate to subagents
@@ -395,6 +402,8 @@ export class Agent {
395
402
  if (this._config.taskGraph?.autoInjectResults !== false) {
396
403
  this._addInjectionProvider(new TaskResultInjectionProvider(this._taskGraph));
397
404
  }
405
+
406
+ this._initialized = true;
398
407
  }
399
408
 
400
409
  private _addInjectionProvider(provider: DynamicInjectionProvider): void {