@silkweave/ai 1.9.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.
- package/.turbo/turbo-build.log +14 -0
- package/.turbo/turbo-check.log +3 -0
- package/.turbo/turbo-lint.log +2 -0
- package/.turbo/turbo-prepack.log +15 -0
- package/README.md +117 -0
- package/build/index.d.mts +127 -0
- package/build/index.d.mts.map +1 -0
- package/build/index.mjs +137 -0
- package/build/index.mjs.map +1 -0
- package/eslint.config.mjs +93 -0
- package/package.json +43 -0
- package/src/chatAction.ts +78 -0
- package/src/index.ts +2 -0
- package/src/transport.ts +122 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsdown.config.ts +7 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
[2m$ tsdown[22m
|
|
3
|
+
[34mℹ[39m [34mtsdown v0.21.10[39m powered by [38;2;255;126;23mrolldown v1.0.0-rc.17[39m
|
|
4
|
+
[34mℹ[39m config file: [4m/Users/atomic/projects/silkweave/silkweave/packages/ai/tsdown.config.ts[24m
|
|
5
|
+
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
6
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
7
|
+
[34mℹ[39m Build start
|
|
8
|
+
[34mℹ[39m Cleaning 4 files
|
|
9
|
+
[34mℹ[39m [2mbuild/[22m[1mindex.mjs[22m [2m4.13 kB[22m [2m│ gzip: 1.68 kB[22m
|
|
10
|
+
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m8.81 kB[22m [2m│ gzip: 3.19 kB[22m
|
|
11
|
+
[34mℹ[39m [2mbuild/[22mindex.d.mts.map [2m0.84 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
12
|
+
[34mℹ[39m [2mbuild/[22m[32m[1mindex.d.mts[22m[39m [2m5.20 kB[22m [2m│ gzip: 2.01 kB[22m
|
|
13
|
+
[34mℹ[39m 4 files, total: 18.98 kB
|
|
14
|
+
[32m✔[39m Build complete in [32m984ms[39m
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
[2m$ pnpm clean && pnpm build[22m
|
|
3
|
+
[2m$ rimraf build[22m
|
|
4
|
+
[2m$ tsdown[22m
|
|
5
|
+
[34mℹ[39m [34mtsdown v0.21.10[39m powered by [38;2;255;126;23mrolldown v1.0.0-rc.17[39m
|
|
6
|
+
[34mℹ[39m config file: [4m/Users/atomic/projects/silkweave/silkweave/packages/ai/tsdown.config.ts[24m
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
8
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
9
|
+
[34mℹ[39m Build start
|
|
10
|
+
[34mℹ[39m [2mbuild/[22m[1mindex.mjs[22m [2m4.13 kB[22m [2m│ gzip: 1.68 kB[22m
|
|
11
|
+
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m8.81 kB[22m [2m│ gzip: 3.19 kB[22m
|
|
12
|
+
[34mℹ[39m [2mbuild/[22mindex.d.mts.map [2m0.84 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
13
|
+
[34mℹ[39m [2mbuild/[22m[32m[1mindex.d.mts[22m[39m [2m5.20 kB[22m [2m│ gzip: 2.01 kB[22m
|
|
14
|
+
[34mℹ[39m 4 files, total: 18.98 kB
|
|
15
|
+
[32m✔[39m Build complete in [32m907ms[39m
|
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# @silkweave/ai
|
|
2
|
+
|
|
3
|
+
Vercel AI SDK integration for [Silkweave](https://github.com/silkweave/silkweave) - bridge `useChat` to a tRPC subscription backed by a Silkweave streaming action, with no Data Stream Protocol in the middle.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @silkweave/ai @silkweave/core ai
|
|
9
|
+
# plus whichever provider you want
|
|
10
|
+
pnpm add @ai-sdk/anthropic
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`ai` (Vercel AI SDK v5+) is a peer dependency.
|
|
14
|
+
|
|
15
|
+
## What's Inside
|
|
16
|
+
|
|
17
|
+
| Export | What it does |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `createChatAction({ model, ... })` | Server-side: wraps AI SDK's `streamText` in a streaming Silkweave action that yields `UIMessageChunk`s - the exact shape `useChat` expects. |
|
|
20
|
+
| `silkweaveTransport(subscribe)` | Client-side: builds a custom `ChatTransport` for `useChat` that consumes any subscribe-style function (typically a tRPC subscription procedure) and surfaces chunks as a `ReadableStream<UIMessageChunk>`. |
|
|
21
|
+
|
|
22
|
+
## Why this exists
|
|
23
|
+
|
|
24
|
+
Vercel AI SDK's `useChat` ships with `DefaultChatTransport`, which expects an HTTP endpoint emitting AI SDK's prefix-coded "Data Stream Protocol". If your backend is tRPC, that means writing a separate non-tRPC route, losing your existing typed client, auth, and middleware.
|
|
25
|
+
|
|
26
|
+
A custom `ChatTransport` returns `Promise<ReadableStream<UIMessageChunk>>`. The chunks in that stream are **plain JS objects** - `useChat` doesn't care where they came from. tRPC subscriptions yield objects. The fit is mechanical.
|
|
27
|
+
|
|
28
|
+
This package gives you the two pieces:
|
|
29
|
+
1. A server-side action that produces correctly-shaped chunks from `streamText`
|
|
30
|
+
2. A client-side transport that adapts a subscribe function into the stream `useChat` wants
|
|
31
|
+
|
|
32
|
+
## Server-side: `createChatAction`
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { silkweave } from '@silkweave/core'
|
|
36
|
+
import { trpc } from '@silkweave/trpc'
|
|
37
|
+
import { createChatAction } from '@silkweave/ai'
|
|
38
|
+
import { anthropic } from '@ai-sdk/anthropic'
|
|
39
|
+
|
|
40
|
+
const ChatAction = createChatAction({
|
|
41
|
+
model: anthropic('claude-sonnet-4-6'),
|
|
42
|
+
system: 'You are a helpful assistant.'
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
await silkweave({ name: 'chat-server', description: 'AI Chat', version: '1.0.0' })
|
|
46
|
+
.adapter(trpc({ host: 'localhost', port: 8080 }))
|
|
47
|
+
.action(ChatAction)
|
|
48
|
+
.start()
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The action accepts the input shape `useChat` sends through a custom transport (`messages`, `trigger`, `chatId`, `messageId`) and yields `UIMessageChunk`s directly from `streamText().toUIMessageStream()`. Because it's a streaming action with a `chunk` schema, the tRPC adapter registers it as a `.subscription()`.
|
|
52
|
+
|
|
53
|
+
### Options
|
|
54
|
+
|
|
55
|
+
| Field | Type | Description |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `model` | `LanguageModel` | The model to drive (e.g. `anthropic('claude-sonnet-4-6')`). Required. |
|
|
58
|
+
| `name` | `string` | Action name. Defaults to `'chat'`. |
|
|
59
|
+
| `description` | `string` | Action description. |
|
|
60
|
+
| `system` | `string` | System prompt. |
|
|
61
|
+
| `tools` | `ToolSet` | Tools passed through to `streamText`. |
|
|
62
|
+
| `maxOutputTokens` | `number` | Max model output tokens. |
|
|
63
|
+
| `temperature` | `number` | Model temperature. |
|
|
64
|
+
|
|
65
|
+
## Client-side: `silkweaveTransport`
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { useChat } from '@ai-sdk/react'
|
|
69
|
+
import { silkweaveTransport } from '@silkweave/ai'
|
|
70
|
+
import { trpc } from './trpc-client'
|
|
71
|
+
|
|
72
|
+
const transport = silkweaveTransport(trpc.chat.subscribe)
|
|
73
|
+
|
|
74
|
+
export function Chat() {
|
|
75
|
+
const { messages, sendMessage, status } = useChat({ transport })
|
|
76
|
+
// ...
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The `subscribe` argument can be the tRPC procedure reference itself - its `(input, callbacks) => { unsubscribe }` shape is what `silkweaveTransport` expects. You can also pass a wrapper if you need to inject auth headers or transform the input before it hits the server.
|
|
81
|
+
|
|
82
|
+
The subscribe function receives:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
input: {
|
|
86
|
+
messages: UIMessage[]
|
|
87
|
+
trigger: 'submit-message' | 'regenerate-message'
|
|
88
|
+
chatId: string
|
|
89
|
+
messageId: string | undefined
|
|
90
|
+
metadata?: unknown
|
|
91
|
+
body?: Record<string, unknown>
|
|
92
|
+
headers?: Record<string, string>
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
callbacks: {
|
|
96
|
+
onData(chunk: UIMessageChunk): void
|
|
97
|
+
onError(error: unknown): void
|
|
98
|
+
onComplete(): void
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
…and must return `{ unsubscribe(): void }`. This shape is compatible with tRPC v11's `client.<procedure>.subscribe(input, callbacks)` callsite.
|
|
103
|
+
|
|
104
|
+
`abortSignal` from `useChat` is wired automatically - when the user cancels, `unsubscribe()` fires and the underlying tRPC subscription propagates the cancellation back into the Silkweave action's async generator.
|
|
105
|
+
|
|
106
|
+
### Limitations
|
|
107
|
+
|
|
108
|
+
- **`reconnectToStream` returns `null`.** Stream resume after disconnect is not supported; if a connection drops mid-stream the consumer must resend. AI SDK's `DefaultChatTransport` has its own resumability infrastructure (stream IDs, chat persistence) - replicating that on top of tRPC would require server-side state we don't manage here.
|
|
109
|
+
- **tRPC subscription transport limits apply.** `httpSubscriptionLink` uses SSE which is GET-only; large message arrays serialized as a query parameter will hit URL length limits in long conversations. Use `wsLink` (WebSocket) or configure batching that POSTs.
|
|
110
|
+
|
|
111
|
+
## See Also
|
|
112
|
+
|
|
113
|
+
- [Silkweave README](https://github.com/silkweave/silkweave) - Full documentation
|
|
114
|
+
- [`@silkweave/core`](https://www.npmjs.com/package/@silkweave/core) - Core library, streaming actions
|
|
115
|
+
- [`@silkweave/trpc`](https://www.npmjs.com/package/@silkweave/trpc) - tRPC adapter (subscriptions)
|
|
116
|
+
- [Vercel AI SDK - Transport docs](https://ai-sdk.dev/docs/ai-sdk-ui/transport)
|
|
117
|
+
- [AI Elements](https://elements.ai-sdk.dev) - prebuilt React components for chat UIs
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as _$_silkweave_core0 from "@silkweave/core";
|
|
2
|
+
import * as _$ai from "ai";
|
|
3
|
+
import { ChatTransport, LanguageModel, ToolSet, UIMessage } from "ai";
|
|
4
|
+
|
|
5
|
+
//#region src/chatAction.d.ts
|
|
6
|
+
interface CreateChatActionOptions {
|
|
7
|
+
/** Action name. Defaults to `'chat'`. */
|
|
8
|
+
name?: string;
|
|
9
|
+
/** Action description (shown to MCP clients, tRPC docs, etc). */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** The language model to drive (e.g. `anthropic('claude-sonnet-4-6')`). */
|
|
12
|
+
model: LanguageModel;
|
|
13
|
+
/** System prompt prepended to every conversation. */
|
|
14
|
+
system?: string;
|
|
15
|
+
/** Tools registered with `streamText`. */
|
|
16
|
+
tools?: ToolSet;
|
|
17
|
+
/** Max model output tokens. */
|
|
18
|
+
maxOutputTokens?: number;
|
|
19
|
+
/** Model temperature. */
|
|
20
|
+
temperature?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build a Silkweave streaming action that wraps Vercel AI SDK's `streamText`.
|
|
24
|
+
*
|
|
25
|
+
* The action accepts the shape `useChat` sends through a custom
|
|
26
|
+
* `ChatTransport` (`messages`, `trigger`, `chatId`, `messageId`) and yields
|
|
27
|
+
* the same `UIMessageChunk`s that AI SDK's `result.toUIMessageStream()`
|
|
28
|
+
* produces - so a paired `silkweaveTransport()` on the client can feed them
|
|
29
|
+
* straight into `useChat` with no wire-format translation.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { silkweave } from '@silkweave/core'
|
|
34
|
+
* import { trpc } from '@silkweave/trpc'
|
|
35
|
+
* import { createChatAction } from '@silkweave/ai'
|
|
36
|
+
* import { anthropic } from '@ai-sdk/anthropic'
|
|
37
|
+
*
|
|
38
|
+
* const ChatAction = createChatAction({
|
|
39
|
+
* model: anthropic('claude-sonnet-4-6'),
|
|
40
|
+
* system: 'You are a helpful assistant.'
|
|
41
|
+
* })
|
|
42
|
+
*
|
|
43
|
+
* await silkweave({ name: 'chat-server', version: '1.0.0' })
|
|
44
|
+
* .adapter(trpc({ port: 8080 }))
|
|
45
|
+
* .action(ChatAction)
|
|
46
|
+
* .start()
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
declare function createChatAction(options: CreateChatActionOptions): _$_silkweave_core0.StreamingActionInput<{
|
|
50
|
+
messages: any[];
|
|
51
|
+
trigger?: "submit-message" | "regenerate-message" | undefined;
|
|
52
|
+
chatId?: string | undefined;
|
|
53
|
+
messageId?: string | undefined;
|
|
54
|
+
metadata?: any;
|
|
55
|
+
body?: Record<string, any> | undefined;
|
|
56
|
+
headers?: Record<string, string> | undefined;
|
|
57
|
+
}, _$ai.InferUIMessageChunk<UIMessage<unknown, _$ai.UIDataTypes, _$ai.UITools>>, string, "mutation">;
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/transport.d.ts
|
|
60
|
+
/**
|
|
61
|
+
* Input passed to the underlying `subscribe` function. Mirrors the relevant
|
|
62
|
+
* fields of `ChatTransport.sendMessages`'s options object - what the chat
|
|
63
|
+
* action needs to drive the model - minus the `AbortSignal` (which is wired
|
|
64
|
+
* separately via `unsubscribe()`).
|
|
65
|
+
*/
|
|
66
|
+
interface SilkweaveTransportInput<M extends UIMessage = UIMessage> {
|
|
67
|
+
messages: M[];
|
|
68
|
+
trigger: 'submit-message' | 'regenerate-message';
|
|
69
|
+
chatId: string;
|
|
70
|
+
messageId: string | undefined;
|
|
71
|
+
metadata?: unknown;
|
|
72
|
+
body?: Record<string, unknown>;
|
|
73
|
+
headers?: Record<string, string>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Callback shape passed to the subscribe function. `onData` is typed as
|
|
77
|
+
* `unknown` at the transport boundary (rather than the precise
|
|
78
|
+
* `UIMessageChunk` union) because tRPC v11's `subscribe()` expects callbacks
|
|
79
|
+
* compatible with the *inferred* subscription output, which can differ
|
|
80
|
+
* subtly from `UIMessageChunk` due to how Zod erases discriminated-union
|
|
81
|
+
* variance (e.g. `input?: unknown` vs `input: unknown`). At runtime the
|
|
82
|
+
* server's `createChatAction` only yields valid `UIMessageChunk`s, so the
|
|
83
|
+
* cast is safe.
|
|
84
|
+
*/
|
|
85
|
+
interface SilkweaveTransportCallbacks {
|
|
86
|
+
onData: (chunk: unknown) => void;
|
|
87
|
+
onError: (error: unknown) => void;
|
|
88
|
+
onComplete: () => void;
|
|
89
|
+
}
|
|
90
|
+
interface SilkweaveTransportSubscription {
|
|
91
|
+
unsubscribe: () => void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The subscribe function. The shape is compatible with tRPC v11's
|
|
95
|
+
* `client.<procedure>.subscribe(input, callbacks)` callsite - wrap your tRPC
|
|
96
|
+
* subscription procedure in this and pass it to `silkweaveTransport()`.
|
|
97
|
+
*/
|
|
98
|
+
type SilkweaveSubscribe<M extends UIMessage = UIMessage> = (input: SilkweaveTransportInput<M>, callbacks: SilkweaveTransportCallbacks) => SilkweaveTransportSubscription;
|
|
99
|
+
/**
|
|
100
|
+
* Build a custom `ChatTransport` for Vercel AI SDK's `useChat` that delivers
|
|
101
|
+
* `UIMessageChunk`s over a `subscribe` function (typically a tRPC subscription
|
|
102
|
+
* procedure wired to a Silkweave streaming action).
|
|
103
|
+
*
|
|
104
|
+
* Skips AI SDK's Data Stream Protocol entirely - chunks are JS objects
|
|
105
|
+
* delivered via the consumer-supplied transport, not parsed from prefix-coded
|
|
106
|
+
* HTTP bodies. This means the wire format is whatever your subscribe function
|
|
107
|
+
* uses (tRPC over SSE or WebSocket, in the typical case).
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* import { silkweaveTransport } from '@silkweave/ai'
|
|
112
|
+
* import { trpc } from './trpc-client'
|
|
113
|
+
*
|
|
114
|
+
* const transport = silkweaveTransport((input, callbacks) =>
|
|
115
|
+
* trpc.chat.subscribe(input, callbacks)
|
|
116
|
+
* )
|
|
117
|
+
*
|
|
118
|
+
* const { messages, sendMessage } = useChat({ transport })
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* `reconnectToStream()` returns `null` - stream resume after disconnect is not
|
|
122
|
+
* supported. If a connection drops mid-stream the consumer must resend.
|
|
123
|
+
*/
|
|
124
|
+
declare function silkweaveTransport<M extends UIMessage = UIMessage>(subscribe: SilkweaveSubscribe<M>): ChatTransport<M>;
|
|
125
|
+
//#endregion
|
|
126
|
+
export { CreateChatActionOptions, SilkweaveSubscribe, SilkweaveTransportCallbacks, SilkweaveTransportInput, SilkweaveTransportSubscription, createChatAction, silkweaveTransport };
|
|
127
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/chatAction.ts","../src/transport.ts"],"mappings":";;;;;UAIiB,uBAAA;;EAEf,IAAA;;EAEA,WAAA;EAJsC;EAMtC,KAAA,EAAO,aAAA;EAIQ;EAFf,MAAA;EAJA;EAMA,KAAA,GAAQ,OAAA;EAJD;EAMP,eAAA;EAFA;EAIA,WAAA;AAAA;;;;AA8BF;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,gBAAA,CAAiB,OAAA,EAAS,uBAAA,sBAAuB,oBAAA;;;;;;;;;;;;;;;AA5CjE;;UCMiB,uBAAA,WAAkC,SAAA,GAAY,SAAA;EAC7D,QAAA,EAAU,CAAA;EACV,OAAA;EACA,MAAA;EACA,SAAA;EACA,QAAA;EACA,IAAA,GAAO,MAAA;EACP,OAAA,GAAU,MAAA;AAAA;;;;;AD+BZ;;;;;;UClBiB,2BAAA;EACf,MAAA,GAAS,KAAA;EACT,OAAA,GAAU,KAAA;EACV,UAAA;AAAA;AAAA,UAGe,8BAAA;EACf,WAAA;AAAA;;;;;;KAQU,kBAAA,WAA6B,SAAA,GAAY,SAAA,KACnD,KAAA,EAAO,uBAAA,CAAwB,CAAA,GAC/B,SAAA,EAAW,2BAAA,KACR,8BAAA;;;;;;;;;;;;;;;AAtCL;;;;;;;;;;;iBAiEgB,kBAAA,WAA6B,SAAA,GAAY,SAAA,CAAA,CACvD,SAAA,EAAW,kBAAA,CAAmB,CAAA,IAC7B,aAAA,CAAc,CAAA"}
|
package/build/index.mjs
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { createAction } from "@silkweave/core";
|
|
2
|
+
import { convertToModelMessages, streamText } from "ai";
|
|
3
|
+
import z from "zod/v4";
|
|
4
|
+
//#region src/chatAction.ts
|
|
5
|
+
/**
|
|
6
|
+
* Build a Silkweave streaming action that wraps Vercel AI SDK's `streamText`.
|
|
7
|
+
*
|
|
8
|
+
* The action accepts the shape `useChat` sends through a custom
|
|
9
|
+
* `ChatTransport` (`messages`, `trigger`, `chatId`, `messageId`) and yields
|
|
10
|
+
* the same `UIMessageChunk`s that AI SDK's `result.toUIMessageStream()`
|
|
11
|
+
* produces - so a paired `silkweaveTransport()` on the client can feed them
|
|
12
|
+
* straight into `useChat` with no wire-format translation.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { silkweave } from '@silkweave/core'
|
|
17
|
+
* import { trpc } from '@silkweave/trpc'
|
|
18
|
+
* import { createChatAction } from '@silkweave/ai'
|
|
19
|
+
* import { anthropic } from '@ai-sdk/anthropic'
|
|
20
|
+
*
|
|
21
|
+
* const ChatAction = createChatAction({
|
|
22
|
+
* model: anthropic('claude-sonnet-4-6'),
|
|
23
|
+
* system: 'You are a helpful assistant.'
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* await silkweave({ name: 'chat-server', version: '1.0.0' })
|
|
27
|
+
* .adapter(trpc({ port: 8080 }))
|
|
28
|
+
* .action(ChatAction)
|
|
29
|
+
* .start()
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function createChatAction(options) {
|
|
33
|
+
return createAction({
|
|
34
|
+
name: options.name ?? "chat",
|
|
35
|
+
description: options.description ?? "Chat with the assistant",
|
|
36
|
+
input: z.object({
|
|
37
|
+
messages: z.array(z.any()),
|
|
38
|
+
trigger: z.enum(["submit-message", "regenerate-message"]).optional(),
|
|
39
|
+
chatId: z.string().optional(),
|
|
40
|
+
messageId: z.string().optional(),
|
|
41
|
+
metadata: z.any().optional(),
|
|
42
|
+
body: z.record(z.string(), z.any()).optional(),
|
|
43
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
44
|
+
}),
|
|
45
|
+
chunk: z.custom(),
|
|
46
|
+
run: async function* ({ messages }) {
|
|
47
|
+
const uiMessages = messages;
|
|
48
|
+
const result = streamText({
|
|
49
|
+
model: options.model,
|
|
50
|
+
system: options.system,
|
|
51
|
+
messages: convertToModelMessages(uiMessages),
|
|
52
|
+
tools: options.tools,
|
|
53
|
+
maxOutputTokens: options.maxOutputTokens,
|
|
54
|
+
temperature: options.temperature
|
|
55
|
+
});
|
|
56
|
+
for await (const chunk of result.toUIMessageStream()) yield chunk;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/transport.ts
|
|
62
|
+
/**
|
|
63
|
+
* Build a custom `ChatTransport` for Vercel AI SDK's `useChat` that delivers
|
|
64
|
+
* `UIMessageChunk`s over a `subscribe` function (typically a tRPC subscription
|
|
65
|
+
* procedure wired to a Silkweave streaming action).
|
|
66
|
+
*
|
|
67
|
+
* Skips AI SDK's Data Stream Protocol entirely - chunks are JS objects
|
|
68
|
+
* delivered via the consumer-supplied transport, not parsed from prefix-coded
|
|
69
|
+
* HTTP bodies. This means the wire format is whatever your subscribe function
|
|
70
|
+
* uses (tRPC over SSE or WebSocket, in the typical case).
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* import { silkweaveTransport } from '@silkweave/ai'
|
|
75
|
+
* import { trpc } from './trpc-client'
|
|
76
|
+
*
|
|
77
|
+
* const transport = silkweaveTransport((input, callbacks) =>
|
|
78
|
+
* trpc.chat.subscribe(input, callbacks)
|
|
79
|
+
* )
|
|
80
|
+
*
|
|
81
|
+
* const { messages, sendMessage } = useChat({ transport })
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* `reconnectToStream()` returns `null` - stream resume after disconnect is not
|
|
85
|
+
* supported. If a connection drops mid-stream the consumer must resend.
|
|
86
|
+
*/
|
|
87
|
+
function silkweaveTransport(subscribe) {
|
|
88
|
+
return {
|
|
89
|
+
async sendMessages({ messages, trigger, chatId, messageId, abortSignal, metadata, body, headers }) {
|
|
90
|
+
return new ReadableStream({ start(controller) {
|
|
91
|
+
let closed = false;
|
|
92
|
+
const close = () => {
|
|
93
|
+
if (closed) return;
|
|
94
|
+
closed = true;
|
|
95
|
+
try {
|
|
96
|
+
controller.close();
|
|
97
|
+
} catch {}
|
|
98
|
+
};
|
|
99
|
+
const subscription = subscribe({
|
|
100
|
+
messages,
|
|
101
|
+
trigger,
|
|
102
|
+
chatId,
|
|
103
|
+
messageId,
|
|
104
|
+
metadata,
|
|
105
|
+
body,
|
|
106
|
+
headers
|
|
107
|
+
}, {
|
|
108
|
+
onData: (chunk) => {
|
|
109
|
+
if (closed) return;
|
|
110
|
+
controller.enqueue(chunk);
|
|
111
|
+
},
|
|
112
|
+
onError: (error) => {
|
|
113
|
+
if (closed) return;
|
|
114
|
+
closed = true;
|
|
115
|
+
controller.error(error);
|
|
116
|
+
},
|
|
117
|
+
onComplete: close
|
|
118
|
+
});
|
|
119
|
+
if (abortSignal) {
|
|
120
|
+
const onAbort = () => {
|
|
121
|
+
subscription.unsubscribe();
|
|
122
|
+
close();
|
|
123
|
+
};
|
|
124
|
+
if (abortSignal.aborted) onAbort();
|
|
125
|
+
else abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
126
|
+
}
|
|
127
|
+
} });
|
|
128
|
+
},
|
|
129
|
+
reconnectToStream() {
|
|
130
|
+
return Promise.resolve(null);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
export { createChatAction, silkweaveTransport };
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/chatAction.ts","../src/transport.ts"],"sourcesContent":["import { createAction } from '@silkweave/core'\nimport { convertToModelMessages, streamText, type LanguageModel, type ToolSet, type UIMessage, type UIMessageChunk } from 'ai'\nimport z from 'zod/v4'\n\nexport interface CreateChatActionOptions {\n /** Action name. Defaults to `'chat'`. */\n name?: string\n /** Action description (shown to MCP clients, tRPC docs, etc). */\n description?: string\n /** The language model to drive (e.g. `anthropic('claude-sonnet-4-6')`). */\n model: LanguageModel\n /** System prompt prepended to every conversation. */\n system?: string\n /** Tools registered with `streamText`. */\n tools?: ToolSet\n /** Max model output tokens. */\n maxOutputTokens?: number\n /** Model temperature. */\n temperature?: number\n}\n\n/**\n * Build a Silkweave streaming action that wraps Vercel AI SDK's `streamText`.\n *\n * The action accepts the shape `useChat` sends through a custom\n * `ChatTransport` (`messages`, `trigger`, `chatId`, `messageId`) and yields\n * the same `UIMessageChunk`s that AI SDK's `result.toUIMessageStream()`\n * produces - so a paired `silkweaveTransport()` on the client can feed them\n * straight into `useChat` with no wire-format translation.\n *\n * @example\n * ```ts\n * import { silkweave } from '@silkweave/core'\n * import { trpc } from '@silkweave/trpc'\n * import { createChatAction } from '@silkweave/ai'\n * import { anthropic } from '@ai-sdk/anthropic'\n *\n * const ChatAction = createChatAction({\n * model: anthropic('claude-sonnet-4-6'),\n * system: 'You are a helpful assistant.'\n * })\n *\n * await silkweave({ name: 'chat-server', version: '1.0.0' })\n * .adapter(trpc({ port: 8080 }))\n * .action(ChatAction)\n * .start()\n * ```\n */\nexport function createChatAction(options: CreateChatActionOptions) {\n return createAction({\n name: options.name ?? 'chat',\n description: options.description ?? 'Chat with the assistant',\n input: z.object({\n messages: z.array(z.any()),\n trigger: z.enum(['submit-message', 'regenerate-message']).optional(),\n chatId: z.string().optional(),\n messageId: z.string().optional(),\n metadata: z.any().optional(),\n body: z.record(z.string(), z.any()).optional(),\n headers: z.record(z.string(), z.string()).optional()\n }),\n chunk: z.custom<UIMessageChunk>(),\n run: async function* ({ messages }) {\n const uiMessages = messages as UIMessage[]\n const result = streamText({\n model: options.model,\n system: options.system,\n messages: convertToModelMessages(uiMessages),\n tools: options.tools,\n maxOutputTokens: options.maxOutputTokens,\n temperature: options.temperature\n })\n for await (const chunk of result.toUIMessageStream()) {\n yield chunk\n }\n }\n })\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ChatTransport, UIMessage, UIMessageChunk } from 'ai'\n\n/**\n * Input passed to the underlying `subscribe` function. Mirrors the relevant\n * fields of `ChatTransport.sendMessages`'s options object - what the chat\n * action needs to drive the model - minus the `AbortSignal` (which is wired\n * separately via `unsubscribe()`).\n */\nexport interface SilkweaveTransportInput<M extends UIMessage = UIMessage> {\n messages: M[]\n trigger: 'submit-message' | 'regenerate-message'\n chatId: string\n messageId: string | undefined\n metadata?: unknown\n body?: Record<string, unknown>\n headers?: Record<string, string>\n}\n\n/**\n * Callback shape passed to the subscribe function. `onData` is typed as\n * `unknown` at the transport boundary (rather than the precise\n * `UIMessageChunk` union) because tRPC v11's `subscribe()` expects callbacks\n * compatible with the *inferred* subscription output, which can differ\n * subtly from `UIMessageChunk` due to how Zod erases discriminated-union\n * variance (e.g. `input?: unknown` vs `input: unknown`). At runtime the\n * server's `createChatAction` only yields valid `UIMessageChunk`s, so the\n * cast is safe.\n */\nexport interface SilkweaveTransportCallbacks {\n onData: (chunk: unknown) => void\n onError: (error: unknown) => void\n onComplete: () => void\n}\n\nexport interface SilkweaveTransportSubscription {\n unsubscribe: () => void\n}\n\n/**\n * The subscribe function. The shape is compatible with tRPC v11's\n * `client.<procedure>.subscribe(input, callbacks)` callsite - wrap your tRPC\n * subscription procedure in this and pass it to `silkweaveTransport()`.\n */\nexport type SilkweaveSubscribe<M extends UIMessage = UIMessage> = (\n input: SilkweaveTransportInput<M>,\n callbacks: SilkweaveTransportCallbacks\n) => SilkweaveTransportSubscription\n\n/**\n * Build a custom `ChatTransport` for Vercel AI SDK's `useChat` that delivers\n * `UIMessageChunk`s over a `subscribe` function (typically a tRPC subscription\n * procedure wired to a Silkweave streaming action).\n *\n * Skips AI SDK's Data Stream Protocol entirely - chunks are JS objects\n * delivered via the consumer-supplied transport, not parsed from prefix-coded\n * HTTP bodies. This means the wire format is whatever your subscribe function\n * uses (tRPC over SSE or WebSocket, in the typical case).\n *\n * @example\n * ```ts\n * import { silkweaveTransport } from '@silkweave/ai'\n * import { trpc } from './trpc-client'\n *\n * const transport = silkweaveTransport((input, callbacks) =>\n * trpc.chat.subscribe(input, callbacks)\n * )\n *\n * const { messages, sendMessage } = useChat({ transport })\n * ```\n *\n * `reconnectToStream()` returns `null` - stream resume after disconnect is not\n * supported. If a connection drops mid-stream the consumer must resend.\n */\nexport function silkweaveTransport<M extends UIMessage = UIMessage>(\n subscribe: SilkweaveSubscribe<M>\n): ChatTransport<M> {\n return {\n async sendMessages({ messages, trigger, chatId, messageId, abortSignal, metadata, body, headers }: any) {\n return new ReadableStream<UIMessageChunk>({\n start(controller) {\n let closed = false\n const close = () => {\n if (closed) { return }\n closed = true\n try { controller.close() } catch { /* already closed */ }\n }\n const subscription = subscribe(\n { messages: messages as M[], trigger, chatId, messageId, metadata, body, headers },\n {\n onData: (chunk) => {\n if (closed) { return }\n controller.enqueue(chunk as UIMessageChunk)\n },\n onError: (error) => {\n if (closed) { return }\n closed = true\n controller.error(error)\n },\n onComplete: close\n }\n )\n if (abortSignal) {\n const onAbort = () => {\n subscription.unsubscribe()\n close()\n }\n if (abortSignal.aborted) {\n onAbort()\n } else {\n abortSignal.addEventListener('abort', onAbort, { once: true })\n }\n }\n }\n })\n },\n reconnectToStream() {\n return Promise.resolve(null)\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,SAAgB,iBAAiB,SAAkC;AACjE,QAAO,aAAa;EAClB,MAAM,QAAQ,QAAQ;EACtB,aAAa,QAAQ,eAAe;EACpC,OAAO,EAAE,OAAO;GACd,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;GAC1B,SAAS,EAAE,KAAK,CAAC,kBAAkB,qBAAqB,CAAC,CAAC,UAAU;GACpE,QAAQ,EAAE,QAAQ,CAAC,UAAU;GAC7B,WAAW,EAAE,QAAQ,CAAC,UAAU;GAChC,UAAU,EAAE,KAAK,CAAC,UAAU;GAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,UAAU;GAC9C,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,UAAU;GACrD,CAAC;EACF,OAAO,EAAE,QAAwB;EACjC,KAAK,iBAAiB,EAAE,YAAY;GAClC,MAAM,aAAa;GACnB,MAAM,SAAS,WAAW;IACxB,OAAO,QAAQ;IACf,QAAQ,QAAQ;IAChB,UAAU,uBAAuB,WAAW;IAC5C,OAAO,QAAQ;IACf,iBAAiB,QAAQ;IACzB,aAAa,QAAQ;IACtB,CAAC;AACF,cAAW,MAAM,SAAS,OAAO,mBAAmB,CAClD,OAAM;;EAGX,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDJ,SAAgB,mBACd,WACkB;AAClB,QAAO;EACL,MAAM,aAAa,EAAE,UAAU,SAAS,QAAQ,WAAW,aAAa,UAAU,MAAM,WAAgB;AACtG,UAAO,IAAI,eAA+B,EACxC,MAAM,YAAY;IAChB,IAAI,SAAS;IACb,MAAM,cAAc;AAClB,SAAI,OAAU;AACd,cAAS;AACT,SAAI;AAAE,iBAAW,OAAO;aAAS;;IAEnC,MAAM,eAAe,UACnB;KAAY;KAAiB;KAAS;KAAQ;KAAW;KAAU;KAAM;KAAS,EAClF;KACE,SAAS,UAAU;AACjB,UAAI,OAAU;AACd,iBAAW,QAAQ,MAAwB;;KAE7C,UAAU,UAAU;AAClB,UAAI,OAAU;AACd,eAAS;AACT,iBAAW,MAAM,MAAM;;KAEzB,YAAY;KACb,CACF;AACD,QAAI,aAAa;KACf,MAAM,gBAAgB;AACpB,mBAAa,aAAa;AAC1B,aAAO;;AAET,SAAI,YAAY,QACd,UAAS;SAET,aAAY,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;;MAIrE,CAAC;;EAEJ,oBAAoB;AAClB,UAAO,QAAQ,QAAQ,KAAK;;EAE/B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import eslint from '@eslint/js'
|
|
2
|
+
import stylistic from '@stylistic/eslint-plugin'
|
|
3
|
+
import { defineConfig } from 'eslint/config'
|
|
4
|
+
import tseslint from 'typescript-eslint'
|
|
5
|
+
|
|
6
|
+
export default defineConfig(eslint.configs.recommended, tseslint.configs.recommendedTypeChecked, tseslint.configs.stylisticTypeChecked, {
|
|
7
|
+
languageOptions: {
|
|
8
|
+
parserOptions: {
|
|
9
|
+
project: 'tsconfig.json',
|
|
10
|
+
tsconfigRootDir: import.meta.dirname
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
plugins: { '@stylistic': stylistic },
|
|
14
|
+
rules: {
|
|
15
|
+
'@stylistic/space-in-parens': ['error'],
|
|
16
|
+
'@stylistic/comma-spacing': ['error'],
|
|
17
|
+
'@stylistic/no-multi-spaces': ['error'],
|
|
18
|
+
'@stylistic/no-trailing-spaces': ['error'],
|
|
19
|
+
'@stylistic/no-whitespace-before-property': ['error'],
|
|
20
|
+
'@stylistic/array-bracket-newline': ['error', 'consistent'],
|
|
21
|
+
'@stylistic/array-bracket-spacing': ['error'],
|
|
22
|
+
'@stylistic/arrow-spacing': ['error'],
|
|
23
|
+
'@stylistic/arrow-parens': ['error', 'always'],
|
|
24
|
+
'@stylistic/block-spacing': ['error', 'always'],
|
|
25
|
+
'@stylistic/brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
|
|
26
|
+
'@stylistic/comma-dangle': ['error', 'never'],
|
|
27
|
+
'@stylistic/key-spacing': ['error'],
|
|
28
|
+
'@stylistic/keyword-spacing': ['error'],
|
|
29
|
+
'@stylistic/member-delimiter-style': ['error', { 'multiline': { 'delimiter': 'none' } }],
|
|
30
|
+
'@stylistic/no-extra-semi': ['error'],
|
|
31
|
+
'@stylistic/indent': ['error', 2],
|
|
32
|
+
'@stylistic/no-multiple-empty-lines': ['error', { 'max': 1, 'maxEOF': 0, 'maxBOF': 0 }],
|
|
33
|
+
'@stylistic/object-curly-spacing': ['error', 'always'],
|
|
34
|
+
'@stylistic/quotes': ['error', 'single'],
|
|
35
|
+
'@stylistic/semi': ['error', 'never'],
|
|
36
|
+
'@stylistic/space-before-blocks': ['error', 'always'],
|
|
37
|
+
'@stylistic/space-before-function-paren': ['error', { 'anonymous': 'always', 'named': 'never', 'asyncArrow': 'always' }],
|
|
38
|
+
'@typescript-eslint/adjacent-overload-signatures': 'error',
|
|
39
|
+
'@typescript-eslint/array-type': 'off',
|
|
40
|
+
'@typescript-eslint/await-thenable': 'error',
|
|
41
|
+
'@typescript-eslint/ban-types': 'off',
|
|
42
|
+
'@typescript-eslint/consistent-type-assertions': 'off',
|
|
43
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
44
|
+
'@typescript-eslint/explicit-member-accessibility': 'off',
|
|
45
|
+
'@typescript-eslint/no-angle-bracket-type-assertion': 'off',
|
|
46
|
+
'@typescript-eslint/no-empty-function': 'off',
|
|
47
|
+
'@typescript-eslint/no-empty-interface': 'off',
|
|
48
|
+
'@typescript-eslint/no-extra-non-null-assertion': 'error',
|
|
49
|
+
'@typescript-eslint/no-floating-promises': 'off',
|
|
50
|
+
'@typescript-eslint/no-misused-new': 'error',
|
|
51
|
+
'@typescript-eslint/no-misused-promises': 'off',
|
|
52
|
+
'@typescript-eslint/no-namespace': 'off',
|
|
53
|
+
'@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
|
|
54
|
+
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
55
|
+
'@typescript-eslint/no-object-literal-type-assertion': 'off',
|
|
56
|
+
'@typescript-eslint/no-parameter-properties': 'off',
|
|
57
|
+
'@typescript-eslint/no-shadow': 'error',
|
|
58
|
+
'@typescript-eslint/no-triple-slash-reference': 'off',
|
|
59
|
+
'@typescript-eslint/no-unused-vars': ['error', {
|
|
60
|
+
'args': 'all',
|
|
61
|
+
'argsIgnorePattern': '^_',
|
|
62
|
+
'caughtErrors': 'all',
|
|
63
|
+
'caughtErrorsIgnorePattern': '^_',
|
|
64
|
+
'destructuredArrayIgnorePattern': '^_',
|
|
65
|
+
'varsIgnorePattern': '^_',
|
|
66
|
+
'ignoreRestSiblings': true
|
|
67
|
+
}],
|
|
68
|
+
'@typescript-eslint/no-use-before-define': 'off',
|
|
69
|
+
'@typescript-eslint/no-var-requires': 'off',
|
|
70
|
+
'@typescript-eslint/prefer-for-of': 'error',
|
|
71
|
+
'@typescript-eslint/prefer-interface': 'off',
|
|
72
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'off',
|
|
73
|
+
'@typescript-eslint/prefer-optional-chain': 'error',
|
|
74
|
+
'@typescript-eslint/return-await': 'error',
|
|
75
|
+
'@typescript-eslint/unified-signatures': 'error',
|
|
76
|
+
'@typescript-eslint/no-unsafe-return': 'off',
|
|
77
|
+
'@typescript-eslint/no-redundant-type-constituents': 'off',
|
|
78
|
+
'@typescript-eslint/no-unsafe-member-access': 'off',
|
|
79
|
+
'@typescript-eslint/no-unsafe-call': 'off',
|
|
80
|
+
'@typescript-eslint/no-unsafe-argument': 'off',
|
|
81
|
+
'@typescript-eslint/dot-notation': 'off',
|
|
82
|
+
'@typescript-eslint/prefer-regexp-exec': 'off',
|
|
83
|
+
'@typescript-eslint/require-await': 'off',
|
|
84
|
+
'@typescript-eslint/only-throw-error': 'error',
|
|
85
|
+
'@typescript-eslint/no-base-to-string': 'off',
|
|
86
|
+
'@typescript-eslint/restrict-template-expressions': 'off'
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
files: ['eslint.config.mjs'],
|
|
90
|
+
extends: [tseslint.configs.disableTypeChecked]
|
|
91
|
+
}, {
|
|
92
|
+
ignores: ['build', 'tsdown.config.ts', 'scratch']
|
|
93
|
+
})
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@silkweave/ai",
|
|
3
|
+
"version": "1.9.1",
|
|
4
|
+
"description": "Silkweave Vercel AI SDK integration - custom ChatTransport bridging useChat to tRPC subscriptions, plus a chat action helper that wraps streamText into a streaming Silkweave action",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+ssh://git@github.com/silkweave/silkweave.git",
|
|
8
|
+
"directory": "packages/ai"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "build/index.mjs",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"zod": "^3.25.0",
|
|
14
|
+
"@silkweave/core": "1.9.1"
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"ai": "^5.0.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@eslint/js": "^10.0.1",
|
|
21
|
+
"@stylistic/eslint-plugin": "^5.10.0",
|
|
22
|
+
"@types/node": "^22.0.0",
|
|
23
|
+
"eslint": "^10.4.0",
|
|
24
|
+
"ai": "^5.0.0",
|
|
25
|
+
"rimraf": "^6.1.3",
|
|
26
|
+
"tsdown": "^0.21.8",
|
|
27
|
+
"tsx": "^4.21.0",
|
|
28
|
+
"typescript": "^5.9.3",
|
|
29
|
+
"typescript-eslint": "^8.56.1"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"clean": "rimraf build",
|
|
33
|
+
"build": "tsdown",
|
|
34
|
+
"watch": "tsdown --watch",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"lint": "eslint",
|
|
37
|
+
"check": "pnpm lint && pnpm typecheck"
|
|
38
|
+
},
|
|
39
|
+
"exports": {
|
|
40
|
+
".": "./build/index.mjs"
|
|
41
|
+
},
|
|
42
|
+
"types": "./build/index.d.ts"
|
|
43
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createAction } from '@silkweave/core'
|
|
2
|
+
import { convertToModelMessages, streamText, type LanguageModel, type ToolSet, type UIMessage, type UIMessageChunk } from 'ai'
|
|
3
|
+
import z from 'zod/v4'
|
|
4
|
+
|
|
5
|
+
export interface CreateChatActionOptions {
|
|
6
|
+
/** Action name. Defaults to `'chat'`. */
|
|
7
|
+
name?: string
|
|
8
|
+
/** Action description (shown to MCP clients, tRPC docs, etc). */
|
|
9
|
+
description?: string
|
|
10
|
+
/** The language model to drive (e.g. `anthropic('claude-sonnet-4-6')`). */
|
|
11
|
+
model: LanguageModel
|
|
12
|
+
/** System prompt prepended to every conversation. */
|
|
13
|
+
system?: string
|
|
14
|
+
/** Tools registered with `streamText`. */
|
|
15
|
+
tools?: ToolSet
|
|
16
|
+
/** Max model output tokens. */
|
|
17
|
+
maxOutputTokens?: number
|
|
18
|
+
/** Model temperature. */
|
|
19
|
+
temperature?: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Build a Silkweave streaming action that wraps Vercel AI SDK's `streamText`.
|
|
24
|
+
*
|
|
25
|
+
* The action accepts the shape `useChat` sends through a custom
|
|
26
|
+
* `ChatTransport` (`messages`, `trigger`, `chatId`, `messageId`) and yields
|
|
27
|
+
* the same `UIMessageChunk`s that AI SDK's `result.toUIMessageStream()`
|
|
28
|
+
* produces - so a paired `silkweaveTransport()` on the client can feed them
|
|
29
|
+
* straight into `useChat` with no wire-format translation.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { silkweave } from '@silkweave/core'
|
|
34
|
+
* import { trpc } from '@silkweave/trpc'
|
|
35
|
+
* import { createChatAction } from '@silkweave/ai'
|
|
36
|
+
* import { anthropic } from '@ai-sdk/anthropic'
|
|
37
|
+
*
|
|
38
|
+
* const ChatAction = createChatAction({
|
|
39
|
+
* model: anthropic('claude-sonnet-4-6'),
|
|
40
|
+
* system: 'You are a helpful assistant.'
|
|
41
|
+
* })
|
|
42
|
+
*
|
|
43
|
+
* await silkweave({ name: 'chat-server', version: '1.0.0' })
|
|
44
|
+
* .adapter(trpc({ port: 8080 }))
|
|
45
|
+
* .action(ChatAction)
|
|
46
|
+
* .start()
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export function createChatAction(options: CreateChatActionOptions) {
|
|
50
|
+
return createAction({
|
|
51
|
+
name: options.name ?? 'chat',
|
|
52
|
+
description: options.description ?? 'Chat with the assistant',
|
|
53
|
+
input: z.object({
|
|
54
|
+
messages: z.array(z.any()),
|
|
55
|
+
trigger: z.enum(['submit-message', 'regenerate-message']).optional(),
|
|
56
|
+
chatId: z.string().optional(),
|
|
57
|
+
messageId: z.string().optional(),
|
|
58
|
+
metadata: z.any().optional(),
|
|
59
|
+
body: z.record(z.string(), z.any()).optional(),
|
|
60
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
61
|
+
}),
|
|
62
|
+
chunk: z.custom<UIMessageChunk>(),
|
|
63
|
+
run: async function* ({ messages }) {
|
|
64
|
+
const uiMessages = messages as UIMessage[]
|
|
65
|
+
const result = streamText({
|
|
66
|
+
model: options.model,
|
|
67
|
+
system: options.system,
|
|
68
|
+
messages: convertToModelMessages(uiMessages),
|
|
69
|
+
tools: options.tools,
|
|
70
|
+
maxOutputTokens: options.maxOutputTokens,
|
|
71
|
+
temperature: options.temperature
|
|
72
|
+
})
|
|
73
|
+
for await (const chunk of result.toUIMessageStream()) {
|
|
74
|
+
yield chunk
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
}
|
package/src/index.ts
ADDED
package/src/transport.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
import type { ChatTransport, UIMessage, UIMessageChunk } from 'ai'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Input passed to the underlying `subscribe` function. Mirrors the relevant
|
|
7
|
+
* fields of `ChatTransport.sendMessages`'s options object - what the chat
|
|
8
|
+
* action needs to drive the model - minus the `AbortSignal` (which is wired
|
|
9
|
+
* separately via `unsubscribe()`).
|
|
10
|
+
*/
|
|
11
|
+
export interface SilkweaveTransportInput<M extends UIMessage = UIMessage> {
|
|
12
|
+
messages: M[]
|
|
13
|
+
trigger: 'submit-message' | 'regenerate-message'
|
|
14
|
+
chatId: string
|
|
15
|
+
messageId: string | undefined
|
|
16
|
+
metadata?: unknown
|
|
17
|
+
body?: Record<string, unknown>
|
|
18
|
+
headers?: Record<string, string>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Callback shape passed to the subscribe function. `onData` is typed as
|
|
23
|
+
* `unknown` at the transport boundary (rather than the precise
|
|
24
|
+
* `UIMessageChunk` union) because tRPC v11's `subscribe()` expects callbacks
|
|
25
|
+
* compatible with the *inferred* subscription output, which can differ
|
|
26
|
+
* subtly from `UIMessageChunk` due to how Zod erases discriminated-union
|
|
27
|
+
* variance (e.g. `input?: unknown` vs `input: unknown`). At runtime the
|
|
28
|
+
* server's `createChatAction` only yields valid `UIMessageChunk`s, so the
|
|
29
|
+
* cast is safe.
|
|
30
|
+
*/
|
|
31
|
+
export interface SilkweaveTransportCallbacks {
|
|
32
|
+
onData: (chunk: unknown) => void
|
|
33
|
+
onError: (error: unknown) => void
|
|
34
|
+
onComplete: () => void
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface SilkweaveTransportSubscription {
|
|
38
|
+
unsubscribe: () => void
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The subscribe function. The shape is compatible with tRPC v11's
|
|
43
|
+
* `client.<procedure>.subscribe(input, callbacks)` callsite - wrap your tRPC
|
|
44
|
+
* subscription procedure in this and pass it to `silkweaveTransport()`.
|
|
45
|
+
*/
|
|
46
|
+
export type SilkweaveSubscribe<M extends UIMessage = UIMessage> = (
|
|
47
|
+
input: SilkweaveTransportInput<M>,
|
|
48
|
+
callbacks: SilkweaveTransportCallbacks
|
|
49
|
+
) => SilkweaveTransportSubscription
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Build a custom `ChatTransport` for Vercel AI SDK's `useChat` that delivers
|
|
53
|
+
* `UIMessageChunk`s over a `subscribe` function (typically a tRPC subscription
|
|
54
|
+
* procedure wired to a Silkweave streaming action).
|
|
55
|
+
*
|
|
56
|
+
* Skips AI SDK's Data Stream Protocol entirely - chunks are JS objects
|
|
57
|
+
* delivered via the consumer-supplied transport, not parsed from prefix-coded
|
|
58
|
+
* HTTP bodies. This means the wire format is whatever your subscribe function
|
|
59
|
+
* uses (tRPC over SSE or WebSocket, in the typical case).
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* import { silkweaveTransport } from '@silkweave/ai'
|
|
64
|
+
* import { trpc } from './trpc-client'
|
|
65
|
+
*
|
|
66
|
+
* const transport = silkweaveTransport((input, callbacks) =>
|
|
67
|
+
* trpc.chat.subscribe(input, callbacks)
|
|
68
|
+
* )
|
|
69
|
+
*
|
|
70
|
+
* const { messages, sendMessage } = useChat({ transport })
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* `reconnectToStream()` returns `null` - stream resume after disconnect is not
|
|
74
|
+
* supported. If a connection drops mid-stream the consumer must resend.
|
|
75
|
+
*/
|
|
76
|
+
export function silkweaveTransport<M extends UIMessage = UIMessage>(
|
|
77
|
+
subscribe: SilkweaveSubscribe<M>
|
|
78
|
+
): ChatTransport<M> {
|
|
79
|
+
return {
|
|
80
|
+
async sendMessages({ messages, trigger, chatId, messageId, abortSignal, metadata, body, headers }: any) {
|
|
81
|
+
return new ReadableStream<UIMessageChunk>({
|
|
82
|
+
start(controller) {
|
|
83
|
+
let closed = false
|
|
84
|
+
const close = () => {
|
|
85
|
+
if (closed) { return }
|
|
86
|
+
closed = true
|
|
87
|
+
try { controller.close() } catch { /* already closed */ }
|
|
88
|
+
}
|
|
89
|
+
const subscription = subscribe(
|
|
90
|
+
{ messages: messages as M[], trigger, chatId, messageId, metadata, body, headers },
|
|
91
|
+
{
|
|
92
|
+
onData: (chunk) => {
|
|
93
|
+
if (closed) { return }
|
|
94
|
+
controller.enqueue(chunk as UIMessageChunk)
|
|
95
|
+
},
|
|
96
|
+
onError: (error) => {
|
|
97
|
+
if (closed) { return }
|
|
98
|
+
closed = true
|
|
99
|
+
controller.error(error)
|
|
100
|
+
},
|
|
101
|
+
onComplete: close
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
if (abortSignal) {
|
|
105
|
+
const onAbort = () => {
|
|
106
|
+
subscription.unsubscribe()
|
|
107
|
+
close()
|
|
108
|
+
}
|
|
109
|
+
if (abortSignal.aborted) {
|
|
110
|
+
onAbort()
|
|
111
|
+
} else {
|
|
112
|
+
abortSignal.addEventListener('abort', onAbort, { once: true })
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
},
|
|
118
|
+
reconnectToStream() {
|
|
119
|
+
return Promise.resolve(null)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022", "DOM"],
|
|
7
|
+
"outDir": "build",
|
|
8
|
+
"rootDir": "src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"allowSyntheticDefaultImports": true,
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"composite": true,
|
|
16
|
+
"declaration": true,
|
|
17
|
+
"declarationMap": true,
|
|
18
|
+
"sourceMap": true
|
|
19
|
+
},
|
|
20
|
+
"include": ["src"],
|
|
21
|
+
"exclude": ["node_modules", "build"]
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ar.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/az.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/be.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ca.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/cs.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/de.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/eo.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/es.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fa.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fi.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fr.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fr-ca.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/he.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/hu.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/id.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/it.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ja.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/kh.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ko.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/mk.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ms.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/nl.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/no.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ota.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ps.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/pl.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/pt.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ru.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/sl.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/sv.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ta.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/th.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/tr.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ua.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ur.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/vi.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/zh-cn.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/zh-tw.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/function.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/json-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/checks.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/compat.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/coerce.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/index.d.cts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../core/src/util/context.ts","../core/src/util/action.ts","../core/src/util/adapter.ts","../core/src/lib/silkweave.ts","../core/src/util/error.ts","../core/src/util/streaming.ts","../core/src/util/zod.ts","../core/src/index.ts","../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../node_modules/.pnpm/@ai-sdk+provider@2.0.3/node_modules/@ai-sdk/provider/dist/index.d.ts","../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/zoderror.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/eventsource-parser@3.0.8/node_modules/eventsource-parser/dist/stream.d.cts","../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.25_zod@3.25.76/node_modules/@ai-sdk/provider-utils/dist/index.d.ts","../../node_modules/.pnpm/@ai-sdk+gateway@2.0.91_zod@3.25.76/node_modules/@ai-sdk/gateway/dist/index.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/types.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/utils.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/exception.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/time.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/attributes.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/types.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/context.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/context.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/types.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/consolelogger.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/diag.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/observableresult.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/metric.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/meter.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/noopmeter.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/meterprovider.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/metrics.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation/textmappropagator.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/propagation.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/attributes.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_state.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_context.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/link.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/status.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_kind.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/spanoptions.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_options.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/proxytracer.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_provider.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/proxytracerprovider.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/samplingresult.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/sampler.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_flags.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/utils.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/context-utils.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/trace.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context-api.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag-api.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics-api.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation-api.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace-api.d.ts","../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.d.ts","../../node_modules/.pnpm/ai@5.0.190_zod@3.25.76/node_modules/ai/dist/index.d.ts","./src/chataction.ts","./src/transport.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/index.d.ts"],"fileIdsList":[[136,152,211,259,276,277],[124,136,137,150,151,211,259,276,277],[135,211,259,276,277],[211,259,276,277],[124,125,211,259,276,277],[160,211,259,276,277],[163,211,259,276,277],[168,170,211,259,276,277],[156,160,172,173,211,259,276,277],[183,186,192,194,211,259,276,277],[155,160,211,259,276,277],[154,211,259,276,277],[155,211,259,276,277],[162,211,259,276,277],[165,211,259,276,277],[155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,211,259,276,277],[171,211,259,276,277],[167,211,259,276,277],[168,211,259,276,277],[159,160,166,211,259,276,277],[167,168,211,259,276,277],[174,211,259,276,277],[195,211,259,276,277],[159,211,259,276,277],[160,177,180,211,259,276,277],[176,211,259,276,277],[177,211,259,276,277],[175,177,211,259,276,277],[160,180,182,183,184,211,259,276,277],[183,184,186,211,259,276,277],[160,175,178,181,188,211,259,276,277],[175,176,211,259,276,277],[157,158,175,177,178,179,211,259,276,277],[177,180,211,259,276,277],[158,175,178,181,211,259,276,277],[160,180,182,211,259,276,277],[183,184,211,259,276,277],[211,256,257,259,276,277],[211,258,259,276,277],[259,276,277],[211,259,264,276,277,294],[211,259,260,265,270,276,277,279,291,302],[211,259,260,261,270,276,277,279],[206,207,208,211,259,276,277],[211,259,262,276,277,303],[211,259,263,264,271,276,277,280],[211,259,264,276,277,291,299],[211,259,265,267,270,276,277,279],[211,258,259,266,276,277],[211,259,267,268,276,277],[211,259,269,270,276,277],[211,258,259,270,276,277],[211,259,270,271,272,276,277,291,302],[211,259,270,271,272,276,277,286,291,294],[211,252,259,267,270,273,276,277,279,291,302],[211,259,270,271,273,274,276,277,279,291,299,302],[211,259,273,275,276,277,291,299,302],[209,210,211,212,213,214,215,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308],[211,259,270,276,277],[211,259,276,277,278,302],[211,259,267,270,276,277,279,291],[211,259,276,277,280],[211,259,276,277,281],[211,258,259,276,277,282],[211,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308],[211,259,276,277,284],[211,259,276,277,285],[211,259,270,276,277,286,287],[211,259,276,277,286,288,303,305],[211,259,271,276,277],[211,259,270,276,277,291,292,294],[211,259,276,277,293,294],[211,259,276,277,291,292],[211,259,276,277,294],[211,259,276,277,295],[211,256,259,276,277,291,296,302],[211,259,270,276,277,297,298],[211,259,276,277,297,298],[211,259,264,276,277,279,291,299],[211,259,276,277,300],[211,259,276,277,279,301],[211,259,273,276,277,285,302],[211,259,264,276,277,303],[211,259,276,277,291,304],[211,259,276,277,278,305],[211,259,276,277,306],[211,252,259,276,277],[211,252,259,270,272,276,277,282,291,294,302,304,305,307],[211,259,276,277,291,308],[124,136,150,152,153,201,211,259,273,276,277],[211,224,228,259,276,277,302],[211,224,259,276,277,291,302],[211,219,259,276,277],[211,221,224,259,276,277,299,302],[211,259,276,277,279,299],[211,259,276,277,309],[211,219,259,276,277,309],[211,221,224,259,276,277,279,302],[211,216,217,220,223,259,270,276,277,291,302],[211,224,231,259,276,277],[211,216,222,259,276,277],[211,224,245,246,259,276,277],[211,220,224,259,276,277,294,302,309],[211,245,259,276,277,309],[211,218,219,259,276,277,309],[211,224,259,276,277],[211,218,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,259,276,277],[211,224,239,259,276,277],[211,224,231,232,259,276,277],[211,222,224,232,233,259,276,277],[211,223,259,276,277],[211,216,219,224,259,276,277],[211,224,228,232,233,259,276,277],[211,228,259,276,277],[211,222,224,227,259,276,277,302],[211,216,221,224,231,259,276,277],[211,259,276,277,291],[211,219,224,245,259,276,277,307,309],[140,141,211,259,276,277],[138,139,140,142,143,148,211,259,276,277],[139,140,211,259,276,277],[148,211,259,276,277],[149,211,259,276,277],[140,211,259,276,277],[138,139,140,143,144,145,146,147,211,259,276,277],[138,139,150,211,259,276,277],[114,211,259,276,277],[114,117,211,259,276,277],[107,114,115,116,117,118,119,120,121,211,259,276,277],[122,211,259,276,277],[114,115,211,259,276,277],[114,116,211,259,276,277],[60,62,63,64,65,211,259,276,277],[60,62,64,65,211,259,276,277],[60,62,64,211,259,276,277],[60,62,63,65,211,259,276,277],[60,62,65,211,259,276,277],[60,61,62,63,64,65,66,67,107,108,109,110,111,112,113,211,259,276,277],[62,65,211,259,276,277],[59,60,61,63,64,65,211,259,276,277],[62,108,112,211,259,276,277],[62,63,64,65,211,259,276,277],[123,211,259,276,277],[64,211,259,276,277],[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,211,259,276,277],[124,134,202,211,259,276,277],[203,204,211,259,276,277],[202,211,259,276,277],[127,128,129,130,131,132,133,211,259,276,277],[127,128,129,211,259,276,277],[124,126,127,211,259,276,277],[127,128,211,259,276,277],[124,211,259,276,277]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"91cf9887208be8641244827c18e620166edf7e1c53114930b54eaeaab588a5be","impliedFormat":1},{"version":"ef9b6279acc69002a779d0172916ef22e8be5de2d2469ff2f4bb019a21e89de2","impliedFormat":1},{"version":"71623b889c23a332292c85f9bf41469c3f2efa47f81f12c73e14edbcffa270d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"88863d76039cc550f8b7688a213dd051ae80d94a883eb99389d6bc4ce21c8688","impliedFormat":1},{"version":"e9ce511dae7201b833936d13618dff01815a9db2e6c2cc28646e21520c452d6c","impliedFormat":1},{"version":"243649afb10d950e7e83ee4d53bd2fbd615bb579a74cf6c1ce10e64402cdf9bb","impliedFormat":1},{"version":"35575179030368798cbcd50da928a275234445c9a0df32d4a2c694b2b3d20439","impliedFormat":1},{"version":"c939cb12cb000b4ec9c3eca3fe7dee1fe373ccb801237631d9252bad10206d61","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"b42d3651103a532f7492e719a828647af97306b2356ae757ebb7f17f4a8c41e5","impliedFormat":1},{"version":"03268b4d02371bdf514f513797ed3c9eb0840b0724ff6778bda0ef74c35273be","impliedFormat":1},{"version":"3511847babb822e10715a18348d1cbb0dae73c4e4c0a1bcf7cbc12771b310d45","impliedFormat":1},{"version":"80e653fbbec818eecfe95d182dc65a1d107b343d970159a71922ac4491caa0af","impliedFormat":1},{"version":"53f00dc83ccceb8fad22eb3aade64e4bcdb082115f230c8ba3d40f79c835c30e","impliedFormat":1},{"version":"35475931e8b55c4d33bfe3abc79f5673924a0bd4224c7c6108a4e08f3521643c","impliedFormat":1},{"version":"9078205849121a5d37a642949d687565498da922508eacb0e5a0c3de427f0ae5","impliedFormat":1},{"version":"e8f8f095f137e96dc64b56e59556c02f3c31db4b354801d6ae3b90dceae60240","impliedFormat":1},{"version":"451abef2a26cebb6f54236e68de3c33691e3b47b548fd4c8fa05fd84ab2238ff","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"41f185713d78f7af0253a339927dc04b485f46210d6bc0691cf908e3e8ded2a1","impliedFormat":1},{"version":"23ee410c645f68bd99717527de1586e3eb826f166d654b74250ad92b27311fde","impliedFormat":1},{"version":"ffc3e1064146c1cafda1b0686ae9679ba1fb706b2f415e057be01614bf918dba","impliedFormat":1},{"version":"995869b1ddf66bbcfdb417f7446f610198dcce3280a0ae5c8b332ed985c01855","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"dca963a986285211cfa75b9bb57914538de29585d34217d03b538e6473ac4c44","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"f17ed72d1b1882ab6dc66d45e699f757d15bba0807af2fc9c3ec98fe367611c1","impliedFormat":99},{"version":"b1067ccb56b38af060dc3299ea7c4c6362cad4f07d0d454325a74808204fc801","impliedFormat":99},{"version":"75366be9054e676c1d876a41e54bde647297f9a1b343c7abb10c036525c19cbf","impliedFormat":99},{"version":"932b6effdf8b7a3d6678374333f988803247bc70dd08c9e35d2803f1305724ae","impliedFormat":99},{"version":"b1aca439d6f4bbd2da6f50a0ce887ac4dc3212233228bacb188361549b566e87","impliedFormat":99},{"version":"a9e37fab16bc8743f2a93f9417c7fe31919994e3a490ba3648ddd94328293618","impliedFormat":99},{"version":"7e44c7a7420c341dd6e730cc3e65806c4f8a7f536c7c8af15add148ce10deaac","impliedFormat":99},{"version":"0be1f33b4dffd811a440f049a100575a59bb58012abf2400333601c2c7c2b1ff","impliedFormat":99},{"version":"445ec4745c80b25d069b2d5d37021d6f609171c6726fc3c1285c170c47a7276a","impliedFormat":99},{"version":"7cce3666f43027a6ddfbe09298ed5b89c7b7482fbf8d33d69b98cf82ba4d40ff","impliedFormat":99},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"5d2723ace25db1d7fa3ef51f71c28383c959b18439ba8d577f46a1d50b2b9420","impliedFormat":1},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"81d4c6b3edfc709bc1a57d75958b217d205ea3b17671630aef24b8328bab13ac","impliedFormat":1},{"version":"1cdbe7fb17b63e2f7eb47e731a0b5f6d614f7c8b6eb78ecf93a9a64e688afc31","impliedFormat":1},{"version":"60f8b38c19cde334341ec3a90bbb211ad940ca48781c5a5301d19f1dc5097785","impliedFormat":1},{"version":"a4e9e0d92dcad2cb387a5f1bdffe621569052f2d80186e11973aa7080260d296","impliedFormat":1},{"version":"f6380cc36fc3efc70084d288d0a05d0a2e09da012ee3853f9d62431e7216f129","impliedFormat":1},{"version":"497c3e541b4acf6c5d5ba75b03569cfe5fe25c8a87e6c87f1af98da6a3e7b918","impliedFormat":1},{"version":"d9429b81edf2fb2abf1e81e9c2e92615f596ed3166673d9b69b84c369b15fdc0","impliedFormat":1},{"version":"7e22943ae4e474854ca0695ab750a8026f55bb94278331fda02a4fb42efce063","impliedFormat":1},{"version":"7da9ff3d9a7e62ddca6393a23e67296ab88f2fcb94ee5f7fb977fa8e478852ac","impliedFormat":1},{"version":"e1b45cc21ea200308cbc8abae2fb0cfd014cb5b0e1d1643bcc50afa5959b6d83","impliedFormat":1},{"version":"c9740b0ce7533ce6ba21a7d424e38d2736acdddeab2b1a814c00396e62cc2f10","impliedFormat":1},{"version":"b3c1f6a3fdbb04c6b244de6d5772ffdd9e962a2faea1440e410049c13e874b87","impliedFormat":1},{"version":"dcaa872d9b52b9409979170734bdfd38f846c32114d05b70640fd05140b171bb","impliedFormat":1},{"version":"6c434d20da381fcd2e8b924a3ec9b8653cf8bed8e0da648e91f4c984bd2a5a91","impliedFormat":1},{"version":"992419d044caf6b14946fa7b9463819ab2eeb7af7c04919cc2087ce354c92266","impliedFormat":1},{"version":"fa9815e9ce1330289a5c0192e2e91eb6178c0caa83c19fe0c6a9f67013fe795c","impliedFormat":1},{"version":"06384a1a73fcf4524952ecd0d6b63171c5d41dd23573907a91ef0a687ddb4a8c","impliedFormat":1},{"version":"34b1594ecf1c84bcc7a04d9f583afa6345a6fea27a52cf2685f802629219de45","impliedFormat":1},{"version":"d82c9ca830d7b94b7530a2c5819064d8255b93dfeddc5b2ebb8a09316f002c89","impliedFormat":1},{"version":"7e046b9634add57e512412a7881efbc14d44d1c65eadd35432412aa564537975","impliedFormat":1},{"version":"aac9079b9e2b5180036f27ab37cb3cf4fd19955be48ccc82eab3f092ee3d4026","impliedFormat":1},{"version":"3d9c38933bc69e0a885da20f019de441a3b5433ce041ba5b9d3a541db4b568cb","impliedFormat":1},{"version":"606aa2b74372221b0f79ca8ae3568629f444cc454aa59b032e4cb602308dec94","impliedFormat":1},{"version":"50474eaea72bfda85cc37ae6cd29f0556965c0849495d96c8c04c940ef3d2f44","impliedFormat":1},{"version":"b4874382f863cf7dc82b3d15aed1e1372ac3fede462065d5bfc8510c0d8f7b19","impliedFormat":1},{"version":"df10b4f781871afb72b2d648d497671190b16b679bf7533b744cc10b3c6bf7ea","impliedFormat":1},{"version":"1fdc28754c77e852c92087c789a1461aa6eed19c335dc92ce6b16a188e7ba305","impliedFormat":1},{"version":"a656dab1d502d4ddc845b66d8735c484bfebbf0b1eda5fb29729222675759884","impliedFormat":1},{"version":"465a79505258d251068dc0047a67a3605dd26e6b15e9ad2cec297442cbb58820","impliedFormat":1},{"version":"ddae22d9329db28ce3d80a2a53f99eaed66959c1c9cd719c9b744e5470579d2f","impliedFormat":1},{"version":"d0e25feadef054c6fc6a7f55ccc3b27b7216142106b9ff50f5e7b19d85c62ca7","impliedFormat":1},{"version":"111214009193320cacbae104e8281f6cb37788b52a6a84d259f9822c8c71f6ca","impliedFormat":1},{"version":"01c8e2c8984c96b9b48be20ee396bd3689a3a3e6add8d50fe8229a7d4e62ff45","impliedFormat":1},{"version":"a4a0800b592e533897b4967b00fb00f7cd48af9714d300767cc231271aa100af","impliedFormat":1},{"version":"20aa818c3e16e40586f2fa26327ea17242c8873fe3412a69ec68846017219314","impliedFormat":1},{"version":"f498532f53d54f831851990cb4bcd96063d73e302906fa07e2df24aa5935c7d1","impliedFormat":1},{"version":"5fd19dfde8de7a0b91df6a9bbdc44b648fd1f245cae9e8b8cf210d83ee06f106","impliedFormat":1},{"version":"3b8d6638c32e63ea0679eb26d1eb78534f4cc02c27b80f1c0a19f348774f5571","impliedFormat":1},{"version":"ce0da52e69bc3d82a7b5bc40da6baad08d3790de13ad35e89148a88055b46809","impliedFormat":1},{"version":"9e01233da81bfed887f8d9a70d1a26bf11b8ddff165806cc586c84980bf8fc24","impliedFormat":1},{"version":"214a6afbab8b285fc97eb3cece36cae65ea2fca3cbd0c017a96159b14050d202","impliedFormat":1},{"version":"14beeca2944b75b229c0549e0996dc4b7863e07257e0d359d63a7be49a6b86a4","impliedFormat":1},{"version":"f7bb9adb1daa749208b47d1313a46837e4d27687f85a3af7777fc1c9b3dc06b1","impliedFormat":1},{"version":"c549fe2f52101ffe47f58107c702af7cdcd42da8c80afd79f707d1c5d77d4b6e","impliedFormat":1},{"version":"3966ea9e1c1a5f6e636606785999734988e135541b79adc6b5d00abdc0f4bf05","impliedFormat":1},{"version":"0b60b69c957adb27f990fbc27ea4ac1064249400262d7c4c1b0a1687506b3406","impliedFormat":1},{"version":"12c26e5d1befc0ded725cee4c2316f276013e6f2eb545966562ae9a0c1931357","impliedFormat":1},{"version":"27b247363f1376c12310f73ebac6debcde009c0b95b65a8207e4fa90e132b30a","impliedFormat":1},{"version":"05bd302e2249da923048c09dc684d1d74cb205551a87f22fb8badc09ec532a08","impliedFormat":1},{"version":"fe930ec064571ab3b698b13bddf60a29abf9d2f36d51ab1ca0083b087b061f3a","impliedFormat":1},{"version":"6b85c4198e4b62b0056d55135ad95909adf1b95c9a86cdbed2c0f4cc1a902d53","impliedFormat":1},{"version":"0be89a7733266ce4c046606ce9bf31f81045a2759909ff81e154a96fc5e58c1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"f329b17a7c4e044d1205269ff179debcf8f1e72838b44f661011fddd2686911f","signature":"bda72f1a2efbc7a76c3c433edabd7241dceb610708b796619bca35cd19695bde","impliedFormat":99},{"version":"301165bb5ce3efbf0085bd818980a496e03ae8ed8a8ab7e7ce69dfd96ed297dd","signature":"a7118b3dcf846bc50235c9c9723917add986c283e4746fc0122521f661eb741b","impliedFormat":99},{"version":"c32ae92152e08a588db1994a72bc2db9a34c43097b4f144355a6e44591a6be1a","signature":"2720148a61456606a71ededa00aba9a69ab2596ae504fda8e3f5fd4a37d7556a","impliedFormat":99},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[[203,205]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./build","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[153,1],[152,2],[136,3],[125,4],[126,5],[162,6],[165,7],[171,8],[174,9],[195,10],[173,11],[154,4],[155,12],[156,13],[159,4],[157,4],[158,4],[196,14],[161,6],[160,4],[197,15],[164,7],[163,4],[201,16],[198,17],[168,18],[170,19],[167,20],[169,21],[166,18],[199,22],[172,6],[200,23],[175,24],[194,25],[191,26],[193,27],[178,28],[185,29],[187,30],[189,31],[188,32],[180,33],[177,26],[181,4],[192,34],[182,35],[179,4],[190,4],[176,4],[183,36],[184,4],[186,37],[137,4],[135,4],[256,38],[257,38],[258,39],[211,40],[259,41],[260,42],[261,43],[206,4],[209,44],[207,4],[208,4],[262,45],[263,46],[264,47],[265,48],[266,49],[267,50],[268,50],[269,51],[270,52],[271,53],[272,54],[212,4],[210,4],[273,55],[274,56],[275,57],[309,58],[276,59],[277,4],[278,60],[279,61],[280,62],[281,63],[282,64],[283,65],[284,66],[285,67],[286,68],[287,68],[288,69],[289,4],[290,70],[291,71],[293,72],[292,73],[294,74],[295,75],[296,76],[297,77],[298,78],[299,79],[300,80],[301,81],[302,82],[303,83],[304,84],[305,85],[306,86],[213,4],[214,4],[215,4],[253,87],[254,4],[255,4],[307,88],[308,89],[202,90],[151,4],[57,4],[58,4],[10,4],[12,4],[11,4],[2,4],[13,4],[14,4],[15,4],[16,4],[17,4],[18,4],[19,4],[20,4],[3,4],[21,4],[22,4],[4,4],[23,4],[27,4],[24,4],[25,4],[26,4],[28,4],[29,4],[30,4],[5,4],[31,4],[32,4],[33,4],[34,4],[6,4],[38,4],[35,4],[36,4],[37,4],[39,4],[7,4],[40,4],[45,4],[46,4],[41,4],[42,4],[43,4],[44,4],[8,4],[50,4],[47,4],[48,4],[49,4],[51,4],[9,4],[52,4],[53,4],[54,4],[56,4],[55,4],[1,4],[231,91],[241,92],[230,91],[251,93],[222,94],[221,95],[250,96],[244,97],[249,98],[224,99],[238,100],[223,101],[247,102],[219,103],[218,96],[248,104],[220,105],[225,106],[226,4],[229,106],[216,4],[252,107],[242,108],[233,109],[234,110],[236,111],[232,112],[235,113],[245,96],[227,114],[228,115],[237,116],[217,117],[240,108],[239,106],[243,4],[246,118],[142,119],[149,120],[144,4],[145,4],[143,121],[146,122],[138,4],[139,4],[150,123],[141,124],[147,4],[148,125],[140,126],[118,127],[121,128],[119,128],[115,127],[122,129],[123,130],[120,128],[116,131],[117,132],[111,133],[63,134],[65,135],[109,4],[64,136],[110,137],[114,138],[112,4],[66,134],[67,4],[108,139],[62,140],[59,4],[113,141],[60,142],[61,4],[124,143],[68,144],[69,144],[70,144],[71,144],[72,144],[73,144],[74,144],[75,144],[76,144],[77,144],[78,144],[80,144],[79,144],[81,144],[82,144],[83,144],[107,145],[84,144],[85,144],[86,144],[87,144],[88,144],[89,144],[90,144],[91,144],[92,144],[94,144],[93,144],[95,144],[96,144],[97,144],[98,144],[99,144],[100,144],[101,144],[102,144],[103,144],[104,144],[105,144],[106,144],[203,146],[205,147],[204,148],[134,149],[130,150],[128,151],[129,152],[127,4],[131,4],[132,152],[133,153]],"affectedFilesPendingEmit":[[203,51],[205,51],[204,51]],"emitSignatures":[203,204,205],"version":"5.9.3"}
|