neoctl 0.2.35 → 0.2.36

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 (71) hide show
  1. package/dist/agents/agent-tool-persistence.test.d.ts +1 -0
  2. package/dist/agents/agent-tool-persistence.test.js +313 -0
  3. package/dist/agents/agent-tool-persistence.test.js.map +1 -0
  4. package/dist/agents/agent-tool.js +137 -60
  5. package/dist/agents/agent-tool.js.map +1 -1
  6. package/dist/agents/local-agent-task.d.ts +41 -0
  7. package/dist/agents/local-agent-task.js +3 -0
  8. package/dist/agents/local-agent-task.js.map +1 -1
  9. package/dist/agents/no-nested-delegation.test.d.ts +1 -0
  10. package/dist/agents/no-nested-delegation.test.js +38 -0
  11. package/dist/agents/no-nested-delegation.test.js.map +1 -0
  12. package/dist/agents/smoke-agent-lifecycle.d.ts +1 -0
  13. package/dist/agents/smoke-agent-lifecycle.js +188 -0
  14. package/dist/agents/smoke-agent-lifecycle.js.map +1 -0
  15. package/dist/core/query-engine.js +1 -1
  16. package/dist/core/query-engine.js.map +1 -1
  17. package/dist/core/query.d.ts +3 -1
  18. package/dist/core/query.js +16 -3
  19. package/dist/core/query.js.map +1 -1
  20. package/dist/core/run-agent-pause.test.d.ts +1 -0
  21. package/dist/core/run-agent-pause.test.js +52 -0
  22. package/dist/core/run-agent-pause.test.js.map +1 -0
  23. package/dist/core/run-agent-persistence.test.d.ts +1 -0
  24. package/dist/core/run-agent-persistence.test.js +222 -0
  25. package/dist/core/run-agent-persistence.test.js.map +1 -0
  26. package/dist/core/run-agent.d.ts +11 -0
  27. package/dist/core/run-agent.js +56 -11
  28. package/dist/core/run-agent.js.map +1 -1
  29. package/dist/core/smoke-core-loop.js +8 -7
  30. package/dist/core/smoke-core-loop.js.map +1 -1
  31. package/dist/model/model-metadata.json +99 -99
  32. package/dist/repl/index.js +20 -26
  33. package/dist/repl/index.js.map +1 -1
  34. package/dist/session/session-store-safety.test.d.ts +1 -0
  35. package/dist/session/session-store-safety.test.js +107 -0
  36. package/dist/session/session-store-safety.test.js.map +1 -0
  37. package/dist/session/session-store.d.ts +1 -0
  38. package/dist/session/session-store.js +64 -5
  39. package/dist/session/session-store.js.map +1 -1
  40. package/dist/session/tool-result-memory.d.ts +3 -1
  41. package/dist/session/tool-result-memory.js.map +1 -1
  42. package/dist/tasks/subagent-tools.d.ts +4 -1
  43. package/dist/tasks/subagent-tools.js +85 -24
  44. package/dist/tasks/subagent-tools.js.map +1 -1
  45. package/dist/tasks/subagent-tools.test.d.ts +1 -0
  46. package/dist/tasks/subagent-tools.test.js +158 -0
  47. package/dist/tasks/subagent-tools.test.js.map +1 -0
  48. package/dist/tasks/task-ack-size.test.d.ts +1 -0
  49. package/dist/tasks/task-ack-size.test.js +100 -0
  50. package/dist/tasks/task-ack-size.test.js.map +1 -0
  51. package/dist/tasks/task-persistence.d.ts +22 -0
  52. package/dist/tasks/task-persistence.js +194 -0
  53. package/dist/tasks/task-persistence.js.map +1 -0
  54. package/dist/tasks/task-persistence.test.d.ts +1 -0
  55. package/dist/tasks/task-persistence.test.js +331 -0
  56. package/dist/tasks/task-persistence.test.js.map +1 -0
  57. package/dist/tasks/task-store.d.ts +45 -3
  58. package/dist/tasks/task-store.js +292 -16
  59. package/dist/tasks/task-store.js.map +1 -1
  60. package/dist/tools/tool.d.ts +5 -0
  61. package/dist/tools/tool.js.map +1 -1
  62. package/dist/web/index.d.ts +99 -6
  63. package/dist/web/index.js +93 -56
  64. package/dist/web/index.js.map +1 -1
  65. package/dist/web/smoke-task-session-entrypoints.d.ts +1 -0
  66. package/dist/web/smoke-task-session-entrypoints.js +75 -0
  67. package/dist/web/smoke-task-session-entrypoints.js.map +1 -0
  68. package/dist/web/smoke-web-agent-tasks.d.ts +1 -0
  69. package/dist/web/smoke-web-agent-tasks.js +50 -0
  70. package/dist/web/smoke-web-agent-tasks.js.map +1 -0
  71. package/package.json +4 -4
