cyrus-core 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/CyrusAgentSession.d.ts +14 -0
  2. package/dist/CyrusAgentSession.d.ts.map +1 -1
  3. package/dist/agent-runner-types.d.ts +97 -0
  4. package/dist/agent-runner-types.d.ts.map +1 -1
  5. package/dist/config-types.d.ts +22 -4
  6. package/dist/config-types.d.ts.map +1 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/issue-tracker/IIssueTrackerService.d.ts +18 -5
  12. package/dist/issue-tracker/IIssueTrackerService.d.ts.map +1 -1
  13. package/dist/issue-tracker/adapters/CLIEventTransport.d.ts +91 -0
  14. package/dist/issue-tracker/adapters/CLIEventTransport.d.ts.map +1 -0
  15. package/dist/issue-tracker/adapters/CLIEventTransport.js +104 -0
  16. package/dist/issue-tracker/adapters/CLIEventTransport.js.map +1 -0
  17. package/dist/issue-tracker/adapters/CLIIssueTrackerService.d.ts +239 -0
  18. package/dist/issue-tracker/adapters/CLIIssueTrackerService.d.ts.map +1 -0
  19. package/dist/issue-tracker/adapters/CLIIssueTrackerService.js +1112 -0
  20. package/dist/issue-tracker/adapters/CLIIssueTrackerService.js.map +1 -0
  21. package/dist/issue-tracker/adapters/CLIRPCServer.d.ts +318 -0
  22. package/dist/issue-tracker/adapters/CLIRPCServer.d.ts.map +1 -0
  23. package/dist/issue-tracker/adapters/CLIRPCServer.js +536 -0
  24. package/dist/issue-tracker/adapters/CLIRPCServer.js.map +1 -0
  25. package/dist/issue-tracker/adapters/CLITypes.d.ts +243 -0
  26. package/dist/issue-tracker/adapters/CLITypes.d.ts.map +1 -0
  27. package/dist/issue-tracker/adapters/CLITypes.js +378 -0
  28. package/dist/issue-tracker/adapters/CLITypes.js.map +1 -0
  29. package/dist/issue-tracker/adapters/index.d.ts +14 -0
  30. package/dist/issue-tracker/adapters/index.d.ts.map +1 -0
  31. package/dist/issue-tracker/adapters/index.js +11 -0
  32. package/dist/issue-tracker/adapters/index.js.map +1 -0
  33. package/dist/issue-tracker/index.d.ts +2 -1
  34. package/dist/issue-tracker/index.d.ts.map +1 -1
  35. package/dist/issue-tracker/index.js +3 -2
  36. package/dist/issue-tracker/index.js.map +1 -1
  37. package/dist/issue-tracker/types.d.ts +141 -29
  38. package/dist/issue-tracker/types.d.ts.map +1 -1
  39. package/dist/issue-tracker/types.js.map +1 -1
  40. package/package.json +30 -30
  41. package/LICENSE +0 -674
