@generacy-ai/generacy-plugin-claude-code 0.0.0-preview-20260304013206
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/dist/container/container-manager.d.ts +82 -0
- package/dist/container/container-manager.d.ts.map +1 -0
- package/dist/container/container-manager.js +420 -0
- package/dist/container/container-manager.js.map +1 -0
- package/dist/container/types.d.ts +160 -0
- package/dist/container/types.d.ts.map +1 -0
- package/dist/container/types.js +24 -0
- package/dist/container/types.js.map +1 -0
- package/dist/errors.d.ts +106 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +180 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/invocation/invoker.d.ts +59 -0
- package/dist/invocation/invoker.d.ts.map +1 -0
- package/dist/invocation/invoker.js +271 -0
- package/dist/invocation/invoker.js.map +1 -0
- package/dist/invocation/types.d.ts +129 -0
- package/dist/invocation/types.d.ts.map +1 -0
- package/dist/invocation/types.js +57 -0
- package/dist/invocation/types.js.map +1 -0
- package/dist/plugin/claude-code-plugin.d.ts +144 -0
- package/dist/plugin/claude-code-plugin.d.ts.map +1 -0
- package/dist/plugin/claude-code-plugin.js +416 -0
- package/dist/plugin/claude-code-plugin.js.map +1 -0
- package/dist/schemas.d.ts +198 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +75 -0
- package/dist/schemas.js.map +1 -0
- package/dist/session/session-manager.d.ts +117 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +243 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/session.d.ts +99 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +271 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/types.d.ts +107 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +33 -0
- package/dist/session/types.js.map +1 -0
- package/dist/streaming/output-parser.d.ts +91 -0
- package/dist/streaming/output-parser.d.ts.map +1 -0
- package/dist/streaming/output-parser.js +321 -0
- package/dist/streaming/output-parser.js.map +1 -0
- package/dist/streaming/output-stream.d.ts +45 -0
- package/dist/streaming/output-stream.d.ts.map +1 -0
- package/dist/streaming/output-stream.js +222 -0
- package/dist/streaming/output-stream.js.map +1 -0
- package/dist/streaming/types.d.ts +89 -0
- package/dist/streaming/types.d.ts.map +1 -0
- package/dist/streaming/types.js +47 -0
- package/dist/streaming/types.js.map +1 -0
- package/dist/types.d.ts +267 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generacy-ai/generacy-plugin-claude-code
|
|
3
|
+
*
|
|
4
|
+
* Session class implementing a finite state machine for session lifecycle.
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
7
|
+
import { SessionInvalidStateError, } from '../errors.js';
|
|
8
|
+
import { isValidTransition, DEFAULT_INVOKE_OPTIONS, } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Session class implementing a finite state machine.
|
|
11
|
+
* Manages session lifecycle with validated state transitions.
|
|
12
|
+
*/
|
|
13
|
+
export class Session {
|
|
14
|
+
data;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
const now = new Date();
|
|
17
|
+
this.data = {
|
|
18
|
+
id: randomUUID(),
|
|
19
|
+
state: { status: 'created' },
|
|
20
|
+
containerConfig: options.containerConfig,
|
|
21
|
+
defaultOptions: options.defaultOptions ?? { ...DEFAULT_INVOKE_OPTIONS },
|
|
22
|
+
createdAt: now,
|
|
23
|
+
lastActiveAt: now,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a session with a specific ID (for testing or restoration).
|
|
28
|
+
*/
|
|
29
|
+
static withId(id, options) {
|
|
30
|
+
const session = new Session(options);
|
|
31
|
+
session.data.id = id;
|
|
32
|
+
return session;
|
|
33
|
+
}
|
|
34
|
+
// ==========================================================================
|
|
35
|
+
// SessionInterface implementation (readonly properties)
|
|
36
|
+
// ==========================================================================
|
|
37
|
+
get id() {
|
|
38
|
+
return this.data.id;
|
|
39
|
+
}
|
|
40
|
+
get status() {
|
|
41
|
+
return this.data.state.status;
|
|
42
|
+
}
|
|
43
|
+
get createdAt() {
|
|
44
|
+
return this.data.createdAt;
|
|
45
|
+
}
|
|
46
|
+
get lastActiveAt() {
|
|
47
|
+
return this.data.lastActiveAt;
|
|
48
|
+
}
|
|
49
|
+
// ==========================================================================
|
|
50
|
+
// Internal state accessors
|
|
51
|
+
// ==========================================================================
|
|
52
|
+
get state() {
|
|
53
|
+
return this.data.state;
|
|
54
|
+
}
|
|
55
|
+
get containerConfig() {
|
|
56
|
+
return this.data.containerConfig;
|
|
57
|
+
}
|
|
58
|
+
get containerId() {
|
|
59
|
+
return this.data.containerId;
|
|
60
|
+
}
|
|
61
|
+
get invocationId() {
|
|
62
|
+
return this.data.invocationId;
|
|
63
|
+
}
|
|
64
|
+
get defaultOptions() {
|
|
65
|
+
return this.data.defaultOptions;
|
|
66
|
+
}
|
|
67
|
+
get pendingQuestion() {
|
|
68
|
+
return this.data.pendingQuestion;
|
|
69
|
+
}
|
|
70
|
+
// ==========================================================================
|
|
71
|
+
// State machine transitions
|
|
72
|
+
// ==========================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Process an event and transition to a new state.
|
|
75
|
+
* Throws SessionInvalidStateError if the transition is invalid.
|
|
76
|
+
*/
|
|
77
|
+
processEvent(event) {
|
|
78
|
+
const newState = this.computeNextState(event);
|
|
79
|
+
if (!isValidTransition(this.status, newState.status)) {
|
|
80
|
+
throw new SessionInvalidStateError(this.id, this.status, [newState.status], `process event ${event.type}`);
|
|
81
|
+
}
|
|
82
|
+
this.data.state = newState;
|
|
83
|
+
this.data.lastActiveAt = new Date();
|
|
84
|
+
// Update auxiliary data based on event
|
|
85
|
+
this.updateFromEvent(event);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Transition to running state when container starts.
|
|
89
|
+
*/
|
|
90
|
+
onContainerStarted(containerId) {
|
|
91
|
+
this.processEvent({ type: 'CONTAINER_STARTED', containerId });
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Transition to executing state when invocation starts.
|
|
95
|
+
*/
|
|
96
|
+
onInvocationStarted(invocationId) {
|
|
97
|
+
this.processEvent({ type: 'INVOCATION_STARTED', invocationId });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Transition back to running state when invocation completes.
|
|
101
|
+
*/
|
|
102
|
+
onInvocationCompleted() {
|
|
103
|
+
this.processEvent({ type: 'INVOCATION_COMPLETED' });
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Transition to awaiting_input state when a question is received.
|
|
107
|
+
*/
|
|
108
|
+
onQuestionReceived(question) {
|
|
109
|
+
this.processEvent({ type: 'QUESTION_RECEIVED', question });
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Transition back from awaiting_input when answer is provided.
|
|
113
|
+
*/
|
|
114
|
+
onAnswerProvided() {
|
|
115
|
+
this.processEvent({ type: 'ANSWER_PROVIDED' });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Transition to terminated state.
|
|
119
|
+
*/
|
|
120
|
+
terminate(reason) {
|
|
121
|
+
// Allow termination from any non-terminated state
|
|
122
|
+
if (this.status === 'terminated') {
|
|
123
|
+
return; // Already terminated
|
|
124
|
+
}
|
|
125
|
+
this.data.state = { status: 'terminated', reason };
|
|
126
|
+
this.data.lastActiveAt = new Date();
|
|
127
|
+
}
|
|
128
|
+
// ==========================================================================
|
|
129
|
+
// Helper methods
|
|
130
|
+
// ==========================================================================
|
|
131
|
+
/**
|
|
132
|
+
* Update session data (partial update).
|
|
133
|
+
*/
|
|
134
|
+
update(options) {
|
|
135
|
+
if (options.containerId !== undefined) {
|
|
136
|
+
this.data.containerId = options.containerId;
|
|
137
|
+
}
|
|
138
|
+
if (options.invocationId !== undefined) {
|
|
139
|
+
this.data.invocationId = options.invocationId;
|
|
140
|
+
}
|
|
141
|
+
if (options.pendingQuestion !== undefined) {
|
|
142
|
+
this.data.pendingQuestion = options.pendingQuestion ?? undefined;
|
|
143
|
+
}
|
|
144
|
+
if (options.defaultOptions !== undefined) {
|
|
145
|
+
this.data.defaultOptions = { ...this.data.defaultOptions, ...options.defaultOptions };
|
|
146
|
+
}
|
|
147
|
+
this.data.lastActiveAt = new Date();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if the session is in an active (non-terminated) state.
|
|
151
|
+
*/
|
|
152
|
+
isActive() {
|
|
153
|
+
return this.status !== 'terminated';
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if the session is ready to execute an invocation.
|
|
157
|
+
*/
|
|
158
|
+
isReadyForInvocation() {
|
|
159
|
+
return this.status === 'running';
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if the session is waiting for human input.
|
|
163
|
+
*/
|
|
164
|
+
isAwaitingInput() {
|
|
165
|
+
return this.status === 'awaiting_input';
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if the session has a running container.
|
|
169
|
+
*/
|
|
170
|
+
hasRunningContainer() {
|
|
171
|
+
return ['running', 'executing', 'awaiting_input'].includes(this.status) &&
|
|
172
|
+
this.data.containerId !== undefined;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get a summary of the session for external visibility.
|
|
176
|
+
*/
|
|
177
|
+
getSummary() {
|
|
178
|
+
return {
|
|
179
|
+
id: this.id,
|
|
180
|
+
status: this.status,
|
|
181
|
+
isActive: this.isActive(),
|
|
182
|
+
containerId: this.containerId,
|
|
183
|
+
createdAt: this.createdAt,
|
|
184
|
+
lastActiveAt: this.lastActiveAt,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Export session data (for serialization).
|
|
189
|
+
*/
|
|
190
|
+
toJSON() {
|
|
191
|
+
return { ...this.data };
|
|
192
|
+
}
|
|
193
|
+
// ==========================================================================
|
|
194
|
+
// Private methods
|
|
195
|
+
// ==========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Compute the next state based on the event.
|
|
198
|
+
*/
|
|
199
|
+
computeNextState(event) {
|
|
200
|
+
switch (event.type) {
|
|
201
|
+
case 'CONTAINER_STARTED':
|
|
202
|
+
return { status: 'running', containerId: event.containerId };
|
|
203
|
+
case 'INVOCATION_STARTED':
|
|
204
|
+
if (this.status === 'running' || this.status === 'awaiting_input') {
|
|
205
|
+
return {
|
|
206
|
+
status: 'executing',
|
|
207
|
+
invocationId: event.invocationId,
|
|
208
|
+
containerId: this.getContainerIdOrThrow(),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return this.data.state;
|
|
212
|
+
case 'INVOCATION_COMPLETED':
|
|
213
|
+
if (this.status === 'executing') {
|
|
214
|
+
return { status: 'running', containerId: this.getContainerIdOrThrow() };
|
|
215
|
+
}
|
|
216
|
+
return this.data.state;
|
|
217
|
+
case 'QUESTION_RECEIVED':
|
|
218
|
+
if (this.status === 'executing' || this.status === 'running') {
|
|
219
|
+
return {
|
|
220
|
+
status: 'awaiting_input',
|
|
221
|
+
question: event.question,
|
|
222
|
+
containerId: this.getContainerIdOrThrow(),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return this.data.state;
|
|
226
|
+
case 'ANSWER_PROVIDED':
|
|
227
|
+
if (this.status === 'awaiting_input') {
|
|
228
|
+
return { status: 'running', containerId: this.getContainerIdOrThrow() };
|
|
229
|
+
}
|
|
230
|
+
return this.data.state;
|
|
231
|
+
case 'SESSION_ENDED':
|
|
232
|
+
return { status: 'terminated', reason: event.reason };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Update auxiliary data based on event.
|
|
237
|
+
*/
|
|
238
|
+
updateFromEvent(event) {
|
|
239
|
+
switch (event.type) {
|
|
240
|
+
case 'CONTAINER_STARTED':
|
|
241
|
+
this.data.containerId = event.containerId;
|
|
242
|
+
break;
|
|
243
|
+
case 'INVOCATION_STARTED':
|
|
244
|
+
this.data.invocationId = event.invocationId;
|
|
245
|
+
break;
|
|
246
|
+
case 'INVOCATION_COMPLETED':
|
|
247
|
+
this.data.invocationId = undefined;
|
|
248
|
+
break;
|
|
249
|
+
case 'QUESTION_RECEIVED':
|
|
250
|
+
this.data.pendingQuestion = event.question;
|
|
251
|
+
break;
|
|
252
|
+
case 'ANSWER_PROVIDED':
|
|
253
|
+
this.data.pendingQuestion = undefined;
|
|
254
|
+
break;
|
|
255
|
+
case 'SESSION_ENDED':
|
|
256
|
+
// No auxiliary data updates needed
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get container ID or throw if not available.
|
|
262
|
+
*/
|
|
263
|
+
getContainerIdOrThrow() {
|
|
264
|
+
const containerId = this.data.containerId;
|
|
265
|
+
if (!containerId) {
|
|
266
|
+
throw new SessionInvalidStateError(this.id, this.status, ['running'], 'access container ID');
|
|
267
|
+
}
|
|
268
|
+
return containerId;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAiBtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,OAAO,OAAO;IACV,IAAI,CAAc;IAE1B,YAAY,OAA6B;QACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG;YACV,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,GAAG,sBAAsB,EAAE;YACvE,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAU,EAAE,OAA6B;QACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6EAA6E;IAC7E,wDAAwD;IACxD,6EAA6E;IAE7E,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,2BAA2B;IAC3B,6EAA6E;IAE7E,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACnC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAClC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACnC,CAAC;IAED,6EAA6E;IAC7E,4BAA4B;IAC5B,6EAA6E;IAE7E;;;OAGG;IACH,YAAY,CAAC,KAAmB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,wBAAwB,CAChC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,EACX,CAAC,QAAQ,CAAC,MAAM,CAAC,EACjB,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAC9B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;QAEpC,uCAAuC;QACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,WAAmB;QACpC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,YAAoB;QACtC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAyB;QAC1C,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAyB;QACjC,kDAAkD;QAClD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,CAAC,qBAAqB;QAC/B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,6EAA6E;IAC7E,iBAAiB;IACjB,6EAA6E;IAE7E;;OAEG;IACH,MAAM,CAAC,OAA6B;QAClC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,SAAS,CAAC;QACnE,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAE7E;;OAEG;IACK,gBAAgB,CAAC,KAAmB;QAC1C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,mBAAmB;gBACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAE/D,KAAK,oBAAoB;gBACvB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBAClE,OAAO;wBACL,MAAM,EAAE,WAAW;wBACnB,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE;qBAC1C,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzB,KAAK,sBAAsB;gBACzB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;gBAC1E,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzB,KAAK,mBAAmB;gBACtB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7D,OAAO;wBACL,MAAM,EAAE,gBAAgB;wBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE;qBAC1C,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzB,KAAK,iBAAiB;gBACpB,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBACrC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;gBAC1E,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAEzB,KAAK,eAAe;gBAClB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAmB;QACzC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,mBAAmB;gBACtB,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBAC1C,MAAM;YAER,KAAK,oBAAoB;gBACvB,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;gBAC5C,MAAM;YAER,KAAK,sBAAsB;gBACzB,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBACnC,MAAM;YAER,KAAK,mBAAmB;gBACtB,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC3C,MAAM;YAER,KAAK,iBAAiB;gBACpB,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACtC,MAAM;YAER,KAAK,eAAe;gBAClB,mCAAmC;gBACnC,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,wBAAwB,CAChC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,EACX,CAAC,SAAS,CAAC,EACX,qBAAqB,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generacy-ai/generacy-plugin-claude-code
|
|
3
|
+
*
|
|
4
|
+
* Internal types for session management.
|
|
5
|
+
*/
|
|
6
|
+
import type { SessionState, SessionStatus, InvokeOptions, ContainerConfig, QuestionPayload, TerminationReason } from '../types.js';
|
|
7
|
+
export type { SessionState, SessionStatus, InvokeOptions, ContainerConfig, QuestionPayload, TerminationReason, };
|
|
8
|
+
/**
|
|
9
|
+
* Valid state transitions for sessions.
|
|
10
|
+
* Maps from current state to valid next states.
|
|
11
|
+
*/
|
|
12
|
+
export declare const VALID_TRANSITIONS: Record<SessionStatus, SessionStatus[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a state transition is valid.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isValidTransition(from: SessionStatus, to: SessionStatus): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Events that can trigger state transitions.
|
|
19
|
+
*/
|
|
20
|
+
export type SessionEvent = {
|
|
21
|
+
type: 'CONTAINER_STARTED';
|
|
22
|
+
containerId: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'INVOCATION_STARTED';
|
|
25
|
+
invocationId: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'INVOCATION_COMPLETED';
|
|
28
|
+
} | {
|
|
29
|
+
type: 'QUESTION_RECEIVED';
|
|
30
|
+
question: QuestionPayload;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'ANSWER_PROVIDED';
|
|
33
|
+
} | {
|
|
34
|
+
type: 'SESSION_ENDED';
|
|
35
|
+
reason: TerminationReason;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Internal session data stored by SessionManager.
|
|
39
|
+
*/
|
|
40
|
+
export interface SessionData {
|
|
41
|
+
/** Unique session identifier */
|
|
42
|
+
id: string;
|
|
43
|
+
/** Current session state */
|
|
44
|
+
state: SessionState;
|
|
45
|
+
/** Container configuration used for this session */
|
|
46
|
+
containerConfig: ContainerConfig;
|
|
47
|
+
/** Docker container ID when running */
|
|
48
|
+
containerId?: string;
|
|
49
|
+
/** Current invocation ID if executing */
|
|
50
|
+
invocationId?: string;
|
|
51
|
+
/** When the session was created */
|
|
52
|
+
createdAt: Date;
|
|
53
|
+
/** When the session was last active */
|
|
54
|
+
lastActiveAt: Date;
|
|
55
|
+
/** Default options for invocations in this session */
|
|
56
|
+
defaultOptions: InvokeOptions;
|
|
57
|
+
/** Pending question if in awaiting_input state */
|
|
58
|
+
pendingQuestion?: QuestionPayload;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Session creation options.
|
|
62
|
+
*/
|
|
63
|
+
export interface CreateSessionOptions {
|
|
64
|
+
/** Container configuration */
|
|
65
|
+
containerConfig: ContainerConfig;
|
|
66
|
+
/** Default invocation options */
|
|
67
|
+
defaultOptions?: InvokeOptions;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Session update options for partial updates.
|
|
71
|
+
*/
|
|
72
|
+
export interface UpdateSessionOptions {
|
|
73
|
+
/** Update container ID */
|
|
74
|
+
containerId?: string;
|
|
75
|
+
/** Update invocation ID */
|
|
76
|
+
invocationId?: string;
|
|
77
|
+
/** Update pending question */
|
|
78
|
+
pendingQuestion?: QuestionPayload | null;
|
|
79
|
+
/** Update default options */
|
|
80
|
+
defaultOptions?: InvokeOptions;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Session summary for external visibility.
|
|
84
|
+
*/
|
|
85
|
+
export interface SessionSummary {
|
|
86
|
+
/** Session ID */
|
|
87
|
+
id: string;
|
|
88
|
+
/** Current status */
|
|
89
|
+
status: SessionStatus;
|
|
90
|
+
/** Whether the session is active (not terminated) */
|
|
91
|
+
isActive: boolean;
|
|
92
|
+
/** Container ID if available */
|
|
93
|
+
containerId?: string;
|
|
94
|
+
/** Creation time */
|
|
95
|
+
createdAt: Date;
|
|
96
|
+
/** Last activity time */
|
|
97
|
+
lastActiveAt: Date;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Default session timeout in milliseconds (1 hour).
|
|
101
|
+
*/
|
|
102
|
+
export declare const DEFAULT_SESSION_TIMEOUT_MS = 3600000;
|
|
103
|
+
/**
|
|
104
|
+
* Default invocation options.
|
|
105
|
+
*/
|
|
106
|
+
export declare const DEFAULT_INVOKE_OPTIONS: InvokeOptions;
|
|
107
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAMpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAEjF;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IAEX,4BAA4B;IAC5B,KAAK,EAAE,YAAY,CAAC;IAEpB,oDAAoD;IACpD,eAAe,EAAE,eAAe,CAAC;IAEjC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,SAAS,EAAE,IAAI,CAAC;IAEhB,uCAAuC;IACvC,YAAY,EAAE,IAAI,CAAC;IAEnB,sDAAsD;IACtD,cAAc,EAAE,aAAa,CAAC;IAE9B,kDAAkD;IAClD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,eAAe,EAAE,eAAe,CAAC;IAEjC,iCAAiC;IACjC,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAEzC,6BAA6B;IAC7B,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IAEX,qBAAqB;IACrB,MAAM,EAAE,aAAa,CAAC;IAEtB,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAElB,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oBAAoB;IACpB,SAAS,EAAE,IAAI,CAAC;IAEhB,yBAAyB;IACzB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAAU,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAEpC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generacy-ai/generacy-plugin-claude-code
|
|
3
|
+
*
|
|
4
|
+
* Internal types for session management.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Valid state transitions for sessions.
|
|
8
|
+
* Maps from current state to valid next states.
|
|
9
|
+
*/
|
|
10
|
+
export const VALID_TRANSITIONS = {
|
|
11
|
+
created: ['running', 'terminated'],
|
|
12
|
+
running: ['executing', 'awaiting_input', 'terminated'],
|
|
13
|
+
executing: ['running', 'awaiting_input', 'terminated'],
|
|
14
|
+
awaiting_input: ['executing', 'running', 'terminated'],
|
|
15
|
+
terminated: [], // Terminal state - no transitions allowed
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Check if a state transition is valid.
|
|
19
|
+
*/
|
|
20
|
+
export function isValidTransition(from, to) {
|
|
21
|
+
return VALID_TRANSITIONS[from]?.includes(to) ?? false;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default session timeout in milliseconds (1 hour).
|
|
25
|
+
*/
|
|
26
|
+
export const DEFAULT_SESSION_TIMEOUT_MS = 3600000;
|
|
27
|
+
/**
|
|
28
|
+
* Default invocation options.
|
|
29
|
+
*/
|
|
30
|
+
export const DEFAULT_INVOKE_OPTIONS = {
|
|
31
|
+
timeout: 300000, // 5 minutes
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IAClC,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,YAAY,CAAC;IACtD,SAAS,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAC;IACtD,cAAc,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC;IACtD,UAAU,EAAE,EAAE,EAAE,0CAA0C;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB,EAAE,EAAiB;IACtE,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AACxD,CAAC;AAgGD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,OAAO,EAAE,MAAM,EAAE,YAAY;CAC9B,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generacy-ai/generacy-plugin-claude-code
|
|
3
|
+
*
|
|
4
|
+
* Output parser for Claude Code JSON Lines format.
|
|
5
|
+
*/
|
|
6
|
+
import type { OutputChunk, UrgencyLevel } from '../types.js';
|
|
7
|
+
import type { RawClaudeOutput } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Parser for Claude Code JSON Lines output.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OutputParser {
|
|
12
|
+
private state;
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Reset parser state.
|
|
16
|
+
*/
|
|
17
|
+
reset(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a chunk of data (may contain multiple lines or partial lines).
|
|
20
|
+
*/
|
|
21
|
+
parseChunk(data: string): OutputChunk[];
|
|
22
|
+
/**
|
|
23
|
+
* Flush any remaining buffered content.
|
|
24
|
+
*/
|
|
25
|
+
flush(): OutputChunk[];
|
|
26
|
+
/**
|
|
27
|
+
* Parse a single line of JSON output.
|
|
28
|
+
*/
|
|
29
|
+
parseLine(line: string): OutputChunk | null;
|
|
30
|
+
/**
|
|
31
|
+
* Parse a raw Claude output object into an OutputChunk.
|
|
32
|
+
*/
|
|
33
|
+
parseRawOutput(raw: RawClaudeOutput): OutputChunk | null;
|
|
34
|
+
/**
|
|
35
|
+
* Create a stdout chunk from raw text.
|
|
36
|
+
*/
|
|
37
|
+
createStdoutChunk(content: string): OutputChunk;
|
|
38
|
+
/**
|
|
39
|
+
* Create a stderr chunk from raw text.
|
|
40
|
+
*/
|
|
41
|
+
createStderrChunk(content: string): OutputChunk;
|
|
42
|
+
/**
|
|
43
|
+
* Create an error chunk.
|
|
44
|
+
*/
|
|
45
|
+
createErrorChunk(message: string, code?: string, isTransient?: boolean): OutputChunk;
|
|
46
|
+
/**
|
|
47
|
+
* Create a completion chunk.
|
|
48
|
+
*/
|
|
49
|
+
createCompleteChunk(exitCode: number, summary?: string, filesModified?: string[]): OutputChunk;
|
|
50
|
+
/**
|
|
51
|
+
* Detect if a raw output is a question requiring human input.
|
|
52
|
+
*/
|
|
53
|
+
isQuestion(raw: RawClaudeOutput): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Detect question patterns in content.
|
|
56
|
+
*/
|
|
57
|
+
detectQuestionInContent(content: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Detect urgency level from content.
|
|
60
|
+
*/
|
|
61
|
+
detectUrgency(raw: RawClaudeOutput): UrgencyLevel;
|
|
62
|
+
/**
|
|
63
|
+
* Create a question chunk.
|
|
64
|
+
*/
|
|
65
|
+
private createQuestionChunk;
|
|
66
|
+
/**
|
|
67
|
+
* Extract the question text from content.
|
|
68
|
+
*/
|
|
69
|
+
private extractQuestion;
|
|
70
|
+
/**
|
|
71
|
+
* Map raw type to OutputChunkType.
|
|
72
|
+
*/
|
|
73
|
+
private mapType;
|
|
74
|
+
/**
|
|
75
|
+
* Build metadata for a chunk.
|
|
76
|
+
*/
|
|
77
|
+
private buildMetadata;
|
|
78
|
+
/**
|
|
79
|
+
* Build data payload for a chunk.
|
|
80
|
+
*/
|
|
81
|
+
private buildData;
|
|
82
|
+
/**
|
|
83
|
+
* Extract content from raw output.
|
|
84
|
+
*/
|
|
85
|
+
private extractContent;
|
|
86
|
+
/**
|
|
87
|
+
* Check if a result indicates an error.
|
|
88
|
+
*/
|
|
89
|
+
private isErrorResult;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=output-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-parser.d.ts","sourceRoot":"","sources":["../../src/streaming/output-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EAIX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAc;;IAM3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;IAyBvC;;OAEG;IACH,KAAK,IAAI,WAAW,EAAE;IActB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAU3C;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAyBxD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAQ/C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAQ/C;;OAEG;IACH,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,OAAO,GACpB,WAAW;IAYd;;OAEG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,WAAW;IAed;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAmBzC;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAgBjD;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY;IAoBjD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqCjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB"}
|