@@ -1,14 +1,35 @@
1
+ import { type TaskLoadSummary } from "./task-persistence.js";
1
2
  import { type Message } from "../types/messages.js";
2
- import { type AgentToolResult, type LocalAgentTask, type LocalAgentTaskStatus } from "../agents/local-agent-task.js";
3
+ import { type AgentMessageReceipt, type AgentToolResult, type LocalAgentTask, type LocalAgentTaskStatus } from "../agents/local-agent-task.js";
3
4
  export declare class TaskStore {
4
5
  private readonly tasks;
5
6
  private readonly agentNames;
6
7
  private readonly waiters;
7
8
  private readonly subscribers;
8
- upsert(task: LocalAgentTask): void;
9
+ private sessionDir?;
10
+ private readonly loadedSessions;
11
+ /** Activate a view; background tasks in other sessions retain their lifecycle. */
12
+ bindSession(sessionDir?: string): TaskLoadSummary;
13
+ loadSession(sessionDir: string): TaskLoadSummary;
14
+ get activeSessionDir(): string | undefined;
15
+ getActive(id: string): LocalAgentTask | undefined;
16
+ private isActive;
17
+ private readonly persistenceTimers;
18
+ activateSession(sessionDir?: string): TaskLoadSummary;
19
+ getInSession(id: string, sessionDir?: string): LocalAgentTask | undefined;
20
+ private readonly explicitlyOwnedTasks;
21
+ attachTask(task: LocalAgentTask, sessionDir?: string): void;
22
+ /** Progress only: coalesce token deltas; message and lifecycle methods remain durable. */
23
+ updateProgress(task: LocalAgentTask): void;
24
+ flush(): void;
25
+ upsert(task: LocalAgentTask, options?: {
26
+ persist?: boolean;
27
+ }): void;
9
28
  get(id: string): LocalAgentTask | undefined;
10
29
  getByAgentId(agentId: string): LocalAgentTask | undefined;
11
30
  list(): LocalAgentTask[];
31
+ /** Explicit query scope; undefined means unowned, never the foreground view. */
32
+ listInSession(sessionDir?: string): LocalAgentTask[];
12
33
  activeCount(): number;
13
34
  subscribe(listener: () => void): () => void;
14
35
  registerName(name: string, agentId: string): void;
@@ -17,12 +38,33 @@ export declare class TaskStore {
17
38
  queueMessage(agentNameOrId: string, text: string): {
18
39
  ok: true;
19
40
  task: LocalAgentTask;
41
+ receipt: AgentMessageReceipt;
42
+ } | {
43
+ ok: false;
44
+ error: string;
45
+ };
46
+ queueMessageInSession(agentNameOrId: string, text: string, sessionDir?: string): {
47
+ ok: true;
48
+ task: LocalAgentTask;
49
+ receipt: AgentMessageReceipt;
20
50
  } | {
21
51
  ok: false;
22
52
  error: string;
23
53
  };
24
54
  drainPendingMessages(taskId: string): Message[];
25
- collectUnnotifiedCompletions(): LocalAgentTask[];
55
+ /** Synchronous handoff at the next model-request boundary, never during tool execution. */
56
+ deliverPendingMessages(taskId: string, runGeneration: number): Message[];
57
+ /** Call after durable transcript append and BEFORE compaction/model execution.
58
+ * A stale generation cannot acknowledge a newer handoff. Failure must stop the run.
59
+ */
60
+ confirmDelivery(taskId: string, messageIds: readonly string[], runGeneration: number): void;
61
+ /** Only unconfirmed outbox entries may be retried. Missing historical receipt IDs
62
+ * may simply have been compacted, so they NEVER imply an undelivered message.
63
+ * persistedMessageIds can include IDs from the complete append-only transcript log.
64
+ */
65
+ reconcileMessages(taskId: string, transcript: readonly Message[], persistedMessageIds?: Iterable<string>): void;
66
+ prepareResume(taskId: string, abortController: AbortController): LocalAgentTask;
67
+ collectUnnotifiedCompletions(...scope: [sessionDir?: string]): LocalAgentTask[];
26
68
  markRunning(taskId: string): void;
27
69
  complete(taskId: string, result: AgentToolResult): void;
28
70
  fail(taskId: string, error: string): void;
@@ -1,3 +1,6 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { resolve } from "node:path";
3
+ import { loadTasks, persistTask } from "./task-persistence.js";
1
4
  import { createTextMessage } from "../types/messages.js";
2
5
  import { writeLocalAgentTaskOutput } from "../agents/local-agent-task.js";
3
6
  export class TaskStore {
@@ -5,8 +8,97 @@ export class TaskStore {
5
8
  agentNames = new Map();
6
9
  waiters = new Set();
7
10
  subscribers = new Set();
8
- upsert(task) {
11
+ sessionDir;
12
+ loadedSessions = new Set();
13
+ /** Activate a view; background tasks in other sessions retain their lifecycle. */
14
+ bindSession(sessionDir) {
15
+ this.sessionDir = sessionDir ? resolve(sessionDir) : undefined;
16
+ const summary = { loaded: 0, interrupted: 0, errors: [] };
17
+ if (this.sessionDir && !this.loadedSessions.has(this.sessionDir)) {
18
+ const loaded = loadTasks(this.sessionDir);
19
+ Object.assign(summary, loaded.summary);
20
+ for (const task of loaded.tasks) {
21
+ if (this.tasks.has(task.id)) {
22
+ summary.loaded--;
23
+ summary.errors.push("Skipped conflicting task identifier");
24
+ continue;
25
+ }
26
+ this.tasks.set(task.id, task);
27
+ try {
28
+ persistTask(task);
29
+ }
30
+ catch {
31
+ summary.errors.push("Unable to persist recovered task state");
32
+ }
33
+ }
34
+ this.loadedSessions.add(this.sessionDir);
35
+ }
36
+ this.notify();
37
+ return summary;
38
+ }
39
+ loadSession(sessionDir) { return this.bindSession(sessionDir); }
40
+ get activeSessionDir() { return this.sessionDir; }
41
+ getActive(id) {
42
+ const task = this.get(id);
43
+ return task && this.isActive(task) ? task : undefined;
44
+ }
45
+ isActive(task) { return task.ownerSessionDir === this.sessionDir; }
46
+ persistenceTimers = new Map();
47
+ activateSession(sessionDir) { return this.bindSession(sessionDir); }
48
+ getInSession(id, sessionDir) {
49
+ const task = this.get(id);
50
+ return task?.ownerSessionDir === (sessionDir ? resolve(sessionDir) : undefined) ? task : undefined;
51
+ }
52
+ explicitlyOwnedTasks = new WeakSet();
53
+ attachTask(task, sessionDir) {
54
+ this.explicitlyOwnedTasks.add(task);
55
+ task.ownerSessionDir = sessionDir ? resolve(sessionDir) : undefined;
56
+ this.upsert(task);
57
+ }
58
+ /** Progress only: coalesce token deltas; message and lifecycle methods remain durable. */
59
+ updateProgress(task) { this.upsert(task, { persist: false }); }
60
+ flush() {
61
+ for (const [id, timer] of this.persistenceTimers) {
62
+ clearTimeout(timer);
63
+ const task = this.get(id);
64
+ if (task)
65
+ persistTask(task);
66
+ this.persistenceTimers.delete(id);
67
+ }
68
+ }
69
+ upsert(task, options = {}) {
70
+ const existing = this.tasks.get(task.id);
71
+ if (existing && existing !== task && existing.ownerSessionDir !== task.ownerSessionDir)
72
+ throw new Error("Conflicting task owner");
73
+ if (!existing && task.ownerSessionDir === undefined && !this.explicitlyOwnedTasks.has(task))
74
+ task.ownerSessionDir = this.sessionDir;
75
+ if (task.ownerSessionDir)
76
+ task.ownerSessionDir = resolve(task.ownerSessionDir);
77
+ if ([...this.tasks.values()].some((other) => other.id !== task.id && other.ownerSessionDir === task.ownerSessionDir && other.agentId === task.agentId))
78
+ throw new Error("Conflicting agent identifier");
9
79
  task.updatedAt = new Date().toISOString();
80
+ if (options.persist === false && existing && task.ownerSessionDir) {
81
+ if (!this.persistenceTimers.has(task.id)) {
82
+ const timer = setTimeout(() => {
83
+ this.persistenceTimers.delete(task.id);
84
+ const current = this.get(task.id);
85
+ try {
86
+ if (current)
87
+ persistTask(current);
88
+ }
89
+ catch { /* Progress is best effort; the next durable boundary retries. */ }
90
+ }, 500);
91
+ timer.unref();
92
+ this.persistenceTimers.set(task.id, timer);
93
+ }
94
+ }
95
+ else {
96
+ const timer = this.persistenceTimers.get(task.id);
97
+ if (timer)
98
+ clearTimeout(timer);
99
+ this.persistenceTimers.delete(task.id);
100
+ persistTask(task);
101
+ }
10
102
  this.tasks.set(task.id, task);
11
103
  this.notify();
12
104
  }
@@ -14,10 +106,13 @@ export class TaskStore {
14
106
  return this.tasks.get(id);
15
107
  }
16
108
  getByAgentId(agentId) {
17
- return [...this.tasks.values()].find((task) => task.agentId === agentId);
109
+ return this.list().find((task) => task.agentId === agentId);
18
110
  }
19
- list() {
20
- return [...this.tasks.values()].sort((left, right) => left.createdAt.localeCompare(right.createdAt));
111
+ list() { return this.listInSession(this.sessionDir); }
112
+ /** Explicit query scope; undefined means unowned, never the foreground view. */
113
+ listInSession(sessionDir) {
114
+ const owner = sessionDir ? resolve(sessionDir) : undefined;
115
+ return [...this.tasks.values()].filter((task) => task.ownerSessionDir === owner).sort((left, right) => left.createdAt.localeCompare(right.createdAt));
21
116
  }
22
117
  activeCount() {
23
118
  return this.list().filter((task) => !this.isTerminal(task)).length;
@@ -27,10 +122,15 @@ export class TaskStore {
27
122
  return () => this.subscribers.delete(listener);
28
123
  }
29
124
  registerName(name, agentId) {
30
- this.agentNames.set(name, agentId);
125
+ this.agentNames.set(`${this.sessionDir ?? ""}\0${name}`, agentId);
126
+ const task = this.getByAgentId(agentId);
127
+ if (task) {
128
+ task.names = [...new Set([...(task.names ?? []), name])];
129
+ this.upsert(task);
130
+ }
31
131
  }
32
132
  resolveAgentName(nameOrId) {
33
- return this.agentNames.get(nameOrId) ?? (this.getByAgentId(nameOrId) ? nameOrId : undefined);
133
+ return this.list().find((task) => task.names?.includes(nameOrId))?.agentId ?? this.agentNames.get(`${this.sessionDir ?? ""}\0${nameOrId}`) ?? (this.getByAgentId(nameOrId) ? nameOrId : undefined);
34
134
  }
35
135
  appendMessage(taskId, message) {
36
136
  const task = this.require(taskId);
@@ -38,26 +138,191 @@ export class TaskStore {
38
138
  this.upsert(task);
39
139
  }
40
140
  queueMessage(agentNameOrId, text) {
41
- const agentId = this.resolveAgentName(agentNameOrId);
141
+ return this.queueMessageInSession(agentNameOrId, text, this.sessionDir);
142
+ }
143
+ queueMessageInSession(agentNameOrId, text, sessionDir) {
144
+ const owner = sessionDir ? resolve(sessionDir) : undefined;
145
+ const tasks = this.listInSession(owner);
146
+ const agentId = tasks.find((task) => task.names?.includes(agentNameOrId))?.agentId
147
+ ?? this.agentNames.get(`${owner ?? ""}\0${agentNameOrId}`)
148
+ ?? tasks.find((task) => task.agentId === agentNameOrId)?.agentId;
42
149
  if (!agentId)
43
150
  return { ok: false, error: `Unknown agent: ${agentNameOrId}` };
44
- const task = this.getByAgentId(agentId);
151
+ const task = tasks.find((task) => task.agentId === agentId);
45
152
  if (!task)
46
153
  return { ok: false, error: `No task found for agent: ${agentNameOrId}` };
47
- task.pendingMessages.push(createTextMessage("user", text));
48
- this.upsert(task);
49
- return { ok: true, task };
154
+ if (task.pendingMessages.length >= 256)
155
+ return { ok: false, error: "Agent inbox is full (256 pending messages); retry after delivery or resume" };
156
+ if (text.length > 16 * 1024)
157
+ return { ok: false, error: "Agent message exceeds 16384 characters; split it into smaller messages" };
158
+ const message = createTextMessage("user", text);
159
+ const receipt = { id: randomUUID(), messageId: message.id, status: "queued", queuedAt: new Date().toISOString(), runGeneration: task.runGeneration };
160
+ task.pendingMessages.push(message);
161
+ (task.messageReceipts ??= []).push(receipt);
162
+ try {
163
+ this.upsert(task);
164
+ }
165
+ catch {
166
+ task.pendingMessages = task.pendingMessages.filter((entry) => entry.id !== message.id);
167
+ task.messageReceipts = task.messageReceipts?.filter((entry) => entry.id !== receipt.id);
168
+ return { ok: false, error: "Unable to persist queued agent message" };
169
+ }
170
+ return { ok: true, task, receipt };
50
171
  }
51
172
  drainPendingMessages(taskId) {
52
173
  const task = this.get(taskId);
53
174
  if (!task || task.pendingMessages.length === 0)
54
175
  return [];
55
176
  const drained = task.pendingMessages.splice(0);
56
- this.upsert(task);
177
+ try {
178
+ this.upsert(task);
179
+ }
180
+ catch {
181
+ task.pendingMessages = drained;
182
+ throw new Error("Unable to persist inbox drain");
183
+ }
57
184
  return drained;
58
185
  }
59
- collectUnnotifiedCompletions() {
60
- return [...this.tasks.values()].filter((task) => this.isTerminal(task) && !task.notified);
186
+ /** Synchronous handoff at the next model-request boundary, never during tool execution. */
187
+ deliverPendingMessages(taskId, runGeneration) {
188
+ const task = this.get(taskId);
189
+ if (!task || task.runGeneration !== runGeneration || task.status !== "running" || task.abortController?.signal.aborted)
190
+ return [];
191
+ let count = 0;
192
+ let characters = 0;
193
+ for (const message of task.pendingMessages) {
194
+ const size = message.blocks.reduce((total, block) => total + (block.type === "text" ? block.text.length : JSON.stringify(block).length), 0);
195
+ if (characters + size > 32 * 1024)
196
+ break;
197
+ characters += size;
198
+ count += 1;
199
+ }
200
+ const recoveryTask = task;
201
+ const previousRecovery = recoveryTask.deliveryRecoveryMessages;
202
+ const previousPending = [...task.pendingMessages];
203
+ const previousMessages = [...task.messages];
204
+ const previousReceipts = structuredClone(task.messageReceipts);
205
+ const messages = task.pendingMessages.splice(0, count);
206
+ if (!messages.length)
207
+ return messages;
208
+ recoveryTask.deliveryRecoveryMessages = [...(previousRecovery ?? []), ...messages.map((message) => ({ message, runGeneration }))];
209
+ const now = new Date().toISOString();
210
+ const receipts = task.messageReceipts ??= [];
211
+ for (const message of messages) {
212
+ let receipt = receipts.find((entry) => entry.messageId === message.id);
213
+ if (!receipt) {
214
+ receipt = { id: randomUUID(), messageId: message.id, status: "queued", queuedAt: now, runGeneration };
215
+ receipts.push(receipt);
216
+ }
217
+ Object.assign(receipt, { status: "delivered", deliveredAt: now, runGeneration });
218
+ task.messages.push(message);
219
+ }
220
+ const delivered = receipts.filter((entry) => entry.status === "delivered").slice(-128);
221
+ task.messageReceipts = receipts.filter((entry) => entry.status === "queued" || delivered.includes(entry));
222
+ try {
223
+ this.upsert(task);
224
+ }
225
+ catch {
226
+ recoveryTask.deliveryRecoveryMessages = previousRecovery;
227
+ task.pendingMessages = previousPending;
228
+ task.messages = previousMessages;
229
+ task.messageReceipts = previousReceipts;
230
+ throw new Error("Unable to persist inbox delivery");
231
+ }
232
+ return messages;
233
+ }
234
+ /** Call after durable transcript append and BEFORE compaction/model execution.
235
+ * A stale generation cannot acknowledge a newer handoff. Failure must stop the run.
236
+ */
237
+ confirmDelivery(taskId, messageIds, runGeneration) {
238
+ const task = this.require(taskId);
239
+ if (task.runGeneration !== runGeneration)
240
+ return;
241
+ const previous = task.deliveryRecoveryMessages;
242
+ if (!previous?.length)
243
+ return;
244
+ const ids = new Set(messageIds);
245
+ task.deliveryRecoveryMessages = previous.filter((entry) => entry.runGeneration !== runGeneration || !ids.has(entry.message.id));
246
+ if (task.deliveryRecoveryMessages.length === previous.length)
247
+ return;
248
+ try {
249
+ this.upsert(task);
250
+ }
251
+ catch {
252
+ task.deliveryRecoveryMessages = previous;
253
+ throw new Error("Unable to persist delivery confirmation");
254
+ }
255
+ }
256
+ /** Only unconfirmed outbox entries may be retried. Missing historical receipt IDs
257
+ * may simply have been compacted, so they NEVER imply an undelivered message.
258
+ * persistedMessageIds can include IDs from the complete append-only transcript log.
259
+ */
260
+ reconcileMessages(taskId, transcript, persistedMessageIds = transcript.map((message) => message.id)) {
261
+ const task = this.require(taskId);
262
+ const present = new Set(persistedMessageIds);
263
+ const previousRecovery = task.deliveryRecoveryMessages;
264
+ const previousPending = task.pendingMessages;
265
+ const previousMessages = task.messages;
266
+ const previousReceipts = structuredClone(task.messageReceipts);
267
+ task.pendingMessages = task.pendingMessages.filter((message) => !present.has(message.id));
268
+ for (const entry of previousRecovery ?? []) {
269
+ const receipt = task.messageReceipts?.find((receipt) => receipt.messageId === entry.message.id);
270
+ if (present.has(entry.message.id)) {
271
+ if (receipt)
272
+ receipt.status = "delivered";
273
+ }
274
+ else {
275
+ if (!task.pendingMessages.some((message) => message.id === entry.message.id))
276
+ task.pendingMessages.push(entry.message);
277
+ if (receipt) {
278
+ receipt.status = "queued";
279
+ receipt.deliveredAt = undefined;
280
+ }
281
+ }
282
+ }
283
+ for (const receipt of task.messageReceipts ?? []) {
284
+ if (present.has(receipt.messageId))
285
+ receipt.status = "delivered";
286
+ }
287
+ task.deliveryRecoveryMessages = [];
288
+ task.messages = [...transcript];
289
+ try {
290
+ this.upsert(task);
291
+ }
292
+ catch {
293
+ task.deliveryRecoveryMessages = previousRecovery;
294
+ task.pendingMessages = previousPending;
295
+ task.messages = previousMessages;
296
+ task.messageReceipts = previousReceipts;
297
+ throw new Error("Unable to persist delivery reconciliation");
298
+ }
299
+ }
300
+ prepareResume(taskId, abortController) {
301
+ const task = this.require(taskId);
302
+ if (task.type !== "agent" || !this.isTerminal(task))
303
+ throw new Error("Only terminal agent tasks can be resumed");
304
+ task.abortController?.abort("Superseded by resumed generation");
305
+ task.runHistory = [...(task.runHistory ?? []), {
306
+ runGeneration: task.runGeneration, status: task.status, result: task.result,
307
+ error: task.error, progress: structuredClone(task.progress), completedAt: task.completedAt,
308
+ archivedAt: new Date().toISOString(),
309
+ }].slice(-8);
310
+ task.runGeneration += 1;
311
+ task.status = "pending";
312
+ task.abortController = abortController;
313
+ task.result = undefined;
314
+ task.error = undefined;
315
+ task.progress = { totalEvents: 0, totalToolUseCount: 0 };
316
+ task.completedAt = undefined;
317
+ task.notified = false;
318
+ // Replace the stable output file so it cannot masquerade as the new generation's result.
319
+ this.persistTerminalOutput(task);
320
+ this.upsert(task);
321
+ return task;
322
+ }
323
+ collectUnnotifiedCompletions(...scope) {
324
+ const owner = scope.length ? (scope[0] ? resolve(scope[0]) : undefined) : this.sessionDir;
325
+ return [...this.tasks.values()].filter((task) => task.ownerSessionDir === owner && this.isTerminal(task) && !task.notified);
61
326
  }
62
327
  markRunning(taskId) {
63
328
  this.patch(taskId, { status: "running" });
@@ -78,7 +343,16 @@ export class TaskStore {
78
343
  this.upsert(task);
79
344
  }
80
345
  markNotified(taskId) {
81
- this.patch(taskId, { notified: true });
346
+ const task = this.require(taskId);
347
+ if (task.notified || !this.isTerminal(task))
348
+ return;
349
+ // Collection is read-only. Commit the acknowledgement before exposing it in
350
+ // memory; a failed atomic write must leave the completion retryable.
351
+ const acknowledged = { ...task, notified: true, updatedAt: new Date().toISOString() };
352
+ persistTask(acknowledged);
353
+ task.notified = true;
354
+ task.updatedAt = acknowledged.updatedAt;
355
+ this.notify();
82
356
  }
83
357
  isTerminal(task) {
84
358
  return isTerminalStatus(task.status);
@@ -87,7 +361,7 @@ export class TaskStore {
87
361
  const existing = this.get(taskId);
88
362
  if (!existing)
89
363
  return Promise.resolve(undefined);
90
- if (this.isTerminal(existing))
364
+ if (this.isTerminal(existing) || options.signal?.aborted)
91
365
  return Promise.resolve(existing);
92
366
  return new Promise((resolve) => {
93
367
  const deadline = options.timeoutMs ? Date.now() + options.timeoutMs : undefined;
@@ -118,6 +392,8 @@ export class TaskStore {
118
392
  }
119
393
  patchTerminal(taskId, fields) {
120
394
  const task = this.require(taskId);
395
+ if (this.isTerminal(task))
396
+ return;
121
397
  Object.assign(task, fields);
122
398
  this.persistTerminalOutput(task);
123
399
  this.upsert(task);
@@ -1 +1 @@
1
- {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../src/tasks/task-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAwE,MAAM,+BAA+B,CAAC;AAEhJ,MAAM,OAAO,SAAS;IACH,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAChC,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAErD,MAAM,CAAC,IAAoB;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,OAAe;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/F,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,OAAgB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,aAAqB,EAAE,IAAY;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,aAAa,EAAE,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,aAAa,EAAE,EAAE,CAAC;QACpF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4BAA4B;QAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAClD,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,MAAuB;QAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,KAAa;QAChC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAM,GAAG,cAAc;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,UAAwD,EAAE;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,IAAI,OAAmC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,IAAgC,EAAE,EAAE;gBAChD,IAAI,OAAO;oBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,IAAI,QAAQ;gBAAE,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAAc,EAAE,MAA+B;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,MAA+B;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAEO,qBAAqB,CAAC,IAAoB;QAChD,IAAI,CAAC;YACH,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACtH,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM;QACZ,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,EAAE,CAAC;QACjD,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAAE,UAAU,EAAE,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../src/tasks/task-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,WAAW,EAA8C,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,iBAAiB,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAkG,MAAM,+BAA+B,CAAC;AAE1K,MAAM,OAAO,SAAS;IACH,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAChC,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAE7C,UAAU,CAAU;IACX,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpD,kFAAkF;IAClF,WAAW,CAAC,UAAmB;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,MAAM,OAAO,GAAoB,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC3E,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;oBAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;oBAC7E,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAAC,CAAC;YACrG,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,UAAkB,IAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,gBAAgB,KAAyB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,SAAS,CAAC,EAAU;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IACO,QAAQ,CAAC,IAAoB,IAAa,OAAO,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAEnF,iBAAiB,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEvE,eAAe,CAAC,UAAmB,IAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9F,YAAY,CAAC,EAAU,EAAE,UAAmB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,EAAE,eAAe,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,CAAC;IACgB,oBAAoB,GAAG,IAAI,OAAO,EAAkB,CAAC;IACtE,UAAU,CAAC,IAAoB,EAAE,UAAmB;QAClD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,0FAA0F;IAC1F,cAAc,CAAC,IAAoB,IAAU,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK;QACH,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,IAAI;gBAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAoB,EAAE,UAAiC,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAClI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC;QACpI,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxM,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,CAAC;wBAAC,IAAI,OAAO;4BAAE,WAAW,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;oBAC1C,MAAM,CAAC,CAAC,iEAAiE,CAAC,CAAC;gBAC7E,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAuB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAExE,gFAAgF;IAChF,aAAa,CAAC,UAAmB;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACxJ,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,OAAe;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IAC5F,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrM,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,OAAgB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,aAAqB,EAAE,IAAY;QAC9C,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,qBAAqB,CAAC,aAAqB,EAAE,IAAY,EAAE,UAAmB;QAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO;eAC7E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,CAAC;eACvD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,EAAE,OAAO,CAAC;QACnE,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,aAAa,EAAE,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,aAAa,EAAE,EAAE,CAAC;QACpF,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4EAA4E,EAAE,CAAC;QAClJ,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wEAAwE,EAAE,CAAC;QACnI,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1K,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1B,MAAM,CAAC;YACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YACxF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1B,MAAM,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAAC,CAAC;QAC3F,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2FAA2F;IAC3F,sBAAsB,CAAC,MAAc,EAAE,aAAqB;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAClI,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5I,IAAI,UAAU,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI;gBAAE,MAAM;YACzC,UAAU,IAAI,IAAI,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,MAAM,YAAY,GAAG,IAAuB,CAAC;QAC7C,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC;QAC/D,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QACtC,YAAY,CAAC,wBAAwB,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAClI,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC;QAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;gBACtG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACvF,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1G,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1B,MAAM,CAAC;YACL,YAAY,CAAC,wBAAwB,GAAG,gBAAgB,CAAC;YACzD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc,EAAE,UAA6B,EAAE,aAAqB;QAClF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAoB,CAAC;QACrD,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa;YAAE,OAAO;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE,OAAO;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,aAAa,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAChI,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO;QACrE,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1B,MAAM,CAAC;YAAC,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,MAAc,EAAE,UAA8B,EAAE,sBAAwC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/I,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAoB,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,KAAK,MAAM,KAAK,IAAI,gBAAgB,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,IAAI,OAAO;oBAAE,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvH,IAAI,OAAO,EAAE,CAAC;oBAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;gBAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;YACjD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;gBAAE,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1B,MAAM,CAAC;YACL,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC;YACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,eAAgC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjH,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;gBAC7C,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;gBAC3E,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC1F,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,yFAAyF;QACzF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B,CAAC,GAAG,KAA4B;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1F,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CACpF,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,MAAuB;QAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,KAAa;QAChC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAM,GAAG,cAAc;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO;QACpD,4EAA4E;QAC5E,qEAAqE;QACrE,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACtF,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,UAAwD,EAAE;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,IAAI,OAAmC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,IAAgC,EAAE,EAAE;gBAChD,IAAI,OAAO;oBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,IAAI,QAAQ;gBAAE,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAAc,EAAE,MAA+B;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,MAA+B;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAEO,qBAAqB,CAAC,IAAoB;QAChD,IAAI,CAAC;YACH,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACtH,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM;QACZ,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,EAAE,CAAC;QACjD,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAAE,UAAU,EAAE,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,SAAS,EAAE,CAAC"}
@@ -89,6 +89,9 @@ export interface ToolRuntimeOptions {
89
89
  tools?: ToolRegistryLike;
90
90
  thinkingConfig?: unknown;
91
91
  reasoning?: import("../model/model-gateway.js").ReasoningConfig | null;
92
+ contextWindowTokensOverride?: number;
93
+ maxOutputTokensOverride?: number;
94
+ serviceTier?: import("../model/model-gateway.js").ModelRequest["serviceTier"];
92
95
  activeSkill?: ActiveSkillRuntimeState;
93
96
  loadedSkillStructures?: Set<string>;
94
97
  isNonInteractiveSession?: boolean;
@@ -102,6 +105,8 @@ export interface ToolUseContextSession {
102
105
  export interface ToolUseContext {
103
106
  agentId: string;
104
107
  agentType?: string;
108
+ /** Runtime-owned marker: child agents may not delegate or resume other agents. */
109
+ isSubagent?: boolean;
105
110
  toolUseId?: string;
106
111
  abortSignal?: AbortSignal;
107
112
  tools: ToolRegistryLike;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AA6KA,MAAM,UAAU,sBAAsB,CAAC,IAAU,EAAE,OAAwB;IACzE,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1G,CAAC"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAkLA,MAAM,UAAU,sBAAsB,CAAC,IAAU,EAAE,OAAwB;IACzE,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1G,CAAC"}