@undefineds.co/linx 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +91 -0
  2. package/dist/index.js +578 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lib/account-api.js +100 -0
  5. package/dist/lib/account-api.js.map +1 -0
  6. package/dist/lib/account-session.js +30 -0
  7. package/dist/lib/account-session.js.map +1 -0
  8. package/dist/lib/ai-command.js +411 -0
  9. package/dist/lib/ai-command.js.map +1 -0
  10. package/dist/lib/chat-api.js +122 -0
  11. package/dist/lib/chat-api.js.map +1 -0
  12. package/dist/lib/codex-plugin/bridge.js +109 -0
  13. package/dist/lib/codex-plugin/bridge.js.map +1 -0
  14. package/dist/lib/codex-plugin/codex-native-proxy.js +358 -0
  15. package/dist/lib/codex-plugin/codex-native-proxy.js.map +1 -0
  16. package/dist/lib/codex-plugin/index.js +4 -0
  17. package/dist/lib/codex-plugin/index.js.map +1 -0
  18. package/dist/lib/codex-plugin/runner.js +38 -0
  19. package/dist/lib/codex-plugin/runner.js.map +1 -0
  20. package/dist/lib/credentials-store.js +74 -0
  21. package/dist/lib/credentials-store.js.map +1 -0
  22. package/dist/lib/default-model.js +8 -0
  23. package/dist/lib/default-model.js.map +1 -0
  24. package/dist/lib/login-command.js +51 -0
  25. package/dist/lib/login-command.js.map +1 -0
  26. package/dist/lib/models.js +6 -0
  27. package/dist/lib/models.js.map +1 -0
  28. package/dist/lib/oidc-auth.js +451 -0
  29. package/dist/lib/oidc-auth.js.map +1 -0
  30. package/dist/lib/oidc-session-storage.js +37 -0
  31. package/dist/lib/oidc-session-storage.js.map +1 -0
  32. package/dist/lib/pi-adapter/auth.js +38 -0
  33. package/dist/lib/pi-adapter/auth.js.map +1 -0
  34. package/dist/lib/pi-adapter/branding.js +239 -0
  35. package/dist/lib/pi-adapter/branding.js.map +1 -0
  36. package/dist/lib/pi-adapter/index.js +4 -0
  37. package/dist/lib/pi-adapter/index.js.map +1 -0
  38. package/dist/lib/pi-adapter/interactive.js +63 -0
  39. package/dist/lib/pi-adapter/interactive.js.map +1 -0
  40. package/dist/lib/pi-adapter/runtime.js +271 -0
  41. package/dist/lib/pi-adapter/runtime.js.map +1 -0
  42. package/dist/lib/pi-adapter/stream.js +314 -0
  43. package/dist/lib/pi-adapter/stream.js.map +1 -0
  44. package/dist/lib/pi-adapter/theme.js +84 -0
  45. package/dist/lib/pi-adapter/theme.js.map +1 -0
  46. package/dist/lib/pod-chat-store.js +200 -0
  47. package/dist/lib/pod-chat-store.js.map +1 -0
  48. package/dist/lib/profile-identity.js +116 -0
  49. package/dist/lib/profile-identity.js.map +1 -0
  50. package/dist/lib/prompt.js +82 -0
  51. package/dist/lib/prompt.js.map +1 -0
  52. package/dist/lib/runtime-target.js +12 -0
  53. package/dist/lib/runtime-target.js.map +1 -0
  54. package/dist/lib/solid-auth.js +55 -0
  55. package/dist/lib/solid-auth.js.map +1 -0
  56. package/dist/lib/thread-utils.js +12 -0
  57. package/dist/lib/thread-utils.js.map +1 -0
  58. package/dist/lib/watch/archive.js +110 -0
  59. package/dist/lib/watch/archive.js.map +1 -0
  60. package/dist/lib/watch/auth.js +56 -0
  61. package/dist/lib/watch/auth.js.map +1 -0
  62. package/dist/lib/watch/codex-composer.js +219 -0
  63. package/dist/lib/watch/codex-composer.js.map +1 -0
  64. package/dist/lib/watch/codex-footer.js +88 -0
  65. package/dist/lib/watch/codex-footer.js.map +1 -0
  66. package/dist/lib/watch/codex-overlay.js +154 -0
  67. package/dist/lib/watch/codex-overlay.js.map +1 -0
  68. package/dist/lib/watch/codex-request-form.js +341 -0
  69. package/dist/lib/watch/codex-request-form.js.map +1 -0
  70. package/dist/lib/watch/codex-request-input.js +187 -0
  71. package/dist/lib/watch/codex-request-input.js.map +1 -0
  72. package/dist/lib/watch/display.js +1514 -0
  73. package/dist/lib/watch/display.js.map +1 -0
  74. package/dist/lib/watch/format.js +161 -0
  75. package/dist/lib/watch/format.js.map +1 -0
  76. package/dist/lib/watch/hooks/claude.js +12 -0
  77. package/dist/lib/watch/hooks/claude.js.map +1 -0
  78. package/dist/lib/watch/hooks/codebuddy.js +18 -0
  79. package/dist/lib/watch/hooks/codebuddy.js.map +1 -0
  80. package/dist/lib/watch/hooks/codex.js +13 -0
  81. package/dist/lib/watch/hooks/codex.js.map +1 -0
  82. package/dist/lib/watch/hooks/index.js +24 -0
  83. package/dist/lib/watch/hooks/index.js.map +1 -0
  84. package/dist/lib/watch/hooks/shared.js +19 -0
  85. package/dist/lib/watch/hooks/shared.js.map +1 -0
  86. package/dist/lib/watch/index.js +10 -0
  87. package/dist/lib/watch/index.js.map +1 -0
  88. package/dist/lib/watch/pod-ai.js +168 -0
  89. package/dist/lib/watch/pod-ai.js.map +1 -0
  90. package/dist/lib/watch/pod-approval.js +578 -0
  91. package/dist/lib/watch/pod-approval.js.map +1 -0
  92. package/dist/lib/watch/pod-persistence.js +226 -0
  93. package/dist/lib/watch/pod-persistence.js.map +1 -0
  94. package/dist/lib/watch/runner.js +1124 -0
  95. package/dist/lib/watch/runner.js.map +1 -0
  96. package/dist/lib/watch/types.js +2 -0
  97. package/dist/lib/watch/types.js.map +1 -0
  98. package/dist/watch-cli.js +142 -0
  99. package/dist/watch-cli.js.map +1 -0
  100. package/package.json +38 -0
