inferoa 0.1.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 (200) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +154 -0
  3. package/dist/src/app.d.ts +16 -0
  4. package/dist/src/app.js +17 -0
  5. package/dist/src/app.js.map +1 -0
  6. package/dist/src/autoresearch/state.d.ts +106 -0
  7. package/dist/src/autoresearch/state.js +469 -0
  8. package/dist/src/autoresearch/state.js.map +1 -0
  9. package/dist/src/cli.d.ts +2 -0
  10. package/dist/src/cli.js +415 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/code-intelligence/codegraph-engine.d.ts +55 -0
  13. package/dist/src/code-intelligence/codegraph-engine.js +593 -0
  14. package/dist/src/code-intelligence/codegraph-engine.js.map +1 -0
  15. package/dist/src/code-intelligence/hub.d.ts +37 -0
  16. package/dist/src/code-intelligence/hub.js +65 -0
  17. package/dist/src/code-intelligence/hub.js.map +1 -0
  18. package/dist/src/config/config.d.ts +12 -0
  19. package/dist/src/config/config.js +229 -0
  20. package/dist/src/config/config.js.map +1 -0
  21. package/dist/src/config/defaults.d.ts +2 -0
  22. package/dist/src/config/defaults.js +44 -0
  23. package/dist/src/config/defaults.js.map +1 -0
  24. package/dist/src/config/secret-vault.d.ts +3 -0
  25. package/dist/src/config/secret-vault.js +106 -0
  26. package/dist/src/config/secret-vault.js.map +1 -0
  27. package/dist/src/context/compressor.d.ts +33 -0
  28. package/dist/src/context/compressor.js +501 -0
  29. package/dist/src/context/compressor.js.map +1 -0
  30. package/dist/src/context/prompt.d.ts +26 -0
  31. package/dist/src/context/prompt.js +572 -0
  32. package/dist/src/context/prompt.js.map +1 -0
  33. package/dist/src/daemon/serve.d.ts +2 -0
  34. package/dist/src/daemon/serve.js +11 -0
  35. package/dist/src/daemon/serve.js.map +1 -0
  36. package/dist/src/daemon/supervisor.d.ts +33 -0
  37. package/dist/src/daemon/supervisor.js +252 -0
  38. package/dist/src/daemon/supervisor.js.map +1 -0
  39. package/dist/src/goals/state.d.ts +105 -0
  40. package/dist/src/goals/state.js +736 -0
  41. package/dist/src/goals/state.js.map +1 -0
  42. package/dist/src/model/endpoint-signals.d.ts +15 -0
  43. package/dist/src/model/endpoint-signals.js +186 -0
  44. package/dist/src/model/endpoint-signals.js.map +1 -0
  45. package/dist/src/model/gateway.d.ts +11 -0
  46. package/dist/src/model/gateway.js +455 -0
  47. package/dist/src/model/gateway.js.map +1 -0
  48. package/dist/src/plans/state.d.ts +28 -0
  49. package/dist/src/plans/state.js +123 -0
  50. package/dist/src/plans/state.js.map +1 -0
  51. package/dist/src/runtime.d.ts +92 -0
  52. package/dist/src/runtime.js +757 -0
  53. package/dist/src/runtime.js.map +1 -0
  54. package/dist/src/session/store.d.ts +84 -0
  55. package/dist/src/session/store.js +593 -0
  56. package/dist/src/session/store.js.map +1 -0
  57. package/dist/src/session/workspace.d.ts +2 -0
  58. package/dist/src/session/workspace.js +14 -0
  59. package/dist/src/session/workspace.js.map +1 -0
  60. package/dist/src/skills/registry.d.ts +24 -0
  61. package/dist/src/skills/registry.js +203 -0
  62. package/dist/src/skills/registry.js.map +1 -0
  63. package/dist/src/tools/autoresearch-tools.d.ts +6 -0
  64. package/dist/src/tools/autoresearch-tools.js +412 -0
  65. package/dist/src/tools/autoresearch-tools.js.map +1 -0
  66. package/dist/src/tools/clarify-tool.d.ts +3 -0
  67. package/dist/src/tools/clarify-tool.js +107 -0
  68. package/dist/src/tools/clarify-tool.js.map +1 -0
  69. package/dist/src/tools/code-intelligence.d.ts +15 -0
  70. package/dist/src/tools/code-intelligence.js +391 -0
  71. package/dist/src/tools/code-intelligence.js.map +1 -0
  72. package/dist/src/tools/context.d.ts +11 -0
  73. package/dist/src/tools/context.js +2 -0
  74. package/dist/src/tools/context.js.map +1 -0
  75. package/dist/src/tools/goal-tools.d.ts +3 -0
  76. package/dist/src/tools/goal-tools.js +279 -0
  77. package/dist/src/tools/goal-tools.js.map +1 -0
  78. package/dist/src/tools/omni-tools.d.ts +8 -0
  79. package/dist/src/tools/omni-tools.js +349 -0
  80. package/dist/src/tools/omni-tools.js.map +1 -0
  81. package/dist/src/tools/permissions.d.ts +11 -0
  82. package/dist/src/tools/permissions.js +74 -0
  83. package/dist/src/tools/permissions.js.map +1 -0
  84. package/dist/src/tools/plan-tools.d.ts +3 -0
  85. package/dist/src/tools/plan-tools.js +314 -0
  86. package/dist/src/tools/plan-tools.js.map +1 -0
  87. package/dist/src/tools/process-tools.d.ts +6 -0
  88. package/dist/src/tools/process-tools.js +199 -0
  89. package/dist/src/tools/process-tools.js.map +1 -0
  90. package/dist/src/tools/registry.d.ts +20 -0
  91. package/dist/src/tools/registry.js +187 -0
  92. package/dist/src/tools/registry.js.map +1 -0
  93. package/dist/src/tools/schemas.d.ts +3 -0
  94. package/dist/src/tools/schemas.js +500 -0
  95. package/dist/src/tools/schemas.js.map +1 -0
  96. package/dist/src/tools/skill-tools.d.ts +6 -0
  97. package/dist/src/tools/skill-tools.js +124 -0
  98. package/dist/src/tools/skill-tools.js.map +1 -0
  99. package/dist/src/tools/text-args.d.ts +5 -0
  100. package/dist/src/tools/text-args.js +22 -0
  101. package/dist/src/tools/text-args.js.map +1 -0
  102. package/dist/src/tools/web-search.d.ts +5 -0
  103. package/dist/src/tools/web-search.js +602 -0
  104. package/dist/src/tools/web-search.js.map +1 -0
  105. package/dist/src/tools/workspace-tools.d.ts +17 -0
  106. package/dist/src/tools/workspace-tools.js +561 -0
  107. package/dist/src/tools/workspace-tools.js.map +1 -0
  108. package/dist/src/tui/activity.d.ts +11 -0
  109. package/dist/src/tui/activity.js +75 -0
  110. package/dist/src/tui/activity.js.map +1 -0
  111. package/dist/src/tui/ansi.d.ts +24 -0
  112. package/dist/src/tui/ansi.js +131 -0
  113. package/dist/src/tui/ansi.js.map +1 -0
  114. package/dist/src/tui/app.d.ts +163 -0
  115. package/dist/src/tui/app.js +4204 -0
  116. package/dist/src/tui/app.js.map +1 -0
  117. package/dist/src/tui/cache-footer.d.ts +21 -0
  118. package/dist/src/tui/cache-footer.js +75 -0
  119. package/dist/src/tui/cache-footer.js.map +1 -0
  120. package/dist/src/tui/clarify.d.ts +14 -0
  121. package/dist/src/tui/clarify.js +187 -0
  122. package/dist/src/tui/clarify.js.map +1 -0
  123. package/dist/src/tui/composer.d.ts +79 -0
  124. package/dist/src/tui/composer.js +592 -0
  125. package/dist/src/tui/composer.js.map +1 -0
  126. package/dist/src/tui/event-view.d.ts +5 -0
  127. package/dist/src/tui/event-view.js +392 -0
  128. package/dist/src/tui/event-view.js.map +1 -0
  129. package/dist/src/tui/home.d.ts +7 -0
  130. package/dist/src/tui/home.js +92 -0
  131. package/dist/src/tui/home.js.map +1 -0
  132. package/dist/src/tui/markdown.d.ts +18 -0
  133. package/dist/src/tui/markdown.js +271 -0
  134. package/dist/src/tui/markdown.js.map +1 -0
  135. package/dist/src/tui/mode-footer.d.ts +9 -0
  136. package/dist/src/tui/mode-footer.js +62 -0
  137. package/dist/src/tui/mode-footer.js.map +1 -0
  138. package/dist/src/tui/plan-view.d.ts +8 -0
  139. package/dist/src/tui/plan-view.js +45 -0
  140. package/dist/src/tui/plan-view.js.map +1 -0
  141. package/dist/src/tui/prompt-queue.d.ts +18 -0
  142. package/dist/src/tui/prompt-queue.js +27 -0
  143. package/dist/src/tui/prompt-queue.js.map +1 -0
  144. package/dist/src/tui/resize.d.ts +7 -0
  145. package/dist/src/tui/resize.js +15 -0
  146. package/dist/src/tui/resize.js.map +1 -0
  147. package/dist/src/tui/session-picker.d.ts +10 -0
  148. package/dist/src/tui/session-picker.js +17 -0
  149. package/dist/src/tui/session-picker.js.map +1 -0
  150. package/dist/src/tui/session-transcript.d.ts +2 -0
  151. package/dist/src/tui/session-transcript.js +44 -0
  152. package/dist/src/tui/session-transcript.js.map +1 -0
  153. package/dist/src/tui/slash-notice.d.ts +2 -0
  154. package/dist/src/tui/slash-notice.js +9 -0
  155. package/dist/src/tui/slash-notice.js.map +1 -0
  156. package/dist/src/tui/slash.d.ts +21 -0
  157. package/dist/src/tui/slash.js +103 -0
  158. package/dist/src/tui/slash.js.map +1 -0
  159. package/dist/src/tui/splash.d.ts +4 -0
  160. package/dist/src/tui/splash.js +64 -0
  161. package/dist/src/tui/splash.js.map +1 -0
  162. package/dist/src/tui/tool-renderer.d.ts +6 -0
  163. package/dist/src/tui/tool-renderer.js +1024 -0
  164. package/dist/src/tui/tool-renderer.js.map +1 -0
  165. package/dist/src/tui/transcript-spacing.d.ts +1 -0
  166. package/dist/src/tui/transcript-spacing.js +4 -0
  167. package/dist/src/tui/transcript-spacing.js.map +1 -0
  168. package/dist/src/types.d.ts +220 -0
  169. package/dist/src/types.js +2 -0
  170. package/dist/src/types.js.map +1 -0
  171. package/dist/src/util/abort.d.ts +3 -0
  172. package/dist/src/util/abort.js +19 -0
  173. package/dist/src/util/abort.js.map +1 -0
  174. package/dist/src/util/clock.d.ts +2 -0
  175. package/dist/src/util/clock.js +7 -0
  176. package/dist/src/util/clock.js.map +1 -0
  177. package/dist/src/util/fs.d.ts +13 -0
  178. package/dist/src/util/fs.js +75 -0
  179. package/dist/src/util/fs.js.map +1 -0
  180. package/dist/src/util/hash.d.ts +6 -0
  181. package/dist/src/util/hash.js +50 -0
  182. package/dist/src/util/hash.js.map +1 -0
  183. package/dist/src/util/limit.d.ts +11 -0
  184. package/dist/src/util/limit.js +29 -0
  185. package/dist/src/util/limit.js.map +1 -0
  186. package/dist/src/util/types.d.ts +22 -0
  187. package/dist/src/util/types.js +33 -0
  188. package/dist/src/util/types.js.map +1 -0
  189. package/dist/src/validation/acceptance.d.ts +12 -0
  190. package/dist/src/validation/acceptance.js +251 -0
  191. package/dist/src/validation/acceptance.js.map +1 -0
  192. package/dist/src/validation/milestone.d.ts +2 -0
  193. package/dist/src/validation/milestone.js +141 -0
  194. package/dist/src/validation/milestone.js.map +1 -0
  195. package/docs/final-acceptance-task.md +193 -0
  196. package/docs/public-source-hygiene.md +21 -0
  197. package/docs/roadmap.md +265 -0
  198. package/docs/tui-product-design.md +270 -0
  199. package/package.json +67 -0
  200. package/skills/coding-workflow/SKILL.md +16 -0
