steroids-cli 0.10.30 → 0.10.31

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 (48) hide show
  1. package/dist/commands/loop-phases.d.ts.map +1 -1
  2. package/dist/commands/loop-phases.js +111 -22
  3. package/dist/commands/loop-phases.js.map +1 -1
  4. package/dist/orchestrator/signal-parser.d.ts +4 -0
  5. package/dist/orchestrator/signal-parser.d.ts.map +1 -1
  6. package/dist/orchestrator/signal-parser.js +48 -8
  7. package/dist/orchestrator/signal-parser.js.map +1 -1
  8. package/dist/providers/claude.d.ts.map +1 -1
  9. package/dist/providers/claude.js +4 -1
  10. package/dist/providers/claude.js.map +1 -1
  11. package/dist/runners/global-db-backoffs.d.ts +17 -0
  12. package/dist/runners/global-db-backoffs.d.ts.map +1 -0
  13. package/dist/runners/global-db-backoffs.js +69 -0
  14. package/dist/runners/global-db-backoffs.js.map +1 -0
  15. package/dist/runners/global-db-connection.d.ts +37 -0
  16. package/dist/runners/global-db-connection.d.ts.map +1 -0
  17. package/dist/runners/global-db-connection.js +245 -0
  18. package/dist/runners/global-db-connection.js.map +1 -0
  19. package/dist/runners/global-db-daemon.d.ts +12 -0
  20. package/dist/runners/global-db-daemon.d.ts.map +1 -0
  21. package/dist/runners/global-db-daemon.js +35 -0
  22. package/dist/runners/global-db-daemon.js.map +1 -0
  23. package/dist/runners/global-db-schema.d.ts +79 -0
  24. package/dist/runners/global-db-schema.d.ts.map +1 -0
  25. package/dist/runners/global-db-schema.js +433 -0
  26. package/dist/runners/global-db-schema.js.map +1 -0
  27. package/dist/runners/global-db-sessions.d.ts +13 -0
  28. package/dist/runners/global-db-sessions.d.ts.map +1 -0
  29. package/dist/runners/global-db-sessions.js +65 -0
  30. package/dist/runners/global-db-sessions.js.map +1 -0
  31. package/dist/runners/global-db-validation.d.ts +27 -0
  32. package/dist/runners/global-db-validation.d.ts.map +1 -0
  33. package/dist/runners/global-db-validation.js +43 -0
  34. package/dist/runners/global-db-validation.js.map +1 -0
  35. package/dist/runners/global-db.d.ts +10 -87
  36. package/dist/runners/global-db.d.ts.map +1 -1
  37. package/dist/runners/global-db.js +61 -809
  38. package/dist/runners/global-db.js.map +1 -1
  39. package/dist/runners/orchestrator-loop.d.ts.map +1 -1
  40. package/dist/runners/orchestrator-loop.js +56 -29
  41. package/dist/runners/orchestrator-loop.js.map +1 -1
  42. package/dist/runners/wakeup-checks.d.ts.map +1 -1
  43. package/dist/runners/wakeup-checks.js +14 -1
  44. package/dist/runners/wakeup-checks.js.map +1 -1
  45. package/dist/runners/wakeup-reconcile.d.ts.map +1 -1
  46. package/dist/runners/wakeup-reconcile.js +14 -0
  47. package/dist/runners/wakeup-reconcile.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Provider backoff coordination
