@openrouter/agent 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +732 -7
  2. package/THIRD_PARTY_NOTICES.md +25 -0
  3. package/esm/index.d.ts +20 -5
  4. package/esm/index.d.ts.map +1 -1
  5. package/esm/index.js +10 -3
  6. package/esm/index.js.map +1 -1
  7. package/esm/inner-loop/call-model.d.ts.map +1 -1
  8. package/esm/inner-loop/call-model.js +63 -46
  9. package/esm/inner-loop/call-model.js.map +1 -1
  10. package/esm/inner-loop/resume-tool-results.d.ts +128 -0
  11. package/esm/inner-loop/resume-tool-results.d.ts.map +1 -0
  12. package/esm/inner-loop/resume-tool-results.js +244 -0
  13. package/esm/inner-loop/resume-tool-results.js.map +1 -0
  14. package/esm/lib/agent-tool.d.ts +92 -0
  15. package/esm/lib/agent-tool.d.ts.map +1 -0
  16. package/esm/lib/agent-tool.js +211 -0
  17. package/esm/lib/agent-tool.js.map +1 -0
  18. package/esm/lib/async-params.d.ts +96 -0
  19. package/esm/lib/async-params.d.ts.map +1 -1
  20. package/esm/lib/async-params.js +30 -1
  21. package/esm/lib/async-params.js.map +1 -1
  22. package/esm/lib/async-tool-registry.d.ts +134 -0
  23. package/esm/lib/async-tool-registry.d.ts.map +1 -0
  24. package/esm/lib/async-tool-registry.js +352 -0
  25. package/esm/lib/async-tool-registry.js.map +1 -0
  26. package/esm/lib/async-tools.d.ts +23 -0
  27. package/esm/lib/async-tools.d.ts.map +1 -0
  28. package/esm/lib/async-tools.js +19 -0
  29. package/esm/lib/async-tools.js.map +1 -0
  30. package/esm/lib/conversation-state.d.ts +1 -0
  31. package/esm/lib/conversation-state.d.ts.map +1 -1
  32. package/esm/lib/conversation-state.js +8 -0
  33. package/esm/lib/conversation-state.js.map +1 -1
  34. package/esm/lib/doom-loop.d.ts +533 -0
  35. package/esm/lib/doom-loop.d.ts.map +1 -0
  36. package/esm/lib/doom-loop.js +1221 -0
  37. package/esm/lib/doom-loop.js.map +1 -0
  38. package/esm/lib/hooks-schemas.d.ts +33 -0
  39. package/esm/lib/hooks-schemas.d.ts.map +1 -1
  40. package/esm/lib/hooks-schemas.js +54 -0
  41. package/esm/lib/hooks-schemas.js.map +1 -1
  42. package/esm/lib/hooks-types.d.ts +6 -2
  43. package/esm/lib/hooks-types.d.ts.map +1 -1
  44. package/esm/lib/hooks-types.js.map +1 -1
  45. package/esm/lib/model-result.d.ts +648 -12
  46. package/esm/lib/model-result.d.ts.map +1 -1
  47. package/esm/lib/model-result.js +2784 -164
  48. package/esm/lib/model-result.js.map +1 -1
  49. package/esm/lib/next-turn-params.d.ts.map +1 -1
  50. package/esm/lib/next-turn-params.js +3 -1
  51. package/esm/lib/next-turn-params.js.map +1 -1
  52. package/esm/lib/next-turn-params.test.js +72 -0
  53. package/esm/lib/next-turn-params.test.js.map +1 -1
  54. package/esm/lib/reusable-stream.d.ts +9 -0
  55. package/esm/lib/reusable-stream.d.ts.map +1 -1
  56. package/esm/lib/reusable-stream.js +17 -0
  57. package/esm/lib/reusable-stream.js.map +1 -1
  58. package/esm/lib/stream-transformers.d.ts +21 -1
  59. package/esm/lib/stream-transformers.d.ts.map +1 -1
  60. package/esm/lib/stream-transformers.js +45 -0
  61. package/esm/lib/stream-transformers.js.map +1 -1
  62. package/esm/lib/tool-check.d.ts +76 -0
  63. package/esm/lib/tool-check.d.ts.map +1 -0
  64. package/esm/lib/tool-check.js +241 -0
  65. package/esm/lib/tool-check.js.map +1 -0
  66. package/esm/lib/tool-concurrency.d.ts +42 -0
  67. package/esm/lib/tool-concurrency.d.ts.map +1 -0
  68. package/esm/lib/tool-concurrency.js +80 -0
  69. package/esm/lib/tool-concurrency.js.map +1 -0
  70. package/esm/lib/tool-context.d.ts +45 -1
  71. package/esm/lib/tool-context.d.ts.map +1 -1
  72. package/esm/lib/tool-context.js +60 -1
  73. package/esm/lib/tool-context.js.map +1 -1
  74. package/esm/lib/tool-executor.d.ts +52 -9
  75. package/esm/lib/tool-executor.d.ts.map +1 -1
  76. package/esm/lib/tool-executor.js +253 -21
  77. package/esm/lib/tool-executor.js.map +1 -1
  78. package/esm/lib/tool-orchestrator.d.ts.map +1 -1
  79. package/esm/lib/tool-orchestrator.js +87 -50
  80. package/esm/lib/tool-orchestrator.js.map +1 -1
  81. package/esm/lib/tool-set-types.d.ts +298 -0
  82. package/esm/lib/tool-set-types.d.ts.map +1 -0
  83. package/esm/lib/tool-set-types.js +2 -0
  84. package/esm/lib/tool-set-types.js.map +1 -0
  85. package/esm/lib/tool-set.d.ts +157 -0
  86. package/esm/lib/tool-set.d.ts.map +1 -0
  87. package/esm/lib/tool-set.js +473 -0
  88. package/esm/lib/tool-set.js.map +1 -0
  89. package/esm/lib/tool-task.d.ts +157 -0
  90. package/esm/lib/tool-task.d.ts.map +1 -0
  91. package/esm/lib/tool-task.js +206 -0
  92. package/esm/lib/tool-task.js.map +1 -0
  93. package/esm/lib/tool-types.d.ts +667 -38
  94. package/esm/lib/tool-types.d.ts.map +1 -1
  95. package/esm/lib/tool-types.js +59 -10
  96. package/esm/lib/tool-types.js.map +1 -1
  97. package/esm/lib/tool.d.ts +227 -19
  98. package/esm/lib/tool.d.ts.map +1 -1
  99. package/esm/lib/tool.js +206 -6
  100. package/esm/lib/tool.js.map +1 -1
  101. package/esm/mcp/auth/auth-resolver.d.ts +14 -0
  102. package/esm/mcp/auth/auth-resolver.d.ts.map +1 -0
  103. package/esm/mcp/auth/auth-resolver.js +27 -0
  104. package/esm/mcp/auth/auth-resolver.js.map +1 -0
  105. package/esm/mcp/auth/auth-types.d.ts +33 -0
  106. package/esm/mcp/auth/auth-types.d.ts.map +1 -0
  107. package/esm/mcp/auth/auth-types.js +4 -0
  108. package/esm/mcp/auth/auth-types.js.map +1 -0
  109. package/esm/mcp/build-tools.d.ts +29 -0
  110. package/esm/mcp/build-tools.d.ts.map +1 -0
  111. package/esm/mcp/build-tools.js +80 -0
  112. package/esm/mcp/build-tools.js.map +1 -0
  113. package/esm/mcp/cache/cache-store.d.ts +24 -0
  114. package/esm/mcp/cache/cache-store.d.ts.map +1 -0
  115. package/esm/mcp/cache/cache-store.js +20 -0
  116. package/esm/mcp/cache/cache-store.js.map +1 -0
  117. package/esm/mcp/cache/cache-types.d.ts +71 -0
  118. package/esm/mcp/cache/cache-types.d.ts.map +1 -0
  119. package/esm/mcp/cache/cache-types.js +49 -0
  120. package/esm/mcp/cache/cache-types.js.map +1 -0
  121. package/esm/mcp/cache/serialize.d.ts +25 -0
  122. package/esm/mcp/cache/serialize.d.ts.map +1 -0
  123. package/esm/mcp/cache/serialize.js +96 -0
  124. package/esm/mcp/cache/serialize.js.map +1 -0
  125. package/esm/mcp/close-quietly.d.ts +24 -0
  126. package/esm/mcp/close-quietly.d.ts.map +1 -0
  127. package/esm/mcp/close-quietly.js +30 -0
  128. package/esm/mcp/close-quietly.js.map +1 -0
  129. package/esm/mcp/create-mcp-tools.d.ts +13 -0
  130. package/esm/mcp/create-mcp-tools.d.ts.map +1 -0
  131. package/esm/mcp/create-mcp-tools.js +87 -0
  132. package/esm/mcp/create-mcp-tools.js.map +1 -0
  133. package/esm/mcp/elicitation.d.ts +11 -0
  134. package/esm/mcp/elicitation.d.ts.map +1 -0
  135. package/esm/mcp/elicitation.js +51 -0
  136. package/esm/mcp/elicitation.js.map +1 -0
  137. package/esm/mcp/errors.d.ts +91 -0
  138. package/esm/mcp/errors.d.ts.map +1 -0
  139. package/esm/mcp/errors.js +91 -0
  140. package/esm/mcp/errors.js.map +1 -0
  141. package/esm/mcp/handle.d.ts +66 -0
  142. package/esm/mcp/handle.d.ts.map +1 -0
  143. package/esm/mcp/handle.js +323 -0
  144. package/esm/mcp/handle.js.map +1 -0
  145. package/esm/mcp/index.d.ts +13 -0
  146. package/esm/mcp/index.d.ts.map +1 -0
  147. package/esm/mcp/index.js +11 -0
  148. package/esm/mcp/index.js.map +1 -0
  149. package/esm/mcp/mcp-connection.d.ts +150 -0
  150. package/esm/mcp/mcp-connection.d.ts.map +1 -0
  151. package/esm/mcp/mcp-connection.js +478 -0
  152. package/esm/mcp/mcp-connection.js.map +1 -0
  153. package/esm/mcp/mcp-sdk.d.ts +10 -0
  154. package/esm/mcp/mcp-sdk.d.ts.map +1 -0
  155. package/esm/mcp/mcp-sdk.js +37 -0
  156. package/esm/mcp/mcp-sdk.js.map +1 -0
  157. package/esm/mcp/rehydrate.d.ts +76 -0
  158. package/esm/mcp/rehydrate.d.ts.map +1 -0
  159. package/esm/mcp/rehydrate.js +505 -0
  160. package/esm/mcp/rehydrate.js.map +1 -0
  161. package/esm/mcp/resource-tools.d.ts +17 -0
  162. package/esm/mcp/resource-tools.d.ts.map +1 -0
  163. package/esm/mcp/resource-tools.js +155 -0
  164. package/esm/mcp/resource-tools.js.map +1 -0
  165. package/esm/mcp/result-mapper.d.ts +19 -0
  166. package/esm/mcp/result-mapper.d.ts.map +1 -0
  167. package/esm/mcp/result-mapper.js +40 -0
  168. package/esm/mcp/result-mapper.js.map +1 -0
  169. package/esm/mcp/schema/json-schema-guards.d.ts +14 -0
  170. package/esm/mcp/schema/json-schema-guards.d.ts.map +1 -0
  171. package/esm/mcp/schema/json-schema-guards.js +19 -0
  172. package/esm/mcp/schema/json-schema-guards.js.map +1 -0
  173. package/esm/mcp/schema/json-schema-to-zod.d.ts +20 -0
  174. package/esm/mcp/schema/json-schema-to-zod.d.ts.map +1 -0
  175. package/esm/mcp/schema/json-schema-to-zod.js +72 -0
  176. package/esm/mcp/schema/json-schema-to-zod.js.map +1 -0
  177. package/esm/mcp/tool-wrapper.d.ts +41 -0
  178. package/esm/mcp/tool-wrapper.d.ts.map +1 -0
  179. package/esm/mcp/tool-wrapper.js +131 -0
  180. package/esm/mcp/tool-wrapper.js.map +1 -0
  181. package/esm/mcp/transport-types.d.ts +45 -0
  182. package/esm/mcp/transport-types.d.ts.map +1 -0
  183. package/esm/mcp/transport-types.js +2 -0
  184. package/esm/mcp/transport-types.js.map +1 -0
  185. package/esm/mcp/types.d.ts +119 -0
  186. package/esm/mcp/types.d.ts.map +1 -0
  187. package/esm/mcp/types.js +2 -0
  188. package/esm/mcp/types.js.map +1 -0
  189. package/esm/mcp/version.d.ts +3 -0
  190. package/esm/mcp/version.d.ts.map +1 -0
  191. package/esm/mcp/version.js +5 -0
  192. package/esm/mcp/version.js.map +1 -0
  193. package/package.json +70 -5