@@ -0,0 +1,455 @@
1
+ import { endpointApiKey } from "../config/config.js";
2
+ import { throwIfAborted } from "../util/abort.js";
3
+ import { stableJson } from "../util/hash.js";
4
+ import { authHeaders, modelBaseUrl, normalizeUsage, providerId, signalHeaders } from "./endpoint-signals.js";
5
+ export class ModelGateway {
6
+ config;
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ capabilities() {
11
+ const setup = this.config.model_setup;
12
+ return {
13
+ mode: setup.mode,
14
+ provider: setup.provider ?? setup.router ?? "unknown",
15
+ profile: setup.profile,
16
+ base_url: setup.base_url,
17
+ model: setup.model,
18
+ tool_calling: true,
19
+ streaming: true,
20
+ };
21
+ }
22
+ async stream(request, onDelta, signal) {
23
+ throwIfAborted(signal);
24
+ const setup = this.config.model_setup;
25
+ if (!setup.base_url) {
26
+ throw new Error("No model endpoint configured. Set model_setup.base_url or INFEROA_BASE_URL.");
27
+ }
28
+ if (!setup.model && !request.model) {
29
+ throw new Error("No model configured. Set model_setup.model or INFEROA_MODEL.");
30
+ }
31
+ if (setup.provider === "external" && !endpointApiKey(setup)) {
32
+ throw new Error("No API key found in the local vault for the external provider. Run /setup and paste the key once; config stores only api_key_ref.");
33
+ }
34
+ if (setup.provider === "external" && setup.profile === "anthropic") {
35
+ return await this.callAnthropic(setup, request, onDelta, signal);
36
+ }
37
+ if (setup.provider === "external" && setup.profile === "gemini") {
38
+ return await this.callGemini(setup, request, onDelta, signal);
39
+ }
40
+ return await this.callOpenAiCompatible(setup, request, onDelta, signal);
41
+ }
42
+ async callOpenAiCompatible(setup, request, onDelta, signal) {
43
+ throwIfAborted(signal);
44
+ const base = modelBaseUrl(setup);
45
+ const headers = new Headers(authHeaders(setup));
46
+ headers.set("accept", "text/event-stream");
47
+ headers.set("x-session-id", request.session_id);
48
+ headers.set("x-inferoa-session-id", request.session_id);
49
+ headers.set("x-inferoa-run-id", request.run_id);
50
+ if (request.request_class) {
51
+ headers.set("x-inferoa-request-class", request.request_class);
52
+ }
53
+ const body = {
54
+ model: request.model || setup.model,
55
+ messages: request.messages.map(toOpenAiMessage),
56
+ tools: sortedTools(request.tools).map(toOpenAiTool),
57
+ tool_choice: "auto",
58
+ stream: true,
59
+ stream_options: { include_usage: true },
60
+ temperature: request.temperature ?? 0.2,
61
+ max_tokens: request.max_tokens,
62
+ cache_salt: setup.provider === "vllm" ? request.cache_salt ?? setup.cache_salt : undefined,
63
+ };
64
+ const response = await fetch(`${base}/chat/completions`, {
65
+ method: "POST",
66
+ headers,
67
+ body: JSON.stringify(body),
68
+ signal,
69
+ });
70
+ const headerSignals = signalHeaders(response.headers);
71
+ if (!response.ok || !response.body) {
72
+ const text = await response.text().catch(() => "");
73
+ throw new Error(`Model request failed ${response.status}: ${text}`);
74
+ }
75
+ const decoder = new TextDecoder();
76
+ const reader = response.body.getReader();
77
+ let buffer = "";
78
+ let content = "";
79
+ let usage;
80
+ let responseId;
81
+ let responseModel;
82
+ const toolCalls = new Map();
83
+ let lastToolCallIndex;
84
+ let lastRaw;
85
+ const streamWarnings = [];
86
+ while (true) {
87
+ throwIfAborted(signal);
88
+ const { done, value } = await reader.read();
89
+ throwIfAborted(signal);
90
+ if (done) {
91
+ break;
92
+ }
93
+ buffer += decoder.decode(value, { stream: true });
94
+ const lines = buffer.split(/\r?\n/);
95
+ buffer = lines.pop() ?? "";
96
+ for (const line of lines) {
97
+ const trimmed = line.trim();
98
+ if (!trimmed || !trimmed.startsWith("data:")) {
99
+ continue;
100
+ }
101
+ const payload = trimmed.slice(5).trim();
102
+ if (payload === "[DONE]") {
103
+ continue;
104
+ }
105
+ const json = parseSseJsonPayload(payload, streamWarnings);
106
+ if (!json) {
107
+ continue;
108
+ }
109
+ lastRaw = json;
110
+ responseId = typeof json.id === "string" ? json.id : responseId;
111
+ responseModel = typeof json.model === "string" ? json.model : responseModel;
112
+ usage = normalizeUsage(json.usage) ?? usage;
113
+ const choices = Array.isArray(json.choices) ? json.choices : [];
114
+ for (const choice of choices) {
115
+ const delta = choice.delta;
116
+ const text = typeof delta?.content === "string" ? delta.content : "";
117
+ if (text) {
118
+ content += text;
119
+ onDelta?.(text);
120
+ }
121
+ const deltas = Array.isArray(delta?.tool_calls) ? delta.tool_calls : [];
122
+ for (const toolDelta of deltas) {
123
+ const index = accumulateOpenAiToolDelta(toolDelta, toolCalls, lastToolCallIndex);
124
+ lastToolCallIndex = index;
125
+ }
126
+ const legacyFunctionCall = delta?.function_call;
127
+ if (legacyFunctionCall) {
128
+ const index = accumulateOpenAiLegacyFunctionCall(legacyFunctionCall, toolCalls, lastToolCallIndex);
129
+ lastToolCallIndex = index;
130
+ }
131
+ const message = choice.message;
132
+ if (typeof message?.content === "string" && message.content) {
133
+ content += message.content;
134
+ onDelta?.(message.content);
135
+ }
136
+ const messageToolCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : [];
137
+ for (const toolCall of messageToolCalls) {
138
+ const index = accumulateOpenAiToolDelta(toolCall, toolCalls, lastToolCallIndex, { replaceArguments: true });
139
+ lastToolCallIndex = index;
140
+ }
141
+ const messageFunctionCall = message?.function_call;
142
+ if (messageFunctionCall) {
143
+ const index = accumulateOpenAiLegacyFunctionCall(messageFunctionCall, toolCalls, lastToolCallIndex, { replaceArguments: true });
144
+ lastToolCallIndex = index;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ const parsedToolCalls = [...toolCalls.entries()]
150
+ .sort(([a], [b]) => a - b)
151
+ .map(([, call], index) => parseToolCall(call, index))
152
+ .filter((call) => Boolean(call));
153
+ return {
154
+ content,
155
+ tool_calls: parsedToolCalls,
156
+ usage,
157
+ request_id: headerSignals["x-request-id"] ?? headerSignals["x-vllm-request-id"] ?? headerSignals["request-id"],
158
+ response_id: responseId,
159
+ model: responseModel ?? request.model,
160
+ route: routeFromHeaders(headerSignals),
161
+ raw: streamWarnings.length ? { ...(lastRaw ?? {}), stream_warnings: streamWarnings } : lastRaw,
162
+ };
163
+ }
164
+ async callAnthropic(setup, request, onDelta, signal) {
165
+ throwIfAborted(signal);
166
+ const base = modelBaseUrl(setup).replace(/\/v1$/, "");
167
+ const headers = new Headers(authHeaders(setup));
168
+ headers.set("anthropic-version", "2023-06-01");
169
+ const system = request.messages.find((message) => message.role === "system")?.content;
170
+ const body = {
171
+ model: request.model || setup.model,
172
+ max_tokens: request.max_tokens ?? 4096,
173
+ system: typeof system === "string" ? system : undefined,
174
+ messages: request.messages.filter((message) => message.role !== "system").map(toAnthropicMessage),
175
+ tools: sortedTools(request.tools).map(toAnthropicTool),
176
+ };
177
+ const response = await fetch(`${base}/v1/messages`, {
178
+ method: "POST",
179
+ headers,
180
+ body: JSON.stringify(body),
181
+ signal,
182
+ });
183
+ if (!response.ok) {
184
+ throw new Error(`Anthropic request failed ${response.status}: ${await response.text()}`);
185
+ }
186
+ const json = (await response.json());
187
+ const contentBlocks = Array.isArray(json.content) ? json.content : [];
188
+ let content = "";
189
+ const toolCalls = [];
190
+ for (const block of contentBlocks) {
191
+ if (block.type === "text" && typeof block.text === "string") {
192
+ content += block.text;
193
+ onDelta?.(block.text);
194
+ }
195
+ if (block.type === "tool_use" && typeof block.name === "string") {
196
+ toolCalls.push({
197
+ id: typeof block.id === "string" ? block.id : `tool_${toolCalls.length}`,
198
+ name: block.name,
199
+ arguments: (block.input && typeof block.input === "object" ? block.input : {}),
200
+ });
201
+ }
202
+ }
203
+ return {
204
+ content,
205
+ tool_calls: toolCalls,
206
+ usage: normalizeUsage(json.usage),
207
+ response_id: typeof json.id === "string" ? json.id : undefined,
208
+ model: typeof json.model === "string" ? json.model : request.model,
209
+ raw: json,
210
+ };
211
+ }
212
+ async callGemini(setup, request, onDelta, signal) {
213
+ throwIfAborted(signal);
214
+ const base = modelBaseUrl(setup).replace(/\/v1$/, "");
215
+ const model = request.model || setup.model;
216
+ const apiKey = endpointApiKey(setup);
217
+ const url = `${base}/v1beta/models/${encodeURIComponent(model ?? "")}:generateContent${apiKey ? `?key=${encodeURIComponent(apiKey)}` : ""}`;
218
+ const body = {
219
+ contents: request.messages
220
+ .filter((message) => message.role !== "system")
221
+ .map((message) => ({
222
+ role: message.role === "assistant" ? "model" : "user",
223
+ parts: [{ text: messageTextContent(message) }],
224
+ })),
225
+ systemInstruction: {
226
+ parts: request.messages
227
+ .filter((message) => message.role === "system")
228
+ .map((message) => ({ text: messageTextContent(message) })),
229
+ },
230
+ };
231
+ const response = await fetch(url, {
232
+ method: "POST",
233
+ headers: authHeaders({ ...setup, api_key: undefined, api_key_ref: undefined }),
234
+ body: JSON.stringify(body),
235
+ signal,
236
+ });
237
+ if (!response.ok) {
238
+ throw new Error(`Gemini request failed ${response.status}: ${await response.text()}`);
239
+ }
240
+ const json = (await response.json());
241
+ const candidates = Array.isArray(json.candidates) ? json.candidates : [];
242
+ const parts = candidates[0]?.content?.parts ?? [];
243
+ const content = parts.map((part) => (typeof part.text === "string" ? part.text : "")).join("");
244
+ if (content) {
245
+ onDelta?.(content);
246
+ }
247
+ return {
248
+ content,
249
+ tool_calls: [],
250
+ usage: normalizeUsage(json.usageMetadata),
251
+ model,
252
+ raw: json,
253
+ };
254
+ }
255
+ evidenceFromResponse(request, response) {
256
+ return {
257
+ mode: this.config.model_setup.mode,
258
+ provider_id: providerId(this.config),
259
+ base_url: this.config.model_setup.base_url,
260
+ model: response.model ?? request.model,
261
+ usage: response.usage,
262
+ request_id: response.request_id,
263
+ response_id: response.response_id,
264
+ request_class: request.request_class,
265
+ prompt_hash: request.prompt_hash,
266
+ tool_schema_hash: request.tool_schema_hash,
267
+ prompt_epoch_id: request.prompt_epoch_id,
268
+ router: response.route,
269
+ };
270
+ }
271
+ }
272
+ function sortedTools(tools) {
273
+ return tools.slice().sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
274
+ }
275
+ function toOpenAiTool(tool) {
276
+ return {
277
+ type: "function",
278
+ function: {
279
+ name: tool.name,
280
+ description: tool.description,
281
+ parameters: canonicalJsonObject(tool.parameters),
282
+ },
283
+ };
284
+ }
285
+ function toOpenAiMessage(message) {
286
+ const base = {
287
+ role: message.role,
288
+ content: stableMessageContent(message.content),
289
+ };
290
+ if (message.tool_call_id) {
291
+ base.tool_call_id = message.tool_call_id;
292
+ }
293
+ if (message.name) {
294
+ base.name = message.name;
295
+ }
296
+ if (message.tool_calls?.length) {
297
+ base.tool_calls = message.tool_calls.map((call) => ({
298
+ id: call.id,
299
+ type: "function",
300
+ function: {
301
+ name: call.name,
302
+ arguments: stableJson(call.arguments),
303
+ },
304
+ }));
305
+ }
306
+ return base;
307
+ }
308
+ function stableMessageContent(content) {
309
+ return typeof content === "string" ? content : content.map((item) => canonicalJsonValue(item));
310
+ }
311
+ function canonicalJsonValue(value) {
312
+ if (value === undefined) {
313
+ return null;
314
+ }
315
+ if (value === null || typeof value !== "object") {
316
+ return value;
317
+ }
318
+ if (Array.isArray(value)) {
319
+ return value.map((item) => canonicalJsonValue(item));
320
+ }
321
+ const record = value;
322
+ const sorted = {};
323
+ for (const key of Object.keys(record).sort()) {
324
+ const child = record[key];
325
+ if (child !== undefined) {
326
+ sorted[key] = canonicalJsonValue(child);
327
+ }
328
+ }
329
+ return sorted;
330
+ }
331
+ function canonicalJsonObject(value) {
332
+ return canonicalJsonValue(value);
333
+ }
334
+ function toAnthropicMessage(message) {
335
+ if (message.role === "tool") {
336
+ return {
337
+ role: "user",
338
+ content: [
339
+ {
340
+ type: "tool_result",
341
+ tool_use_id: message.tool_call_id,
342
+ content: messageTextContent(message),
343
+ },
344
+ ],
345
+ };
346
+ }
347
+ return {
348
+ role: message.role === "assistant" ? "assistant" : "user",
349
+ content: messageTextContent(message),
350
+ };
351
+ }
352
+ function messageTextContent(message) {
353
+ return typeof message.content === "string" ? message.content : stableJson(message.content);
354
+ }
355
+ function toAnthropicTool(tool) {
356
+ return {
357
+ name: tool.name,
358
+ description: tool.description,
359
+ input_schema: canonicalJsonObject(tool.parameters),
360
+ };
361
+ }
362
+ function parseToolCall(call, index) {
363
+ if (!call.name) {
364
+ return undefined;
365
+ }
366
+ let args = {};
367
+ if (call.arguments.trim()) {
368
+ try {
369
+ args = JSON.parse(call.arguments);
370
+ }
371
+ catch {
372
+ args = { raw_arguments: call.arguments };
373
+ }
374
+ }
375
+ return {
376
+ id: call.id ?? `tool_${index}`,
377
+ name: call.name,
378
+ arguments: args,
379
+ };
380
+ }
381
+ function parseSseJsonPayload(payload, warnings) {
382
+ try {
383
+ const parsed = JSON.parse(payload);
384
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
385
+ warnings.push(`ignored non-object SSE payload: ${payload.slice(0, 120)}`);
386
+ return undefined;
387
+ }
388
+ return parsed;
389
+ }
390
+ catch (error) {
391
+ warnings.push(`ignored malformed SSE payload: ${error instanceof Error ? error.message : String(error)}`);
392
+ return undefined;
393
+ }
394
+ }
395
+ function accumulateOpenAiToolDelta(toolDelta, toolCalls, lastIndex, options = {}) {
396
+ const index = resolveOpenAiToolCallIndex(toolDelta, toolCalls, lastIndex);
397
+ const current = toolCalls.get(index) ?? { arguments: "" };
398
+ if (typeof toolDelta.id === "string") {
399
+ current.id = toolDelta.id;
400
+ }
401
+ const fn = toolDelta.function;
402
+ if (typeof fn?.name === "string" && fn.name.length > 0) {
403
+ current.name = fn.name;
404
+ }
405
+ if (typeof fn?.arguments === "string") {
406
+ current.arguments = options.replaceArguments ? fn.arguments : current.arguments + fn.arguments;
407
+ }
408
+ toolCalls.set(index, current);
409
+ return index;
410
+ }
411
+ function accumulateOpenAiLegacyFunctionCall(functionCall, toolCalls, lastIndex, options = {}) {
412
+ const index = lastIndex ?? 0;
413
+ const current = toolCalls.get(index) ?? { arguments: "" };
414
+ current.id = current.id ?? `function_call_${index}`;
415
+ if (typeof functionCall.name === "string" && functionCall.name.length > 0) {
416
+ current.name = functionCall.name;
417
+ }
418
+ if (typeof functionCall.arguments === "string") {
419
+ current.arguments = options.replaceArguments ? functionCall.arguments : current.arguments + functionCall.arguments;
420
+ }
421
+ toolCalls.set(index, current);
422
+ return index;
423
+ }
424
+ function resolveOpenAiToolCallIndex(delta, toolCalls, lastIndex) {
425
+ if (typeof delta.index === "number") {
426
+ return delta.index;
427
+ }
428
+ if (typeof delta.id === "string") {
429
+ for (const [index, current] of toolCalls.entries()) {
430
+ if (current.id === delta.id) {
431
+ return index;
432
+ }
433
+ }
434
+ }
435
+ const fn = delta.function;
436
+ if (lastIndex !== undefined) {
437
+ const last = toolCalls.get(lastIndex);
438
+ const isContinuation = !delta.id && !fn?.name;
439
+ const sameNamedCall = typeof fn?.name === "string" && last?.name === fn.name;
440
+ if (isContinuation || sameNamedCall) {
441
+ return lastIndex;
442
+ }
443
+ }
444
+ return toolCalls.size;
445
+ }
446
+ function routeFromHeaders(headers) {
447
+ const route = {};
448
+ for (const key of ["x-router-model", "x-selected-model", "endpoint-load-metrics"]) {
449
+ if (headers[key]) {
450
+ route[key] = headers[key];
451
+ }
452
+ }
453
+ return Object.keys(route).length ? route : undefined;
454
+ }
455
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/model/gateway.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAQ7G,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;YACrD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAqB,EAAE,OAAgC,EAAE,MAAoB;QACxF,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,mIAAmI,CAAC,CAAC;QACvJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YACnE,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,KAAiB,EACjB,OAAqB,EACrB,OAAgC,EAChC,MAAoB;QAEpB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;YAC/C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YACnD,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;YACvC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;YACvC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SAC3F,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,mBAAmB,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;SACP,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAAwC,CAAC;QAC7C,IAAI,UAA8B,CAAC;QACnC,IAAI,aAAiC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqC,CAAC;QAC/D,IAAI,iBAAqC,CAAC;QAC1C,IAAI,OAA+B,CAAC;QACpC,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,OAAO,IAAI,EAAE,CAAC;YACZ,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7C,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBACD,OAAO,GAAG,IAAkB,CAAC;gBAC7B,UAAU,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;gBAChE,aAAa,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;gBAC5E,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;gBAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,OAAqC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/F,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAA4C,CAAC;oBAClE,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrE,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,IAAI,IAAI,CAAC;wBAChB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;oBACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,UAAwC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvG,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;wBAC/B,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;wBACjF,iBAAiB,GAAG,KAAK,CAAC;oBAC5B,CAAC;oBACD,MAAM,kBAAkB,GAAG,KAAK,EAAE,aAAoD,CAAC;oBACvF,IAAI,kBAAkB,EAAE,CAAC;wBACvB,MAAM,KAAK,GAAG,kCAAkC,CAAC,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;wBACnG,iBAAiB,GAAG,KAAK,CAAC;oBAC5B,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAA8C,CAAC;oBACtE,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBAC5D,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;wBAC3B,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,UAAwC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrH,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;wBACxC,MAAM,KAAK,GAAG,yBAAyB,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC5G,iBAAiB,GAAG,KAAK,CAAC;oBAC5B,CAAC;oBACD,MAAM,mBAAmB,GAAG,OAAO,EAAE,aAAoD,CAAC;oBAC1F,IAAI,mBAAmB,EAAE,CAAC;wBACxB,MAAM,KAAK,GAAG,kCAAkC,CAAC,mBAAmB,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;wBAChI,iBAAiB,GAAG,KAAK,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,OAAO;YACL,OAAO;YACP,UAAU,EAAE,eAAe;YAC3B,KAAK;YACL,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC;YAC9G,WAAW,EAAE,UAAU;YACvB,KAAK,EAAE,aAAa,IAAI,OAAO,CAAC,KAAK;YACrC,KAAK,EAAE,gBAAgB,CAAC,aAAa,CAAC;YACtC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,cAAuB,EAAE,CAAC,CAAC,CAAC,OAAO;SACxG,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,KAAiB,EACjB,OAAqB,EACrB,OAAgC,EAChC,MAAoB;QAEpB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,CAAC;QACtF,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;YACnC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACvD,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACjG,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACvD,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,cAAc,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAChE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,OAAqC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChE,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,MAAM,EAAE;oBACxE,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAe;iBAC7F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO;YACP,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAC9D,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;YAClE,GAAG,EAAE,IAAkB;SACxB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,KAAiB,EACjB,OAAqB,EACrB,OAAgC,EAChC,MAAoB;QAEpB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,GAAG,IAAI,kBAAkB,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,mBAAmB,MAAM,CAAC,CAAC,CAAC,QAAQ,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5I,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBACvB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;iBAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjB,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACrD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,CAAC,CAAC;YACL,iBAAiB,EAAE;gBACjB,KAAK,EAAE,OAAO,CAAC,QAAQ;qBACpB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;qBAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aAC7D;SACF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAC9E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,UAAwC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,KAAK,GAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAA+C,EAAE,KAA+C,IAAI,EAAE,CAAC;QACtI,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,OAAO;YACL,OAAO;YACP,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;YACzC,KAAK;YACL,GAAG,EAAE,IAAkB;SACxB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,OAAqB,EAAE,QAAuB;QACjE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI;YAClC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YACpC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ;YAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;YACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,QAAQ,CAAC,KAAK;SACvB,CAAC;IACJ,CAAC;CACF;AAED,SAAS,WAAW,CAAC,KAAuB;IAC1C,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB;IACxC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAqB;IAC5C,MAAM,IAAI,GAAe;QACvB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC;KAC/C,CAAC;IACF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;aACtC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgC;IAC5D,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgB;IAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,MAAM,GAAG,KAAmB,CAAC;IACnC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAiB;IAC5C,OAAO,kBAAkB,CAAC,KAAK,CAAe,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,OAAO,CAAC,YAAY;oBACjC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;iBACrC;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;QACzD,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC/C,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,eAAe,CAAC,IAAoB;IAC3C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAA+B,EAAE,KAAa;IACnE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,GAAe,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAe,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ,KAAK,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe,EAAE,QAAkB;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC,mCAAmC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,SAAkC,EAClC,SAAiD,EACjD,SAA6B,EAC7B,UAA0C,EAAE;IAE5C,MAAM,KAAK,GAAG,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC1D,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,EAAE,GAAG,SAAS,CAAC,QAA+C,CAAC;IACrE,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,EAAE,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IACjG,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kCAAkC,CACzC,YAAqC,EACrC,SAAiD,EACjD,SAA6B,EAC7B,UAA0C,EAAE;IAE5C,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC1D,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,iBAAiB,KAAK,EAAE,CAAC;IACpD,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,YAAY,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACrH,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CACjC,KAA8B,EAC9B,SAAiD,EACjD,SAA6B;IAE7B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,QAA+C,CAAC;IACjE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;QAC7E,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B;IACvD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,EAAE,CAAC;QAClF,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { JsonObject } from "../types.js";
2
+ import { SessionStore } from "../session/store.js";
3
+ export type PlanStatus = "drafting" | "paused" | "approved" | "dropped";
4
+ export interface PlanRecord {
5
+ id: string;
6
+ objective: string;
7
+ status: PlanStatus;
8
+ body?: string;
9
+ summary?: string;
10
+ created_at: string;
11
+ updated_at: string;
12
+ }
13
+ export interface PlanState {
14
+ enabled: boolean;
15
+ plan: PlanRecord;
16
+ }
17
+ export interface PlanCreateInput {
18
+ objective: string;
19
+ body?: string;
20
+ }
21
+ export declare function readPlanState(store: SessionStore, sessionId: string): PlanState | undefined;
22
+ export declare function createPlanState(input: PlanCreateInput, now?: Date): PlanState;
23
+ export declare function writePlanState(store: SessionStore, sessionId: string, state: PlanState, runId?: string): PlanState;
24
+ export declare function planStateToJson(state: PlanState): JsonObject;
25
+ export declare function clonePlanState(state: PlanState): PlanState;
26
+ export declare function renderPlanModeSection(state: PlanState | undefined): string | undefined;
27
+ export declare function planApprovalBlockMessage(state: PlanState): string | undefined;
28
+ export declare function renderTrustedPlanObjective(objective: string): string;
@@ -0,0 +1,123 @@
1
+ import { randomId } from "../util/hash.js";
2
+ import { escapeXmlText } from "../goals/state.js";
3
+ import { truncateText } from "../util/limit.js";
4
+ const PLAN_PROMPT_BODY_LIMIT = 6000;
5
+ export function readPlanState(store, sessionId) {
6
+ const event = latestPlanEvent(store.listEvents(sessionId));
7
+ if (!event) {
8
+ return undefined;
9
+ }
10
+ return parsePlanState(event.data);
11
+ }
12
+ export function createPlanState(input, now = new Date()) {
13
+ const objective = input.objective.trim();
14
+ if (!objective) {
15
+ throw new Error("objective is required");
16
+ }
17
+ const timestamp = now.toISOString();
18
+ return {
19
+ enabled: true,
20
+ plan: {
21
+ id: randomId("plan"),
22
+ objective,
23
+ status: "drafting",
24
+ body: cleanOptionalString(input.body),
25
+ created_at: timestamp,
26
+ updated_at: timestamp,
27
+ },
28
+ };
29
+ }
30
+ export function writePlanState(store, sessionId, state, runId) {
31
+ const cloned = clonePlanState(state);
32
+ store.appendEvent({
33
+ session_id: sessionId,
34
+ run_id: runId,
35
+ type: "plan.updated",
36
+ data: planStateToJson(cloned),
37
+ });
38
+ return cloned;
39
+ }
40
+ export function planStateToJson(state) {
41
+ return {
42
+ enabled: state.enabled,
43
+ plan: state.plan,
44
+ };
45
+ }
46
+ export function clonePlanState(state) {
47
+ return {
48
+ enabled: state.enabled,
49
+ plan: { ...state.plan },
50
+ };
51
+ }
52
+ export function renderPlanModeSection(state) {
53
+ if (!state?.enabled || state.plan.status !== "drafting") {
54
+ return undefined;
55
+ }
56
+ const plan = state.plan;
57
+ return [
58
+ "Plan mode is active for this session.",
59
+ renderTrustedPlanObjective(plan.objective),
60
+ "status: drafting",
61
+ "An active draft plan already exists; use plan get/update for it. Do not call plan create again unless no active plan exists.",
62
+ "Planning is governed by instructions, not runtime tool blocking: prefer inspection and analysis while drafting.",
63
+ "Do not edit files, change configuration, run destructive commands, start long-running mutating processes, or commit changes while drafting unless the user explicitly asks for that specific action before approval.",
64
+ "If a command or tool may mutate state, explain why it is needed first; otherwise gather evidence with low-risk inspection.",
65
+ "Keep the plan self-contained: requirements, decisions, files to modify, and verification.",
66
+ "Ask clarifying questions early when requirements, constraints, risk tolerance, scope, tradeoffs, or execution preferences are unclear. For non-trivial plans, prefer at least one concise clarify question unless the user already gave exact constraints.",
67
+ "Before asking for approval, make sure known open questions are resolved; if any remain, ask clarify instead of finalizing.",
68
+ "Use the plan tool with op=update as findings change. When the proposed plan is ready, call plan approve immediately to ask the user to implement it or type revision feedback before any execution tools run.",
69
+ "If approval is declined with feedback, revise the plan with op=update and ask for approval again.",
70
+ plan.summary ? `Current summary: ${escapeXmlText(plan.summary)}` : undefined,
71
+ plan.body?.trim() ? `Current plan:\n${escapeXmlText(truncateText(plan.body.trim(), PLAN_PROMPT_BODY_LIMIT).text)}` : "Current plan: not written yet",
72
+ ]
73
+ .filter((line) => Boolean(line))
74
+ .join("\n");
75
+ }
76
+ export function planApprovalBlockMessage(state) {
77
+ if (!state.plan.body?.trim()) {
78
+ return "Plan approval requires a written plan body. Continue planning, update the plan body, then approve.";
79
+ }
80
+ return undefined;
81
+ }
82
+ export function renderTrustedPlanObjective(objective) {
83
+ return `<objective>\n${escapeXmlText(objective)}\n</objective>`;
84
+ }
85
+ function latestPlanEvent(events) {
86
+ return events.filter((event) => event.type === "plan.updated").at(-1);
87
+ }
88
+ function parsePlanState(data) {
89
+ const plan = data.plan;
90
+ if (!plan || typeof plan !== "object" || Array.isArray(plan)) {
91
+ return undefined;
92
+ }
93
+ const candidate = plan;
94
+ const id = typeof candidate.id === "string" ? candidate.id : "";
95
+ const objective = typeof candidate.objective === "string" ? candidate.objective : "";
96
+ const status = parsePlanStatus(candidate.status);
97
+ if (!id || !objective || !status) {
98
+ return undefined;
99
+ }
100
+ return {
101
+ enabled: data.enabled === true,
102
+ plan: {
103
+ id,
104
+ objective,
105
+ status,
106
+ body: cleanOptionalString(candidate.body),
107
+ summary: cleanOptionalString(candidate.summary),
108
+ created_at: typeof candidate.created_at === "string" ? candidate.created_at : "",
109
+ updated_at: typeof candidate.updated_at === "string" ? candidate.updated_at : "",
110
+ },
111
+ };
112
+ }
113
+ function parsePlanStatus(value) {
114
+ return value === "drafting" || value === "paused" || value === "approved" || value === "dropped" ? value : undefined;
115
+ }
116
+ function cleanOptionalString(value) {
117
+ if (typeof value !== "string") {
118
+ return undefined;
119
+ }
120
+ const trimmed = value.trim();
121
+ return trimmed ? trimmed : undefined;
122
+ }
123
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/plans/state.ts"],"names":[],"mappings":"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"}