@@ -0,0 +1,271 @@
1
+ import { createPiAgentStreamAdapter } from './stream.js';
2
+ import { resolveLinxPiCloudOAuthCredential } from './auth.js';
3
+ import { loginWithBrowserConsent } from '../oidc-auth.js';
4
+ import { DEFAULT_LINX_CLOUD_MODEL_ID, resolvePreferredLinxCloudModelId } from '../default-model.js';
5
+ import { ensureLinxPiTheme } from './theme.js';
6
+ import { AuthStorage, ModelRegistry, SettingsManager, createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, createCodingTools, } from '@mariozechner/pi-coding-agent';
7
+ const UNDEFINEDS_PROVIDER_ID = 'undefineds';
8
+ const UNDEFINEDS_PROVIDER_LABEL = 'undefineds(cloud)';
9
+ const UNDEFINEDS_PROVIDER_API = 'openai-completions';
10
+ const UNDEFINEDS_SESSION_ID = 'undefineds_pi_frontend';
11
+ const UNDEFINEDS_AUTH_BRIDGE_ID = 'undefineds-cloud-oauth-bridge';
12
+ export function createPiRuntimeAdapter(dependencies, options = {}) {
13
+ const backendMode = options.backend ?? 'cloud';
14
+ const cwd = options.cwd ?? process.cwd();
15
+ const requestedModel = options.model?.trim() || undefined;
16
+ let activeModelId = requestedModel ?? DEFAULT_LINX_CLOUD_MODEL_ID;
17
+ const baseUrl = options.providerConfig?.baseUrl ?? 'https://api.undefineds.co/v1';
18
+ const providerModels = [buildProviderModel({
19
+ id: activeModelId,
20
+ contextWindow: 1_000_000,
21
+ })];
22
+ const proxy = backendMode === 'native'
23
+ ? dependencies.createNativeProxy?.({
24
+ cwd,
25
+ model: activeModelId,
26
+ listenPort: options.port,
27
+ })
28
+ : null;
29
+ if (backendMode === 'native' && !proxy) {
30
+ throw new Error('Native Pi runtime backend requires createNativeProxy');
31
+ }
32
+ if (backendMode === 'cloud' && !options.providerConfig?.oauth && !dependencies.createRemoteCompletion) {
33
+ throw new Error('Cloud Pi runtime backend requires createRemoteCompletion');
34
+ }
35
+ const streamAdapter = createPiAgentStreamAdapter({
36
+ sessionId: proxy?.record.id ?? UNDEFINEDS_SESSION_ID,
37
+ cwd: proxy?.record.cwd ?? cwd,
38
+ model: proxy?.record.model ?? activeModelId,
39
+ backend: proxy
40
+ ? {
41
+ sendTurn(input) {
42
+ return proxy.sendTurn(input);
43
+ },
44
+ subscribe(listener) {
45
+ return proxy.subscribe(listener);
46
+ },
47
+ }
48
+ : undefined,
49
+ completionBackend: !proxy && dependencies.createRemoteCompletion
50
+ ? {
51
+ async complete(input) {
52
+ const apiKey = input.apiKey && input.apiKey !== 'linx-runtime-managed-auth'
53
+ ? input.apiKey
54
+ : await resolveLinxPiCloudApiKey({
55
+ issuerUrl: options.providerConfig?.issuerUrl,
56
+ explicitApiKey: options.providerConfig?.apiKey,
57
+ });
58
+ return dependencies.createRemoteCompletion({
59
+ runtimeUrl: baseUrl,
60
+ apiKey,
61
+ model: input.model,
62
+ messages: withSystemPrompt(input.systemPrompt, input.messages),
63
+ tools: input.tools,
64
+ });
65
+ },
66
+ }
67
+ : undefined,
68
+ });
69
+ return {
70
+ remoteUrl: proxy?.remoteUrl ?? baseUrl,
71
+ sessionId: proxy?.record.id ?? UNDEFINEDS_SESSION_ID,
72
+ cwd: proxy?.record.cwd ?? cwd,
73
+ model: proxy?.record.model ?? activeModelId,
74
+ backend: proxy?.record.backend ?? UNDEFINEDS_PROVIDER_ID,
75
+ streamAdapter,
76
+ createRuntime: async (context) => {
77
+ const authStorage = AuthStorage.inMemory();
78
+ const modelRegistry = ModelRegistry.inMemory(authStorage);
79
+ const originalIsUsingOAuth = modelRegistry.isUsingOAuth.bind(modelRegistry);
80
+ modelRegistry.isUsingOAuth = (model) => (model.provider === UNDEFINEDS_PROVIDER_ID ? false : originalIsUsingOAuth(model));
81
+ const linxOAuthProvider = options.providerConfig?.oauth ?? {
82
+ name: 'LinX Cloud',
83
+ usesCallbackServer: true,
84
+ async login(callbacks) {
85
+ callbacks.onProgress?.('Opening LinX Cloud login in your browser...');
86
+ const result = await loginWithBrowserConsent({
87
+ issuerUrl: options.providerConfig?.issuerUrl,
88
+ onAuthUrl(url) {
89
+ callbacks.onAuth({
90
+ url,
91
+ instructions: 'Complete LinX Cloud consent in your browser. If the local callback is blocked, paste the final redirect URL below.',
92
+ });
93
+ },
94
+ manualRedirectUrl: callbacks.onManualCodeInput,
95
+ });
96
+ await syncProviderModels(result.tokenSet.accessToken ?? '');
97
+ return {
98
+ refresh: result.tokenSet.refreshToken ?? '',
99
+ access: result.tokenSet.accessToken ?? '',
100
+ expires: result.tokenSet.expiresAt ? result.tokenSet.expiresAt * 1000 : Date.now() + 60 * 60 * 1000,
101
+ };
102
+ },
103
+ async refreshToken() {
104
+ const refreshed = await resolveLinxPiCloudOAuthCredential(options.providerConfig?.issuerUrl);
105
+ if (!refreshed) {
106
+ throw new Error('Failed to refresh LinX cloud credential for Pi runtime adapter');
107
+ }
108
+ await syncProviderModels(refreshed.access);
109
+ return refreshed;
110
+ },
111
+ getApiKey(credentials) {
112
+ return credentials.access;
113
+ },
114
+ };
115
+ const resolvedOAuth = options.providerConfig?.oauth
116
+ ? null
117
+ : await resolveLinxPiCloudOAuthCredential(options.providerConfig?.issuerUrl);
118
+ const explicitOAuthCredential = options.providerConfig?.oauth
119
+ ? await options.providerConfig.oauth.login()
120
+ : null;
121
+ const explicitApiKey = options.providerConfig?.apiKey;
122
+ const authMode = options.providerConfig?.oauth || resolvedOAuth || !explicitApiKey ? 'oauth' : 'apiKey';
123
+ if (resolvedOAuth?.access) {
124
+ await syncProviderModels(resolvedOAuth.access);
125
+ }
126
+ else if (explicitOAuthCredential?.access) {
127
+ await syncProviderModels(explicitOAuthCredential.access);
128
+ }
129
+ else if (explicitApiKey) {
130
+ await syncProviderModels(explicitApiKey);
131
+ }
132
+ modelRegistry.registerProvider(UNDEFINEDS_PROVIDER_ID, {
133
+ api: UNDEFINEDS_PROVIDER_API,
134
+ baseUrl,
135
+ apiKey: 'LINX_RUNTIME_AUTH',
136
+ oauth: linxOAuthProvider,
137
+ authHeader: false,
138
+ streamSimple: streamAdapter.streamFn,
139
+ models: providerModels,
140
+ });
141
+ if (!options.providerConfig?.oauth && !resolvedOAuth && !explicitApiKey) {
142
+ authStorage.setRuntimeApiKey(UNDEFINEDS_PROVIDER_ID, 'linx-runtime-managed-auth');
143
+ }
144
+ if (options.providerConfig?.oauth && explicitOAuthCredential) {
145
+ authStorage.set(UNDEFINEDS_PROVIDER_ID, { type: 'oauth', ...explicitOAuthCredential });
146
+ }
147
+ else if (resolvedOAuth) {
148
+ authStorage.set(UNDEFINEDS_PROVIDER_ID, resolvedOAuth);
149
+ }
150
+ const settingsManager = SettingsManager.create(context.cwd, context.agentDir);
151
+ ensureLinxPiTheme(context.agentDir);
152
+ settingsManager.setTheme('linx');
153
+ sanitizeLinxCloudDefaults(settingsManager);
154
+ const services = await createAgentSessionServices({
155
+ cwd: context.cwd,
156
+ agentDir: context.agentDir,
157
+ authStorage,
158
+ settingsManager,
159
+ modelRegistry,
160
+ });
161
+ const selectedModel = modelRegistry.find(UNDEFINEDS_PROVIDER_ID, requestedModel ?? activeModelId)
162
+ ?? modelRegistry.getAvailable().find((candidate) => candidate.provider === UNDEFINEDS_PROVIDER_ID);
163
+ if (!selectedModel) {
164
+ throw new Error('Failed to resolve undefineds model from the LinX Pi runtime adapter');
165
+ }
166
+ const created = await createAgentSessionFromServices({
167
+ services,
168
+ sessionManager: context.sessionManager,
169
+ sessionStartEvent: context.sessionStartEvent,
170
+ model: selectedModel,
171
+ tools: createCodingTools(context.cwd),
172
+ });
173
+ const session = created.session;
174
+ if (session.model?.provider === UNDEFINEDS_PROVIDER_ID && session.model.id !== selectedModel.id) {
175
+ await session.setModel(selectedModel);
176
+ }
177
+ const runtime = await createAgentSessionRuntime(async () => ({
178
+ ...created,
179
+ session,
180
+ services,
181
+ diagnostics: services.diagnostics,
182
+ }), {
183
+ cwd: context.cwd,
184
+ agentDir: context.agentDir,
185
+ sessionManager: context.sessionManager,
186
+ sessionStartEvent: context.sessionStartEvent,
187
+ });
188
+ runtime.linxAuthBridge = {
189
+ description: UNDEFINEDS_AUTH_BRIDGE_ID,
190
+ authMode,
191
+ providerId: 'undefineds-cloud',
192
+ providerLabel: UNDEFINEDS_PROVIDER_LABEL,
193
+ runtimeUrl: baseUrl,
194
+ };
195
+ return runtime;
196
+ },
197
+ async start() {
198
+ await proxy?.start();
199
+ },
200
+ async close() {
201
+ await proxy?.close();
202
+ },
203
+ };
204
+ async function syncProviderModels(apiKey) {
205
+ if (!apiKey || !dependencies.listRemoteModels) {
206
+ return;
207
+ }
208
+ const remoteModels = await dependencies.listRemoteModels(null, baseUrl, apiKey).catch(() => []);
209
+ if (remoteModels.length === 0) {
210
+ return;
211
+ }
212
+ const nextModels = remoteModels.map((entry) => buildProviderModel({
213
+ id: entry.id,
214
+ contextWindow: entry.contextWindow ?? 1_000_000,
215
+ }));
216
+ providerModels.splice(0, providerModels.length, ...nextModels);
217
+ if (!requestedModel) {
218
+ activeModelId = resolvePreferredLinxCloudModelId(nextModels, activeModelId);
219
+ }
220
+ }
221
+ }
222
+ function sanitizeLinxCloudDefaults(settingsManager) {
223
+ const provider = settingsManager.getDefaultProvider();
224
+ const model = settingsManager.getDefaultModel();
225
+ if (provider === UNDEFINEDS_PROVIDER_ID && model && model !== 'linx' && model !== 'linx-lite') {
226
+ settingsManager.setDefaultModelAndProvider(UNDEFINEDS_PROVIDER_ID, DEFAULT_LINX_CLOUD_MODEL_ID);
227
+ }
228
+ }
229
+ function buildProviderModel(input) {
230
+ return {
231
+ id: input.id,
232
+ name: input.id,
233
+ api: 'openai-completions',
234
+ reasoning: true,
235
+ input: ['text'],
236
+ cost: {
237
+ input: 0,
238
+ output: 0,
239
+ cacheRead: 0,
240
+ cacheWrite: 0,
241
+ },
242
+ contextWindow: input.contextWindow,
243
+ maxTokens: 64_000,
244
+ compat: {
245
+ supportsStore: false,
246
+ supportsDeveloperRole: false,
247
+ supportsStrictMode: false,
248
+ },
249
+ };
250
+ }
251
+ async function resolveLinxPiCloudApiKey(options) {
252
+ if (options.explicitApiKey) {
253
+ return options.explicitApiKey;
254
+ }
255
+ const credential = await resolveLinxPiCloudOAuthCredential(options.issuerUrl);
256
+ if (credential?.access) {
257
+ return credential.access;
258
+ }
259
+ throw new Error('No LinX cloud login found. Interactive TUI supports /login in-app. For non-interactive --print mode, run `linx login` first.');
260
+ }
261
+ function withSystemPrompt(systemPrompt, messages) {
262
+ const prompt = systemPrompt?.trim();
263
+ if (!prompt) {
264
+ return messages;
265
+ }
266
+ if (messages.some((message) => message.role === 'system')) {
267
+ return messages;
268
+ }
269
+ return [{ role: 'system', content: prompt }, ...messages];
270
+ }
271
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,314 @@
1
+ import { createAssistantMessageEventStream } from '@mariozechner/pi-ai';
2
+ import { DEFAULT_LINX_CLOUD_MODEL_ID } from '../default-model.js';
3
+ const UNDEFINEDS_PROVIDER_ID = 'undefineds';
4
+ const UNDEFINEDS_PROVIDER_API = 'linx-cloud-chat-completions';
5
+ export function createPiAgentStreamAdapter(options = {}) {
6
+ const createBaseMessage = (modelId) => ({
7
+ role: 'assistant',
8
+ content: [],
9
+ api: UNDEFINEDS_PROVIDER_API,
10
+ provider: UNDEFINEDS_PROVIDER_ID,
11
+ model: modelId ?? options.model ?? DEFAULT_LINX_CLOUD_MODEL_ID,
12
+ usage: {
13
+ input: 0,
14
+ output: 0,
15
+ cacheRead: 0,
16
+ cacheWrite: 0,
17
+ totalTokens: 0,
18
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
19
+ },
20
+ stopReason: 'stop',
21
+ timestamp: Date.now(),
22
+ });
23
+ return {
24
+ sessionId: options.sessionId,
25
+ cwd: options.cwd,
26
+ model: options.model,
27
+ streamFn(modelArg, context, streamOptions) {
28
+ const stream = createAssistantMessageEventStream();
29
+ const resolvedModelId = resolveModelId(modelArg, streamOptions?.modelId, options.model);
30
+ const message = createBaseMessage(resolvedModelId);
31
+ void (async () => {
32
+ stream.push({ type: 'start', partial: { ...message } });
33
+ const normalizedMessages = normalizeContextMessages(context);
34
+ const normalizedTools = normalizeContextTools(context?.tools);
35
+ const lastUserText = [...normalizedMessages].reverse().find((entry) => entry.role === 'user');
36
+ const prompt = typeof lastUserText?.content === 'string' ? lastUserText.content : '';
37
+ if (options.completionBackend) {
38
+ const reply = await options.completionBackend.complete({
39
+ model: resolvedModelId,
40
+ apiKey: streamOptions?.apiKey,
41
+ messages: normalizedMessages,
42
+ tools: normalizedTools,
43
+ systemPrompt: context?.systemPrompt,
44
+ });
45
+ emitCompletionResult(stream, message, reply);
46
+ return;
47
+ }
48
+ const source = options.eventSource?.() ?? (options.backend ? createBackendEventSource(options.backend, prompt) : undefined);
49
+ let text = '';
50
+ let textStarted = false;
51
+ if (source) {
52
+ for await (const event of source) {
53
+ if (event.type === 'assistant.delta') {
54
+ if (!textStarted) {
55
+ message.content = [{ type: 'text', text: '' }];
56
+ stream.push({ type: 'text_start', contentIndex: 0, partial: { ...message } });
57
+ textStarted = true;
58
+ }
59
+ text += event.text;
60
+ message.content = [{ type: 'text', text }];
61
+ stream.push({
62
+ type: 'text_delta',
63
+ contentIndex: 0,
64
+ delta: event.text,
65
+ partial: { ...message },
66
+ });
67
+ continue;
68
+ }
69
+ if (event.type === 'assistant.done') {
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ if (textStarted) {
75
+ stream.push({
76
+ type: 'text_end',
77
+ contentIndex: 0,
78
+ content: text,
79
+ partial: { ...message },
80
+ });
81
+ }
82
+ stream.push({
83
+ type: 'done',
84
+ reason: 'stop',
85
+ message,
86
+ });
87
+ })().catch((error) => {
88
+ const errorMessage = createBaseMessage();
89
+ errorMessage.stopReason = 'error';
90
+ errorMessage.errorMessage = error instanceof Error ? error.message : String(error);
91
+ stream.push({ type: 'error', reason: 'error', error: errorMessage });
92
+ });
93
+ return stream;
94
+ },
95
+ };
96
+ }
97
+ function resolveModelId(modelArg, overrideModelId, fallbackModelId) {
98
+ if (overrideModelId?.trim()) {
99
+ return overrideModelId.trim();
100
+ }
101
+ if (typeof modelArg === 'object' && modelArg !== null && 'id' in modelArg) {
102
+ const modelId = modelArg.id;
103
+ if (typeof modelId === 'string' && modelId.trim()) {
104
+ return modelId.trim();
105
+ }
106
+ }
107
+ if (fallbackModelId?.trim()) {
108
+ return fallbackModelId.trim();
109
+ }
110
+ return DEFAULT_LINX_CLOUD_MODEL_ID;
111
+ }
112
+ function normalizeContextMessages(context) {
113
+ const messages = context?.messages ?? [];
114
+ const normalized = [];
115
+ const systemPrompt = context?.systemPrompt?.trim();
116
+ if (systemPrompt) {
117
+ normalized.push({ role: 'system', content: systemPrompt });
118
+ }
119
+ for (const entry of messages) {
120
+ if (entry.role === 'system' || entry.role === 'user') {
121
+ const content = normalizeMessageContent(entry.content);
122
+ if (content) {
123
+ normalized.push({ role: entry.role, content });
124
+ }
125
+ continue;
126
+ }
127
+ if (entry.role === 'assistant') {
128
+ const content = normalizeAssistantTextContent(entry.content);
129
+ const toolCalls = normalizeAssistantToolCalls(entry.content);
130
+ if (content || toolCalls.length > 0) {
131
+ normalized.push({
132
+ role: 'assistant',
133
+ content: content || null,
134
+ ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),
135
+ });
136
+ }
137
+ continue;
138
+ }
139
+ if (entry.role === 'toolResult' || entry.role === 'tool') {
140
+ const content = normalizeMessageContent(entry.content) || '(empty tool result)';
141
+ const toolCallId = typeof entry.toolCallId === 'string' ? entry.toolCallId : undefined;
142
+ if (toolCallId) {
143
+ normalized.push({
144
+ role: 'tool',
145
+ content,
146
+ tool_call_id: toolCallId,
147
+ ...(typeof entry.toolName === 'string' ? { name: entry.toolName } : {}),
148
+ });
149
+ }
150
+ }
151
+ }
152
+ return normalized;
153
+ }
154
+ function normalizeContextTools(tools) {
155
+ if (!Array.isArray(tools)) {
156
+ return undefined;
157
+ }
158
+ const normalized = [];
159
+ for (const tool of tools) {
160
+ if (!tool?.name) {
161
+ continue;
162
+ }
163
+ normalized.push({
164
+ type: 'function',
165
+ function: {
166
+ name: tool.name,
167
+ description: tool.description,
168
+ parameters: tool.parameters,
169
+ },
170
+ });
171
+ }
172
+ return normalized;
173
+ }
174
+ function normalizeAssistantToolCalls(content) {
175
+ if (!Array.isArray(content)) {
176
+ return [];
177
+ }
178
+ return content.flatMap((part) => {
179
+ if (!isRecord(part) || part.type !== 'toolCall') {
180
+ return [];
181
+ }
182
+ const id = typeof part.id === 'string' ? part.id : '';
183
+ const name = typeof part.name === 'string' ? part.name : '';
184
+ if (!id || !name) {
185
+ return [];
186
+ }
187
+ return [{
188
+ id,
189
+ type: 'function',
190
+ function: {
191
+ name,
192
+ arguments: JSON.stringify(isRecord(part.arguments) ? part.arguments : {}),
193
+ },
194
+ }];
195
+ });
196
+ }
197
+ function normalizeAssistantTextContent(content) {
198
+ if (!Array.isArray(content)) {
199
+ return normalizeMessageContent(content);
200
+ }
201
+ return content
202
+ .map((part) => {
203
+ if (isRecord(part) && part.type === 'text') {
204
+ return String(part.text ?? '');
205
+ }
206
+ return '';
207
+ })
208
+ .join('');
209
+ }
210
+ function normalizeMessageContent(content) {
211
+ if (typeof content === 'string') {
212
+ return content;
213
+ }
214
+ if (!Array.isArray(content)) {
215
+ return '';
216
+ }
217
+ return content
218
+ .map((part) => {
219
+ if (typeof part === 'string') {
220
+ return part;
221
+ }
222
+ if (isRecord(part) && part.type === 'text') {
223
+ return String(part.text ?? '');
224
+ }
225
+ return '';
226
+ })
227
+ .join('');
228
+ }
229
+ function emitCompletionResult(stream, message, reply) {
230
+ const content = typeof reply === 'string' ? reply : reply.content ?? '';
231
+ const toolCalls = typeof reply === 'string' ? [] : reply.toolCalls ?? [];
232
+ if (content) {
233
+ const contentIndex = message.content.length;
234
+ message.content.push({ type: 'text', text: '' });
235
+ stream.push({ type: 'text_start', contentIndex, partial: { ...message } });
236
+ message.content[contentIndex] = { type: 'text', text: content };
237
+ stream.push({ type: 'text_delta', contentIndex, delta: content, partial: { ...message } });
238
+ stream.push({ type: 'text_end', contentIndex, content, partial: { ...message } });
239
+ }
240
+ for (const toolCall of toolCalls) {
241
+ const parsedArguments = parseToolArguments(toolCall.function.arguments);
242
+ const contentIndex = message.content.length;
243
+ const piToolCall = {
244
+ type: 'toolCall',
245
+ id: toolCall.id,
246
+ name: toolCall.function.name,
247
+ arguments: parsedArguments,
248
+ };
249
+ message.content.push(piToolCall);
250
+ stream.push({ type: 'toolcall_start', contentIndex, partial: { ...message } });
251
+ stream.push({
252
+ type: 'toolcall_delta',
253
+ contentIndex,
254
+ delta: toolCall.function.arguments,
255
+ partial: { ...message },
256
+ });
257
+ stream.push({
258
+ type: 'toolcall_end',
259
+ contentIndex,
260
+ toolCall: piToolCall,
261
+ partial: { ...message },
262
+ });
263
+ }
264
+ const reason = toolCalls.length > 0 || (!isStringReply(reply) && reply.finishReason === 'tool_calls') ? 'toolUse' : 'stop';
265
+ message.stopReason = reason;
266
+ stream.push({ type: 'done', reason, message });
267
+ }
268
+ function parseToolArguments(input) {
269
+ try {
270
+ const parsed = JSON.parse(input || '{}');
271
+ return isRecord(parsed) ? parsed : {};
272
+ }
273
+ catch {
274
+ return {};
275
+ }
276
+ }
277
+ function isStringReply(reply) {
278
+ return typeof reply === 'string';
279
+ }
280
+ function isRecord(value) {
281
+ return typeof value === 'object' && value !== null;
282
+ }
283
+ async function* createBackendEventSource(backend, prompt) {
284
+ const queue = [];
285
+ let notify = null;
286
+ let done = false;
287
+ const unsubscribe = backend.subscribe((event) => {
288
+ queue.push(event);
289
+ notify?.();
290
+ notify = null;
291
+ if (event.type === 'assistant.done') {
292
+ done = true;
293
+ }
294
+ });
295
+ try {
296
+ await backend.sendTurn(prompt);
297
+ while (!done || queue.length > 0) {
298
+ if (queue.length === 0) {
299
+ await new Promise((resolve) => {
300
+ notify = resolve;
301
+ });
302
+ continue;
303
+ }
304
+ const event = queue.shift();
305
+ if (event) {
306
+ yield event;
307
+ }
308
+ }
309
+ }
310
+ finally {
311
+ unsubscribe();
312
+ }
313
+ }
314
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/lib/pi-adapter/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAA2D,MAAM,qBAAqB,CAAA;AAGhI,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAEjE,MAAM,sBAAsB,GAAG,YAAY,CAAA;AAC3C,MAAM,uBAAuB,GAAG,6BAA6B,CAAA;AAgD7D,MAAM,UAAU,0BAA0B,CAAC,UAAuC,EAAE;IAClF,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAoB,EAAE,CAAC,CAAC;QACjE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,uBAAuB;QAC5B,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,2BAA2B;QAC9D,KAAK,EAAE;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACrE;QACD,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAA;IAEF,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,CACN,QAAkB,EAClB,OAAgG,EAChG,aAAqD;YAErD,MAAM,MAAM,GAAG,iCAAiC,EAAE,CAAA;YAClD,MAAM,eAAe,GAAG,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YACvF,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;YAElD,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;gBACvD,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;gBAC5D,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBAC7D,MAAM,YAAY,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;gBAC7F,MAAM,MAAM,GAAG,OAAO,YAAY,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;gBAEpF,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC;wBACrD,KAAK,EAAE,eAAe;wBACtB,MAAM,EAAE,aAAa,EAAE,MAAM;wBAC7B,QAAQ,EAAE,kBAAkB;wBAC5B,KAAK,EAAE,eAAe;wBACtB,YAAY,EAAE,OAAO,EAAE,YAAY;qBACpC,CAAC,CAAA;oBACF,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;oBAC5C,OAAM;gBACR,CAAC;gBAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;gBAC3H,IAAI,IAAI,GAAG,EAAE,CAAA;gBACb,IAAI,WAAW,GAAG,KAAK,CAAA;gBAEvB,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;4BACrC,IAAI,CAAC,WAAW,EAAE,CAAC;gCACjB,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;gCAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;gCAC7E,WAAW,GAAG,IAAI,CAAA;4BACpB,CAAC;4BAED,IAAI,IAAI,KAAK,CAAC,IAAI,CAAA;4BAClB,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;4BAC1C,MAAM,CAAC,IAAI,CAAC;gCACV,IAAI,EAAE,YAAY;gCAClB,YAAY,EAAE,CAAC;gCACf,KAAK,EAAE,KAAK,CAAC,IAAI;gCACjB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;6BACxB,CAAC,CAAA;4BACF,SAAQ;wBACV,CAAC;wBAED,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;4BACpC,MAAK;wBACP,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,UAAU;wBAChB,YAAY,EAAE,CAAC;wBACf,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;qBACxB,CAAC,CAAA;gBACJ,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,MAAM;oBACd,OAAO;iBACR,CAAC,CAAA;YACJ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnB,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAA;gBACxC,YAAY,CAAC,UAAU,GAAG,OAAO,CAAA;gBACjC,YAAY,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;YACtE,CAAC,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAiB,EAAE,eAAwB,EAAE,eAAwB;IAC3F,IAAI,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,IAAI,EAAE,CAAA;IAC/B,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAI,QAA6B,CAAC,EAAE,CAAA;QACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,IAAI,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,IAAI,EAAE,CAAA;IAC/B,CAAC;IAED,OAAO,2BAA2B,CAAA;AACpC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAwE;IACxG,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAA;IACxC,MAAM,UAAU,GAAwB,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;YAChD,CAAC;YACD,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC5D,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC5D,IAAI,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,OAAO,IAAI,IAAI;oBACxB,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3D,CAAC,CAAA;YACJ,CAAC;YACD,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,qBAAqB,CAAA;YAC/E,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;YACtF,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,MAAM;oBACZ,OAAO;oBACP,YAAY,EAAE,UAAU;oBACxB,GAAG,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiC;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAqB,EAAE,CAAA;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,SAAQ;QACV,CAAC;QACD,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;SACF,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAgB;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACrD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,CAAC;gBACN,EAAE;gBACF,IAAI,EAAE,UAAmB;gBACzB,QAAQ,EAAE;oBACR,IAAI;oBACJ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1E;aACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAgB;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAmC,EACnC,OAAyB,EACzB,KAAyC;IAEzC,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAA;IACvE,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAA;IAExE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;QAC1E,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;QAC1F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACvE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QAC3C,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,UAAmB;YACzB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;YAC5B,SAAS,EAAE,eAAe;SAC3B,CAAA;QACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,YAAY;YACZ,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;YAClC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;SACxB,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,YAAY;YACZ,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE;SACxB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAC1H,OAAO,CAAC,UAAU,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;QACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAyC;IAC9D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AACpD,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,wBAAwB,CACtC,OAGC,EACD,MAAc;IAEd,MAAM,KAAK,GAA2B,EAAE,CAAA;IACxC,IAAI,MAAM,GAAwB,IAAI,CAAA;IACtC,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,MAAM,EAAE,EAAE,CAAA;QACV,MAAM,GAAG,IAAI,CAAA;QACb,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9B,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,MAAM,GAAG,OAAO,CAAA;gBAClB,CAAC,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;YAC3B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,WAAW,EAAE,CAAA;IACf,CAAC;AACH,CAAC"}