@@ -0,0 +1,241 @@
1
+ import * as z4 from 'zod/v4';
2
+ import { isLongRunningTool, ToolType } from './tool-types.js';
3
+ /**
4
+ * Reserved name of the single, universal task-interaction tool.
5
+ *
6
+ * Per team decision (2026-07-31): per-tool check schemas bloat every tool's
7
+ * wire definition for a shared set of functionality and scale quadratically
8
+ * with the tool count. Instead, ONE static tool handles every running task —
9
+ * addressed by `taskId` — while the *implementations* stay tool-resident
10
+ * (each tool's `check` config). Best of both: no per-tool context growth,
11
+ * tool-specific behavior preserved.
12
+ */
13
+ export const TASK_TOOL_NAME = 'task';
14
+ /** Actions the universal task tool supports. */
15
+ export const TaskToolInputSchema = z4.object({
16
+ taskId: z4.string().describe('Task id from a pending tool output.'),
17
+ action: z4
18
+ .enum([
19
+ 'check',
20
+ 'steer',
21
+ 'result',
22
+ 'cancel',
23
+ ])
24
+ .optional()
25
+ .describe("'check' (default): progress views. 'steer': send guidance to the running task. 'result': the final result if settled, else current status. 'cancel': stop the task."),
26
+ view: z4
27
+ .enum([
28
+ 'status',
29
+ 'logs',
30
+ 'transcript',
31
+ ])
32
+ .optional()
33
+ .describe("For action=check: 'status' (default) is a one-line state; 'logs' returns recent progress entries; 'transcript' returns full detail."),
34
+ tail: z4
35
+ .number()
36
+ .int()
37
+ .positive()
38
+ .max(200)
39
+ .optional()
40
+ .describe('For view=logs: how many recent entries. Default 20.'),
41
+ message: z4.string().optional().describe('For action=steer: the guidance to send.'),
42
+ reason: z4.string().optional().describe('For action=cancel: why.'),
43
+ params: z4
44
+ .record(z4.string(), z4.unknown())
45
+ .optional()
46
+ .describe("Extra parameters for the tool's custom check handler, when it declares one."),
47
+ });
48
+ /** Memoized Zod→JSON-Schema conversion — the input schema is static. */
49
+ let taskToolParameters;
50
+ /**
51
+ * The wire definition for the universal task tool. Static — identical
52
+ * regardless of how many long-running tools are registered, so the schema
53
+ * conversion runs once per process (memoized on first call).
54
+ */
55
+ export function buildTaskToolApiDefinition(convertZod) {
56
+ taskToolParameters ?? (taskToolParameters = convertZod(TaskToolInputSchema));
57
+ return {
58
+ type: 'function',
59
+ name: TASK_TOOL_NAME,
60
+ description: 'Interact with a long-running task started by another tool: check progress (status, recent logs, or the full transcript), steer it with a message, fetch its result, or cancel it. Task ids come from pending tool outputs.',
61
+ strict: null,
62
+ parameters: taskToolParameters,
63
+ };
64
+ }
65
+ /**
66
+ * True when a user tool already claims the reserved task-tool name
67
+ * (defense for dynamically-built tool lists that bypass `tool()`).
68
+ *
69
+ * Shared by registration (`needsTaskTool`) and the engine's interception
70
+ * guard (`taskToolActive`) so a collision disables BOTH: the built-in
71
+ * definition is not registered and calls named "task" route to the user's
72
+ * tool instead of being intercepted.
73
+ */
74
+ export function hasTaskToolNameCollision(tools) {
75
+ return tools.some((t) => 'function' in t &&
76
+ t.function?.name === TASK_TOOL_NAME);
77
+ }
78
+ /**
79
+ * True when the tool list warrants registering the task tool: at least one
80
+ * long-running-capable tool, and no user tool already claiming the name.
81
+ */
82
+ export function needsTaskTool(tools) {
83
+ if (hasTaskToolNameCollision(tools)) {
84
+ // Only worth a warning when something was actually disabled: with no
85
+ // long-running tool in the list, the built-in would not have been
86
+ // registered anyway, and warning on every callModel() is pure noise.
87
+ if (tools.some((t) => isLongRunningTool(t))) {
88
+ console.warn(`[AsyncTools] a user tool is named "${TASK_TOOL_NAME}" — the built-in task tool is disabled; models cannot check on long-running tasks.`);
89
+ }
90
+ return false;
91
+ }
92
+ return tools.some((t) => isLongRunningTool(t));
93
+ }
94
+ /**
95
+ * Minimal Tool stub for the engine's internal bookkeeping around task-tool
96
+ * answers (result events, output shaping). Never executed as a user tool.
97
+ */
98
+ export function buildTaskToolStub() {
99
+ return {
100
+ type: ToolType.Function,
101
+ function: {
102
+ name: TASK_TOOL_NAME,
103
+ inputSchema: TaskToolInputSchema,
104
+ execute: false,
105
+ },
106
+ };
107
+ }
108
+ /** Resolve a tool's check config to `{ schema, execute }` with defaults. */
109
+ export function resolveCheckConfig(check) {
110
+ if (check === undefined || check === true) {
111
+ return {
112
+ schema: undefined,
113
+ execute: undefined,
114
+ };
115
+ }
116
+ return {
117
+ schema: check.schema,
118
+ execute: check.execute,
119
+ };
120
+ }
121
+ /** The SDK default check handler: status / logs / transcript views. */
122
+ export function defaultCheckResult(input, turnContext, options) {
123
+ const task = turnContext.task;
124
+ if (!task) {
125
+ return {
126
+ error: 'unknown_task',
127
+ hint: 'No task context available for this check call.',
128
+ };
129
+ }
130
+ const view = input.view ?? 'status';
131
+ const statusView = task.statusView();
132
+ if (view === 'logs') {
133
+ const tail = input.tail ?? 20;
134
+ // Same character budget as the transcript view: entries can be up to
135
+ // maxEntryBytes each (4k default, tool-raisable), so 200 uncapped
136
+ // entries could dump hundreds of KB into the model's context. Newest
137
+ // entries win — drop from the OLDEST end when over budget.
138
+ const entries = task.tailLogs(tail);
139
+ let budget = options.maxTranscriptChars;
140
+ let firstKept = entries.length;
141
+ for (let i = entries.length - 1; i >= 0; i--) {
142
+ const entry = entries[i];
143
+ const size = typeof entry?.data === 'string'
144
+ ? entry.data.length
145
+ : (JSON.stringify(entry?.data)?.length ?? 0);
146
+ if (size > budget) {
147
+ break;
148
+ }
149
+ budget -= size;
150
+ firstKept = i;
151
+ }
152
+ let kept = entries.slice(firstKept);
153
+ // Never answer with NOTHING when progress exists: if even the newest
154
+ // entry alone exceeds the budget, return it truncated to the budget
155
+ // rather than an empty list (a smaller tail could not help, and the
156
+ // transcript view is capped by the same number).
157
+ const newest = entries[entries.length - 1];
158
+ if (kept.length === 0 && newest !== undefined) {
159
+ const body = typeof newest.data === 'string'
160
+ ? newest.data
161
+ : (JSON.stringify(newest.data) ?? String(newest.data));
162
+ kept = [
163
+ {
164
+ ...newest,
165
+ data: `${body.slice(0, Math.max(0, options.maxTranscriptChars - 12))}…[truncated]`,
166
+ },
167
+ ];
168
+ }
169
+ return {
170
+ ...statusView,
171
+ logs: kept,
172
+ ...(kept.length < entries.length && {
173
+ note: `Truncated to the ${kept.length} most recent entries (character budget); use view: 'transcript' or a smaller tail for more.`,
174
+ }),
175
+ };
176
+ }
177
+ if (view === 'transcript') {
178
+ return {
179
+ ...statusView,
180
+ transcript: task.transcript(options.maxTranscriptChars),
181
+ };
182
+ }
183
+ return statusView;
184
+ }
185
+ /**
186
+ * Answer a task-tool call against a PERSISTED task (deferred /
187
+ * cross-process, after a restart — no live registry entry). Only
188
+ * `status`-grade data survives: identity, timing, `lastLog`.
189
+ */
190
+ export function persistedTaskCheckResult(input, pending) {
191
+ const base = {
192
+ taskId: pending.taskId,
193
+ toolName: pending.name,
194
+ mode: pending.mode,
195
+ status: pending.status,
196
+ startedAt: pending.startedAt,
197
+ elapsedMs: Date.now() - pending.startedAt,
198
+ ...(pending.lastLog !== undefined && {
199
+ lastLog: pending.lastLog.text,
200
+ }),
201
+ ...(pending.pollAfterMs !== undefined && {
202
+ pollAfterMs: pending.pollAfterMs,
203
+ }),
204
+ ...(pending.expiresAt !== undefined && {
205
+ expiresAt: pending.expiresAt,
206
+ }),
207
+ ...(pending.orphaned === true && {
208
+ orphaned: true,
209
+ note: 'This task was detached; its result will not be delivered.',
210
+ }),
211
+ };
212
+ // View-specific explanations must not displace the orphaned warning —
213
+ // "the result will never arrive" is the actionable part.
214
+ const withNote = (viewNote) => ('note' in base ? `${base.note} ${viewNote}` : viewNote);
215
+ const view = input.view ?? 'status';
216
+ if (view === 'logs') {
217
+ return {
218
+ ...base,
219
+ logs: pending.lastLog
220
+ ? [
221
+ {
222
+ at: pending.lastLog.at,
223
+ data: pending.lastLog.text,
224
+ },
225
+ ]
226
+ : [],
227
+ note: withNote('Full logs are not retained across processes.'),
228
+ };
229
+ }
230
+ if (view === 'transcript') {
231
+ return {
232
+ ...base,
233
+ transcript: '',
234
+ note: withNote(pending.mode === 'defer'
235
+ ? 'No transcript available — this task is owned by an external system.'
236
+ : 'No transcript available — the task ran in a previous process.'),
237
+ };
238
+ }
239
+ return base;
240
+ }
241
+ //# sourceMappingURL=tool-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../src/lib/tool-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Minimal FIFO semaphore used to bound tool-execution concurrency.
3
+ *
4
+ * Three gates exist per run:
5
+ * - the round gate (`toolConcurrency.round`) — bounds simultaneous tool
6
+ * executions within a round;
7
+ * - per-tool gates (`maxConcurrency` on a tool) — bound simultaneous
8
+ * executions of one tool across the run;
9
+ * - the background pool (`toolConcurrency.background`) — bounds detached
10
+ * background-tool work that escaped the round barrier.
11
+ *
12
+ * Waiters are released strictly FIFO so a burst of calls cannot starve an
13
+ * earlier one. Zero dependencies; ~60 lines.
14
+ */
15
+ /** Release function returned by {@link Semaphore.acquire}. Idempotent. */
16
+ export type SemaphoreRelease = () => void;
17
+ /**
18
+ * A counting semaphore with FIFO waiters.
19
+ */
20
+ export declare class Semaphore {
21
+ private available;
22
+ private readonly waiters;
23
+ /**
24
+ * @param limit - Maximum concurrent holders. Must be a positive integer.
25
+ */
26
+ constructor(limit: number);
27
+ /**
28
+ * Acquire one slot. Resolves immediately when a slot is free, otherwise
29
+ * queues FIFO. The returned release function is idempotent — releasing
30
+ * twice does not free two slots.
31
+ */
32
+ acquire(): Promise<SemaphoreRelease>;
33
+ private makeRelease;
34
+ }
35
+ /**
36
+ * Acquire multiple gates in the given (fixed) order and return a single
37
+ * release that frees them in reverse order. Callers MUST pass gates in a
38
+ * globally consistent order (round gate before per-tool gate) — fixed
39
+ * ordering is what makes multi-gate acquisition deadlock-free.
40
+ */
41
+ export declare function acquireAll(gates: ReadonlyArray<Semaphore | undefined>): Promise<SemaphoreRelease>;
42
+ //# sourceMappingURL=tool-concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-concurrency.d.ts","sourceRoot":"","sources":["../../src/lib/tool-concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAE1C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAE1E;;OAEG;gBACS,KAAK,EAAE,MAAM;IAOzB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAUpC,OAAO,CAAC,WAAW;CAgBpB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Minimal FIFO semaphore used to bound tool-execution concurrency.
3
+ *
4
+ * Three gates exist per run:
5
+ * - the round gate (`toolConcurrency.round`) — bounds simultaneous tool
6
+ * executions within a round;
7
+ * - per-tool gates (`maxConcurrency` on a tool) — bound simultaneous
8
+ * executions of one tool across the run;
9
+ * - the background pool (`toolConcurrency.background`) — bounds detached
10
+ * background-tool work that escaped the round barrier.
11
+ *
12
+ * Waiters are released strictly FIFO so a burst of calls cannot starve an
13
+ * earlier one. Zero dependencies; ~60 lines.
14
+ */
15
+ /**
16
+ * A counting semaphore with FIFO waiters.
17
+ */
18
+ export class Semaphore {
19
+ /**
20
+ * @param limit - Maximum concurrent holders. Must be a positive integer.
21
+ */
22
+ constructor(limit) {
23
+ this.waiters = [];
24
+ if (!Number.isInteger(limit) || limit < 1) {
25
+ throw new Error(`Semaphore limit must be a positive integer, got ${limit}`);
26
+ }
27
+ this.available = limit;
28
+ }
29
+ /**
30
+ * Acquire one slot. Resolves immediately when a slot is free, otherwise
31
+ * queues FIFO. The returned release function is idempotent — releasing
32
+ * twice does not free two slots.
33
+ */
34
+ acquire() {
35
+ if (this.available > 0) {
36
+ this.available--;
37
+ return Promise.resolve(this.makeRelease());
38
+ }
39
+ return new Promise((resolve) => {
40
+ this.waiters.push(resolve);
41
+ });
42
+ }
43
+ makeRelease() {
44
+ let released = false;
45
+ return () => {
46
+ if (released) {
47
+ return;
48
+ }
49
+ released = true;
50
+ const next = this.waiters.shift();
51
+ if (next) {
52
+ // Hand the slot directly to the next waiter (no available++/-- churn).
53
+ next(this.makeRelease());
54
+ }
55
+ else {
56
+ this.available++;
57
+ }
58
+ };
59
+ }
60
+ }
61
+ /**
62
+ * Acquire multiple gates in the given (fixed) order and return a single
63
+ * release that frees them in reverse order. Callers MUST pass gates in a
64
+ * globally consistent order (round gate before per-tool gate) — fixed
65
+ * ordering is what makes multi-gate acquisition deadlock-free.
66
+ */
67
+ export async function acquireAll(gates) {
68
+ const releases = [];
69
+ for (const gate of gates) {
70
+ if (gate) {
71
+ releases.push(await gate.acquire());
72
+ }
73
+ }
74
+ return () => {
75
+ for (let i = releases.length - 1; i >= 0; i--) {
76
+ releases[i]?.();
77
+ }
78
+ };
79
+ }
80
+ //# sourceMappingURL=tool-concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-concurrency.js","sourceRoot":"","sources":["../../src/lib/tool-concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;GAEG;AACH,MAAM,OAAO,SAAS;IAIpB;;OAEG;IACH,YAAY,KAAa;QALR,YAAO,GAA+C,EAAE,CAAC;QAMxE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,mDAAmD,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,uEAAuE;gBACvE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAA2C;IAE3C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE;QACV,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -30,6 +30,38 @@ export declare class ToolContextStore {
30
30
  mergeToolContext(toolName: string, partial: Record<string, unknown>): void;
