@stratusagent/providers 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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Stratus Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # @stratusagent/providers
2
+
3
+ Reusable provider-side utilities for Stratus Agent.
4
+
5
+ This package stays outside `@stratusagent/core` and focuses on small helpers for building, testing, and composing provider implementations without pulling vendor SDKs into the kernel.
6
+
7
+ ## Included
8
+
9
+ - response builders and normalization helpers
10
+ - a lightweight provider registry
11
+ - deterministic static providers for local development
12
+ - deterministic scripted providers for tests and scenario playback
13
+ - an OpenAI-compatible chat-completions adapter for real provider wiring
14
+
15
+ ## Example
16
+
17
+ ```ts
18
+ import {
19
+ createOpenAICompatibleProvider,
20
+ createProviderRegistry,
21
+ defineScriptedProvider,
22
+ defineStaticProvider,
23
+ } from '@stratusagent/providers';
24
+
25
+ const fallback = defineStaticProvider({
26
+ name: 'fallback',
27
+ response: 'Hello from a fixture provider.',
28
+ });
29
+
30
+ const scripted = defineScriptedProvider({
31
+ name: 'scripted',
32
+ steps: [
33
+ 'Need tool output',
34
+ [
35
+ {
36
+ type: 'tool-call',
37
+ call: { id: 'call-1', toolName: 'echo', input: { value: 'hi' } },
38
+ },
39
+ 'Done',
40
+ ],
41
+ ],
42
+ });
43
+
44
+ const realProvider = createOpenAICompatibleProvider({
45
+ model: 'gpt-4.1-mini',
46
+ apiKey: process.env.OPENAI_API_KEY ?? '',
47
+ });
48
+
49
+ const registry = createProviderRegistry([fallback, scripted, realProvider]);
50
+ const provider = registry.require('scripted');
51
+ ```
@@ -0,0 +1,59 @@
1
+ import type { ModelProvider, ProviderPart, ProviderRequest, ProviderResponse, ToolCall } from '@stratusagent/core';
2
+ export interface ProviderResponseBuilder {
3
+ addText(text: string): ProviderResponseBuilder;
4
+ addToolCall(call: ToolCall): ProviderResponseBuilder;
5
+ addPart(part: ProviderPart): ProviderResponseBuilder;
6
+ done(): ProviderResponse;
7
+ }
8
+ export type ProviderResponseInput = string | ProviderPart | ProviderResponse | Iterable<string | ProviderPart>;
9
+ export type ProviderResolver = (request: ProviderRequest) => Promise<ProviderResponse>;
10
+ export interface ProviderAdapterDefinition {
11
+ name: string;
12
+ generate(request: ProviderRequest): Promise<ProviderResponse>;
13
+ }
14
+ export interface ProviderRegistry {
15
+ register(provider: ModelProvider): ModelProvider;
16
+ registerMany(providers: Iterable<ModelProvider>): ProviderRegistry;
17
+ get(name: string): ModelProvider | undefined;
18
+ require(name: string): ModelProvider;
19
+ has(name: string): boolean;
20
+ list(): ModelProvider[];
21
+ names(): string[];
22
+ }
23
+ export type StaticProviderResponseFactory = ProviderResponseInput | ((request: ProviderRequest) => ProviderResponseInput | Promise<ProviderResponseInput>);
24
+ export interface StaticProviderDefinition {
25
+ name: string;
26
+ response: StaticProviderResponseFactory;
27
+ }
28
+ export type ScriptedProviderStep = ProviderResponseInput | ((context: {
29
+ request: ProviderRequest;
30
+ callCount: number;
31
+ stepIndex: number;
32
+ }) => ProviderResponseInput | Promise<ProviderResponseInput>);
33
+ export interface ScriptedProviderDefinition {
34
+ name: string;
35
+ steps: readonly ScriptedProviderStep[];
36
+ repeatLast?: boolean;
37
+ }
38
+ export interface OpenAICompatibleProviderConfig {
39
+ model: string;
40
+ apiKey: string;
41
+ baseUrl?: string;
42
+ name?: string;
43
+ systemPrompt?: string;
44
+ headers?: Record<string, string>;
45
+ fetch?: typeof fetch;
46
+ }
47
+ export declare const textPart: (text: string) => ProviderPart;
48
+ export declare const toolCallPart: (call: ToolCall) => ProviderPart;
49
+ export declare const providerResponse: (...parts: ProviderPart[]) => ProviderResponse;
50
+ export declare const normalizeProviderParts: (parts: Iterable<ProviderPart>) => ProviderPart[];
51
+ export declare const normalizeProviderResponse: (input: ProviderResponseInput) => ProviderResponse;
52
+ export declare const createProviderResponseBuilder: (initialParts?: Iterable<ProviderPart>) => ProviderResponseBuilder;
53
+ export declare const defineProvider: ({ name, generate }: ProviderAdapterDefinition) => ModelProvider;
54
+ export declare const createProviderRegistry: (providers?: Iterable<ModelProvider>) => ProviderRegistry;
55
+ export declare const defineStaticProvider: ({ name, response }: StaticProviderDefinition) => ModelProvider;
56
+ export declare const defineScriptedProvider: ({ name, steps, repeatLast, }: ScriptedProviderDefinition) => ModelProvider;
57
+ export declare const createOpenAICompatibleProvider: ({ model, apiKey, baseUrl, name, systemPrompt, headers, fetch: fetchImpl, }: OpenAICompatibleProviderConfig) => ModelProvider;
58
+ export declare const sanitizeOpenAICompatibleToolName: (name: string) => string;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,350 @@
1
+ const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';
2
+ export const textPart = (text) => ({ type: 'text', text });
3
+ export const toolCallPart = (call) => ({
4
+ type: 'tool-call',
5
+ call: {
6
+ id: call.id,
7
+ toolName: call.toolName,
8
+ input: { ...call.input },
9
+ },
10
+ });
11
+ export const providerResponse = (...parts) => ({
12
+ parts: normalizeProviderParts(parts),
13
+ });
14
+ export const normalizeProviderParts = (parts) => {
15
+ const normalized = [];
16
+ for (const part of parts) {
17
+ if (part.type === 'text') {
18
+ if (part.text.length === 0) {
19
+ continue;
20
+ }
21
+ const previous = normalized.at(-1);
22
+ if (previous?.type === 'text') {
23
+ previous.text += part.text;
24
+ continue;
25
+ }
26
+ normalized.push(textPart(part.text));
27
+ continue;
28
+ }
29
+ normalized.push(toolCallPart(part.call));
30
+ }
31
+ return normalized;
32
+ };
33
+ export const normalizeProviderResponse = (input) => {
34
+ if (typeof input === 'string') {
35
+ return providerResponse(textPart(input));
36
+ }
37
+ if (isProviderPart(input)) {
38
+ return providerResponse(input);
39
+ }
40
+ if (isProviderResponse(input)) {
41
+ return providerResponse(...input.parts);
42
+ }
43
+ const parts = [];
44
+ for (const value of input) {
45
+ parts.push(typeof value === 'string' ? textPart(value) : value);
46
+ }
47
+ return providerResponse(...parts);
48
+ };
49
+ export const createProviderResponseBuilder = (initialParts = []) => {
50
+ const parts = normalizeProviderParts(initialParts);
51
+ return {
52
+ addText(text) {
53
+ if (text.length === 0) {
54
+ return this;
55
+ }
56
+ const previous = parts.at(-1);
57
+ if (previous?.type === 'text') {
58
+ previous.text += text;
59
+ }
60
+ else {
61
+ parts.push(textPart(text));
62
+ }
63
+ return this;
64
+ },
65
+ addToolCall(call) {
66
+ parts.push(toolCallPart(call));
67
+ return this;
68
+ },
69
+ addPart(part) {
70
+ if (part.type === 'text') {
71
+ return this.addText(part.text);
72
+ }
73
+ return this.addToolCall(part.call);
74
+ },
75
+ done() {
76
+ return providerResponse(...parts);
77
+ },
78
+ };
79
+ };
80
+ export const defineProvider = ({ name, generate }) => ({
81
+ name,
82
+ generate,
83
+ });
84
+ export const createProviderRegistry = (providers = []) => {
85
+ const entries = new Map();
86
+ const registry = {
87
+ register(provider) {
88
+ entries.set(provider.name, provider);
89
+ return provider;
90
+ },
91
+ registerMany(nextProviders) {
92
+ for (const provider of nextProviders) {
93
+ registry.register(provider);
94
+ }
95
+ return registry;
96
+ },
97
+ get(name) {
98
+ return entries.get(name);
99
+ },
100
+ require(name) {
101
+ const provider = entries.get(name);
102
+ if (!provider) {
103
+ throw new Error(`Provider not found: ${name}`);
104
+ }
105
+ return provider;
106
+ },
107
+ has(name) {
108
+ return entries.has(name);
109
+ },
110
+ list() {
111
+ return [...entries.values()];
112
+ },
113
+ names() {
114
+ return [...entries.keys()];
115
+ },
116
+ };
117
+ return registry.registerMany(providers);
118
+ };
119
+ export const defineStaticProvider = ({ name, response }) => defineProvider({
120
+ name,
121
+ async generate(request) {
122
+ const resolved = typeof response === 'function' ? await response(request) : response;
123
+ return normalizeProviderResponse(resolved);
124
+ },
125
+ });
126
+ export const defineScriptedProvider = ({ name, steps, repeatLast = true, }) => {
127
+ if (steps.length === 0) {
128
+ throw new Error(`Scripted provider requires at least one step: ${name}`);
129
+ }
130
+ let callCount = 0;
131
+ return defineProvider({
132
+ name,
133
+ async generate(request) {
134
+ const stepIndex = callCount < steps.length ? callCount : steps.length - 1;
135
+ const step = steps[stepIndex];
136
+ if (!step) {
137
+ throw new Error(`Scripted provider step not found: ${name}#${stepIndex}`);
138
+ }
139
+ if (callCount >= steps.length && !repeatLast) {
140
+ throw new Error(`Scripted provider exhausted: ${name}`);
141
+ }
142
+ callCount += 1;
143
+ const resolved = typeof step === 'function'
144
+ ? await step({ request, callCount, stepIndex })
145
+ : step;
146
+ return normalizeProviderResponse(resolved);
147
+ },
148
+ });
149
+ };
150
+ export const createOpenAICompatibleProvider = ({ model, apiKey, baseUrl = DEFAULT_OPENAI_BASE_URL, name = 'openai', systemPrompt, headers = {}, fetch: fetchImpl = globalThis.fetch, }) => {
151
+ if (typeof fetchImpl !== 'function') {
152
+ throw new Error('Global fetch is unavailable for the OpenAI-compatible provider.');
153
+ }
154
+ const normalizedBaseUrl = baseUrl.replace(/\/+$/, '');
155
+ return defineProvider({
156
+ name,
157
+ async generate(request) {
158
+ const toolNames = createOpenAICompatibleToolNameMapping(request.tools);
159
+ const tools = createOpenAICompatibleTools(request.tools, toolNames);
160
+ const response = await fetchImpl(`${normalizedBaseUrl}/chat/completions`, {
161
+ method: 'POST',
162
+ headers: {
163
+ 'content-type': 'application/json',
164
+ authorization: `Bearer ${apiKey}`,
165
+ ...headers,
166
+ },
167
+ body: JSON.stringify({
168
+ model,
169
+ messages: createOpenAICompatibleMessages(request, systemPrompt, toolNames),
170
+ ...(tools.length > 0 ? { tools } : {}),
171
+ }),
172
+ });
173
+ const payload = await parseOpenAICompatibleResponse(response);
174
+ if (!response.ok) {
175
+ throw new Error(payload.error?.message ?? payload.rawText ?? `Provider request failed with status ${response.status}`);
176
+ }
177
+ const builder = createProviderResponseBuilder();
178
+ const text = extractOpenAICompatibleText(payload);
179
+ if (text.length > 0) {
180
+ builder.addText(text);
181
+ }
182
+ const toolCalls = extractOpenAICompatibleToolCalls(payload, toolNames);
183
+ for (const call of toolCalls) {
184
+ builder.addToolCall(call);
185
+ }
186
+ const result = builder.done();
187
+ if (result.parts.length === 0) {
188
+ throw new Error('Provider returned an empty response.');
189
+ }
190
+ return result;
191
+ },
192
+ });
193
+ };
194
+ // OpenAI only accepts function names matching ^[a-zA-Z0-9_-]{1,64}$, so
195
+ // registry names like "demo.echo" must be sanitized for the wire and
196
+ // translated back when the model calls them.
197
+ export const sanitizeOpenAICompatibleToolName = (name) => {
198
+ const sanitized = name.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
199
+ return sanitized.length > 0 ? sanitized : 'tool';
200
+ };
201
+ const createOpenAICompatibleToolNameMapping = (tools) => {
202
+ const toWire = new Map();
203
+ const fromWire = new Map();
204
+ for (const tool of tools ?? []) {
205
+ if (toWire.has(tool.name)) {
206
+ continue;
207
+ }
208
+ const base = sanitizeOpenAICompatibleToolName(tool.name);
209
+ let wireName = base;
210
+ for (let suffix = 2; fromWire.has(wireName); suffix += 1) {
211
+ wireName = `${base.slice(0, 60)}_${suffix}`;
212
+ }
213
+ toWire.set(tool.name, wireName);
214
+ fromWire.set(wireName, tool.name);
215
+ }
216
+ return { toWire, fromWire };
217
+ };
218
+ const toWireToolName = (name, mapping) => mapping.toWire.get(name) ?? sanitizeOpenAICompatibleToolName(name);
219
+ const createOpenAICompatibleTools = (tools, toolNames) => (tools ?? []).map((tool) => ({
220
+ type: 'function',
221
+ function: {
222
+ name: toWireToolName(tool.name, toolNames),
223
+ ...(tool.description ? { description: tool.description } : {}),
224
+ parameters: tool.parameters ?? { type: 'object', properties: {} },
225
+ },
226
+ }));
227
+ const extractOpenAICompatibleToolCalls = (payload, toolNames) => {
228
+ const toolCalls = payload.choices?.[0]?.message?.tool_calls ?? [];
229
+ const calls = [];
230
+ for (const [index, toolCall] of toolCalls.entries()) {
231
+ const wireName = toolCall.function?.name;
232
+ if (!wireName) {
233
+ continue;
234
+ }
235
+ const name = toolNames.fromWire.get(wireName) ?? wireName;
236
+ const rawArguments = toolCall.function?.arguments ?? '{}';
237
+ let input;
238
+ try {
239
+ const parsed = rawArguments.trim().length === 0 ? {} : JSON.parse(rawArguments);
240
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
241
+ throw new Error('arguments must be a JSON object');
242
+ }
243
+ input = parsed;
244
+ }
245
+ catch (error) {
246
+ throw new Error(`Provider returned invalid arguments for tool ${name}: ${error instanceof Error ? error.message : String(error)}`);
247
+ }
248
+ calls.push({
249
+ id: toolCall.id ?? `tool-call-${index + 1}`,
250
+ toolName: name,
251
+ input,
252
+ });
253
+ }
254
+ return calls;
255
+ };
256
+ const parseOpenAICompatibleResponse = async (response) => {
257
+ const rawText = await response.text();
258
+ if (rawText.length === 0) {
259
+ return {};
260
+ }
261
+ try {
262
+ return JSON.parse(rawText);
263
+ }
264
+ catch {
265
+ return { rawText };
266
+ }
267
+ };
268
+ const createOpenAICompatibleMessages = (request, systemPrompt, toolNames) => {
269
+ const messages = [];
270
+ if (systemPrompt) {
271
+ messages.push({ role: 'system', content: systemPrompt });
272
+ }
273
+ // The agent's own persona travels with the session and must reach the
274
+ // model — this is what makes a delegated specialist act like themselves.
275
+ const instructions = request.session.agent.instructions;
276
+ if (instructions && instructions.length > 0) {
277
+ messages.push({
278
+ role: 'system',
279
+ content: `You are ${request.session.agent.name}. ${instructions}`,
280
+ });
281
+ }
282
+ if (request.memory && request.memory.length > 0) {
283
+ const facts = request.memory.map((entry) => `- ${entry.content}`).join('\n');
284
+ messages.push({
285
+ role: 'system',
286
+ content: `Things you remember from previous conversations (your own long-term memory):\n${facts}`,
287
+ });
288
+ }
289
+ for (const message of request.session.messages) {
290
+ if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {
291
+ messages.push({
292
+ role: 'assistant',
293
+ content: message.content.length > 0 ? message.content : null,
294
+ tool_calls: message.toolCalls.map((call) => ({
295
+ id: call.id,
296
+ type: 'function',
297
+ function: {
298
+ name: toWireToolName(call.toolName, toolNames),
299
+ arguments: JSON.stringify(call.input),
300
+ },
301
+ })),
302
+ });
303
+ continue;
304
+ }
305
+ if (message.role === 'tool') {
306
+ const result = message.toolResult;
307
+ messages.push({
308
+ role: 'tool',
309
+ content: result
310
+ ? JSON.stringify(result.ok ? result.output : { error: result.error ?? 'Tool failed' })
311
+ : message.content,
312
+ ...(result ? { tool_call_id: result.callId } : {}),
313
+ });
314
+ continue;
315
+ }
316
+ messages.push({
317
+ role: message.role,
318
+ content: message.content,
319
+ ...(message.name ? { name: message.name } : {}),
320
+ });
321
+ }
322
+ return messages;
323
+ };
324
+ const extractOpenAICompatibleText = (payload) => {
325
+ const message = payload.choices?.[0]?.message;
326
+ const content = message?.content;
327
+ if (typeof content === 'string') {
328
+ return content;
329
+ }
330
+ if (Array.isArray(content)) {
331
+ return content
332
+ .map((part) => (part?.type === 'text' && typeof part.text === 'string' ? part.text : ''))
333
+ .join('');
334
+ }
335
+ return '';
336
+ };
337
+ const isProviderPart = (value) => {
338
+ if (typeof value !== 'object' || value === null) {
339
+ return false;
340
+ }
341
+ return ('type' in value &&
342
+ (value.type === 'text' || value.type === 'tool-call'));
343
+ };
344
+ const isProviderResponse = (value) => {
345
+ if (typeof value !== 'object' || value === null) {
346
+ return false;
347
+ }
348
+ return 'parts' in value && Array.isArray(value.parts);
349
+ };
350
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkHA,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAc,EAAgB,EAAE,CAAC,CAAC;IAC7D,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE;QACJ,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;KACzB;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAqB,EAAoB,EAAE,CAAC,CAAC;IAC/E,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA6B,EAAkB,EAAE;IACtF,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAA4B,EAAoB,EAAE;IAC1F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,eAAuC,EAAE,EAChB,EAAE;IAC3B,MAAM,KAAK,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAEnD,OAAO;QACL,OAAO,CAAC,IAAI;YACV,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,WAAW,CAAC,IAAI;YACd,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,IAAI;YACV,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI;YACF,OAAO,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAA6B,EAAiB,EAAE,CAAC,CAAC;IAC/F,IAAI;IACJ,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,YAAqC,EAAE,EACrB,EAAE;IACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,MAAM,QAAQ,GAAqB;QACjC,QAAQ,CAAC,QAAQ;YACf,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,YAAY,CAAC,aAAa;YACxB,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;gBACrC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,IAAI;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI;YACV,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,IAAI;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI;YACF,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK;YACH,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAA4B,EAAiB,EAAE,CAClG,cAAc,CAAC;IACb,IAAI;IACJ,KAAK,CAAC,QAAQ,CAAC,OAAO;QACpB,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtE,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,IAAI,EACJ,KAAK,EACL,UAAU,GAAG,IAAI,GACU,EAAiB,EAAE;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,cAAc,CAAC;QACpB,IAAI;QACJ,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,SAAS,IAAI,CAAC,CAAC;YAEf,MAAM,QAAQ,GACZ,OAAO,IAAI,KAAK,UAAU;gBACxB,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;gBAC/C,CAAC,CAAC,IAAI,CAAC;YAEX,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC7C,KAAK,EACL,MAAM,EACN,OAAO,GAAG,uBAAuB,EACjC,IAAI,GAAG,QAAQ,EACf,YAAY,EACZ,OAAO,GAAG,EAAE,EACZ,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,KAAK,GACJ,EAAiB,EAAE;IAClD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtD,OAAO,cAAc,CAAC;QACpB,IAAI;QACJ,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,SAAS,GAAG,qCAAqC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEpE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,iBAAiB,mBAAmB,EAAE;gBACxE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;oBACjC,GAAG,OAAO;iBACX;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK;oBACL,QAAQ,EAAE,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC;oBAC1E,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvC,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,QAAQ,CAAC,CAAC;YAE9D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACzH,CAAC;YAED,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;YAEhD,MAAM,IAAI,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAED,MAAM,SAAS,GAAG,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACvE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAOF,wEAAwE;AACxE,qEAAqE;AACrE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,IAAY,EAAU,EAAE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,qCAAqC,GAAG,CAC5C,KAAmC,EACF,EAAE;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACzD,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,OAAwC,EAAU,EAAE,CACxF,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gCAAgC,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,2BAA2B,GAAG,CAClC,KAAmC,EACnC,SAA0C,EACR,EAAE,CACpC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAClE;CACF,CAAC,CAAC,CAAC;AAEN,MAAM,gCAAgC,GAAG,CACvC,OAAiC,EACjC,SAA0C,EAC9B,EAAE;IACd,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;IAClE,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC;QAC1D,IAAI,KAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACzF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,GAAG,MAAoB,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gDAAgD,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClH,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,aAAa,KAAK,GAAG,CAAC,EAAE;YAC3C,QAAQ,EAAE,IAAI;YACd,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,KAAK,EAAE,QAAkB,EAAqC,EAAE;IACpG,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACrC,OAAwB,EACxB,YAAgC,EAChC,SAA0C,EACf,EAAE;IAC7B,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;IACxD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iFAAiF,KAAK,EAAE;SAClG,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBAC5D,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE;wBACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;wBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;qBACtC;iBACF,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;oBACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;oBACtF,CAAC,CAAC,OAAO,CAAC,OAAO;gBACnB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAiC,EAAU,EAAE;IAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAC9C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAEjC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACxF,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAA4B,EAAyB,EAAE;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,MAAM,IAAI,KAAK;QACf,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CACtD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAA4B,EAA6B,EAAE;IACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@stratusagent/providers",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "dependencies": {
17
+ "@stratusagent/core": "0.1.0"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5.9.3"
21
+ },
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/stratuslabs/agent.git",
26
+ "directory": "packages/providers"
27
+ },
28
+ "description": "Provider helpers for Stratus Agent, including an OpenAI-compatible adapter with tool calling and memory rendering",
29
+ "keywords": [
30
+ "stratus",
31
+ "agent",
32
+ "ai",
33
+ "llm"
34
+ ],
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -b",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "node --test --experimental-strip-types"
42
+ }
43
+ }