@assistant-ui/react 0.7.9 → 0.7.10
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/dist/api/AssistantRuntime.d.ts +4 -5
- package/dist/api/AssistantRuntime.d.ts.map +1 -1
- package/dist/api/AssistantRuntime.js +16 -19
- package/dist/api/AssistantRuntime.js.map +1 -1
- package/dist/api/AssistantRuntime.mjs +16 -19
- package/dist/api/AssistantRuntime.mjs.map +1 -1
- package/dist/api/ThreadListItemRuntime.d.ts +11 -2
- package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListItemRuntime.js +16 -5
- package/dist/api/ThreadListItemRuntime.js.map +1 -1
- package/dist/api/ThreadListItemRuntime.mjs +16 -5
- package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
- package/dist/api/ThreadListRuntime.d.ts +3 -0
- package/dist/api/ThreadListRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListRuntime.js +27 -8
- package/dist/api/ThreadListRuntime.js.map +1 -1
- package/dist/api/ThreadListRuntime.mjs +27 -8
- package/dist/api/ThreadListRuntime.mjs.map +1 -1
- package/dist/api/ThreadRuntime.d.ts +10 -7
- package/dist/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +16 -6
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.mjs +16 -6
- package/dist/api/ThreadRuntime.mjs.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.js +8 -1
- package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -1
- package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
- package/dist/context/providers/ThreadRuntimeProvider.d.ts +2 -0
- package/dist/context/providers/ThreadRuntimeProvider.d.ts.map +1 -1
- package/dist/context/providers/ThreadRuntimeProvider.js +3 -2
- package/dist/context/providers/ThreadRuntimeProvider.js.map +1 -1
- package/dist/context/providers/ThreadRuntimeProvider.mjs +3 -2
- package/dist/context/providers/ThreadRuntimeProvider.mjs.map +1 -1
- package/dist/internal.d.ts +1 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +0 -3
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +0 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +3 -1
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.mjs +3 -1
- package/dist/primitives/composer/ComposerInput.mjs.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +2 -4
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.js +1 -5
- package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.mjs +1 -5
- package/dist/runtimes/core/BaseThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +14 -6
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -15
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/index.d.ts +1 -1
- package/dist/runtimes/core/index.d.ts.map +1 -1
- package/dist/runtimes/core/index.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +20 -3
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts +0 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js +3 -10
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs +3 -10
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +9 -11
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +19 -27
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +19 -27
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +4 -7
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs +4 -7
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.d.ts +0 -1
- package/dist/runtimes/local/LocalRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.js +3 -12
- package/dist/runtimes/local/LocalRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.mjs +3 -12
- package/dist/runtimes/local/LocalRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +17 -15
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js +94 -92
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +94 -92
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +4 -3
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js +11 -10
- package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +11 -10
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
- package/dist/runtimes/local/useLocalRuntime.js +4 -7
- package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
- package/dist/runtimes/local/useLocalRuntime.mjs +4 -7
- package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
- package/package.json +1 -1
- package/src/api/AssistantRuntime.ts +21 -25
- package/src/api/ThreadListItemRuntime.ts +36 -7
- package/src/api/ThreadListRuntime.ts +31 -9
- package/src/api/ThreadRuntime.ts +38 -10
- package/src/context/providers/AssistantRuntimeProvider.tsx +4 -1
- package/src/context/providers/ThreadRuntimeProvider.tsx +9 -2
- package/src/internal.ts +1 -1
- package/src/primitives/composer/ComposerInput.tsx +3 -1
- package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -9
- package/src/runtimes/core/ThreadListRuntimeCore.tsx +16 -7
- package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -19
- package/src/runtimes/core/index.ts +0 -1
- package/src/runtimes/external-store/ExternalStoreAdapter.tsx +20 -3
- package/src/runtimes/external-store/ExternalStoreRuntimeCore.tsx +5 -12
- package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +22 -35
- package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -7
- package/src/runtimes/local/LocalRuntimeCore.tsx +7 -14
- package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +110 -103
- package/src/runtimes/local/LocalThreadRuntimeCore.tsx +11 -10
- package/src/runtimes/local/useLocalRuntime.tsx +5 -12
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts +0 -19
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts.map +0 -1
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js +0 -87
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js.map +0 -1
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs +0 -62
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs.map +0 -1
- package/src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx +0 -79
|
@@ -3,206 +3,213 @@ import { ThreadListRuntimeCore } from "../core/ThreadListRuntimeCore";
|
|
|
3
3
|
import { ExportedMessageRepository } from "../utils/MessageRepository";
|
|
4
4
|
import { generateId } from "../../utils/idUtils";
|
|
5
5
|
import { LocalThreadRuntimeCore } from "./LocalThreadRuntimeCore";
|
|
6
|
-
import { ThreadMetadata } from "../core/ThreadRuntimeCore";
|
|
7
6
|
|
|
8
7
|
export type ThreadListAdapter = {
|
|
9
8
|
subscribe(callback: () => void): Unsubscribe;
|
|
10
9
|
};
|
|
11
10
|
|
|
12
11
|
export type LocalThreadData = {
|
|
13
|
-
runtime: LocalThreadRuntimeCore;
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
readonly runtime: LocalThreadRuntimeCore;
|
|
13
|
+
readonly state: "new" | "regular" | "archived";
|
|
14
|
+
readonly threadId: string;
|
|
15
|
+
readonly title?: string | undefined;
|
|
16
|
+
|
|
17
|
+
dispose(): void;
|
|
16
18
|
};
|
|
17
19
|
|
|
18
20
|
export type LocalThreadFactory = (
|
|
19
|
-
threadId: string,
|
|
20
21
|
data: ExportedMessageRepository,
|
|
21
22
|
) => LocalThreadRuntimeCore;
|
|
22
23
|
|
|
23
24
|
export class LocalThreadListRuntimeCore implements ThreadListRuntimeCore {
|
|
24
25
|
private _threadData = new Map<string, LocalThreadData>();
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
private
|
|
26
|
+
private _threadIds: readonly string[] = [];
|
|
27
|
+
private _archivedThreadIds: readonly string[] = [];
|
|
28
|
+
private _newThreadId: string | undefined;
|
|
28
29
|
|
|
29
|
-
public get
|
|
30
|
-
return this.
|
|
30
|
+
public get newThreadId() {
|
|
31
|
+
return this._newThreadId;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
public get
|
|
34
|
-
return this.
|
|
34
|
+
public get threadIds() {
|
|
35
|
+
return this._threadIds;
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
public get
|
|
38
|
-
return this.
|
|
38
|
+
public get archivedThreadIds() {
|
|
39
|
+
return this._archivedThreadIds;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
private
|
|
42
|
+
private _mainThreadId!: string;
|
|
42
43
|
|
|
43
|
-
public get
|
|
44
|
-
return this.
|
|
44
|
+
public get mainThreadId(): string {
|
|
45
|
+
return this._mainThreadId;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
constructor(private _threadFactory: LocalThreadFactory) {
|
|
48
49
|
this.switchToNewThread();
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
public
|
|
52
|
-
|
|
52
|
+
public getMainThreadRuntimeCore() {
|
|
53
|
+
const result = this._threadData.get(this._mainThreadId)?.runtime;
|
|
54
|
+
if (!result)
|
|
55
|
+
throw new Error("Main thread not found. This is a bug in assistant-ui.");
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public getItemById(threadId: string) {
|
|
60
|
+
return this._threadData.get(threadId);
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
public switchToThread(threadId: string): Promise<void> {
|
|
56
|
-
if (this.
|
|
57
|
-
return Promise.resolve();
|
|
63
|
+
public async switchToThread(threadId: string): Promise<void> {
|
|
64
|
+
if (this._mainThreadId === threadId) return;
|
|
58
65
|
|
|
59
66
|
const data = this._threadData.get(threadId);
|
|
60
67
|
if (!data) throw new Error("Thread not found");
|
|
61
68
|
|
|
62
|
-
if (data.
|
|
69
|
+
if (data.state === "archived") await this.unarchive(threadId);
|
|
63
70
|
|
|
64
|
-
this.
|
|
65
|
-
this._mainThread = data.runtime;
|
|
71
|
+
this._mainThreadId = data.threadId;
|
|
66
72
|
this._notifySubscribers();
|
|
67
|
-
|
|
68
|
-
data.runtime._notifyEventSubscribers("switched-to");
|
|
69
|
-
return Promise.resolve();
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
public switchToNewThread(): Promise<void> {
|
|
73
|
-
if (this.
|
|
76
|
+
if (this._newThreadId === undefined) {
|
|
74
77
|
let threadId: string;
|
|
75
78
|
do {
|
|
76
79
|
threadId = generateId();
|
|
77
80
|
} while (this._threadData.has(threadId));
|
|
78
81
|
|
|
79
|
-
const runtime = this._threadFactory(
|
|
80
|
-
const dispose = runtime.
|
|
81
|
-
this.
|
|
82
|
-
|
|
82
|
+
const runtime = this._threadFactory({ messages: [] });
|
|
83
|
+
const dispose = runtime.unstable_on("initialize", () => {
|
|
84
|
+
const data = this._threadData.get(threadId);
|
|
85
|
+
if (!data) throw new Error("Thread not found");
|
|
86
|
+
|
|
87
|
+
this._stateOp(threadId, "regular");
|
|
83
88
|
});
|
|
84
|
-
this._threadData.set(threadId, {
|
|
85
|
-
|
|
89
|
+
this._threadData.set(threadId, {
|
|
90
|
+
runtime,
|
|
91
|
+
state: "new",
|
|
92
|
+
threadId,
|
|
93
|
+
dispose,
|
|
94
|
+
});
|
|
95
|
+
this._newThreadId = threadId;
|
|
86
96
|
}
|
|
87
97
|
|
|
88
|
-
this.switchToThread(this.
|
|
98
|
+
this.switchToThread(this._newThreadId);
|
|
89
99
|
return Promise.resolve();
|
|
90
100
|
}
|
|
91
101
|
|
|
92
|
-
private async
|
|
93
|
-
|
|
94
|
-
|
|
102
|
+
private async _stateOp(
|
|
103
|
+
threadId: string,
|
|
104
|
+
newState: "regular" | "archived" | "deleted",
|
|
95
105
|
) {
|
|
96
|
-
const data = this._threadData.get(
|
|
106
|
+
const data = this._threadData.get(threadId);
|
|
97
107
|
if (!data) throw new Error("Thread not found");
|
|
98
|
-
const lastState = data.lastState;
|
|
99
|
-
if (lastState === state && lastThreadId === threadId) return;
|
|
100
108
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
const { state: lastState } = data;
|
|
110
|
+
if (lastState === newState) return;
|
|
111
|
+
|
|
112
|
+
// lastState
|
|
113
|
+
switch (lastState) {
|
|
114
|
+
case "new":
|
|
115
|
+
this._newThreadId = undefined;
|
|
116
|
+
break;
|
|
117
|
+
case "regular":
|
|
118
|
+
this._threadIds = this._threadIds.filter((t) => t !== threadId);
|
|
119
|
+
break;
|
|
120
|
+
case "archived":
|
|
121
|
+
this._archivedThreadIds = this._archivedThreadIds.filter(
|
|
122
|
+
(t) => t !== threadId,
|
|
114
123
|
);
|
|
115
|
-
|
|
116
|
-
}
|
|
124
|
+
break;
|
|
117
125
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
default: {
|
|
127
|
+
const _exhaustiveCheck: never = lastState;
|
|
128
|
+
throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
|
|
121
129
|
}
|
|
130
|
+
}
|
|
122
131
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
// newState
|
|
133
|
+
switch (newState) {
|
|
134
|
+
case "regular":
|
|
135
|
+
this._threadIds = [...this._threadIds, data.threadId];
|
|
136
|
+
break;
|
|
126
137
|
|
|
127
|
-
|
|
128
|
-
this.
|
|
129
|
-
|
|
130
|
-
);
|
|
131
|
-
}
|
|
138
|
+
case "archived":
|
|
139
|
+
this._archivedThreadIds = [...this._archivedThreadIds, data.threadId];
|
|
140
|
+
break;
|
|
132
141
|
|
|
133
|
-
|
|
134
|
-
if (this._newThread) {
|
|
135
|
-
this.delete(this._newThread);
|
|
136
|
-
}
|
|
137
|
-
this._newThread = threadId;
|
|
138
|
-
}
|
|
139
|
-
if (state === "archived") {
|
|
140
|
-
this._archivedThreads = [
|
|
141
|
-
...this._archivedThreads,
|
|
142
|
-
data.runtime.metadata.threadId,
|
|
143
|
-
];
|
|
144
|
-
}
|
|
145
|
-
if (state === "regular") {
|
|
146
|
-
this._threads = [...this._threads, data.runtime.metadata.threadId];
|
|
147
|
-
}
|
|
148
|
-
if (state === "deleted") {
|
|
149
|
-
data.dispose();
|
|
142
|
+
case "deleted":
|
|
150
143
|
this._threadData.delete(threadId);
|
|
151
|
-
|
|
144
|
+
data.dispose();
|
|
145
|
+
break;
|
|
152
146
|
|
|
153
|
-
|
|
147
|
+
default: {
|
|
148
|
+
const _exhaustiveCheck: never = newState;
|
|
149
|
+
throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
|
|
150
|
+
}
|
|
154
151
|
}
|
|
155
152
|
|
|
156
|
-
|
|
153
|
+
if (newState !== "deleted") {
|
|
154
|
+
this._threadData.set(threadId, {
|
|
155
|
+
...data,
|
|
156
|
+
state: newState,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
157
159
|
|
|
158
160
|
if (
|
|
159
|
-
threadId === this.
|
|
160
|
-
(
|
|
161
|
+
threadId === this._mainThreadId &&
|
|
162
|
+
(newState === "archived" || newState === "deleted")
|
|
161
163
|
) {
|
|
162
|
-
const
|
|
163
|
-
if (
|
|
164
|
-
await this.switchToThread(
|
|
164
|
+
const lastThreadId = this._threadIds[0];
|
|
165
|
+
if (lastThreadId) {
|
|
166
|
+
await this.switchToThread(lastThreadId);
|
|
165
167
|
} else {
|
|
166
168
|
await this.switchToNewThread();
|
|
167
169
|
}
|
|
170
|
+
} else {
|
|
171
|
+
this._notifySubscribers();
|
|
168
172
|
}
|
|
169
173
|
}
|
|
170
174
|
|
|
171
175
|
public rename(threadId: string, newTitle: string): Promise<void> {
|
|
172
176
|
const data = this._threadData.get(threadId);
|
|
173
177
|
if (!data) throw new Error("Thread not found");
|
|
174
|
-
data.runtime.metadata.rename(newTitle);
|
|
175
178
|
|
|
179
|
+
this._threadData.set(threadId, {
|
|
180
|
+
...data,
|
|
181
|
+
title: newTitle,
|
|
182
|
+
});
|
|
183
|
+
this._notifySubscribers();
|
|
176
184
|
return Promise.resolve();
|
|
177
185
|
}
|
|
178
186
|
|
|
179
187
|
public archive(threadId: string): Promise<void> {
|
|
180
188
|
const data = this._threadData.get(threadId);
|
|
181
189
|
if (!data) throw new Error("Thread not found");
|
|
182
|
-
if (data.
|
|
183
|
-
throw new Error("Thread is not yet
|
|
184
|
-
data.runtime.metadata.archive();
|
|
190
|
+
if (data.state !== "regular")
|
|
191
|
+
throw new Error("Thread is not yet initialized or already archived");
|
|
185
192
|
|
|
193
|
+
this._stateOp(threadId, "archived");
|
|
186
194
|
return Promise.resolve();
|
|
187
195
|
}
|
|
188
196
|
|
|
189
197
|
public unarchive(threadId: string): Promise<void> {
|
|
190
198
|
const data = this._threadData.get(threadId);
|
|
191
199
|
if (!data) throw new Error("Thread not found");
|
|
192
|
-
if (data.
|
|
193
|
-
throw new Error("Thread is not archived");
|
|
194
|
-
data.runtime.metadata.unarchive();
|
|
200
|
+
if (data.state !== "archived") throw new Error("Thread is not archived");
|
|
195
201
|
|
|
202
|
+
this._stateOp(threadId, "regular");
|
|
196
203
|
return Promise.resolve();
|
|
197
204
|
}
|
|
198
205
|
|
|
199
206
|
public delete(threadId: string): Promise<void> {
|
|
200
207
|
const data = this._threadData.get(threadId);
|
|
201
208
|
if (!data) throw new Error("Thread not found");
|
|
202
|
-
if (data.
|
|
203
|
-
throw new Error("Thread is not yet
|
|
204
|
-
data.runtime.metadata.delete();
|
|
209
|
+
if (data.state !== "regular" && data.state !== "archived")
|
|
210
|
+
throw new Error("Thread is not yet initalized");
|
|
205
211
|
|
|
212
|
+
this._stateOp(threadId, "deleted");
|
|
206
213
|
return Promise.resolve();
|
|
207
214
|
}
|
|
208
215
|
|
|
@@ -14,12 +14,13 @@ import {
|
|
|
14
14
|
ThreadRuntimeCore,
|
|
15
15
|
} from "../core/ThreadRuntimeCore";
|
|
16
16
|
import { BaseThreadRuntimeCore } from "../core/BaseThreadRuntimeCore";
|
|
17
|
-
import { LocalThreadMetadataRuntimeCore } from "./LocalThreadMetadataRuntimeCore";
|
|
18
17
|
|
|
19
18
|
export class LocalThreadRuntimeCore
|
|
20
19
|
extends BaseThreadRuntimeCore
|
|
21
20
|
implements ThreadRuntimeCore
|
|
22
21
|
{
|
|
22
|
+
private _isInitialized = false;
|
|
23
|
+
|
|
23
24
|
public readonly capabilities = {
|
|
24
25
|
switchToBranch: true,
|
|
25
26
|
edit: true,
|
|
@@ -42,11 +43,10 @@ export class LocalThreadRuntimeCore
|
|
|
42
43
|
|
|
43
44
|
constructor(
|
|
44
45
|
configProvider: ModelConfigProvider,
|
|
45
|
-
threadId: string,
|
|
46
46
|
options: LocalRuntimeOptionsBase,
|
|
47
47
|
) {
|
|
48
|
-
super(configProvider
|
|
49
|
-
this.
|
|
48
|
+
super(configProvider);
|
|
49
|
+
this.__internal_setOptions(options);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
private _options!: LocalRuntimeOptionsBase;
|
|
@@ -55,7 +55,7 @@ export class LocalThreadRuntimeCore
|
|
|
55
55
|
return undefined;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
public
|
|
58
|
+
public __internal_setOptions(options: LocalRuntimeOptionsBase) {
|
|
59
59
|
if (this._options === options) return;
|
|
60
60
|
|
|
61
61
|
this._options = options;
|
|
@@ -83,14 +83,15 @@ export class LocalThreadRuntimeCore
|
|
|
83
83
|
if (hasUpdates) this._notifySubscribers();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
private
|
|
87
|
-
if (this.
|
|
88
|
-
this.
|
|
86
|
+
private _ensureInitialized() {
|
|
87
|
+
if (!this._isInitialized) {
|
|
88
|
+
this._isInitialized = true;
|
|
89
|
+
this._notifyEventSubscribers("initialize");
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
public async append(message: AppendMessage): Promise<void> {
|
|
93
|
-
this.
|
|
94
|
+
this._ensureInitialized();
|
|
94
95
|
|
|
95
96
|
const newMessage = fromCoreMessage(message, {
|
|
96
97
|
attachments: message.attachments,
|
|
@@ -107,7 +108,7 @@ export class LocalThreadRuntimeCore
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
public async startRun(parentId: string | null): Promise<void> {
|
|
110
|
-
this.
|
|
111
|
+
this._ensureInitialized();
|
|
111
112
|
|
|
112
113
|
this.repository.resetHead(parentId);
|
|
113
114
|
|
|
@@ -9,29 +9,22 @@ import {
|
|
|
9
9
|
AssistantRuntimeImpl,
|
|
10
10
|
} from "../../api/AssistantRuntime";
|
|
11
11
|
import { ThreadRuntimeImpl } from "../../internal";
|
|
12
|
-
import { ThreadRuntime } from "../../api/ThreadRuntime";
|
|
13
12
|
|
|
14
13
|
export type LocalRuntime = AssistantRuntime & {
|
|
15
14
|
reset: (options?: Parameters<LocalRuntimeCore["reset"]>[0]) => void;
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
class LocalRuntimeImpl extends AssistantRuntimeImpl implements LocalRuntime {
|
|
19
|
-
private constructor(
|
|
20
|
-
|
|
21
|
-
thread: ThreadRuntime,
|
|
22
|
-
) {
|
|
23
|
-
super(core, thread);
|
|
18
|
+
private constructor(private core: LocalRuntimeCore) {
|
|
19
|
+
super(core, ThreadRuntimeImpl);
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
public reset(options?: Parameters<LocalRuntimeCore["reset"]>[0]) {
|
|
27
23
|
this.core.reset(options);
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
public static override create(_core: LocalRuntimeCore) {
|
|
31
|
-
return new LocalRuntimeImpl(
|
|
32
|
-
_core,
|
|
33
|
-
AssistantRuntimeImpl.createMainThreadRuntime(_core, ThreadRuntimeImpl),
|
|
34
|
-
) as LocalRuntime;
|
|
26
|
+
public static override create(_core: LocalRuntimeCore): LocalRuntime {
|
|
27
|
+
return new LocalRuntimeImpl(_core);
|
|
35
28
|
}
|
|
36
29
|
}
|
|
37
30
|
|
|
@@ -50,7 +43,7 @@ export const useLocalRuntime = (
|
|
|
50
43
|
const [runtime] = useState(() => new LocalRuntimeCore(opt, initialMessages));
|
|
51
44
|
|
|
52
45
|
useEffect(() => {
|
|
53
|
-
runtime.
|
|
46
|
+
runtime.threadList.getMainThreadRuntimeCore().__internal_setOptions(opt);
|
|
54
47
|
});
|
|
55
48
|
|
|
56
49
|
return useMemo(() => LocalRuntimeImpl.create(runtime), [runtime]);
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ThreadMetadataRuntimeCore } from "../core/ThreadRuntimeCore";
|
|
2
|
-
export declare class LocalThreadMetadataRuntimeCore implements ThreadMetadataRuntimeCore {
|
|
3
|
-
private _threadId;
|
|
4
|
-
private _state;
|
|
5
|
-
private _title;
|
|
6
|
-
private _subscribers;
|
|
7
|
-
constructor(_threadId: string);
|
|
8
|
-
get threadId(): string;
|
|
9
|
-
get state(): "archived" | "regular" | "new" | "deleted";
|
|
10
|
-
get title(): string | undefined;
|
|
11
|
-
rename(newTitle: string): Promise<void>;
|
|
12
|
-
archive(): Promise<void>;
|
|
13
|
-
unarchive(): Promise<void>;
|
|
14
|
-
delete(): Promise<void>;
|
|
15
|
-
create(title?: string): Promise<void>;
|
|
16
|
-
subscribe(callback: () => void): () => boolean;
|
|
17
|
-
private _notifySubscribers;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=LocalThreadMetadataRuntimeCore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocalThreadMetadataRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,8BACX,YAAW,yBAAyB;IAMxB,OAAO,CAAC,SAAS;IAJ7B,OAAO,CAAC,MAAM,CAAqD;IACnE,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAAyB;gBAEzB,SAAS,EAAE,MAAM;IAErC,IAAW,QAAQ,WAElB;IAED,IAAW,KAAK,+CAEf;IAED,IAAW,KAAK,uBAEf;IAEM,MAAM,CAAC,QAAQ,EAAE,MAAM;IAOvB,OAAO;IAWP,SAAS;IAST,MAAM;IAUN,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM;IAUrB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI;IAKrC,OAAO,CAAC,kBAAkB;CAG3B"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx
|
|
21
|
-
var LocalThreadMetadataRuntimeCore_exports = {};
|
|
22
|
-
__export(LocalThreadMetadataRuntimeCore_exports, {
|
|
23
|
-
LocalThreadMetadataRuntimeCore: () => LocalThreadMetadataRuntimeCore
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(LocalThreadMetadataRuntimeCore_exports);
|
|
26
|
-
var LocalThreadMetadataRuntimeCore = class {
|
|
27
|
-
constructor(_threadId) {
|
|
28
|
-
this._threadId = _threadId;
|
|
29
|
-
}
|
|
30
|
-
_state = "new";
|
|
31
|
-
_title;
|
|
32
|
-
_subscribers = /* @__PURE__ */ new Set();
|
|
33
|
-
get threadId() {
|
|
34
|
-
return this._threadId;
|
|
35
|
-
}
|
|
36
|
-
get state() {
|
|
37
|
-
return this._state;
|
|
38
|
-
}
|
|
39
|
-
get title() {
|
|
40
|
-
return this._title;
|
|
41
|
-
}
|
|
42
|
-
rename(newTitle) {
|
|
43
|
-
this._title = newTitle;
|
|
44
|
-
this._notifySubscribers();
|
|
45
|
-
return Promise.resolve();
|
|
46
|
-
}
|
|
47
|
-
archive() {
|
|
48
|
-
if (this._state === "new") throw new Error("Thread not created");
|
|
49
|
-
if (this._state === "archived") throw new Error("Thread already archived");
|
|
50
|
-
if (this._state === "deleted") throw new Error("Thread deleted");
|
|
51
|
-
this._state = "archived";
|
|
52
|
-
this._notifySubscribers();
|
|
53
|
-
return Promise.resolve();
|
|
54
|
-
}
|
|
55
|
-
unarchive() {
|
|
56
|
-
if (this._state !== "archived") throw new Error("Thread not archived");
|
|
57
|
-
this._state = "regular";
|
|
58
|
-
this._notifySubscribers();
|
|
59
|
-
return Promise.resolve();
|
|
60
|
-
}
|
|
61
|
-
delete() {
|
|
62
|
-
if (this._state === "new") throw new Error("Thread not created");
|
|
63
|
-
if (this._state === "deleted") throw new Error("Thread already deleted");
|
|
64
|
-
this._state = "deleted";
|
|
65
|
-
this._notifySubscribers();
|
|
66
|
-
return Promise.resolve();
|
|
67
|
-
}
|
|
68
|
-
create(title) {
|
|
69
|
-
if (this.state !== "new") throw new Error("Thread not new");
|
|
70
|
-
this._state = "regular";
|
|
71
|
-
this._title = title ?? this._title;
|
|
72
|
-
this._notifySubscribers();
|
|
73
|
-
return Promise.resolve();
|
|
74
|
-
}
|
|
75
|
-
subscribe(callback) {
|
|
76
|
-
this._subscribers.add(callback);
|
|
77
|
-
return () => this._subscribers.delete(callback);
|
|
78
|
-
}
|
|
79
|
-
_notifySubscribers() {
|
|
80
|
-
for (const callback of this._subscribers) callback();
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
84
|
-
0 && (module.exports = {
|
|
85
|
-
LocalThreadMetadataRuntimeCore
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=LocalThreadMetadataRuntimeCore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx"],"sourcesContent":["import { ThreadMetadataRuntimeCore } from \"../core/ThreadRuntimeCore\";\n\nexport class LocalThreadMetadataRuntimeCore\n implements ThreadMetadataRuntimeCore\n{\n private _state: \"regular\" | \"archived\" | \"deleted\" | \"new\" = \"new\";\n private _title: string | undefined;\n private _subscribers = new Set<() => void>();\n\n constructor(private _threadId: string) {}\n\n public get threadId() {\n return this._threadId;\n }\n\n public get state() {\n return this._state;\n }\n\n public get title() {\n return this._title;\n }\n\n public rename(newTitle: string) {\n this._title = newTitle;\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public archive() {\n if (this._state === \"new\") throw new Error(\"Thread not created\");\n if (this._state === \"archived\") throw new Error(\"Thread already archived\");\n if (this._state === \"deleted\") throw new Error(\"Thread deleted\");\n\n this._state = \"archived\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public unarchive() {\n if (this._state !== \"archived\") throw new Error(\"Thread not archived\");\n\n this._state = \"regular\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public delete() {\n if (this._state === \"new\") throw new Error(\"Thread not created\");\n if (this._state === \"deleted\") throw new Error(\"Thread already deleted\");\n\n this._state = \"deleted\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public create(title?: string) {\n if (this.state !== \"new\") throw new Error(\"Thread not new\");\n\n this._state = \"regular\";\n this._title = title ?? this._title;\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public subscribe(callback: () => void) {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n private _notifySubscribers() {\n for (const callback of this._subscribers) callback();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,iCAAN,MAEP;AAAA,EAKE,YAAoB,WAAmB;AAAnB;AAAA,EAAoB;AAAA,EAJhC,SAAqD;AAAA,EACrD;AAAA,EACA,eAAe,oBAAI,IAAgB;AAAA,EAI3C,IAAW,WAAW;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,OAAO,UAAkB;AAC9B,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,UAAU;AACf,QAAI,KAAK,WAAW,MAAO,OAAM,IAAI,MAAM,oBAAoB;AAC/D,QAAI,KAAK,WAAW,WAAY,OAAM,IAAI,MAAM,yBAAyB;AACzE,QAAI,KAAK,WAAW,UAAW,OAAM,IAAI,MAAM,gBAAgB;AAE/D,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,YAAY;AACjB,QAAI,KAAK,WAAW,WAAY,OAAM,IAAI,MAAM,qBAAqB;AAErE,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,SAAS;AACd,QAAI,KAAK,WAAW,MAAO,OAAM,IAAI,MAAM,oBAAoB;AAC/D,QAAI,KAAK,WAAW,UAAW,OAAM,IAAI,MAAM,wBAAwB;AAEvE,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,OAAO,OAAgB;AAC5B,QAAI,KAAK,UAAU,MAAO,OAAM,IAAI,MAAM,gBAAgB;AAE1D,SAAK,SAAS;AACd,SAAK,SAAS,SAAS,KAAK;AAC5B,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,UAAU,UAAsB;AACrC,SAAK,aAAa,IAAI,QAAQ;AAC9B,WAAO,MAAM,KAAK,aAAa,OAAO,QAAQ;AAAA,EAChD;AAAA,EAEQ,qBAAqB;AAC3B,eAAW,YAAY,KAAK,aAAc,UAAS;AAAA,EACrD;AACF;","names":[]}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx
|
|
2
|
-
var LocalThreadMetadataRuntimeCore = class {
|
|
3
|
-
constructor(_threadId) {
|
|
4
|
-
this._threadId = _threadId;
|
|
5
|
-
}
|
|
6
|
-
_state = "new";
|
|
7
|
-
_title;
|
|
8
|
-
_subscribers = /* @__PURE__ */ new Set();
|
|
9
|
-
get threadId() {
|
|
10
|
-
return this._threadId;
|
|
11
|
-
}
|
|
12
|
-
get state() {
|
|
13
|
-
return this._state;
|
|
14
|
-
}
|
|
15
|
-
get title() {
|
|
16
|
-
return this._title;
|
|
17
|
-
}
|
|
18
|
-
rename(newTitle) {
|
|
19
|
-
this._title = newTitle;
|
|
20
|
-
this._notifySubscribers();
|
|
21
|
-
return Promise.resolve();
|
|
22
|
-
}
|
|
23
|
-
archive() {
|
|
24
|
-
if (this._state === "new") throw new Error("Thread not created");
|
|
25
|
-
if (this._state === "archived") throw new Error("Thread already archived");
|
|
26
|
-
if (this._state === "deleted") throw new Error("Thread deleted");
|
|
27
|
-
this._state = "archived";
|
|
28
|
-
this._notifySubscribers();
|
|
29
|
-
return Promise.resolve();
|
|
30
|
-
}
|
|
31
|
-
unarchive() {
|
|
32
|
-
if (this._state !== "archived") throw new Error("Thread not archived");
|
|
33
|
-
this._state = "regular";
|
|
34
|
-
this._notifySubscribers();
|
|
35
|
-
return Promise.resolve();
|
|
36
|
-
}
|
|
37
|
-
delete() {
|
|
38
|
-
if (this._state === "new") throw new Error("Thread not created");
|
|
39
|
-
if (this._state === "deleted") throw new Error("Thread already deleted");
|
|
40
|
-
this._state = "deleted";
|
|
41
|
-
this._notifySubscribers();
|
|
42
|
-
return Promise.resolve();
|
|
43
|
-
}
|
|
44
|
-
create(title) {
|
|
45
|
-
if (this.state !== "new") throw new Error("Thread not new");
|
|
46
|
-
this._state = "regular";
|
|
47
|
-
this._title = title ?? this._title;
|
|
48
|
-
this._notifySubscribers();
|
|
49
|
-
return Promise.resolve();
|
|
50
|
-
}
|
|
51
|
-
subscribe(callback) {
|
|
52
|
-
this._subscribers.add(callback);
|
|
53
|
-
return () => this._subscribers.delete(callback);
|
|
54
|
-
}
|
|
55
|
-
_notifySubscribers() {
|
|
56
|
-
for (const callback of this._subscribers) callback();
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
export {
|
|
60
|
-
LocalThreadMetadataRuntimeCore
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=LocalThreadMetadataRuntimeCore.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx"],"sourcesContent":["import { ThreadMetadataRuntimeCore } from \"../core/ThreadRuntimeCore\";\n\nexport class LocalThreadMetadataRuntimeCore\n implements ThreadMetadataRuntimeCore\n{\n private _state: \"regular\" | \"archived\" | \"deleted\" | \"new\" = \"new\";\n private _title: string | undefined;\n private _subscribers = new Set<() => void>();\n\n constructor(private _threadId: string) {}\n\n public get threadId() {\n return this._threadId;\n }\n\n public get state() {\n return this._state;\n }\n\n public get title() {\n return this._title;\n }\n\n public rename(newTitle: string) {\n this._title = newTitle;\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public archive() {\n if (this._state === \"new\") throw new Error(\"Thread not created\");\n if (this._state === \"archived\") throw new Error(\"Thread already archived\");\n if (this._state === \"deleted\") throw new Error(\"Thread deleted\");\n\n this._state = \"archived\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public unarchive() {\n if (this._state !== \"archived\") throw new Error(\"Thread not archived\");\n\n this._state = \"regular\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public delete() {\n if (this._state === \"new\") throw new Error(\"Thread not created\");\n if (this._state === \"deleted\") throw new Error(\"Thread already deleted\");\n\n this._state = \"deleted\";\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public create(title?: string) {\n if (this.state !== \"new\") throw new Error(\"Thread not new\");\n\n this._state = \"regular\";\n this._title = title ?? this._title;\n this._notifySubscribers();\n\n return Promise.resolve();\n }\n\n public subscribe(callback: () => void) {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n private _notifySubscribers() {\n for (const callback of this._subscribers) callback();\n }\n}\n"],"mappings":";AAEO,IAAM,iCAAN,MAEP;AAAA,EAKE,YAAoB,WAAmB;AAAnB;AAAA,EAAoB;AAAA,EAJhC,SAAqD;AAAA,EACrD;AAAA,EACA,eAAe,oBAAI,IAAgB;AAAA,EAI3C,IAAW,WAAW;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,OAAO,UAAkB;AAC9B,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,UAAU;AACf,QAAI,KAAK,WAAW,MAAO,OAAM,IAAI,MAAM,oBAAoB;AAC/D,QAAI,KAAK,WAAW,WAAY,OAAM,IAAI,MAAM,yBAAyB;AACzE,QAAI,KAAK,WAAW,UAAW,OAAM,IAAI,MAAM,gBAAgB;AAE/D,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,YAAY;AACjB,QAAI,KAAK,WAAW,WAAY,OAAM,IAAI,MAAM,qBAAqB;AAErE,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,SAAS;AACd,QAAI,KAAK,WAAW,MAAO,OAAM,IAAI,MAAM,oBAAoB;AAC/D,QAAI,KAAK,WAAW,UAAW,OAAM,IAAI,MAAM,wBAAwB;AAEvE,SAAK,SAAS;AACd,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,OAAO,OAAgB;AAC5B,QAAI,KAAK,UAAU,MAAO,OAAM,IAAI,MAAM,gBAAgB;AAE1D,SAAK,SAAS;AACd,SAAK,SAAS,SAAS,KAAK;AAC5B,SAAK,mBAAmB;AAExB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,UAAU,UAAsB;AACrC,SAAK,aAAa,IAAI,QAAQ;AAC9B,WAAO,MAAM,KAAK,aAAa,OAAO,QAAQ;AAAA,EAChD;AAAA,EAEQ,qBAAqB;AAC3B,eAAW,YAAY,KAAK,aAAc,UAAS;AAAA,EACrD;AACF;","names":[]}
|