@@ -0,0 +1,536 @@
1
+ /**
2
+ * CLI RPC Server - Fastify-based JSON-RPC handler for F1 testing framework
3
+ *
4
+ * This server exposes HTTP endpoints that bridge the F1 CLI binary with the
5
+ * CLIIssueTrackerService and EdgeWorker, enabling command routing, pagination,
6
+ * and session management.
7
+ *
8
+ * @module issue-tracker/adapters/CLIRPCServer
9
+ */
10
+ /**
11
+ * Standard JSON-RPC 2.0 error codes
12
+ */
13
+ export const RPCErrorCodes = {
14
+ PARSE_ERROR: -32700,
15
+ INVALID_REQUEST: -32600,
16
+ METHOD_NOT_FOUND: -32601,
17
+ INVALID_PARAMS: -32602,
18
+ INTERNAL_ERROR: -32603,
19
+ SERVER_ERROR: -32000, // Generic server error
20
+ };
21
+ /**
22
+ * CLI RPC Server
23
+ *
24
+ * Exposes HTTP JSON-RPC endpoints for CLI commands, delegating to
25
+ * CLIIssueTrackerService for all operations.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const server = new CLIRPCServer({
30
+ * fastifyServer: app,
31
+ * issueTracker: cliIssueTracker,
32
+ * version: "1.0.0"
33
+ * });
34
+ *
35
+ * server.register();
36
+ * ```
37
+ */
38
+ export class CLIRPCServer {
39
+ config;
40
+ startTime;
41
+ constructor(config) {
42
+ this.config = config;
43
+ this.startTime = Date.now();
44
+ }
45
+ /**
46
+ * Register the /cli/rpc endpoint with Fastify
47
+ */
48
+ register() {
49
+ this.config.fastifyServer.post("/cli/rpc", async (request, reply) => {
50
+ const requestId = request.body?.id ?? null;
51
+ try {
52
+ const { method, params } = request.body;
53
+ // Route to appropriate handler
54
+ const response = await this.handleCommand(method, params, requestId);
55
+ reply.send(response);
56
+ }
57
+ catch (error) {
58
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
59
+ reply.send({
60
+ jsonrpc: "2.0",
61
+ error: {
62
+ code: RPCErrorCodes.INTERNAL_ERROR,
63
+ message: errorMessage,
64
+ },
65
+ id: requestId,
66
+ });
67
+ }
68
+ });
69
+ }
70
+ /**
71
+ * Route commands to appropriate handlers
72
+ */
73
+ async handleCommand(method, params, requestId) {
74
+ switch (method) {
75
+ case "ping":
76
+ return this.handlePing(params, requestId);
77
+ case "status":
78
+ return this.handleStatus(params, requestId);
79
+ case "version":
80
+ return this.handleVersion(params, requestId);
81
+ case "createIssue":
82
+ return this.handleCreateIssue(params, requestId);
83
+ case "assignIssue":
84
+ return this.handleAssignIssue(params, requestId);
85
+ case "createComment":
86
+ return this.handleCreateComment(params, requestId);
87
+ case "startSession":
88
+ return this.handleStartSession(params, requestId);
89
+ case "viewSession":
90
+ return this.handleViewSession(params, requestId);
91
+ case "promptSession":
92
+ return this.handlePromptSession(params, requestId);
93
+ case "stopSession":
94
+ return this.handleStopSession(params, requestId);
95
+ case "listAgentSessions":
96
+ return this.handleListAgentSessions(params, requestId);
97
+ default:
98
+ return {
99
+ jsonrpc: "2.0",
100
+ error: {
101
+ code: RPCErrorCodes.METHOD_NOT_FOUND,
102
+ message: `Unknown command: ${method}`,
103
+ },
104
+ id: requestId,
105
+ };
106
+ }
107
+ }
108
+ /**
109
+ * Handle ping command - health check
110
+ */
111
+ async handlePing(_params, requestId) {
112
+ return {
113
+ jsonrpc: "2.0",
114
+ result: {
115
+ message: "pong",
116
+ timestamp: Date.now(),
117
+ },
118
+ id: requestId,
119
+ };
120
+ }
121
+ /**
122
+ * Handle status command - server status with uptime
123
+ */
124
+ async handleStatus(_params, requestId) {
125
+ return {
126
+ jsonrpc: "2.0",
127
+ result: {
128
+ uptime: Date.now() - this.startTime,
129
+ status: "ready",
130
+ server: "CLIRPCServer",
131
+ },
132
+ id: requestId,
133
+ };
134
+ }
135
+ /**
136
+ * Handle version command - version info
137
+ */
138
+ async handleVersion(_params, requestId) {
139
+ return {
140
+ jsonrpc: "2.0",
141
+ result: {
142
+ version: this.config.version ?? "unknown",
143
+ platform: "cli",
144
+ },
145
+ id: requestId,
146
+ };
147
+ }
148
+ /**
149
+ * Handle createIssue command - create new issue
150
+ */
151
+ async handleCreateIssue(params, requestId) {
152
+ const { teamId, title, description, priority, stateId } = params;
153
+ if (!teamId || !title) {
154
+ return {
155
+ jsonrpc: "2.0",
156
+ error: {
157
+ code: RPCErrorCodes.INVALID_PARAMS,
158
+ message: "Missing required parameters: teamId and title are required",
159
+ },
160
+ id: requestId,
161
+ };
162
+ }
163
+ try {
164
+ const issue = await this.config.issueTracker.createIssue({
165
+ teamId,
166
+ title,
167
+ description,
168
+ priority,
169
+ stateId,
170
+ });
171
+ return {
172
+ jsonrpc: "2.0",
173
+ result: {
174
+ issue,
175
+ },
176
+ id: requestId,
177
+ };
178
+ }
179
+ catch (error) {
180
+ return {
181
+ jsonrpc: "2.0",
182
+ error: {
183
+ code: RPCErrorCodes.SERVER_ERROR,
184
+ message: error instanceof Error ? error.message : "Failed to create issue",
185
+ },
186
+ id: requestId,
187
+ };
188
+ }
189
+ }
190
+ /**
191
+ * Handle assignIssue command - assign issue to user
192
+ */
193
+ async handleAssignIssue(params, requestId) {
194
+ const { issueId, userId } = params;
195
+ if (!issueId || !userId) {
196
+ return {
197
+ jsonrpc: "2.0",
198
+ error: {
199
+ code: RPCErrorCodes.INVALID_PARAMS,
200
+ message: "Missing required parameters: issueId and userId are required",
201
+ },
202
+ id: requestId,
203
+ };
204
+ }
205
+ try {
206
+ const updates = {
207
+ assigneeId: userId,
208
+ };
209
+ const issue = await this.config.issueTracker.updateIssue(issueId, updates);
210
+ return {
211
+ jsonrpc: "2.0",
212
+ result: {
213
+ issue,
214
+ },
215
+ id: requestId,
216
+ };
217
+ }
218
+ catch (error) {
219
+ return {
220
+ jsonrpc: "2.0",
221
+ error: {
222
+ code: RPCErrorCodes.SERVER_ERROR,
223
+ message: error instanceof Error ? error.message : "Failed to assign issue",
224
+ },
225
+ id: requestId,
226
+ };
227
+ }
228
+ }
229
+ /**
230
+ * Handle createComment command - add comment to issue
231
+ */
232
+ async handleCreateComment(params, requestId) {
233
+ const { issueId, body } = params;
234
+ if (!issueId || !body) {
235
+ return {
236
+ jsonrpc: "2.0",
237
+ error: {
238
+ code: RPCErrorCodes.INVALID_PARAMS,
239
+ message: "Missing required parameters: issueId and body are required",
240
+ },
241
+ id: requestId,
242
+ };
243
+ }
244
+ try {
245
+ const input = {
246
+ body,
247
+ };
248
+ const comment = await this.config.issueTracker.createComment(issueId, input);
249
+ return {
250
+ jsonrpc: "2.0",
251
+ result: {
252
+ comment,
253
+ },
254
+ id: requestId,
255
+ };
256
+ }
257
+ catch (error) {
258
+ return {
259
+ jsonrpc: "2.0",
260
+ error: {
261
+ code: RPCErrorCodes.SERVER_ERROR,
262
+ message: error instanceof Error ? error.message : "Failed to create comment",
263
+ },
264
+ id: requestId,
265
+ };
266
+ }
267
+ }
268
+ /**
269
+ * Handle startSession command - start agent session on issue
270
+ */
271
+ async handleStartSession(params, requestId) {
272
+ const { issueId, externalLink } = params;
273
+ if (!issueId) {
274
+ return {
275
+ jsonrpc: "2.0",
276
+ error: {
277
+ code: RPCErrorCodes.INVALID_PARAMS,
278
+ message: "Missing required parameter: issueId is required",
279
+ },
280
+ id: requestId,
281
+ };
282
+ }
283
+ try {
284
+ const input = {
285
+ issueId,
286
+ ...(externalLink && { externalLink }),
287
+ };
288
+ const result = await this.config.issueTracker.createAgentSessionOnIssue(input);
289
+ // Extract session from LinearFetch result
290
+ const agentSessionPayload = await result;
291
+ // Access agentSession property safely
292
+ const agentSession = await agentSessionPayload.agentSession;
293
+ if (!agentSession) {
294
+ throw new Error("Failed to create agent session - no session returned");
295
+ }
296
+ return {
297
+ jsonrpc: "2.0",
298
+ result: {
299
+ session: {
300
+ sessionId: agentSession.id,
301
+ issueId,
302
+ status: agentSession.status ?? "unknown",
303
+ createdAt: Date.now(),
304
+ updatedAt: Date.now(),
305
+ },
306
+ },
307
+ id: requestId,
308
+ };
309
+ }
310
+ catch (error) {
311
+ return {
312
+ jsonrpc: "2.0",
313
+ error: {
314
+ code: RPCErrorCodes.SERVER_ERROR,
315
+ message: error instanceof Error ? error.message : "Failed to start session",
316
+ },
317
+ id: requestId,
318
+ };
319
+ }
320
+ }
321
+ /**
322
+ * Handle viewSession command - view session with activity pagination
323
+ */
324
+ async handleViewSession(params, requestId) {
325
+ const { sessionId, limit = 50, offset = 0, search } = params;
326
+ if (!sessionId) {
327
+ return {
328
+ jsonrpc: "2.0",
329
+ error: {
330
+ code: RPCErrorCodes.INVALID_PARAMS,
331
+ message: "Missing required parameter: sessionId is required",
332
+ },
333
+ id: requestId,
334
+ };
335
+ }
336
+ try {
337
+ // Fetch session
338
+ const agentSession = await this.config.issueTracker.fetchAgentSession(sessionId);
339
+ // Fetch ALL activities from the issue tracker (no limit yet)
340
+ const activityDataList = this.config.issueTracker.listAgentActivities(sessionId);
341
+ // Filter out ephemeral activities that have been replaced by subsequent activities
342
+ // An ephemeral activity is replaced if there's ANY activity that comes after it
343
+ const visibleActivities = activityDataList.filter((activity, index) => {
344
+ // If this activity is not ephemeral, it's always visible
345
+ if (activity.ephemeral !== true) {
346
+ return true;
347
+ }
348
+ // If this is an ephemeral activity, check if there's any activity after it (by index)
349
+ // If there is, this ephemeral activity should be hidden (replaced)
350
+ // We use index comparison because activities may have the same timestamp
351
+ const hasSubsequentActivity = activityDataList.some((_otherActivity, otherIndex) => otherIndex > index);
352
+ // Show ephemeral activity only if there's no subsequent activity
353
+ return !hasSubsequentActivity;
354
+ });
355
+ // Filter by search if provided
356
+ let filteredActivities = visibleActivities;
357
+ if (search) {
358
+ const searchLower = search.toLowerCase();
359
+ filteredActivities = visibleActivities.filter((a) => a.content.toLowerCase().includes(searchLower));
360
+ }
361
+ // Apply pagination after filtering
362
+ const paginatedActivityData = filteredActivities.slice(offset, offset + limit);
363
+ // Check if there are more activities
364
+ const hasMore = filteredActivities.length > offset + limit;
365
+ // Transform to AgentActivityData format
366
+ const activities = paginatedActivityData.map((activityData) => ({
367
+ id: activityData.id,
368
+ type: activityData.type,
369
+ content: activityData.content,
370
+ createdAt: activityData.createdAt.getTime(),
371
+ }));
372
+ // Total count is based on filtered activities
373
+ const totalCount = filteredActivities.length;
374
+ return {
375
+ jsonrpc: "2.0",
376
+ result: {
377
+ session: {
378
+ sessionId: agentSession.id,
379
+ issueId: agentSession.issueId ?? "unknown",
380
+ status: agentSession.status ?? "unknown",
381
+ createdAt: agentSession.createdAt.getTime(),
382
+ updatedAt: agentSession.updatedAt.getTime(),
383
+ },
384
+ activities,
385
+ totalCount,
386
+ hasMore,
387
+ },
388
+ id: requestId,
389
+ };
390
+ }
391
+ catch (error) {
392
+ return {
393
+ jsonrpc: "2.0",
394
+ error: {
395
+ code: RPCErrorCodes.SERVER_ERROR,
396
+ message: error instanceof Error ? error.message : "Failed to view session",
397
+ },
398
+ id: requestId,
399
+ };
400
+ }
401
+ }
402
+ /**
403
+ * Handle promptSession command - send message to session
404
+ */
405
+ async handlePromptSession(params, requestId) {
406
+ const { sessionId, message } = params;
407
+ if (!sessionId || !message) {
408
+ return {
409
+ jsonrpc: "2.0",
410
+ error: {
411
+ code: RPCErrorCodes.INVALID_PARAMS,
412
+ message: "Missing required parameters: sessionId and message are required",
413
+ },
414
+ id: requestId,
415
+ };
416
+ }
417
+ try {
418
+ // Prompt the session - this creates a comment and emits a prompted event
419
+ await this.config.issueTracker.promptAgentSession(sessionId, message);
420
+ return {
421
+ jsonrpc: "2.0",
422
+ result: {
423
+ success: true,
424
+ message: "Session prompted successfully",
425
+ },
426
+ id: requestId,
427
+ };
428
+ }
429
+ catch (error) {
430
+ return {
431
+ jsonrpc: "2.0",
432
+ error: {
433
+ code: RPCErrorCodes.SERVER_ERROR,
434
+ message: error instanceof Error ? error.message : "Failed to prompt session",
435
+ },
436
+ id: requestId,
437
+ };
438
+ }
439
+ }
440
+ /**
441
+ * Handle stopSession command - stop agent session
442
+ */
443
+ async handleStopSession(params, requestId) {
444
+ const { sessionId } = params;
445
+ if (!sessionId) {
446
+ return {
447
+ jsonrpc: "2.0",
448
+ error: {
449
+ code: RPCErrorCodes.INVALID_PARAMS,
450
+ message: "Missing required parameter: sessionId is required",
451
+ },
452
+ id: requestId,
453
+ };
454
+ }
455
+ try {
456
+ // Import AgentSessionStatus for the update
457
+ const { AgentSessionStatus } = await import("../types.js");
458
+ // Update the session status to complete
459
+ await this.config.issueTracker.updateAgentSessionStatus(sessionId, AgentSessionStatus.Complete);
460
+ // Emit stop signal event for EdgeWorker to handle
461
+ await this.config.issueTracker.emitStopSignalEvent(sessionId);
462
+ return {
463
+ jsonrpc: "2.0",
464
+ result: {
465
+ success: true,
466
+ message: "Session stopped successfully",
467
+ },
468
+ id: requestId,
469
+ };
470
+ }
471
+ catch (error) {
472
+ return {
473
+ jsonrpc: "2.0",
474
+ error: {
475
+ code: RPCErrorCodes.SERVER_ERROR,
476
+ message: error instanceof Error ? error.message : "Failed to stop session",
477
+ },
478
+ id: requestId,
479
+ };
480
+ }
481
+ }
482
+ /**
483
+ * Handle listAgentSessions command - list all sessions (optional)
484
+ */
485
+ async handleListAgentSessions(params, requestId) {
486
+ const { issueId, limit = 50, offset = 0 } = params;
487
+ try {
488
+ // Get sessions from the issue tracker
489
+ const sessionDataList = this.config.issueTracker.listAgentSessions({
490
+ issueId,
491
+ limit: limit + 1, // Fetch one extra to check hasMore
492
+ offset,
493
+ });
494
+ // Check if there are more sessions
495
+ const hasMore = sessionDataList.length > limit;
496
+ const paginatedSessionData = hasMore
497
+ ? sessionDataList.slice(0, limit)
498
+ : sessionDataList;
499
+ // Transform to AgentSessionData format
500
+ const sessions = paginatedSessionData.map((sessionData) => ({
501
+ sessionId: sessionData.id,
502
+ issueId: sessionData.issueId ?? "unknown",
503
+ status: sessionData.status ?? "unknown",
504
+ createdAt: sessionData.createdAt.getTime(),
505
+ updatedAt: sessionData.updatedAt.getTime(),
506
+ }));
507
+ // Get total count (approximate - would need separate count query for accuracy)
508
+ const allSessions = this.config.issueTracker.listAgentSessions({
509
+ issueId,
510
+ });
511
+ const totalCount = allSessions.length;
512
+ return {
513
+ jsonrpc: "2.0",
514
+ result: {
515
+ sessions,
516
+ totalCount,
517
+ hasMore,
518
+ },
519
+ id: requestId,
520
+ };
521
+ }
522
+ catch (error) {
523
+ return {
524
+ jsonrpc: "2.0",
525
+ error: {
526
+ code: RPCErrorCodes.SERVER_ERROR,
527
+ message: error instanceof Error
528
+ ? error.message
529
+ : "Failed to list agent sessions",
530
+ },
531
+ id: requestId,
532
+ };
533
+ }
534
+ }
535
+ }
536
+ //# sourceMappingURL=CLIRPCServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CLIRPCServer.js","sourceRoot":"","sources":["../../../src/issue-tracker/adapters/CLIRPCServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8DH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,WAAW,EAAE,CAAC,KAAK;IACnB,eAAe,EAAE,CAAC,KAAK;IACvB,gBAAgB,EAAE,CAAC,KAAK;IACxB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;IACtB,YAAY,EAAE,CAAC,KAAK,EAAE,uBAAuB;CACpC,CAAC;AAuNX;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,YAAY;IAChB,MAAM,CAAqB;IAC3B,SAAS,CAAS;IAE1B,YAAY,MAA0B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAC7B,UAAU,EACV,KAAK,EACJ,OAA6C,EAC7C,KAAmB,EAClB,EAAE;YACH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;YAE3C,IAAI,CAAC;gBACJ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;gBAExC,+BAA+B;gBAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAErE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,YAAY,GACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAE1D,KAAK,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACN,IAAI,EAAE,aAAa,CAAC,cAAc;wBAClC,OAAO,EAAE,YAAY;qBACrB;oBACD,EAAE,EAAE,SAAS;iBACS,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC,CACD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAC1B,MAAkB,EAClB,MAAe,EACf,SAAuB;QAEvB,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,MAAM;gBACV,OAAO,IAAI,CAAC,UAAU,CAAC,MAAoB,EAAE,SAAS,CAAC,CAAC;YAEzD,KAAK,QAAQ;gBACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAsB,EAAE,SAAS,CAAC,CAAC;YAE7D,KAAK,SAAS;gBACb,OAAO,IAAI,CAAC,aAAa,CAAC,MAAuB,EAAE,SAAS,CAAC,CAAC;YAE/D,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAA2B,EAAE,SAAS,CAAC,CAAC;YAEvE,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAA2B,EAAE,SAAS,CAAC,CAAC;YAEvE,KAAK,eAAe;gBACnB,OAAO,IAAI,CAAC,mBAAmB,CAC9B,MAA6B,EAC7B,SAAS,CACT,CAAC;YAEH,KAAK,cAAc;gBAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAA4B,EAAE,SAAS,CAAC,CAAC;YAEzE,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAA2B,EAAE,SAAS,CAAC,CAAC;YAEvE,KAAK,eAAe;gBACnB,OAAO,IAAI,CAAC,mBAAmB,CAC9B,MAA6B,EAC7B,SAAS,CACT,CAAC;YAEH,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAA2B,EAAE,SAAS,CAAC,CAAC;YAEvE,KAAK,mBAAmB;gBACvB,OAAO,IAAI,CAAC,uBAAuB,CAClC,MAAiC,EACjC,SAAS,CACT,CAAC;YAEH;gBACC,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACN,IAAI,EAAE,aAAa,CAAC,gBAAgB;wBACpC,OAAO,EAAE,oBAAoB,MAAM,EAAE;qBACrC;oBACD,EAAE,EAAE,SAAS;iBACb,CAAC;QACJ,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACvB,OAAmB,EACnB,SAAuB;QAEvB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACP,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACrB;YACD,EAAE,EAAE,SAAS;SACb,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACzB,OAAqB,EACrB,SAAuB;QAEvB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;gBACnC,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,cAAc;aACtB;YACD,EAAE,EAAE,SAAS;SACb,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAC1B,OAAsB,EACtB,SAAuB;QAEvB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACP,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;gBACzC,QAAQ,EAAE,KAAK;aACf;YACD,EAAE,EAAE,SAAS;SACb,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC9B,MAAyB,EACzB,SAAuB;QAEvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEjE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EAAE,4DAA4D;iBACrE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBACxD,MAAM;gBACN,KAAK;gBACL,WAAW;gBACX,QAAQ;gBACR,OAAO;aACP,CAAC,CAAC;YAEH,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,KAAK;iBACL;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;iBAClE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC9B,MAAyB,EACzB,SAAuB;QAEvB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEnC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EACN,8DAA8D;iBAC/D;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,OAAO,GAAqB;gBACjC,UAAU,EAAE,MAAM;aAClB,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CACvD,OAAO,EACP,OAAO,CACP,CAAC;YAEF,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,KAAK;iBACL;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;iBAClE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAChC,MAA2B,EAC3B,SAAuB;QAEvB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAEjC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EAAE,4DAA4D;iBACrE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAuB;gBACjC,IAAI;aACJ,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAC3D,OAAO,EACP,KAAK,CACL,CAAC;YAEF,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,OAAO;iBACP;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;iBACpE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC/B,MAA0B,EAC1B,SAAuB;QAEvB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EAAE,iDAAiD;iBAC1D;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAmC;gBAC7C,OAAO;gBACP,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;aACrC,CAAC;YAEF,MAAM,MAAM,GACX,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAEjE,0CAA0C;YAC1C,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC;YAEzC,sCAAsC;YACtC,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC;YAE5D,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACzE,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,OAAO,EAAE;wBACR,SAAS,EAAE,YAAY,CAAC,EAAE;wBAC1B,OAAO;wBACP,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,SAAS;wBACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACrB;iBACD;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;iBACnE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC9B,MAAyB,EACzB,SAAuB;QAEvB,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE7D,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EAAE,mDAAmD;iBAC5D;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,gBAAgB;YAChB,MAAM,YAAY,GACjB,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAE7D,6DAA6D;YAC7D,MAAM,gBAAgB,GACrB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAEzD,mFAAmF;YACnF,gFAAgF;YAChF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrE,yDAAyD;gBACzD,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBACjC,OAAO,IAAI,CAAC;gBACb,CAAC;gBAED,sFAAsF;gBACtF,mEAAmE;gBACnE,yEAAyE;gBACzE,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,IAAI,CAClD,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,KAAK,CAClD,CAAC;gBAEF,iEAAiE;gBACjE,OAAO,CAAC,qBAAqB,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,+BAA+B;YAC/B,IAAI,kBAAkB,GAAG,iBAAiB,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACzC,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC7C,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,KAAK,CACrD,MAAM,EACN,MAAM,GAAG,KAAK,CACd,CAAC;YAEF,qCAAqC;YACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;YAE3D,wCAAwC;YACxC,MAAM,UAAU,GAAwB,qBAAqB,CAAC,GAAG,CAChE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAClB,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE;aAC3C,CAAC,CACF,CAAC;YAEF,8CAA8C;YAC9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC;YAE7C,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,OAAO,EAAE;wBACR,SAAS,EAAE,YAAY,CAAC,EAAE;wBAC1B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,SAAS;wBAC1C,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,SAAS;wBACxC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE;wBAC3C,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE;qBAC3C;oBACD,UAAU;oBACV,UAAU;oBACV,OAAO;iBACP;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;iBAClE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAChC,MAA2B,EAC3B,SAAuB;QAEvB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEtC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EACN,iEAAiE;iBAClE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,yEAAyE;YACzE,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEtE,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,+BAA+B;iBACxC;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;iBACpE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC9B,MAAyB,EACzB,SAAuB;QAEvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,cAAc;oBAClC,OAAO,EAAE,mDAAmD;iBAC5D;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,2CAA2C;YAC3C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAE3D,wCAAwC;YACxC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CACtD,SAAS,EACT,kBAAkB,CAAC,QAAQ,CAC3B,CAAC;YAEF,kDAAkD;YAClD,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAE9D,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,8BAA8B;iBACvC;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;iBAClE;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CACpC,MAA+B,EAC/B,SAAuB;QAEvB,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;QAEnD,IAAI,CAAC;YACJ,sCAAsC;YACtC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAClE,OAAO;gBACP,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,mCAAmC;gBACrD,MAAM;aACN,CAAC,CAAC;YAEH,mCAAmC;YACnC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC;YAC/C,MAAM,oBAAoB,GAAG,OAAO;gBACnC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;gBACjC,CAAC,CAAC,eAAe,CAAC;YAEnB,uCAAuC;YACvC,MAAM,QAAQ,GAAuB,oBAAoB,CAAC,GAAG,CAC5D,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACjB,SAAS,EAAE,WAAW,CAAC,EAAE;gBACzB,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,SAAS;gBACzC,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,SAAS;gBACvC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC1C,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE;aAC1C,CAAC,CACF,CAAC;YAEF,+EAA+E;YAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAC9D,OAAO;aACP,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;YAEtC,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACP,QAAQ;oBACR,UAAU;oBACV,OAAO;iBACP;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,aAAa,CAAC,YAAY;oBAChC,OAAO,EACN,KAAK,YAAY,KAAK;wBACrB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,+BAA+B;iBACnC;gBACD,EAAE,EAAE,SAAS;aACb,CAAC;QACH,CAAC;IACF,CAAC;CACD"}