@helix-agent/core 0.1.0

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 (82) hide show
  1. package/README.md +22 -0
  2. package/dist/engine/bus.d.ts +12 -0
  3. package/dist/engine/bus.d.ts.map +1 -0
  4. package/dist/engine/bus.js +39 -0
  5. package/dist/engine/bus.js.map +1 -0
  6. package/dist/engine/evaluate.d.ts +3 -0
  7. package/dist/engine/evaluate.d.ts.map +1 -0
  8. package/dist/engine/evaluate.js +22 -0
  9. package/dist/engine/evaluate.js.map +1 -0
  10. package/dist/engine/gene-map.d.ts +19 -0
  11. package/dist/engine/gene-map.d.ts.map +1 -0
  12. package/dist/engine/gene-map.js +130 -0
  13. package/dist/engine/gene-map.js.map +1 -0
  14. package/dist/engine/pcec.d.ts +35 -0
  15. package/dist/engine/pcec.d.ts.map +1 -0
  16. package/dist/engine/pcec.js +253 -0
  17. package/dist/engine/pcec.js.map +1 -0
  18. package/dist/engine/types.d.ts +83 -0
  19. package/dist/engine/types.d.ts.map +1 -0
  20. package/dist/engine/types.js +33 -0
  21. package/dist/engine/types.js.map +1 -0
  22. package/dist/engine/wrap.d.ts +6 -0
  23. package/dist/engine/wrap.d.ts.map +1 -0
  24. package/dist/engine/wrap.js +74 -0
  25. package/dist/engine/wrap.js.map +1 -0
  26. package/dist/index.d.ts +10 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +11 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/platforms/generic/index.d.ts +3 -0
  31. package/dist/platforms/generic/index.d.ts.map +1 -0
  32. package/dist/platforms/generic/index.js +3 -0
  33. package/dist/platforms/generic/index.js.map +1 -0
  34. package/dist/platforms/generic/perceive.d.ts +3 -0
  35. package/dist/platforms/generic/perceive.d.ts.map +1 -0
  36. package/dist/platforms/generic/perceive.js +20 -0
  37. package/dist/platforms/generic/perceive.js.map +1 -0
  38. package/dist/platforms/generic/strategies.d.ts +3 -0
  39. package/dist/platforms/generic/strategies.d.ts.map +1 -0
  40. package/dist/platforms/generic/strategies.js +16 -0
  41. package/dist/platforms/generic/strategies.js.map +1 -0
  42. package/dist/platforms/index.d.ts +7 -0
  43. package/dist/platforms/index.d.ts.map +1 -0
  44. package/dist/platforms/index.js +36 -0
  45. package/dist/platforms/index.js.map +1 -0
  46. package/dist/platforms/privy/index.d.ts +3 -0
  47. package/dist/platforms/privy/index.d.ts.map +1 -0
  48. package/dist/platforms/privy/index.js +3 -0
  49. package/dist/platforms/privy/index.js.map +1 -0
  50. package/dist/platforms/privy/perceive.d.ts +3 -0
  51. package/dist/platforms/privy/perceive.d.ts.map +1 -0
  52. package/dist/platforms/privy/perceive.js +28 -0
  53. package/dist/platforms/privy/perceive.js.map +1 -0
  54. package/dist/platforms/privy/strategies.d.ts +3 -0
  55. package/dist/platforms/privy/strategies.d.ts.map +1 -0
  56. package/dist/platforms/privy/strategies.js +39 -0
  57. package/dist/platforms/privy/strategies.js.map +1 -0
  58. package/dist/platforms/stripe/index.d.ts +3 -0
  59. package/dist/platforms/stripe/index.d.ts.map +1 -0
  60. package/dist/platforms/stripe/index.js +3 -0
  61. package/dist/platforms/stripe/index.js.map +1 -0
  62. package/dist/platforms/stripe/perceive.d.ts +3 -0
  63. package/dist/platforms/stripe/perceive.d.ts.map +1 -0
  64. package/dist/platforms/stripe/perceive.js +14 -0
  65. package/dist/platforms/stripe/perceive.js.map +1 -0
  66. package/dist/platforms/stripe/strategies.d.ts +3 -0
  67. package/dist/platforms/stripe/strategies.d.ts.map +1 -0
  68. package/dist/platforms/stripe/strategies.js +6 -0
  69. package/dist/platforms/stripe/strategies.js.map +1 -0
  70. package/dist/platforms/tempo/index.d.ts +3 -0
  71. package/dist/platforms/tempo/index.d.ts.map +1 -0
  72. package/dist/platforms/tempo/index.js +3 -0
  73. package/dist/platforms/tempo/index.js.map +1 -0
  74. package/dist/platforms/tempo/perceive.d.ts +3 -0
  75. package/dist/platforms/tempo/perceive.d.ts.map +1 -0
  76. package/dist/platforms/tempo/perceive.js +35 -0
  77. package/dist/platforms/tempo/perceive.js.map +1 -0
  78. package/dist/platforms/tempo/strategies.d.ts +3 -0
  79. package/dist/platforms/tempo/strategies.d.ts.map +1 -0
  80. package/dist/platforms/tempo/strategies.js +68 -0
  81. package/dist/platforms/tempo/strategies.js.map +1 -0
  82. package/package.json +50 -0
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # @helix-agent/core
2
+
3
+ Self-healing infrastructure for AI agent payments.
4
+
5
+ See the [root README](../../README.md) for full documentation.
6
+
7
+ ## Quick Start
8
+
9
+ ```bash
10
+ npm install @helix-agent/core
11
+ ```
12
+
13
+ ```typescript
14
+ import { wrap } from '@helix-agent/core';
15
+
16
+ const resilientPay = wrap(myPaymentFunction);
17
+ const result = await resilientPay(invoice);
18
+ ```
19
+
20
+ ## License
21
+
22
+ MIT
@@ -0,0 +1,12 @@
1
+ import type { SseEvent, SseEventType } from './types.js';
2
+ export type EventListener = (event: SseEvent) => void;
3
+ export declare class EventBus {
4
+ private listeners;
5
+ private history;
6
+ emit(type: SseEventType, agentId: string, data: Record<string, unknown>): void;
7
+ subscribe(fn: EventListener): () => void;
8
+ getHistory(): SseEvent[];
9
+ clear(): void;
10
+ }
11
+ export declare const bus: EventBus;
12
+ //# sourceMappingURL=bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/engine/bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAItD,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAkB;IAEjC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAoB9E,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAOxC,UAAU,IAAI,QAAQ,EAAE;IAIxB,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,GAAG,UAAiB,CAAC"}
@@ -0,0 +1,39 @@
1
+ const MAX_HISTORY = 500;
2
+ export class EventBus {
3
+ listeners = new Set();
4
+ history = [];
5
+ emit(type, agentId, data) {
6
+ const event = {
7
+ type,
8
+ agentId,
9
+ timestamp: Date.now(),
10
+ data,
11
+ };
12
+ this.history.push(event);
13
+ if (this.history.length > MAX_HISTORY) {
14
+ this.history.shift();
15
+ }
16
+ for (const listener of this.listeners) {
17
+ try {
18
+ listener(event);
19
+ }
20
+ catch {
21
+ // listener errors should not break the bus
22
+ }
23
+ }
24
+ }
25
+ subscribe(fn) {
26
+ this.listeners.add(fn);
27
+ return () => {
28
+ this.listeners.delete(fn);
29
+ };
30
+ }
31
+ getHistory() {
32
+ return [...this.history];
33
+ }
34
+ clear() {
35
+ this.history = [];
36
+ }
37
+ }
38
+ export const bus = new EventBus();
39
+ //# sourceMappingURL=bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus.js","sourceRoot":"","sources":["../../src/engine/bus.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,OAAO,QAAQ;IACX,SAAS,GAAuB,IAAI,GAAG,EAAE,CAAC;IAC1C,OAAO,GAAe,EAAE,CAAC;IAEjC,IAAI,CAAC,IAAkB,EAAE,OAAe,EAAE,IAA6B;QACrE,MAAM,KAAK,GAAa;YACtB,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI;SACL,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAiB;QACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FailureClassification, RepairCandidate } from './types.js';
2
+ export declare function evaluate(candidates: RepairCandidate[], failure: FailureClassification): RepairCandidate[];
3
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/engine/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AAEnF,wBAAgB,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,eAAe,EAAE,CAsBzG"}
@@ -0,0 +1,22 @@
1
+ export function evaluate(candidates, failure) {
2
+ const maxSpeed = Math.max(...candidates.map((c) => c.estimatedSpeedMs), 1);
3
+ const maxCost = Math.max(...candidates.map((c) => c.estimatedCostUsd), 0.01);
4
+ const severityBonus = {
5
+ low: 0,
6
+ medium: 5,
7
+ high: 10,
8
+ critical: 20,
9
+ };
10
+ return candidates
11
+ .map((c) => {
12
+ const speedScore = 25 * (1 - c.estimatedSpeedMs / maxSpeed);
13
+ const costScore = 25 * (1 - c.estimatedCostUsd / maxCost);
14
+ const reqScore = 15 * (1 - c.requirements.length / 3);
15
+ const probScore = 25 * (c.successProbability ?? 0.5);
16
+ const sevBonus = severityBonus[failure.severity];
17
+ const score = Math.min(100, Math.round(speedScore + costScore + reqScore + probScore + sevBonus));
18
+ return { ...c, score };
19
+ })
20
+ .sort((a, b) => b.score - a.score);
21
+ }
22
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/engine/evaluate.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,UAA6B,EAAE,OAA8B;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7E,MAAM,aAAa,GAA6B;QAC9C,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;QAClG,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ErrorCode, FailureCategory, GeneCapsule, Platform } from './types.js';
2
+ export declare class GeneMap {
3
+ private db;
4
+ private stmtLookup;
5
+ private stmtUpsert;
6
+ private stmtList;
7
+ private stmtCount;
8
+ private stmtUpdatePlatforms;
9
+ constructor(dbPath?: string);
10
+ lookup(code: ErrorCode, category: FailureCategory): GeneCapsule | null;
11
+ /** Add a platform to an existing gene if not already present */
12
+ addPlatform(code: ErrorCode, category: FailureCategory, platform: Platform): void;
13
+ store(gene: GeneCapsule): void;
14
+ list(): GeneCapsule[];
15
+ immuneCount(): number;
16
+ getSuccessRate(failureCode: string, strategy: string): number;
17
+ close(): void;
18
+ }
19
+ //# sourceMappingURL=gene-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gene-map.d.ts","sourceRoot":"","sources":["../../src/engine/gene-map.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkBpF,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,mBAAmB,CAAqB;gBAEpC,MAAM,GAAE,MAAmB;IAmCvC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAwBtE,gEAAgE;IAChE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUjF,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAY9B,IAAI,IAAI,WAAW,EAAE;IAgBrB,WAAW,IAAI,MAAM;IAKrB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAW7D,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,130 @@
1
+ import Database from 'better-sqlite3';
2
+ const SCHEMA = `
3
+ CREATE TABLE IF NOT EXISTS genes (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ failure_code TEXT NOT NULL,
6
+ category TEXT NOT NULL,
7
+ strategy TEXT NOT NULL,
8
+ params TEXT NOT NULL DEFAULT '{}',
9
+ success_count INTEGER NOT NULL DEFAULT 1,
10
+ avg_repair_ms REAL NOT NULL DEFAULT 0,
11
+ platforms TEXT NOT NULL DEFAULT '[]',
12
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
13
+ last_used_at TEXT NOT NULL DEFAULT (datetime('now')),
14
+ UNIQUE(failure_code, category)
15
+ );
16
+ `;
17
+ export class GeneMap {
18
+ db;
19
+ stmtLookup;
20
+ stmtUpsert;
21
+ stmtList;
22
+ stmtCount;
23
+ stmtUpdatePlatforms;
24
+ constructor(dbPath = ':memory:') {
25
+ this.db = new Database(dbPath);
26
+ this.db.pragma('journal_mode = WAL');
27
+ this.db.exec(SCHEMA);
28
+ this.stmtLookup = this.db.prepare(`
29
+ SELECT * FROM genes WHERE failure_code = ? AND category = ?
30
+ `);
31
+ this.stmtUpsert = this.db.prepare(`
32
+ INSERT INTO genes (failure_code, category, strategy, params, success_count, avg_repair_ms, platforms)
33
+ VALUES (@failureCode, @category, @strategy, @params, @successCount, @avgRepairMs, @platforms)
34
+ ON CONFLICT(failure_code, category) DO UPDATE SET
35
+ strategy = @strategy,
36
+ params = @params,
37
+ success_count = success_count + 1,
38
+ avg_repair_ms = (avg_repair_ms * success_count + @avgRepairMs) / (success_count + 1),
39
+ platforms = @platforms,
40
+ last_used_at = datetime('now')
41
+ `);
42
+ this.stmtList = this.db.prepare(`
43
+ SELECT * FROM genes ORDER BY success_count DESC
44
+ `);
45
+ this.stmtCount = this.db.prepare(`
46
+ SELECT COUNT(*) as count FROM genes
47
+ `);
48
+ this.stmtUpdatePlatforms = this.db.prepare(`
49
+ UPDATE genes SET platforms = ?, last_used_at = datetime('now')
50
+ WHERE failure_code = ? AND category = ?
51
+ `);
52
+ }
53
+ lookup(code, category) {
54
+ const row = this.stmtLookup.get(code, category);
55
+ if (!row)
56
+ return null;
57
+ // Update last_used_at and increment success_count on hit
58
+ this.db.prepare(`
59
+ UPDATE genes SET last_used_at = datetime('now'), success_count = success_count + 1
60
+ WHERE failure_code = ? AND category = ?
61
+ `).run(code, category);
62
+ return {
63
+ id: row.id,
64
+ failureCode: row.failure_code,
65
+ category: row.category,
66
+ strategy: row.strategy,
67
+ params: JSON.parse(row.params),
68
+ successCount: row.success_count + 1,
69
+ avgRepairMs: row.avg_repair_ms,
70
+ platforms: JSON.parse(row.platforms),
71
+ createdAt: row.created_at,
72
+ lastUsedAt: row.last_used_at,
73
+ };
74
+ }
75
+ /** Add a platform to an existing gene if not already present */
76
+ addPlatform(code, category, platform) {
77
+ const row = this.stmtLookup.get(code, category);
78
+ if (!row)
79
+ return;
80
+ const platforms = JSON.parse(row.platforms);
81
+ if (!platforms.includes(platform)) {
82
+ platforms.push(platform);
83
+ this.stmtUpdatePlatforms.run(JSON.stringify(platforms), code, category);
84
+ }
85
+ }
86
+ store(gene) {
87
+ this.stmtUpsert.run({
88
+ failureCode: gene.failureCode,
89
+ category: gene.category,
90
+ strategy: gene.strategy,
91
+ params: JSON.stringify(gene.params),
92
+ successCount: gene.successCount,
93
+ avgRepairMs: gene.avgRepairMs,
94
+ platforms: JSON.stringify(gene.platforms),
95
+ });
96
+ }
97
+ list() {
98
+ const rows = this.stmtList.all();
99
+ return rows.map((row) => ({
100
+ id: row.id,
101
+ failureCode: row.failure_code,
102
+ category: row.category,
103
+ strategy: row.strategy,
104
+ params: JSON.parse(row.params),
105
+ successCount: row.success_count,
106
+ avgRepairMs: row.avg_repair_ms,
107
+ platforms: JSON.parse(row.platforms),
108
+ createdAt: row.created_at,
109
+ lastUsedAt: row.last_used_at,
110
+ }));
111
+ }
112
+ immuneCount() {
113
+ const row = this.stmtCount.get();
114
+ return row.count;
115
+ }
116
+ getSuccessRate(failureCode, strategy) {
117
+ const row = this.db.prepare(`
118
+ SELECT success_count FROM genes
119
+ WHERE failure_code = ? AND strategy = ?
120
+ `).get(failureCode, strategy);
121
+ if (!row || row.success_count < 3)
122
+ return 0.5; // too few samples, return neutral
123
+ // More successes → higher probability, capped at 0.95
124
+ return Math.min(0.5 + (row.success_count / 100), 0.95);
125
+ }
126
+ close() {
127
+ this.db.close();
128
+ }
129
+ }
130
+ //# sourceMappingURL=gene-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gene-map.js","sourceRoot":"","sources":["../../src/engine/gene-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { GeneMap } from './gene-map.js';
2
+ import type { FailureClassification, GeneCapsule, PlatformAdapter, RepairCandidate, RepairResult } from './types.js';
3
+ export declare function commit(winner: RepairCandidate, _failure: FailureClassification): Promise<{
4
+ success: boolean;
5
+ result: string;
6
+ }>;
7
+ export declare class PcecEngine {
8
+ private adapters;
9
+ private geneMap;
10
+ private agentId;
11
+ stats: {
12
+ repairs: number;
13
+ savedRevenue: number;
14
+ immuneHits: number;
15
+ };
16
+ private readonly MAX_CYCLES;
17
+ private cycleCount;
18
+ constructor(geneMap: GeneMap, agentId?: string);
19
+ /** Register platform adapters (order matters — first match wins for perceive) */
20
+ registerAdapter(adapter: PlatformAdapter): void;
21
+ /** Perceive chains through adapters until one matches */
22
+ private perceive;
23
+ /** Construct collects candidates from ALL adapters */
24
+ private construct;
25
+ /** Full P→C→E→K repair flow */
26
+ repair(error: Error, context?: Record<string, unknown>): Promise<RepairResult>;
27
+ getStats(): {
28
+ geneCount: number;
29
+ genes: GeneCapsule[];
30
+ repairs: number;
31
+ savedRevenue: number;
32
+ immuneHits: number;
33
+ };
34
+ }
35
+ //# sourceMappingURL=pcec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pcec.d.ts","sourceRoot":"","sources":["../../src/engine/pcec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,wBAAsB,MAAM,CAC1B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAU/C;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;IACjB,KAAK;;;;MAAkD;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,MAAkB;IAKzD,iFAAiF;IACjF,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI/C,yDAAyD;IACzD,OAAO,CAAC,QAAQ;IAgBhB,sDAAsD;IACtD,OAAO,CAAC,SAAS;IAYjB,+BAA+B;IACzB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA6MpF,QAAQ;;;;;;;CAOT"}
@@ -0,0 +1,253 @@
1
+ import { bus } from './bus.js';
2
+ import { evaluate } from './evaluate.js';
3
+ import { REVENUE_AT_RISK } from './types.js';
4
+ // ── Commit (simulated) ─────────────────────────────────────────────
5
+ export async function commit(winner, _failure) {
6
+ // Simulate execution with realistic delay
7
+ const jitter = Math.random() * 200;
8
+ await new Promise((r) => setTimeout(r, Math.min(winner.estimatedSpeedMs * 0.3 + jitter, 800)));
9
+ // In production: call platform SDK, execute DEX swap, renew session, etc.
10
+ return {
11
+ success: true,
12
+ result: `Executed ${winner.strategy}: ${winner.description}`,
13
+ };
14
+ }
15
+ // ── PCEC Engine ─────────────────────────────────────────────────────
16
+ export class PcecEngine {
17
+ adapters = [];
18
+ geneMap;
19
+ agentId;
20
+ stats = { repairs: 0, savedRevenue: 0, immuneHits: 0 };
21
+ MAX_CYCLES = 50;
22
+ cycleCount = 0;
23
+ constructor(geneMap, agentId = 'default') {
24
+ this.geneMap = geneMap;
25
+ this.agentId = agentId;
26
+ }
27
+ /** Register platform adapters (order matters — first match wins for perceive) */
28
+ registerAdapter(adapter) {
29
+ this.adapters.push(adapter);
30
+ }
31
+ /** Perceive chains through adapters until one matches */
32
+ perceive(error, context) {
33
+ for (const adapter of this.adapters) {
34
+ const result = adapter.perceive(error, context);
35
+ if (result)
36
+ return result;
37
+ }
38
+ // Fallback: unknown
39
+ return {
40
+ code: 'unknown',
41
+ category: 'unknown',
42
+ severity: 'medium',
43
+ platform: 'unknown',
44
+ details: error.message,
45
+ timestamp: Date.now(),
46
+ };
47
+ }
48
+ /** Construct collects candidates from ALL adapters */
49
+ construct(failure) {
50
+ const candidates = [];
51
+ for (const adapter of this.adapters) {
52
+ candidates.push(...adapter.construct(failure));
53
+ }
54
+ // Enrich with Gene Map success rates
55
+ return candidates.map((c) => ({
56
+ ...c,
57
+ successProbability: this.geneMap.getSuccessRate(failure.code, c.strategy),
58
+ }));
59
+ }
60
+ /** Full P→C→E→K repair flow */
61
+ async repair(error, context) {
62
+ const start = Date.now();
63
+ // Safety check: prevent infinite repair cycles
64
+ this.cycleCount++;
65
+ if (this.cycleCount > this.MAX_CYCLES) {
66
+ this.cycleCount = 0;
67
+ bus.emit('error', this.agentId, {
68
+ reason: 'MAX_CYCLES_EXCEEDED',
69
+ cycles: this.MAX_CYCLES,
70
+ message: `PCEC halted after ${this.MAX_CYCLES} cycles to prevent runaway repair`,
71
+ });
72
+ return {
73
+ success: false,
74
+ failure: this.perceive(error, context),
75
+ candidates: [],
76
+ winner: null,
77
+ gene: null,
78
+ immune: false,
79
+ totalMs: 0,
80
+ revenueProtected: 0,
81
+ };
82
+ }
83
+ // ── PERCEIVE ──
84
+ const failure = this.perceive(error, context);
85
+ bus.emit('perceive', this.agentId, {
86
+ code: failure.code,
87
+ category: failure.category,
88
+ severity: failure.severity,
89
+ platform: failure.platform,
90
+ details: failure.details,
91
+ actualBalance: failure.actualBalance,
92
+ requiredAmount: failure.requiredAmount,
93
+ });
94
+ // ── Check Gene Map for immunity (by code+category, NOT platform) ──
95
+ const existingGene = this.geneMap.lookup(failure.code, failure.category);
96
+ if (existingGene) {
97
+ this.stats.immuneHits++;
98
+ this.stats.repairs++;
99
+ const revenue = REVENUE_AT_RISK[failure.category] ?? 50;
100
+ this.stats.savedRevenue += revenue;
101
+ // Add this platform to the gene if it's a new one
102
+ if (!existingGene.platforms.includes(failure.platform)) {
103
+ existingGene.platforms.push(failure.platform);
104
+ this.geneMap.addPlatform(failure.code, failure.category, failure.platform);
105
+ }
106
+ bus.emit('immune', this.agentId, {
107
+ code: failure.code,
108
+ category: failure.category,
109
+ strategy: existingGene.strategy,
110
+ successCount: existingGene.successCount,
111
+ avgRepairMs: existingGene.avgRepairMs,
112
+ platforms: existingGene.platforms,
113
+ crossPlatform: existingGene.platforms.length > 1,
114
+ });
115
+ // Execute known fix instantly
116
+ const immuneStart = Date.now();
117
+ await new Promise((r) => setTimeout(r, 50 + Math.random() * 50)); // near-instant
118
+ const immuneMs = Date.now() - immuneStart;
119
+ // Update gene with new timing
120
+ this.geneMap.store({
121
+ ...existingGene,
122
+ avgRepairMs: immuneMs,
123
+ });
124
+ return {
125
+ success: true,
126
+ failure,
127
+ candidates: [],
128
+ winner: {
129
+ id: existingGene.strategy,
130
+ strategy: existingGene.strategy,
131
+ description: `Immune: ${existingGene.strategy} (${existingGene.successCount} prior fixes, platforms: ${existingGene.platforms.join(', ')})`,
132
+ estimatedCostUsd: 0,
133
+ estimatedSpeedMs: immuneMs,
134
+ requirements: [],
135
+ score: 100,
136
+ successProbability: 0.99,
137
+ platform: failure.platform,
138
+ },
139
+ gene: existingGene,
140
+ immune: true,
141
+ totalMs: Date.now() - start,
142
+ revenueProtected: revenue,
143
+ };
144
+ }
145
+ // ── CONSTRUCT (collects from ALL adapters) ──
146
+ const candidates = this.construct(failure);
147
+ if (candidates.length === 0) {
148
+ bus.emit('error', this.agentId, {
149
+ reason: 'NO_CANDIDATES',
150
+ code: failure.code,
151
+ category: failure.category,
152
+ });
153
+ return {
154
+ success: false,
155
+ failure,
156
+ candidates: [],
157
+ winner: null,
158
+ gene: null,
159
+ immune: false,
160
+ totalMs: Date.now() - start,
161
+ revenueProtected: 0,
162
+ };
163
+ }
164
+ bus.emit('construct', this.agentId, {
165
+ category: failure.category,
166
+ candidateCount: candidates.length,
167
+ candidates: candidates.map((c) => ({ id: c.id, strategy: c.strategy, description: c.description, platform: c.platform })),
168
+ });
169
+ // ── EVALUATE ──
170
+ const scored = evaluate(candidates, failure);
171
+ const winner = scored[0];
172
+ bus.emit('evaluate', this.agentId, {
173
+ winner: winner.strategy,
174
+ score: winner.score,
175
+ platform: winner.platform,
176
+ allScores: scored.map((c) => ({ strategy: c.strategy, score: c.score, platform: c.platform })),
177
+ });
178
+ // ── COMMIT ──
179
+ const result = await commit(winner, failure);
180
+ const totalMs = Date.now() - start;
181
+ const revenue = REVENUE_AT_RISK[failure.category] ?? 50;
182
+ if (result.success) {
183
+ this.stats.repairs++;
184
+ this.stats.savedRevenue += revenue;
185
+ // Store Gene Capsule (keyed by code+category, platform-agnostic)
186
+ const gene = {
187
+ failureCode: failure.code,
188
+ category: failure.category,
189
+ strategy: winner.strategy,
190
+ params: { description: winner.description },
191
+ successCount: 1,
192
+ avgRepairMs: totalMs,
193
+ platforms: [failure.platform],
194
+ };
195
+ this.geneMap.store(gene);
196
+ this.cycleCount = 0;
197
+ bus.emit('commit', this.agentId, {
198
+ success: true,
199
+ strategy: winner.strategy,
200
+ platform: winner.platform,
201
+ result: result.result,
202
+ totalMs,
203
+ });
204
+ bus.emit('gene', this.agentId, {
205
+ code: failure.code,
206
+ category: failure.category,
207
+ strategy: winner.strategy,
208
+ platform: failure.platform,
209
+ totalMs,
210
+ });
211
+ bus.emit('stats', this.agentId, {
212
+ totalRepairs: this.stats.repairs,
213
+ savedRevenue: this.stats.savedRevenue,
214
+ immuneHits: this.stats.immuneHits,
215
+ geneCount: this.geneMap.immuneCount(),
216
+ });
217
+ return {
218
+ success: true,
219
+ failure,
220
+ candidates: scored,
221
+ winner,
222
+ gene,
223
+ immune: false,
224
+ totalMs,
225
+ revenueProtected: revenue,
226
+ };
227
+ }
228
+ bus.emit('commit', this.agentId, {
229
+ success: false,
230
+ strategy: winner.strategy,
231
+ error: result.result,
232
+ totalMs,
233
+ });
234
+ return {
235
+ success: false,
236
+ failure,
237
+ candidates: scored,
238
+ winner,
239
+ gene: null,
240
+ immune: false,
241
+ totalMs,
242
+ revenueProtected: 0,
243
+ };
244
+ }
245
+ getStats() {
246
+ return {
247
+ ...this.stats,
248
+ geneCount: this.geneMap.immuneCount(),
249
+ genes: this.geneMap.list(),
250
+ };
251
+ }
252
+ }
253
+ //# sourceMappingURL=pcec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pcec.js","sourceRoot":"","sources":["../../src/engine/pcec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,sEAAsE;AAEtE,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAuB,EACvB,QAA+B;IAE/B,0CAA0C;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/F,0EAA0E;IAC1E,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,YAAY,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,WAAW,EAAE;KAC7D,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,OAAO,UAAU;IACb,QAAQ,GAAsB,EAAE,CAAC;IACjC,OAAO,CAAU;IACjB,OAAO,CAAS;IACjB,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC7C,UAAU,GAAG,EAAE,CAAC;IACzB,UAAU,GAAG,CAAC,CAAC;IAEvB,YAAY,OAAgB,EAAE,UAAkB,SAAS;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,iFAAiF;IACjF,eAAe,CAAC,OAAwB;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,yDAAyD;IACjD,QAAQ,CAAC,KAAY,EAAE,OAAiC;QAC9D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,oBAAoB;QACpB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,sDAAsD;IAC9C,SAAS,CAAC,OAA8B;QAC9C,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,qCAAqC;QACrC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,GAAG,CAAC;YACJ,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;SAC1E,CAAC,CAAC,CAAC;IACN,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,MAAM,CAAC,KAAY,EAAE,OAAiC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,+CAA+C;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC9B,MAAM,EAAE,qBAAqB;gBAC7B,MAAM,EAAE,IAAI,CAAC,UAAU;gBACvB,OAAO,EAAE,qBAAqB,IAAI,CAAC,UAAU,mCAAmC;aACjF,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACtC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,CAAC;gBACV,gBAAgB,EAAE,CAAC;aACpB,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;YACjC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;QAEH,qEAAqE;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;YAEnC,kDAAkD;YAClD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7E,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,aAAa,EAAE,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;aACjD,CAAC,CAAC;YAEH,8BAA8B;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;YACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;YAE1C,8BAA8B;YAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACjB,GAAG,YAAY;gBACf,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE;oBACN,EAAE,EAAE,YAAY,CAAC,QAAQ;oBACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,WAAW,EAAE,WAAW,YAAY,CAAC,QAAQ,KAAK,YAAY,CAAC,YAAY,4BAA4B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC3I,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,QAAQ;oBAC1B,YAAY,EAAE,EAAE;oBAChB,KAAK,EAAE,GAAG;oBACV,kBAAkB,EAAE,IAAI;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;gBACD,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC3B,gBAAgB,EAAE,OAAO;aAC1B,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC9B,MAAM,EAAE,eAAe;gBACvB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO;gBACP,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC3B,gBAAgB,EAAE,CAAC;aACpB,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,UAAU,CAAC,MAAM;YACjC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC1H,CAAC,CAAC;QAEH,iBAAiB;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;YACjC,MAAM,EAAE,MAAM,CAAC,QAAQ;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC/F,CAAC,CAAC;QAEH,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;YAEnC,iEAAiE;YACjE,MAAM,IAAI,GAAgB;gBACxB,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC3C,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,OAAO;gBACpB,SAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC9B,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAEpB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC/B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO;aACR,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO;aACR,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC9B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;gBAChC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;gBACrC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;gBACjC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;aACtC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,UAAU,EAAE,MAAM;gBAClB,MAAM;gBACN,IAAI;gBACJ,MAAM,EAAE,KAAK;gBACb,OAAO;gBACP,gBAAgB,EAAE,OAAO;aAC1B,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;YAC/B,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,UAAU,EAAE,MAAM;YAClB,MAAM;YACN,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,KAAK;YACb,OAAO;YACP,gBAAgB,EAAE,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACrC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;SAC3B,CAAC;IACJ,CAAC;CACF"}