@jamesaphoenix/tx-test-utils 0.5.2 → 0.5.4
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/README.md +32 -0
- package/dist/factories/task.factory.d.ts +9 -1
- package/dist/factories/task.factory.d.ts.map +1 -1
- package/dist/factories/task.factory.js +9 -1
- package/dist/factories/task.factory.js.map +1 -1
- package/dist/helpers/shared-test-layer.d.ts +1 -1
- package/package.json +1 -1
- package/dist/adapters/better-sqlite3-adapter.d.ts +0 -36
- package/dist/adapters/better-sqlite3-adapter.d.ts.map +0 -1
- package/dist/adapters/better-sqlite3-adapter.js +0 -78
- package/dist/adapters/better-sqlite3-adapter.js.map +0 -1
package/README.md
CHANGED
|
@@ -17,6 +17,14 @@ tx init --codex # AGENTS.md + .codex/agents
|
|
|
17
17
|
tx init --claude --codex # scaffold both
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
Watchdog onboarding (optional, default off):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
tx init --watchdog # scaffold watchdog assets with runtime auto-detect
|
|
24
|
+
tx init --watchdog --watchdog-runtime codex
|
|
25
|
+
tx init --watchdog --watchdog-runtime both
|
|
26
|
+
```
|
|
27
|
+
|
|
20
28
|
---
|
|
21
29
|
|
|
22
30
|
## The Problem
|
|
@@ -172,6 +180,30 @@ tx done $task
|
|
|
172
180
|
|
|
173
181
|
---
|
|
174
182
|
|
|
183
|
+
## Watchdog (Opt-In)
|
|
184
|
+
|
|
185
|
+
Use watchdog when you want detached, self-healing RALPH loops that can survive terminal closes and reconcile stale runs/tasks automatically.
|
|
186
|
+
|
|
187
|
+
Use it for:
|
|
188
|
+
- Long-running unattended execution
|
|
189
|
+
- Automatic stalled-run reaping and orphan task reset
|
|
190
|
+
- Background supervision through launchd/systemd
|
|
191
|
+
|
|
192
|
+
Skip it for:
|
|
193
|
+
- Short interactive sessions
|
|
194
|
+
- One-off local runs you supervise manually
|
|
195
|
+
|
|
196
|
+
Quick start:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
tx init --watchdog --watchdog-runtime auto
|
|
200
|
+
./scripts/watchdog-launcher.sh start
|
|
201
|
+
./scripts/watchdog-launcher.sh status
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Detailed rollout, detached service setup, rollback, and troubleshooting:
|
|
205
|
+
- [Watchdog Runbook](apps/docs/content/docs/watchdog-runbook.mdx)
|
|
206
|
+
|
|
175
207
|
## Why tx?
|
|
176
208
|
|
|
177
209
|
| | Native Tasks | CLAUDE.md | tx |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module @tx/test-utils/factories/task
|
|
5
5
|
*/
|
|
6
|
-
import type { Task, TaskStatus } from "@jamesaphoenix/tx-types";
|
|
6
|
+
import type { Task, TaskAssigneeType, TaskStatus } from "@jamesaphoenix/tx-types";
|
|
7
7
|
import type { TestDatabase } from "../database/index.js";
|
|
8
8
|
/**
|
|
9
9
|
* Options for creating a test task.
|
|
@@ -27,6 +27,14 @@ export interface CreateTaskOptions {
|
|
|
27
27
|
createdAt?: Date;
|
|
28
28
|
/** Completion timestamp (only if status is 'done') */
|
|
29
29
|
completedAt?: Date | null;
|
|
30
|
+
/** Task assignee type */
|
|
31
|
+
assigneeType?: TaskAssigneeType | null;
|
|
32
|
+
/** Task assignee identifier */
|
|
33
|
+
assigneeId?: string | null;
|
|
34
|
+
/** Task assigned timestamp */
|
|
35
|
+
assignedAt?: Date | null;
|
|
36
|
+
/** Assignment source */
|
|
37
|
+
assignedBy?: string | null;
|
|
30
38
|
}
|
|
31
39
|
/**
|
|
32
40
|
* Factory class for creating test tasks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.factory.d.ts","sourceRoot":"","sources":["../../src/factories/task.factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,IAAI,
|
|
1
|
+
{"version":3,"file":"task.factory.d.ts","sourceRoot":"","sources":["../../src/factories/task.factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,IAAI,EACJ,gBAAgB,EAEhB,UAAU,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,yBAAyB;IACzB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,sDAAsD;IACtD,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACzB,yBAAyB;IACzB,YAAY,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACtC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEtB,EAAE,EAAE,YAAY,EAAE,SAAS,SAAiB;IAKxD;;OAEG;IACH,MAAM,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAqD7C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,EAAE;IAWlE;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAIrE;;OAEG;IACH,SAAS,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAQhD;;OAEG;IACH,YAAY,CACV,aAAa,EAAE,iBAAiB,EAChC,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,iBAAsB,GACnC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;KAAE;IASrC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,IAAI,YAAY,EAChB,UAAS,iBAAsB,KAC9B,IAGF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,IAAI,YAAY,EAChB,OAAO,MAAM,EACb,UAAS,iBAAsB,KAC9B,IAAI,EAGN,CAAA"}
|
|
@@ -49,6 +49,10 @@ export class TaskFactory {
|
|
|
49
49
|
const metadata = options.metadata ?? {};
|
|
50
50
|
const createdAt = options.createdAt ?? now;
|
|
51
51
|
const completedAt = options.completedAt ?? (status === "done" ? now : null);
|
|
52
|
+
const assigneeType = options.assigneeType ?? null;
|
|
53
|
+
const assigneeId = options.assigneeId ?? null;
|
|
54
|
+
const assignedAt = options.assignedAt ?? null;
|
|
55
|
+
const assignedBy = options.assignedBy ?? null;
|
|
52
56
|
this.db.run(`INSERT INTO tasks (id, title, description, status, parent_id, score, metadata, created_at, updated_at, completed_at)
|
|
53
57
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
54
58
|
id,
|
|
@@ -72,7 +76,11 @@ export class TaskFactory {
|
|
|
72
76
|
metadata,
|
|
73
77
|
createdAt,
|
|
74
78
|
updatedAt: now,
|
|
75
|
-
completedAt
|
|
79
|
+
completedAt,
|
|
80
|
+
assigneeType,
|
|
81
|
+
assigneeId,
|
|
82
|
+
assignedAt,
|
|
83
|
+
assignedBy
|
|
76
84
|
};
|
|
77
85
|
}
|
|
78
86
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.factory.js","sourceRoot":"","sources":["../../src/factories/task.factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"task.factory.js","sourceRoot":"","sources":["../../src/factories/task.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ export interface SharedTestLayer<L> {
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export declare const createSharedTestLayer: () => Promise<{
|
|
59
|
-
layer: Layer.Layer<import("@jamesaphoenix/tx-core").
|
|
59
|
+
layer: Layer.Layer<import("@jamesaphoenix/tx-core").MigrationService | import("@jamesaphoenix/tx-core").SqliteClient | import("@jamesaphoenix/tx-core").TaskRepository | import("@jamesaphoenix/tx-core").DependencyRepository | import("@jamesaphoenix/tx-core").LearningRepository | import("@jamesaphoenix/tx-core").FileLearningRepository | import("@jamesaphoenix/tx-core").AttemptRepository | import("@jamesaphoenix/tx-core").RunRepository | import("@jamesaphoenix/tx-core").AnchorRepository | import("@jamesaphoenix/tx-core").EdgeRepository | import("@jamesaphoenix/tx-core").DeduplicationRepository | import("@jamesaphoenix/tx-core").CandidateRepository | import("@jamesaphoenix/tx-core").TrackedProjectRepository | import("@jamesaphoenix/tx-core").WorkerRepository | import("@jamesaphoenix/tx-core").ClaimRepository | import("@jamesaphoenix/tx-core").OrchestratorStateRepository | import("@jamesaphoenix/tx-core").TaskService | import("@jamesaphoenix/tx-core").DependencyService | import("@jamesaphoenix/tx-core").ReadyService | import("@jamesaphoenix/tx-core").HierarchyService | import("@jamesaphoenix/tx-core").EdgeService | import("@jamesaphoenix/tx-core").GraphExpansionService | import("@jamesaphoenix/tx-core").FeedbackTrackerService | import("@jamesaphoenix/tx-core").DiversifierService | import("@jamesaphoenix/tx-core").RetrieverService | import("@jamesaphoenix/tx-core").LearningService | import("@jamesaphoenix/tx-core").FileLearningService | import("@jamesaphoenix/tx-core").AttemptService | import("@jamesaphoenix/tx-core").AnchorVerificationService | import("@jamesaphoenix/tx-core").AnchorService | import("@jamesaphoenix/tx-core").DeduplicationService | import("@jamesaphoenix/tx-core").SyncService | import("@jamesaphoenix/tx-core").SwarmVerificationService | import("@jamesaphoenix/tx-core").PromotionService | import("@jamesaphoenix/tx-core").WorkerService | import("@jamesaphoenix/tx-core").RunHeartbeatService | import("@jamesaphoenix/tx-core").ClaimService | import("@jamesaphoenix/tx-core").OrchestratorService | import("@jamesaphoenix/tx-core").DaemonService | import("@jamesaphoenix/tx-core").TracingService | import("@jamesaphoenix/tx-core").CompactionRepository | import("@jamesaphoenix/tx-core").CompactionService | import("@jamesaphoenix/tx-core").ValidationService | import("@jamesaphoenix/tx-core").MessageRepository | import("@jamesaphoenix/tx-core").MessageService | import("@jamesaphoenix/tx-core").DocRepository | import("@jamesaphoenix/tx-core").DocService, import("@jamesaphoenix/tx-core").DatabaseError, never>;
|
|
60
60
|
reset: () => Promise<void>;
|
|
61
61
|
close: () => Promise<void>;
|
|
62
62
|
getDb: () => Database;
|
package/package.json
CHANGED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* better-sqlite3 adapter for Vitest compatibility
|
|
3
|
-
*
|
|
4
|
-
* Wraps better-sqlite3 to match the SqliteDatabase interface used by @tx/core.
|
|
5
|
-
* This allows tests to use Vitest (with proper parallelization) while production
|
|
6
|
-
* uses bun:sqlite.
|
|
7
|
-
*
|
|
8
|
-
* The SqliteDatabase interface abstracts away the implementation, so this adapter
|
|
9
|
-
* makes better-sqlite3 compatible with the existing code.
|
|
10
|
-
*/
|
|
11
|
-
import type { SqliteDatabase } from "@jamesaphoenix/tx-core";
|
|
12
|
-
type BetterSqlite3Database = {
|
|
13
|
-
prepare(sql: string): {
|
|
14
|
-
run(...params: unknown[]): {
|
|
15
|
-
lastInsertRowid: number | bigint;
|
|
16
|
-
changes: number;
|
|
17
|
-
};
|
|
18
|
-
get(...params: unknown[]): unknown;
|
|
19
|
-
all(...params: unknown[]): unknown[];
|
|
20
|
-
};
|
|
21
|
-
exec(sql: string): void;
|
|
22
|
-
close(): void;
|
|
23
|
-
pragma(key: string, value?: unknown): unknown;
|
|
24
|
-
transaction<T>(fn: () => T): () => T;
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Wrap a better-sqlite3 Database to match SqliteDatabase interface
|
|
28
|
-
*/
|
|
29
|
-
export declare function wrapBetterSqlite3(db: BetterSqlite3Database): SqliteDatabase;
|
|
30
|
-
/**
|
|
31
|
-
* Create an in-memory better-sqlite3 database wrapped as SqliteDatabase
|
|
32
|
-
* with migrations applied.
|
|
33
|
-
*/
|
|
34
|
-
export declare function createBetterSqlite3Database(): Promise<SqliteDatabase>;
|
|
35
|
-
export {};
|
|
36
|
-
//# sourceMappingURL=better-sqlite3-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-sqlite3-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/better-sqlite3-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,wBAAwB,CAAA;AAG9F,KAAK,qBAAqB,GAAG;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;QAChF,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;KACrC,CAAA;IACD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC7C,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;CACrC,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,qBAAqB,GAAG,cAAc,CA8C3E;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,cAAc,CAAC,CAe3E"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* better-sqlite3 adapter for Vitest compatibility
|
|
3
|
-
*
|
|
4
|
-
* Wraps better-sqlite3 to match the SqliteDatabase interface used by @tx/core.
|
|
5
|
-
* This allows tests to use Vitest (with proper parallelization) while production
|
|
6
|
-
* uses bun:sqlite.
|
|
7
|
-
*
|
|
8
|
-
* The SqliteDatabase interface abstracts away the implementation, so this adapter
|
|
9
|
-
* makes better-sqlite3 compatible with the existing code.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Wrap a better-sqlite3 Database to match SqliteDatabase interface
|
|
13
|
-
*/
|
|
14
|
-
export function wrapBetterSqlite3(db) {
|
|
15
|
-
return {
|
|
16
|
-
prepare(sql) {
|
|
17
|
-
const stmt = db.prepare(sql);
|
|
18
|
-
return {
|
|
19
|
-
run(...params) {
|
|
20
|
-
const result = stmt.run(...params);
|
|
21
|
-
return {
|
|
22
|
-
lastInsertRowid: result.lastInsertRowid ?? 0,
|
|
23
|
-
changes: result.changes ?? 0
|
|
24
|
-
};
|
|
25
|
-
},
|
|
26
|
-
get(...params) {
|
|
27
|
-
return stmt.get(...params) ?? null;
|
|
28
|
-
},
|
|
29
|
-
all(...params) {
|
|
30
|
-
return stmt.all(...params);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
},
|
|
34
|
-
run(sql, ...params) {
|
|
35
|
-
// Handle PRAGMA statements — better-sqlite3 uses .pragma("key = value") as a single string
|
|
36
|
-
const trimmed = sql.trim();
|
|
37
|
-
if (trimmed.toUpperCase().startsWith("PRAGMA")) {
|
|
38
|
-
// Strip the "PRAGMA " prefix and pass the rest directly to .pragma()
|
|
39
|
-
const pragmaArg = trimmed.slice(6).trim();
|
|
40
|
-
db.pragma(pragmaArg);
|
|
41
|
-
return { lastInsertRowid: 0, changes: 0 };
|
|
42
|
-
}
|
|
43
|
-
// Regular SQL statements
|
|
44
|
-
const result = db.prepare(sql).run(...params);
|
|
45
|
-
return {
|
|
46
|
-
lastInsertRowid: result.lastInsertRowid ?? 0,
|
|
47
|
-
changes: result.changes ?? 0
|
|
48
|
-
};
|
|
49
|
-
},
|
|
50
|
-
exec(sql) {
|
|
51
|
-
db.exec(sql);
|
|
52
|
-
},
|
|
53
|
-
close() {
|
|
54
|
-
db.close();
|
|
55
|
-
},
|
|
56
|
-
transaction(fn) {
|
|
57
|
-
return db.transaction(fn);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Create an in-memory better-sqlite3 database wrapped as SqliteDatabase
|
|
63
|
-
* with migrations applied.
|
|
64
|
-
*/
|
|
65
|
-
export async function createBetterSqlite3Database() {
|
|
66
|
-
// Dynamic import to avoid requiring better-sqlite3 at module load time
|
|
67
|
-
// (only needed when running tests with Vitest)
|
|
68
|
-
const Database = (await import("better-sqlite3")).default;
|
|
69
|
-
const { applyMigrations } = await import("@jamesaphoenix/tx-core");
|
|
70
|
-
const db = new Database(":memory:");
|
|
71
|
-
db.pragma("journal_mode = WAL");
|
|
72
|
-
db.pragma("foreign_keys = ON");
|
|
73
|
-
db.pragma("busy_timeout = 5000");
|
|
74
|
-
const wrapped = wrapBetterSqlite3(db);
|
|
75
|
-
applyMigrations(wrapped);
|
|
76
|
-
return wrapped;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=better-sqlite3-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-sqlite3-adapter.js","sourceRoot":"","sources":["../../src/adapters/better-sqlite3-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAyB;IACzD,OAAO;QACL,OAAO,CAAc,GAAW;YAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO;gBACL,GAAG,CAAC,GAAG,MAAiB;oBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA0D,CAAA;oBAC3F,OAAO;wBACL,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;wBAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;qBAC7B,CAAA;gBACH,CAAC;gBACD,GAAG,CAAC,GAAG,MAAiB;oBACtB,OAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAO,IAAI,IAAI,CAAA;gBAC3C,CAAC;gBACD,GAAG,CAAC,GAAG,MAAiB;oBACtB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAQ,CAAA;gBACnC,CAAC;aACF,CAAA;QACH,CAAC;QACD,GAAG,CAAC,GAAW,EAAE,GAAG,MAAiB;YACnC,2FAA2F;YAC3F,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;YAC1B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,qEAAqE;gBACrE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBACzC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBACpB,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;YAC3C,CAAC;YACD,yBAAyB;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA0D,CAAA;YACtG,OAAO;gBACL,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;gBAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;aAC7B,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAW;YACd,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;QACD,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC;QACD,WAAW,CAAI,EAAW;YACxB,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,uEAAuE;IACvE,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAA;IACzD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAElE,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;IACnC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAC/B,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC9B,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAEhC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACrC,eAAe,CAAC,OAAO,CAAC,CAAA;IAExB,OAAO,OAAO,CAAA;AAChB,CAAC"}
|