3
+ */
4
+ /**
5
+ * Record a provider rate limit backoff in the global DB.
6
+ * Uses MAX so existing longer backoffs are never shortened.
7
+ */
8
+ export declare function recordProviderBackoff(provider: string, backoffUntilMs: number, reason?: string, reasonType?: string): void;
9
+ /**
10
+ * Get how many ms until the provider's global backoff expires (0 if not backed off).
11
+ */
12
+ export declare function getProviderBackoffRemainingMs(provider: string): number;
13
+ /**
14
+ * Clear a provider's backoff record (called after a successful invocation).
15
+ */
16
+ export declare function clearProviderBackoff(provider: string): void;
17
+ //# sourceMappingURL=global-db-backoffs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-backoffs.d.ts","sourceRoot":"","sources":["../../src/runners/global-db-backoffs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CA0B1H;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI3D"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Provider backoff coordination
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.recordProviderBackoff = recordProviderBackoff;
7
+ exports.getProviderBackoffRemainingMs = getProviderBackoffRemainingMs;
8
+ exports.clearProviderBackoff = clearProviderBackoff;
9
+ const global_db_connection_1 = require("./global-db-connection");
10
+ function hasColumn(db, tableName, columnName) {
11
+ const columns = db
12
+ .prepare(`PRAGMA table_info(${tableName})`)
13
+ .all();
14
+ return columns.some((column) => column.name === columnName);
15
+ }
16
+ /**
17
+ * Record a provider rate limit backoff in the global DB.
18
+ * Uses MAX so existing longer backoffs are never shortened.
19
+ */
20
+ function recordProviderBackoff(provider, backoffUntilMs, reason, reasonType) {
21
+ (0, global_db_connection_1.withGlobalDatabase)((db) => {
22
+ // We only update reason_type if the schema has it (V18+)
23
+ if (hasColumn(db, 'provider_backoffs', 'reason_type')) {
24
+ db.prepare(`
25
+ INSERT INTO provider_backoffs (provider, backoff_until_ms, retry_count, reason, reason_type, updated_at)
26
+ VALUES (?, ?, 1, ?, ?, ?)
27
+ ON CONFLICT(provider) DO UPDATE SET
28
+ backoff_until_ms = MAX(backoff_until_ms, excluded.backoff_until_ms),
29
+ retry_count = retry_count + 1,
30
+ reason = excluded.reason,
31
+ reason_type = excluded.reason_type,
32
+ updated_at = excluded.updated_at
33
+ `).run(provider, backoffUntilMs, reason ?? null, reasonType ?? null, Date.now());
34
+ }
35
+ else {
36
+ db.prepare(`
37
+ INSERT INTO provider_backoffs (provider, backoff_until_ms, retry_count, reason, updated_at)
38
+ VALUES (?, ?, 1, ?, ?)
39
+ ON CONFLICT(provider) DO UPDATE SET
40
+ backoff_until_ms = MAX(backoff_until_ms, excluded.backoff_until_ms),
41
+ retry_count = retry_count + 1,
42
+ reason = excluded.reason,
43
+ updated_at = excluded.updated_at
44
+ `).run(provider, backoffUntilMs, reason ?? null, Date.now());
45
+ }
46
+ });
47
+ }
48
+ /**
49
+ * Get how many ms until the provider's global backoff expires (0 if not backed off).
50
+ */
51
+ function getProviderBackoffRemainingMs(provider) {
52
+ return (0, global_db_connection_1.withGlobalDatabase)((db) => {
53
+ const row = db
54
+ .prepare('SELECT backoff_until_ms FROM provider_backoffs WHERE provider = ?')
55
+ .get(provider);
56
+ if (!row)
57
+ return 0;
58
+ return Math.max(0, row.backoff_until_ms - Date.now());
59
+ });
60
+ }
61
+ /**
62
+ * Clear a provider's backoff record (called after a successful invocation).
63
+ */
64
+ function clearProviderBackoff(provider) {
65
+ (0, global_db_connection_1.withGlobalDatabase)((db) => {
66
+ db.prepare('DELETE FROM provider_backoffs WHERE provider = ?').run(provider);
67
+ });
68
+ }
69
+ //# sourceMappingURL=global-db-backoffs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-backoffs.js","sourceRoot":"","sources":["../../src/runners/global-db-backoffs.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAiBH,sDA0BC;AAKD,sEAQC;AAKD,oDAIC;AA9DD,iEAA4D;AAE5D,SAAS,SAAS,CAAC,EAAqB,EAAE,SAAiB,EAAE,UAAkB;IAC7E,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,qBAAqB,SAAS,GAAG,CAAC;SAC1C,GAAG,EAA6B,CAAC;IAEpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,QAAgB,EAAE,cAAsB,EAAE,MAAe,EAAE,UAAmB;IAClH,IAAA,yCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QACxB,yDAAyD;QACzD,IAAI,SAAS,CAAC,EAAE,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,CAAC;YACtD,EAAE,CAAC,OAAO,CAAC;;;;;;;;;OASV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,OAAO,CAAC;;;;;;;;OAQV,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAAC,QAAgB;IAC5D,OAAO,IAAA,yCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,mEAAmE,CAAC;aAC5E,GAAG,CAAC,QAAQ,CAA6C,CAAC;QAC7D,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,IAAA,yCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QACxB,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Global database connection management and initialization
3
+ */
4
+ import Database from 'better-sqlite3';
5
+ export interface GlobalDatabaseConnection {
6
+ db: Database.Database;
7
+ close: () => void;
8
+ }
9
+ /**
10
+ * Get the path to the global steroids directory.
11
+ * Respects STEROIDS_HOME env var for test isolation (Jest's ESM VM context
12
+ * doesn't propagate process.env.HOME changes to CJS os.homedir()).
13
+ */
14
+ export declare function getGlobalSteroidsDir(): string;
15
+ /**
16
+ * Get the path to the global database
17
+ */
18
+ export declare function getGlobalDbPath(): string;
19
+ /**
20
+ * Check if global database exists
21
+ */
22
+ export declare function isGlobalDbInitialized(): boolean;
23
+ /**
24
+ * Initialize and open the global database
25
+ * Creates it if it doesn't exist
26
+ */
27
+ export declare function openGlobalDatabase(): GlobalDatabaseConnection;
28
+ /**
29
+ * Get global schema version
30
+ */
31
+ export declare function getGlobalSchemaVersion(db: Database.Database): string | null;
32
+ /**
33
+ * Execute a callback with a managed global database connection.
34
+ * Automatically handles closing the connection when done or if an error occurs.
35
+ */
36
+ export declare function withGlobalDatabase<T>(callback: (db: Database.Database) => T): T;
37
+ //# sourceMappingURL=global-db-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-connection.d.ts","sourceRoot":"","sources":["../../src/runners/global-db-connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA6BtC,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CA0M7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,GAAG,IAAI,CAS3E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,CAAC,GACrC,CAAC,CAaH"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * Global database connection management and initialization
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getGlobalSteroidsDir = getGlobalSteroidsDir;
10
+ exports.getGlobalDbPath = getGlobalDbPath;
11
+ exports.isGlobalDbInitialized = isGlobalDbInitialized;
12
+ exports.openGlobalDatabase = openGlobalDatabase;
13
+ exports.getGlobalSchemaVersion = getGlobalSchemaVersion;
14
+ exports.withGlobalDatabase = withGlobalDatabase;
15
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
16
+ const node_fs_1 = require("node:fs");
17
+ const node_path_1 = require("node:path");
18
+ const node_os_1 = require("node:os");
19
+ const global_db_schema_1 = require("./global-db-schema");
20
+ const STEROIDS_DIR = '.steroids';
21
+ const DB_NAME = 'steroids.db';
22
+ /**
23
+ * Get the path to the global steroids directory.
24
+ * Respects STEROIDS_HOME env var for test isolation (Jest's ESM VM context
25
+ * doesn't propagate process.env.HOME changes to CJS os.homedir()).
26
+ */
27
+ function getGlobalSteroidsDir() {
28
+ const home = process.env.STEROIDS_HOME || (0, node_os_1.homedir)();
29
+ return (0, node_path_1.join)(home, STEROIDS_DIR);
30
+ }
31
+ /**
32
+ * Get the path to the global database
33
+ */
34
+ function getGlobalDbPath() {
35
+ return (0, node_path_1.join)(getGlobalSteroidsDir(), DB_NAME);
36
+ }
37
+ /**
38
+ * Check if global database exists
39
+ */
40
+ function isGlobalDbInitialized() {
41
+ return (0, node_fs_1.existsSync)(getGlobalDbPath());
42
+ }
43
+ /**
44
+ * Initialize and open the global database
45
+ * Creates it if it doesn't exist
46
+ */
47
+ function openGlobalDatabase() {
48
+ const dbPath = getGlobalDbPath();
49
+ const steroidsDir = getGlobalSteroidsDir();
50
+ // Create ~/.steroids directory if it doesn't exist
51
+ if (!(0, node_fs_1.existsSync)(steroidsDir)) {
52
+ (0, node_fs_1.mkdirSync)(steroidsDir, { recursive: true });
53
+ }
54
+ const db = new better_sqlite3_1.default(dbPath);
55
+ // Configure SQLite for optimal performance and safety
56
+ db.pragma('journal_mode = WAL');
57
+ db.pragma('busy_timeout = 5000');
58
+ // Create base schema (IF NOT EXISTS makes this idempotent)
59
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_SQL);
60
+ // Get current version
61
+ const versionRow = db
62
+ .prepare('SELECT value FROM _global_schema WHERE key = ?')
63
+ .get('version');
64
+ const currentVersion = versionRow?.value;
65
+ if (!currentVersion) {
66
+ // Fresh database - apply all schemas and set to latest version
67
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V2_SQL);
68
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V3_SQL);
69
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V4_SQL);
70
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V5_SQL);
71
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
72
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
73
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
74
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
75
+ (0, global_db_schema_1.applyGlobalSchemaV15)(db);
76
+ (0, global_db_schema_1.applyGlobalSchemaV16)(db);
77
+ (0, global_db_schema_1.applyGlobalSchemaV17)(db);
78
+ (0, global_db_schema_1.applyGlobalSchemaV18)(db);
79
+ db.prepare('INSERT OR REPLACE INTO _global_schema (key, value) VALUES (?, ?)')
80
+ .run('version', global_db_schema_1.GLOBAL_SCHEMA_VERSION);
81
+ db.prepare('INSERT INTO _global_schema (key, value) VALUES (?, ?)').run('created_at', new Date().toISOString());
82
+ }
83
+ else if (currentVersion === '1') {
84
+ // Upgrade from version 1 to latest
85
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V2_SQL);
86
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V3_SQL);
87
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V4_SQL);
88
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V5_SQL);
89
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
90
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
91
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
92
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
93
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
94
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
95
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
96
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
97
+ }
98
+ else if (currentVersion === '2') {
99
+ // Upgrade from version 2 to latest
100
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V3_SQL);
101
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V4_SQL);
102
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V5_SQL);
103
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
104
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
105
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
106
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
107
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
108
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
109
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
110
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
111
+ }
112
+ else if (currentVersion === '3') {
113
+ // Upgrade from version 3 to latest
114
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V4_SQL);
115
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V5_SQL);
116
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
117
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
118
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
119
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
120
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
121
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
122
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
123
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
124
+ }
125
+ else if (currentVersion === '4') {
126
+ // Upgrade from version 4 to latest
127
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V5_SQL);
128
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
129
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
130
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
131
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
132
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
133
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
134
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
135
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
136
+ }
137
+ else if (currentVersion === '5') {
138
+ // Upgrade from version 5 to latest
139
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V6_SQL);
140
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
141
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
142
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
143
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
144
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
145
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
146
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
147
+ }
148
+ else if (currentVersion === '6') {
149
+ // Upgrade from version 6 to version 7
150
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V7_SQL);
151
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
152
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
153
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
154
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
155
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
156
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
157
+ }
158
+ else if (currentVersion === '7') {
159
+ // Upgrade from version 7 to version 8
160
+ db.exec(global_db_schema_1.GLOBAL_SCHEMA_V8_SQL);
161
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
162
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
163
+ }
164
+ else if (currentVersion === '8') {
165
+ // Upgrade from version 8 to version 9
166
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
167
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
168
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
169
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
170
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
171
+ }
172
+ else if (currentVersion === '9') {
173
+ // Upgrade from version 9 to version 10
174
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
175
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
176
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
177
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
178
+ }
179
+ else if (currentVersion === '10') {
180
+ // Upgrade from version 10 to version 11
181
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
182
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
183
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
184
+ }
185
+ else if (currentVersion === '11') {
186
+ // Upgrade from version 11 to version 12
187
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
188
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
189
+ }
190
+ else if (currentVersion === '15') {
191
+ (0, global_db_schema_1.applyGlobalSchemaV16)(db);
192
+ (0, global_db_schema_1.applyGlobalSchemaV17)(db);
193
+ db.prepare('UPDATE _global_schema SET value = ? WHERE key = ?').run(global_db_schema_1.GLOBAL_SCHEMA_VERSION, 'version');
194
+ }
195
+ // Future upgrades would be handled here with additional conditions
196
+ (0, global_db_schema_1.applyGlobalSchemaV9)(db);
197
+ (0, global_db_schema_1.applyGlobalSchemaV10)(db);
198
+ (0, global_db_schema_1.applyGlobalSchemaV11)(db);
199
+ (0, global_db_schema_1.applyGlobalSchemaV12)(db);
200
+ (0, global_db_schema_1.applyGlobalSchemaV13)(db);
201
+ (0, global_db_schema_1.applyGlobalSchemaV14)(db);
202
+ (0, global_db_schema_1.applyGlobalSchemaV15)(db);
203
+ (0, global_db_schema_1.applyGlobalSchemaV16)(db);
204
+ (0, global_db_schema_1.applyGlobalSchemaV17)(db);
205
+ db.prepare(`INSERT INTO _global_schema (key, value) VALUES (?, ?)
206
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run('version', global_db_schema_1.GLOBAL_SCHEMA_VERSION);
207
+ return {
208
+ db,
209
+ close: () => db.close(),
210
+ };
211
+ }
212
+ /**
213
+ * Get global schema version
214
+ */
215
+ function getGlobalSchemaVersion(db) {
216
+ try {
217
+ const row = db
218
+ .prepare('SELECT value FROM _global_schema WHERE key = ?')
219
+ .get('version');
220
+ return row?.value ?? null;
221
+ }
222
+ catch {
223
+ return null;
224
+ }
225
+ }
226
+ /**
227
+ * Execute a callback with a managed global database connection.
228
+ * Automatically handles closing the connection when done or if an error occurs.
229
+ */
230
+ function withGlobalDatabase(callback) {
231
+ const { db, close } = openGlobalDatabase();
232
+ try {
233
+ const result = callback(db);
234
+ if (result instanceof Promise) {
235
+ return result.finally(() => close());
236
+ }
237
+ close();
238
+ return result;
239
+ }
240
+ catch (error) {
241
+ close();
242
+ throw error;
243
+ }
244
+ }
245
+ //# sourceMappingURL=global-db-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-connection.js","sourceRoot":"","sources":["../../src/runners/global-db-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Global daemon active status management
3
+ */
4
+ /**
5
+ * Get the global daemon active status
6
+ */
7
+ export declare function getDaemonActiveStatus(): boolean;
8
+ /**
9
+ * Set the global daemon active status
10
+ */
11
+ export declare function setDaemonActiveStatus(isActive: boolean): void;
12
+ //# sourceMappingURL=global-db-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-daemon.d.ts","sourceRoot":"","sources":["../../src/runners/global-db-daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAY/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAO7D"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Global daemon active status management
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDaemonActiveStatus = getDaemonActiveStatus;
7
+ exports.setDaemonActiveStatus = setDaemonActiveStatus;
8
+ const global_db_connection_1 = require("./global-db-connection");
9
+ /**
10
+ * Get the global daemon active status
11
+ */
12
+ function getDaemonActiveStatus() {
13
+ try {
14
+ return (0, global_db_connection_1.withGlobalDatabase)((db) => {
15
+ const row = db
16
+ .prepare('SELECT value FROM _global_schema WHERE key = ?')
17
+ .get('is_active');
18
+ // Default to true if not explicitly set to 'false'
19
+ return row?.value !== 'false';
20
+ });
21
+ }
22
+ catch {
23
+ return true; // Default to active on error
24
+ }
25
+ }
26
+ /**
27
+ * Set the global daemon active status
28
+ */
29
+ function setDaemonActiveStatus(isActive) {
30
+ (0, global_db_connection_1.withGlobalDatabase)((db) => {
31
+ db.prepare(`INSERT INTO _global_schema (key, value) VALUES (?, ?)
32
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run('is_active', isActive ? 'true' : 'false');
33
+ });
34
+ }
35
+ //# sourceMappingURL=global-db-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-daemon.js","sourceRoot":"","sources":["../../src/runners/global-db-daemon.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,sDAYC;AAKD,sDAOC;AA7BD,iEAA4D;AAE5D;;GAEG;AACH,SAAgB,qBAAqB;IACnC,IAAI,CAAC;QACH,OAAO,IAAA,yCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,EAAE;iBACX,OAAO,CAAC,gDAAgD,CAAC;iBACzD,GAAG,CAAC,WAAW,CAAkC,CAAC;YACrD,mDAAmD;YACnD,OAAO,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,6BAA6B;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,QAAiB;IACrD,IAAA,yCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QACxB,EAAE,CAAC,OAAO,CACR;6DACuD,CACxD,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Global database schema and migrations
3
+ * Handles all SQL DDL and schema upgrade logic
4
+ */
5
+ import Database from 'better-sqlite3';
6
+ /**
7
+ * Schema for global database (runners and locks)
8
+ */
9
+ export declare const GLOBAL_SCHEMA_SQL = "\n-- Runners table for tracking runner state\nCREATE TABLE IF NOT EXISTS runners (\n id TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'idle',\n pid INTEGER,\n project_path TEXT,\n current_task_id TEXT,\n started_at TEXT,\n heartbeat_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Runner lock for singleton enforcement\n-- Only one row allowed (id = 1)\nCREATE TABLE IF NOT EXISTS runner_lock (\n id INTEGER PRIMARY KEY CHECK (id = 1),\n runner_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Schema metadata\nCREATE TABLE IF NOT EXISTS _global_schema (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n";
10
+ /**
11
+ * Schema upgrade from version 1 to version 2: Add projects table
12
+ */
13
+ export declare const GLOBAL_SCHEMA_V2_SQL = "\n-- Projects table for tracking registered projects\nCREATE TABLE IF NOT EXISTS projects (\n path TEXT PRIMARY KEY,\n name TEXT,\n registered_at TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen_at TEXT NOT NULL DEFAULT (datetime('now')),\n enabled INTEGER NOT NULL DEFAULT 1\n);\n";
14
+ /**
15
+ * Schema upgrade from version 2 to version 3: Add stats columns to projects table
16
+ */
17
+ export declare const GLOBAL_SCHEMA_V3_SQL = "\n-- Add task stats columns (for API/WebUI display without accessing project DBs)\nALTER TABLE projects ADD COLUMN pending_count INTEGER DEFAULT 0;\nALTER TABLE projects ADD COLUMN in_progress_count INTEGER DEFAULT 0;\nALTER TABLE projects ADD COLUMN review_count INTEGER DEFAULT 0;\nALTER TABLE projects ADD COLUMN completed_count INTEGER DEFAULT 0;\nALTER TABLE projects ADD COLUMN stats_updated_at TEXT;\n";
18
+ /**
19
+ * Schema upgrade from version 3 to version 4: Add section_id to runners table
20
+ */
21
+ export declare const GLOBAL_SCHEMA_V4_SQL = "\n-- Add section_id column to runners for section focus feature\nALTER TABLE runners ADD COLUMN section_id TEXT;\n";
22
+ /**
23
+ * Schema upgrade from version 4 to version 5: Add activity_log table
24
+ */
25
+ export declare const GLOBAL_SCHEMA_V5_SQL = "\n-- Activity log for tracking task completions across all projects\nCREATE TABLE IF NOT EXISTS activity_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_path TEXT NOT NULL,\n runner_id TEXT NOT NULL,\n task_id TEXT NOT NULL,\n task_title TEXT NOT NULL,\n section_name TEXT,\n final_status TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_activity_log_created_at ON activity_log(created_at);\nCREATE INDEX IF NOT EXISTS idx_activity_log_project ON activity_log(project_path);\n";
26
+ /**
27
+ * Schema upgrade from version 5 to version 6: Add commit_message to activity_log
28
+ */
29
+ export declare const GLOBAL_SCHEMA_V6_SQL = "\n-- Add commit_message column to activity_log for storing coder's final message\nALTER TABLE activity_log ADD COLUMN commit_message TEXT;\n";
30
+ /**
31
+ * Schema upgrade from version 6 to version 7: Add commit_sha to activity_log
32
+ */
33
+ export declare const GLOBAL_SCHEMA_V7_SQL = "\n-- Add commit_sha column to activity_log for GitHub links\nALTER TABLE activity_log ADD COLUMN commit_sha TEXT;\n";
34
+ /**
35
+ * Schema upgrade from version 7 to version 8: Add parallel session tracking
36
+ */
37
+ export declare const GLOBAL_SCHEMA_V8_SQL = "\n-- Parallel run sessions for independent workstreams\nCREATE TABLE IF NOT EXISTS parallel_sessions (\n id TEXT PRIMARY KEY,\n project_path TEXT NOT NULL,\n status TEXT NOT NULL CHECK (\n status IN (\n 'running',\n 'merging',\n 'cleanup_pending',\n 'cleanup_draining',\n 'blocked_conflict',\n 'blocked_recovery',\n 'blocked_validation',\n 'completed',\n 'failed',\n 'aborted'\n )\n ),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n completed_at TEXT\n);\n\n-- Workstreams within a parallel session\nCREATE TABLE IF NOT EXISTS workstreams (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL REFERENCES parallel_sessions(id),\n branch_name TEXT NOT NULL,\n section_ids TEXT NOT NULL,\n clone_path TEXT,\n status TEXT NOT NULL CHECK (status IN ('running', 'completed', 'failed')),\n runner_id TEXT,\n completed_at TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Associate runners with a parallel session\nALTER TABLE runners ADD COLUMN parallel_session_id TEXT;\n";
38
+ /**
39
+ * Schema upgrade from version 8 to version 9: add project_repo_id and active-session guards.
40
+ */
41
+ export declare const GLOBAL_SCHEMA_V9_INDEX_AND_TRIGGERS_SQL = "\nCREATE INDEX IF NOT EXISTS idx_parallel_sessions_project_repo_id\nON parallel_sessions(project_repo_id);\n\nCREATE TRIGGER IF NOT EXISTS trg_parallel_sessions_active_insert\nBEFORE INSERT ON parallel_sessions\nWHEN NEW.project_repo_id IS NOT NULL\n AND NEW.status NOT IN ('completed', 'failed', 'aborted')\nBEGIN\n SELECT RAISE(ABORT, 'active parallel session already exists for project repo')\n WHERE EXISTS (\n SELECT 1\n FROM parallel_sessions\n WHERE project_repo_id = NEW.project_repo_id\n AND status NOT IN ('completed', 'failed', 'aborted')\n );\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_parallel_sessions_active_update\nBEFORE UPDATE OF project_repo_id, status ON parallel_sessions\nWHEN NEW.project_repo_id IS NOT NULL\n AND NEW.status NOT IN ('completed', 'failed', 'aborted')\nBEGIN\n SELECT RAISE(ABORT, 'active parallel session already exists for project repo')\n WHERE EXISTS (\n SELECT 1\n FROM parallel_sessions\n WHERE project_repo_id = NEW.project_repo_id\n AND status NOT IN ('completed', 'failed', 'aborted')\n AND id != NEW.id\n );\nEND;\n";
42
+ /**
43
+ * Schema upgrade from version 9 to version 10: add workstream lease fields.
44
+ */
45
+ export declare const GLOBAL_SCHEMA_V10_SQL = "\nCREATE INDEX IF NOT EXISTS idx_workstreams_session_status\nON workstreams(session_id, status);\n";
46
+ /**
47
+ * Schema upgrade from version 10 to version 11: add sealed merge input fields.
48
+ */
49
+ export declare const GLOBAL_SCHEMA_V11_SQL = "\nCREATE INDEX IF NOT EXISTS idx_workstreams_completion_order\nON workstreams(session_id, completion_order);\n";
50
+ /**
51
+ * Schema upgrade from version 11 to version 12: add reconciliation/backoff fields.
52
+ */
53
+ export declare const GLOBAL_SCHEMA_V12_SQL = "\nCREATE INDEX IF NOT EXISTS idx_workstreams_next_retry_at\nON workstreams(next_retry_at);\n";
54
+ /**
55
+ * Schema upgrade from version 13 to version 14: add conflict attempt tracking.
56
+ */
57
+ export declare const GLOBAL_SCHEMA_V14_SQL = "\nCREATE INDEX IF NOT EXISTS idx_workstreams_conflict_attempts\nON workstreams(conflict_attempts);\n";
58
+ /**
59
+ * Schema upgrade from version 14 to version 15: add validation escalation tracking.
60
+ */
61
+ export declare const GLOBAL_SCHEMA_V15_SQL = "\nCREATE TABLE IF NOT EXISTS validation_escalations (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL REFERENCES parallel_sessions(id),\n project_path TEXT NOT NULL,\n workspace_path TEXT NOT NULL,\n validation_command TEXT NOT NULL,\n error_message TEXT NOT NULL,\n stdout_snippet TEXT,\n stderr_snippet TEXT,\n status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'resolved')),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n resolved_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_validation_escalations_session\nON validation_escalations(session_id, status, created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_validation_escalations_project\nON validation_escalations(project_path, status, created_at DESC);\n";
62
+ /**
63
+ * Schema upgrade from version 15 to version 16: add provider backoff coordination.
64
+ */
65
+ export declare const GLOBAL_SCHEMA_V16_SQL = "\n CREATE TABLE IF NOT EXISTS provider_backoffs (\n provider TEXT PRIMARY KEY,\n backoff_until_ms INTEGER NOT NULL,\n retry_count INTEGER NOT NULL DEFAULT 0,\n reason TEXT,\n updated_at INTEGER NOT NULL\n );\n";
66
+ export declare const GLOBAL_SCHEMA_V17_SQL = "\n-- Add hibernation fields to projects table\n-- Note: These columns are deprecated in V18 but kept here for schema history.\nALTER TABLE projects ADD COLUMN hibernating_until TEXT;\nALTER TABLE projects ADD COLUMN hibernation_tier INTEGER DEFAULT 0;\n";
67
+ export declare const GLOBAL_SCHEMA_V18_SQL = "\n-- Drop project hibernation fields and add provider backoff reason_type\nALTER TABLE projects DROP COLUMN hibernating_until;\nALTER TABLE projects DROP COLUMN hibernation_tier;\nALTER TABLE provider_backoffs ADD COLUMN reason_type TEXT;\n";
68
+ export declare const GLOBAL_SCHEMA_VERSION = "18";
69
+ export declare function applyGlobalSchemaV9(db: Database.Database): void;
70
+ export declare function applyGlobalSchemaV10(db: Database.Database): void;
71
+ export declare function applyGlobalSchemaV11(db: Database.Database): void;
72
+ export declare function applyGlobalSchemaV12(db: Database.Database): void;
73
+ export declare function applyGlobalSchemaV13(db: Database.Database): void;
74
+ export declare function applyGlobalSchemaV14(db: Database.Database): void;
75
+ export declare function applyGlobalSchemaV15(db: Database.Database): void;
76
+ export declare function applyGlobalSchemaV16(db: Database.Database): void;
77
+ export declare function applyGlobalSchemaV17(db: Database.Database): void;
78
+ export declare function applyGlobalSchemaV18(db: Database.Database): void;
79
+ //# sourceMappingURL=global-db-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-db-schema.d.ts","sourceRoot":"","sources":["../../src/runners/global-db-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,iBAAiB,grBAyB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,iTAShC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,6ZAOhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,uHAGhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,wjBAchC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,iJAGhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,wHAGhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,imCAsChC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uCAAuC,olCAgCnD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,uGAGjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,mHAGjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,iGAGjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,yGAGjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,8vBAmBjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,uOAQjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,kQAKjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,qPAKjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAwB1C,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAS/D;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAiBhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAkBhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAkBhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAyEhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAMhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAIhE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAQhE"}