31
31
  private notifyListeners;
32
32
  }
33
+ /**
34
+ * Per-execution extras threaded into the ToolExecuteContext: the composed
35
+ * abort signal for this call, the call id, the conversation id, and (for
36
+ * unified `run` tools) the async-task affordances.
37
+ */
38
+ export interface ToolExecutionExtras {
39
+ signal?: AbortSignal;
40
+ callId?: string;
41
+ conversationId?: string;
42
+ /** The parent run's client — agent tools use it to start child runs. */
43
+ client?: unknown;
44
+ /**
45
+ * Unified-run affordances, wired by the engine per call:
46
+ * - `defer` — create a DeferredHandle (deferred lifecycle only)
47
+ * - `log` — append a task log entry (same pipeline as a yield)
48
+ * - `onMessage` — register the steering-inbox handler
49
+ * - `taskId` — the task id once assigned
50
+ */
51
+ runExtras?: {
52
+ defer?: (taskId: string, options?: Record<string, unknown>) => unknown;
53
+ log?: (entry: unknown) => void;
54
+ onMessage?: (handler: (message: unknown) => void) => void;
55
+ taskId?: string;
56
+ /**
57
+ * Transcript-source slot (agent tools attach their live transcript
58
+ * here). Deliberately NOT named `task`: `TurnContext.task` is typed
59
+ * `ToolTaskHandle` (check calls only) and must not be shadowed by a
60
+ * transcript-only object in run bodies.
61
+ */
62
+ taskTranscript?: unknown;
63
+ };
64
+ }
33
65
  /**
34
66
  * Build a flat ToolExecuteContext for a specific tool.
35
67
  * Returns a merged object with TurnContext fields, a `local` getter
@@ -43,9 +75,21 @@ export declare class ToolContextStore {
43
75
  * @param toolName - The tool's name
44
76
  * @param schema - The tool's contextSchema (for validation)
45
77
  * @param sharedSchema - The shared contextSchema (for validation)
78
+ * @param extras - Per-execution extras (abort signal, call id, conversation id)
46
79
  * @returns A flat ToolExecuteContext
47
80
  */
48
- export declare function buildToolExecuteContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined): ToolExecuteContext<TName, TContext, TShared>;
81
+ export declare function buildToolExecuteContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined, extras?: ToolExecutionExtras): ToolExecuteContext<TName, TContext, TShared>;
82
+ /**
83
+ * Build a ToolRunContext for a unified `run` tool: the base execute context
84
+ * plus the async-task affordances (`defer`, `log`, `onMessage`, `taskId`,
85
+ * `client`). Attached onto the built object (not via spread) because
86
+ * `local`/`shared` are live getters a spread would flatten.
87
+ */
88
+ export declare function buildToolRunContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined, extras?: ToolExecutionExtras): ToolExecuteContext<TName, TContext, TShared> & {
89
+ defer: (taskId: string, options?: Record<string, unknown>) => unknown;
90
+ log: (entry: unknown) => void;
91
+ onMessage: (handler: (message: unknown) => void) => void;
92
+ };
49
93
  /**
50
94
  * Resolve a context input (static value, sync function, or async function) to a plain object.
51
95
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKvE;;;GAGG;AACH,KAAK,qBAAqB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IACtE,CAAC,GACD,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC,CAAC,GAC1B,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAMxC;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,SAAS,CAAyC;gBAE9C,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IASvE,qEAAqE;IACrE,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAOtD,8DAA8D;IAC9D,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAUtD,wDAAwD;IACxD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUzD,2DAA2D;IAC3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOvE,+EAA+E;IAC/E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS1E,OAAO,CAAC,eAAe;CAWxB;AAiCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEjE,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,gBAAgB,GAAG,SAAS,EACnC,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,EACzC,YAAY,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,GAC/C,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CA8C9C;AAMD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACpF,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,EACzC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,CAAC,CAAC,CAUZ;AAMD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}
1
+ {"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"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"}
@@ -95,6 +95,21 @@ function validatePartialAgainstSchema(partial, schema) {
95
95
  }
96
96
  return filteredPartial;
97
97
  }
98
+ /*
99
+ * A never-aborting signal for contexts built without cancellation sources —
100
+ * keeps `ctx.signal` always present so tool bodies can pass it to fetch/etc.
101
+ * unconditionally.
102
+ *
103
+ * Deliberately a FACTORY, not one shared module-level signal. A tool body may
104
+ * `signal.addEventListener('abort', …)` and, since this signal never fires,
105
+ * nothing ever removes that listener. Sharing one object across every such call
106
+ * accumulated listeners on it for the lifetime of the process — unbounded in a
107
+ * long-lived server, and eventually a MaxListenersExceededWarning. A fresh
108
+ * signal per context is garbage-collected with the context that owns it.
109
+ */
110
+ function neverAbortSignal() {
111
+ return new AbortController().signal;
112
+ }
98
113
  /**
99
114
  * Build a flat ToolExecuteContext for a specific tool.
100
115
  * Returns a merged object with TurnContext fields, a `local` getter
@@ -108,9 +123,10 @@ function validatePartialAgainstSchema(partial, schema) {
108
123
  * @param toolName - The tool's name
109
124
  * @param schema - The tool's contextSchema (for validation)
110
125
  * @param sharedSchema - The shared contextSchema (for validation)
126
+ * @param extras - Per-execution extras (abort signal, call id, conversation id)
111
127
  * @returns A flat ToolExecuteContext
112
128
  */
113
- export function buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema) {
129
+ export function buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema, extras) {
114
130
  // Validate initial context eagerly (throws on bad data)
115
131
  if (store && schema) {
116
132
  extractToolContext(store, toolName, schema);
@@ -120,6 +136,13 @@ export function buildToolExecuteContext(turnContext, store, toolName, schema, sh
120
136
  }
121
137
  const ctx = {
122
138
  ...turnContext,
139
+ signal: extras?.signal ?? neverAbortSignal(),
140
+ ...(extras?.callId !== undefined && {
141
+ callId: extras.callId,
142
+ }),
143
+ ...(extras?.conversationId !== undefined && {
144
+ conversationId: extras.conversationId,
145
+ }),
123
146
  get local() {
124
147
  const data = store ? store.getToolContext(toolName) : {};
125
148
  return Object.freeze(data);
@@ -145,6 +168,42 @@ export function buildToolExecuteContext(turnContext, store, toolName, schema, sh
145
168
  };
146
169
  return ctx;
147
170
  }
171
+ /**
172
+ * Build a ToolRunContext for a unified `run` tool: the base execute context
173
+ * plus the async-task affordances (`defer`, `log`, `onMessage`, `taskId`,
174
+ * `client`). Attached onto the built object (not via spread) because
175
+ * `local`/`shared` are live getters a spread would flatten.
176
+ */
177
+ export function buildToolRunContext(turnContext, store, toolName, schema, sharedSchema, extras) {
178
+ const base = buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema, extras);
179
+ const runExtras = extras?.runExtras;
180
+ const ctx = Object.assign(base, {
181
+ defer: runExtras?.defer ??
182
+ (() => {
183
+ throw new Error(`Tool "${toolName}": ctx.defer() is only available on lifecycle: 'deferred' tools`);
184
+ }),
185
+ log: runExtras?.log ?? (() => undefined),
186
+ onMessage: runExtras?.onMessage ?? (() => undefined),
187
+ ...(runExtras?.taskTranscript !== undefined && {
188
+ taskTranscript: runExtras.taskTranscript,
189
+ }),
190
+ ...(extras?.client !== undefined && {
191
+ client: extras.client,
192
+ }),
193
+ });
194
+ // Live delegation: the engine's runExtras exposes taskId as a getter
195
+ // backed by the run binding, because the ToolTask (and its id) is only
196
+ // created after the call escapes the round — a static copy taken here
197
+ // would always be undefined.
198
+ if (runExtras && 'taskId' in runExtras) {
199
+ Object.defineProperty(ctx, 'taskId', {
200
+ get: () => runExtras.taskId,
201
+ enumerable: true,
202
+ configurable: true,
203
+ });
204
+ }
205
+ return ctx;
206
+ }
148
207
  //#endregion
149
208
  //#region resolveContext
150
209
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAkBrD,YAAY;AAEZ,0BAA0B;AAE1B;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAI3B,YAAY,gBAAyD,EAAE;QAF/D,cAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;QAGxD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;gBAChB,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,SAAS,CAAC,QAA+B;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,WAAW;QACT,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,GAAG,CAAC,GAAG;gBACd,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,cAAc,CAAC,QAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,cAAc,CAAC,QAAgB,EAAE,MAA+B;QAC9D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;YACrB,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,+EAA+E;IAC/E,gBAAgB,CAAC,QAAgB,EAAE,OAAgC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;YACrB,GAAG,QAAQ;YACX,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,GAAG,CAAC,GAAG;gBACd,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,YAAY;AAEZ,iCAAiC;AAEjC;;;GAGG;AACH,SAAS,4BAA4B,CACnC,OAAgC,EAChC,MAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,SAAS,EAAE,CAAC;YACd,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAmCD;;;;;;;;;;;GAWG;AACH,SAAS,gBAAgB;IACvB,OAAO,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAKrC,WAAwB,EACxB,KAAmC,EACnC,QAAe,EACf,MAAyC,EACzC,YAAgD,EAChD,MAA4B;IAE5B,wDAAwD;IACxD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;QAC1B,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAiD;QACxD,GAAG,WAAW;QAEd,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,gBAAgB,EAAE;QAC5C,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QACF,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,SAAS,IAAI;YAC1C,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC;QAEF,IAAI,KAAK;YACP,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAuB,CAAC;QACnD,CAAC;QAED,UAAU,CAAC,OAA0B;YACnC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,eAAe,GAAG,4BAA4B,CAClD,OAAkC,EAClC,MAAM,CACP,CAAC;YACF,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,MAAM;YACR,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAsB,CAAC;QAClD,CAAC;QAED,gBAAgB,CAAC,OAAyB;YACxC,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,MAAM,eAAe,GAAG,4BAA4B,CAClD,OAAkC,EAClC,YAAY,CACb,CAAC;YACF,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAKjC,WAAwB,EACxB,KAAmC,EACnC,QAAe,EACf,MAAyC,EACzC,YAAgD,EAChD,MAA4B;IAM5B,MAAM,IAAI,GAAG,uBAAuB,CAClC,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,MAAM,CACP,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAC9B,KAAK,EACH,SAAS,EAAE,KAAK;YAChB,CAAC,GAAG,EAAE;gBACJ,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,iEAAiE,CACnF,CAAC;YACJ,CAAC,CAAC;QACJ,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACxC,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACpD,GAAG,CAAC,SAAS,EAAE,cAAc,KAAK,SAAS,IAAI;YAC7C,cAAc,EAAE,SAAS,CAAC,cAAc;SACzC,CAAC;QACF,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;KACH,CAAC,CAAC;IACH,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,6BAA6B;IAC7B,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE;YACnC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;YAC3B,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,YAAY;AAEZ,wBAAwB;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAAyC,EACzC,WAAwB;IAExB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAE,YAAsD,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,YAAY;AAEZ,4BAA4B;AAE5B;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAuB,EACvB,QAAgB,EAChB,MAAyC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEhD,mDAAmD;IACnD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3B,gDAAgD;IAChD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,YAAY"}