@helix-agent/core 0.3.0 → 0.5.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 (40) hide show
  1. package/dist/engine/abi.d.ts +82 -0
  2. package/dist/engine/abi.d.ts.map +1 -0
  3. package/dist/engine/abi.js +54 -0
  4. package/dist/engine/abi.js.map +1 -0
  5. package/dist/engine/dex-presets.d.ts +4 -0
  6. package/dist/engine/dex-presets.d.ts.map +1 -0
  7. package/dist/engine/dex-presets.js +43 -0
  8. package/dist/engine/dex-presets.js.map +1 -0
  9. package/dist/engine/gene-map.d.ts +26 -2
  10. package/dist/engine/gene-map.d.ts.map +1 -1
  11. package/dist/engine/gene-map.js +139 -72
  12. package/dist/engine/gene-map.js.map +1 -1
  13. package/dist/engine/lifecycle.d.ts +3 -0
  14. package/dist/engine/lifecycle.d.ts.map +1 -0
  15. package/dist/engine/lifecycle.js +20 -0
  16. package/dist/engine/lifecycle.js.map +1 -0
  17. package/dist/engine/pcec.d.ts +3 -0
  18. package/dist/engine/pcec.d.ts.map +1 -1
  19. package/dist/engine/pcec.js +50 -2
  20. package/dist/engine/pcec.js.map +1 -1
  21. package/dist/engine/provider.d.ts +1 -0
  22. package/dist/engine/provider.d.ts.map +1 -1
  23. package/dist/engine/provider.js +83 -4
  24. package/dist/engine/provider.js.map +1 -1
  25. package/dist/engine/root-causes.d.ts +8 -0
  26. package/dist/engine/root-causes.d.ts.map +1 -0
  27. package/dist/engine/root-causes.js +19 -0
  28. package/dist/engine/root-causes.js.map +1 -0
  29. package/dist/engine/seed-genes.d.ts +3 -0
  30. package/dist/engine/seed-genes.d.ts.map +1 -0
  31. package/dist/engine/seed-genes.js +15 -0
  32. package/dist/engine/seed-genes.js.map +1 -0
  33. package/dist/engine/types.d.ts +15 -0
  34. package/dist/engine/types.d.ts.map +1 -1
  35. package/dist/engine/types.js.map +1 -1
  36. package/dist/index.d.ts +6 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -0
  39. package/dist/index.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ export declare const ERC20_ABI: readonly [{
2
+ readonly name: "approve";
3
+ readonly type: "function";
4
+ readonly stateMutability: "nonpayable";
5
+ readonly inputs: readonly [{
6
+ readonly name: "spender";
7
+ readonly type: "address";
8
+ }, {
9
+ readonly name: "amount";
10
+ readonly type: "uint256";
11
+ }];
12
+ readonly outputs: readonly [{
13
+ readonly name: "";
14
+ readonly type: "bool";
15
+ }];
16
+ }, {
17
+ readonly name: "balanceOf";
18
+ readonly type: "function";
19
+ readonly stateMutability: "view";
20
+ readonly inputs: readonly [{
21
+ readonly name: "account";
22
+ readonly type: "address";
23
+ }];
24
+ readonly outputs: readonly [{
25
+ readonly name: "";
26
+ readonly type: "uint256";
27
+ }];
28
+ }, {
29
+ readonly name: "allowance";
30
+ readonly type: "function";
31
+ readonly stateMutability: "view";
32
+ readonly inputs: readonly [{
33
+ readonly name: "owner";
34
+ readonly type: "address";
35
+ }, {
36
+ readonly name: "spender";
37
+ readonly type: "address";
38
+ }];
39
+ readonly outputs: readonly [{
40
+ readonly name: "";
41
+ readonly type: "uint256";
42
+ }];
43
+ }];
44
+ export declare const SWAP_ROUTER_ABI: readonly [{
45
+ readonly name: "exactInputSingle";
46
+ readonly type: "function";
47
+ readonly stateMutability: "payable";
48
+ readonly inputs: readonly [{
49
+ readonly name: "params";
50
+ readonly type: "tuple";
51
+ readonly components: readonly [{
52
+ readonly name: "tokenIn";
53
+ readonly type: "address";
54
+ }, {
55
+ readonly name: "tokenOut";
56
+ readonly type: "address";
57
+ }, {
58
+ readonly name: "fee";
59
+ readonly type: "uint24";
60
+ }, {
61
+ readonly name: "recipient";
62
+ readonly type: "address";
63
+ }, {
64
+ readonly name: "deadline";
65
+ readonly type: "uint256";
66
+ }, {
67
+ readonly name: "amountIn";
68
+ readonly type: "uint256";
69
+ }, {
70
+ readonly name: "amountOutMinimum";
71
+ readonly type: "uint256";
72
+ }, {
73
+ readonly name: "sqrtPriceLimitX96";
74
+ readonly type: "uint160";
75
+ }];
76
+ }];
77
+ readonly outputs: readonly [{
78
+ readonly name: "amountOut";
79
+ readonly type: "uint256";
80
+ }];
81
+ }];
82
+ //# sourceMappingURL=abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/engine/abi.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BZ,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBlB,CAAC"}
@@ -0,0 +1,54 @@
1
+ export const ERC20_ABI = [
2
+ {
3
+ name: 'approve',
4
+ type: 'function',
5
+ stateMutability: 'nonpayable',
6
+ inputs: [
7
+ { name: 'spender', type: 'address' },
8
+ { name: 'amount', type: 'uint256' },
9
+ ],
10
+ outputs: [{ name: '', type: 'bool' }],
11
+ },
12
+ {
13
+ name: 'balanceOf',
14
+ type: 'function',
15
+ stateMutability: 'view',
16
+ inputs: [{ name: 'account', type: 'address' }],
17
+ outputs: [{ name: '', type: 'uint256' }],
18
+ },
19
+ {
20
+ name: 'allowance',
21
+ type: 'function',
22
+ stateMutability: 'view',
23
+ inputs: [
24
+ { name: 'owner', type: 'address' },
25
+ { name: 'spender', type: 'address' },
26
+ ],
27
+ outputs: [{ name: '', type: 'uint256' }],
28
+ },
29
+ ];
30
+ export const SWAP_ROUTER_ABI = [
31
+ {
32
+ name: 'exactInputSingle',
33
+ type: 'function',
34
+ stateMutability: 'payable',
35
+ inputs: [
36
+ {
37
+ name: 'params',
38
+ type: 'tuple',
39
+ components: [
40
+ { name: 'tokenIn', type: 'address' },
41
+ { name: 'tokenOut', type: 'address' },
42
+ { name: 'fee', type: 'uint24' },
43
+ { name: 'recipient', type: 'address' },
44
+ { name: 'deadline', type: 'uint256' },
45
+ { name: 'amountIn', type: 'uint256' },
46
+ { name: 'amountOutMinimum', type: 'uint256' },
47
+ { name: 'sqrtPriceLimitX96', type: 'uint160' },
48
+ ],
49
+ },
50
+ ],
51
+ outputs: [{ name: 'amountOut', type: 'uint256' }],
52
+ },
53
+ ];
54
+ //# sourceMappingURL=abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/engine/abi.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,YAAY;QAC7B,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;SACpC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACtC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KACzC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SACrC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KACzC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;QACE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,SAAS;QAC1B,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;oBACtC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC7C,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC/C;aACF;SACF;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAClD;CACO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DexConfig } from './types.js';
2
+ export declare const DEX_PRESETS: Record<string, DexConfig>;
3
+ export declare function getDexPreset(chainId: number): DexConfig | null;
4
+ //# sourceMappingURL=dex-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dex-presets.d.ts","sourceRoot":"","sources":["../../src/engine/dex-presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAiCjD,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAO9D"}
@@ -0,0 +1,43 @@
1
+ export const DEX_PRESETS = {
2
+ 'base': {
3
+ routerAddress: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
4
+ quoterAddress: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
5
+ wethAddress: '0x4200000000000000000000000000000000000006',
6
+ defaultTokens: {
7
+ usdc: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
8
+ dai: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb',
9
+ },
10
+ defaultSlippage: 0.005,
11
+ defaultDeadlineSeconds: 300,
12
+ },
13
+ 'base-sepolia': {
14
+ routerAddress: '0x050E797f3625EC8785265e1d9BDd4799b97528A1',
15
+ wethAddress: '0x4200000000000000000000000000000000000006',
16
+ defaultTokens: {
17
+ usdc: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
18
+ },
19
+ defaultSlippage: 0.01,
20
+ defaultDeadlineSeconds: 600,
21
+ },
22
+ 'ethereum': {
23
+ routerAddress: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
24
+ quoterAddress: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',
25
+ wethAddress: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
26
+ defaultTokens: {
27
+ usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
28
+ usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
29
+ dai: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
30
+ },
31
+ defaultSlippage: 0.005,
32
+ defaultDeadlineSeconds: 300,
33
+ },
34
+ };
35
+ export function getDexPreset(chainId) {
36
+ switch (chainId) {
37
+ case 8453: return DEX_PRESETS['base'];
38
+ case 84532: return DEX_PRESETS['base-sepolia'];
39
+ case 1: return DEX_PRESETS['ethereum'];
40
+ default: return null;
41
+ }
42
+ }
43
+ //# sourceMappingURL=dex-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dex-presets.js","sourceRoot":"","sources":["../../src/engine/dex-presets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,MAAM,EAAE;QACN,aAAa,EAAE,4CAA4C;QAC3D,aAAa,EAAE,4CAA4C;QAC3D,WAAW,EAAE,4CAA4C;QACzD,aAAa,EAAE;YACb,IAAI,EAAE,4CAA4C;YAClD,GAAG,EAAE,4CAA4C;SAClD;QACD,eAAe,EAAE,KAAK;QACtB,sBAAsB,EAAE,GAAG;KAC5B;IACD,cAAc,EAAE;QACd,aAAa,EAAE,4CAA4C;QAC3D,WAAW,EAAE,4CAA4C;QACzD,aAAa,EAAE;YACb,IAAI,EAAE,4CAA4C;SACnD;QACD,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,GAAG;KAC5B;IACD,UAAU,EAAE;QACV,aAAa,EAAE,4CAA4C;QAC3D,aAAa,EAAE,4CAA4C;QAC3D,WAAW,EAAE,4CAA4C;QACzD,aAAa,EAAE;YACb,IAAI,EAAE,4CAA4C;YAClD,IAAI,EAAE,4CAA4C;YAClD,GAAG,EAAE,4CAA4C;SAClD;QACD,eAAe,EAAE,KAAK;QACtB,sBAAsB,EAAE,GAAG;KAC5B;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;QAC/C,KAAK,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -6,13 +6,17 @@ export declare class GeneMap {
6
6
  private stmtList;
7
7
  private stmtCount;
8
8
  private stmtUpdatePlatforms;
9
+ private cache;
10
+ private cacheLoadedAt;
11
+ private readonly CACHE_TTL_MS;
9
12
  constructor(dbPath?: string);
13
+ private cacheKey;
14
+ private warmCache;
15
+ private isCacheStale;
10
16
  lookup(code: ErrorCode, category: FailureCategory): GeneCapsule | null;
11
17
  addPlatform(code: ErrorCode, category: FailureCategory, platform: Platform): void;
12
18
  store(gene: GeneCapsule): void;
13
- /** RL update after successful repair */
14
19
  recordSuccess(code: string, category: string, repairMs: number): void;
15
- /** RL update after failed repair */
16
20
  recordFailure(code: string, category: string): void;
17
21
  list(): GeneCapsule[];
18
22
  immuneCount(): number;
@@ -26,6 +30,26 @@ export declare class GeneMap {
26
30
  count: number;
27
31
  }[];
28
32
  };
33
+ seed(): {
34
+ seeded: number;
35
+ };
36
+ combine(): {
37
+ merged: number;
38
+ };
39
+ gc(): {
40
+ merged: number;
41
+ pruned: number;
42
+ archived: number;
43
+ };
44
+ generateRepairId(): string;
45
+ checkRepairInProgress(code: string, category: string): {
46
+ inProgress: boolean;
47
+ repairId?: string;
48
+ txHash?: string;
49
+ };
50
+ logRepairStart(repairId: string, code: string, category: string, strategy: string): void;
51
+ logRepairComplete(repairId: string, txHash?: string): void;
52
+ logRepairFailed(repairId: string): void;
29
53
  close(): void;
30
54
  }
31
55
  //# sourceMappingURL=gene-map.d.ts.map
@@ -1 +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;AAyCpF,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;IA8BvC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IActE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUjF,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAc9B,wCAAwC;IACxC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkBrE,oCAAoC;IACpC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBnD,IAAI,IAAI,WAAW,EAAE;IAIrB,WAAW,IAAI,MAAM;IAIrB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ7D,KAAK,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE;IAmB7H,KAAK,IAAI,IAAI;CAGd"}
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;AAsDpF,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;IAGhD,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAE3B,MAAM,GAAE,MAAmB;IA2BvC,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,YAAY;IAIpB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAsBtE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAWjF,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAW9B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQrE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQnD,IAAI,IAAI,WAAW,EAAE;IACrB,WAAW,IAAI,MAAM;IAErB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAM7D,KAAK;;;;;sBAKyM,MAAM;mBAA4B,MAAM;;;IAKtP,IAAI,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAgB1B,OAAO,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAkB7B,EAAE,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAU1D,gBAAgB,IAAI,MAAM;IAE1B,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAQlH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1D,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIvC,KAAK,IAAI,IAAI;CACd"}
@@ -1,4 +1,5 @@
1
1
  import Database from 'better-sqlite3';
2
+ import { SEED_GENES } from './seed-genes.js';
2
3
  const SCHEMA = `
3
4
  CREATE TABLE IF NOT EXISTS genes (
4
5
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -17,6 +18,18 @@ CREATE TABLE IF NOT EXISTS genes (
17
18
  last_used_at TEXT NOT NULL DEFAULT (datetime('now')),
18
19
  UNIQUE(failure_code, category)
19
20
  );
21
+
22
+ CREATE TABLE IF NOT EXISTS repair_log (
23
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
24
+ repair_id TEXT UNIQUE NOT NULL,
25
+ failure_code TEXT NOT NULL,
26
+ category TEXT NOT NULL,
27
+ strategy TEXT NOT NULL,
28
+ status TEXT NOT NULL DEFAULT 'pending',
29
+ tx_hash TEXT,
30
+ created_at DATETIME DEFAULT (datetime('now')),
31
+ completed_at DATETIME
32
+ );
20
33
  `;
21
34
  function parseRow(row) {
22
35
  return {
@@ -43,42 +56,61 @@ export class GeneMap {
43
56
  stmtList;
44
57
  stmtCount;
45
58
  stmtUpdatePlatforms;
59
+ // L1 in-memory cache (OPT-9)
60
+ cache = new Map();
61
+ cacheLoadedAt = 0;
62
+ CACHE_TTL_MS = 30_000;
46
63
  constructor(dbPath = ':memory:') {
47
64
  this.db = new Database(dbPath);
48
65
  this.db.pragma('journal_mode = WAL');
49
66
  this.db.exec(SCHEMA);
50
- this.stmtLookup = this.db.prepare(`
51
- SELECT * FROM genes WHERE failure_code = ? AND category = ? ORDER BY q_value DESC LIMIT 1
52
- `);
67
+ this.stmtLookup = this.db.prepare(`SELECT * FROM genes WHERE failure_code = ? AND category = ? ORDER BY q_value DESC LIMIT 1`);
53
68
  this.stmtUpsert = this.db.prepare(`
54
69
  INSERT INTO genes (failure_code, category, strategy, params, success_count, avg_repair_ms, platforms, q_value, consecutive_failures)
55
70
  VALUES (@failureCode, @category, @strategy, @params, @successCount, @avgRepairMs, @platforms, @qValue, @consecutiveFailures)
56
71
  ON CONFLICT(failure_code, category) DO UPDATE SET
57
- strategy = @strategy,
58
- params = @params,
72
+ strategy = @strategy, params = @params,
59
73
  success_count = success_count + 1,
60
74
  avg_repair_ms = (avg_repair_ms * success_count + @avgRepairMs) / (success_count + 1),
61
- platforms = @platforms,
62
- q_value = @qValue,
63
- consecutive_failures = @consecutiveFailures,
75
+ platforms = @platforms, q_value = @qValue, consecutive_failures = @consecutiveFailures,
64
76
  last_used_at = datetime('now')
65
77
  `);
66
78
  this.stmtList = this.db.prepare(`SELECT * FROM genes ORDER BY q_value DESC, success_count DESC`);
67
79
  this.stmtCount = this.db.prepare(`SELECT COUNT(*) as count FROM genes`);
68
- this.stmtUpdatePlatforms = this.db.prepare(`
69
- UPDATE genes SET platforms = ?, last_used_at = datetime('now') WHERE failure_code = ? AND category = ?
70
- `);
80
+ this.stmtUpdatePlatforms = this.db.prepare(`UPDATE genes SET platforms = ?, last_used_at = datetime('now') WHERE failure_code = ? AND category = ?`);
81
+ // Seed on first run + warm cache
82
+ this.seed();
83
+ this.warmCache();
84
+ }
85
+ // ── L1 Cache (OPT-9) ──
86
+ cacheKey(code, category) { return `${code}:${category}`; }
87
+ warmCache() {
88
+ this.cache.clear();
89
+ for (const row of this.db.prepare('SELECT * FROM genes').all()) {
90
+ this.cache.set(this.cacheKey(row.failure_code, row.category), row);
91
+ }
92
+ this.cacheLoadedAt = Date.now();
71
93
  }
94
+ isCacheStale() { return Date.now() - this.cacheLoadedAt > this.CACHE_TTL_MS; }
95
+ // ── Core CRUD ──
72
96
  lookup(code, category) {
97
+ const key = this.cacheKey(code, category);
98
+ // L1 cache hit
99
+ if (!this.isCacheStale() && this.cache.has(key)) {
100
+ const cached = this.cache.get(key);
101
+ this.db.prepare(`UPDATE genes SET last_used_at = datetime('now'), success_count = success_count + 1 WHERE failure_code = ? AND category = ?`).run(code, category);
102
+ const gene = parseRow(cached);
103
+ gene.successCount += 1;
104
+ return gene;
105
+ }
106
+ // L2: SQLite
73
107
  const row = this.stmtLookup.get(code, category);
74
108
  if (!row)
75
109
  return null;
76
- this.db.prepare(`
77
- UPDATE genes SET last_used_at = datetime('now'), success_count = success_count + 1
78
- WHERE failure_code = ? AND category = ?
79
- `).run(code, category);
110
+ this.db.prepare(`UPDATE genes SET last_used_at = datetime('now'), success_count = success_count + 1 WHERE failure_code = ? AND category = ?`).run(code, category);
111
+ this.cache.set(key, row);
80
112
  const gene = parseRow(row);
81
- gene.successCount += 1; // reflect the bump we just did
113
+ gene.successCount += 1;
82
114
  return gene;
83
115
  }
84
116
  addPlatform(code, category, platform) {
@@ -89,92 +121,127 @@ export class GeneMap {
89
121
  if (!platforms.includes(platform)) {
90
122
  platforms.push(platform);
91
123
  this.stmtUpdatePlatforms.run(JSON.stringify(platforms), code, category);
124
+ this.cache.delete(this.cacheKey(code, category)); // invalidate
92
125
  }
93
126
  }
94
127
  store(gene) {
95
128
  this.stmtUpsert.run({
96
- failureCode: gene.failureCode,
97
- category: gene.category,
98
- strategy: gene.strategy,
129
+ failureCode: gene.failureCode, category: gene.category, strategy: gene.strategy,
99
130
  params: JSON.stringify(gene.params, (_k, v) => typeof v === 'bigint' ? v.toString() : v),
100
- successCount: gene.successCount,
101
- avgRepairMs: gene.avgRepairMs,
131
+ successCount: gene.successCount, avgRepairMs: gene.avgRepairMs,
102
132
  platforms: JSON.stringify(gene.platforms),
103
- qValue: gene.qValue ?? 0.5,
104
- consecutiveFailures: gene.consecutiveFailures ?? 0,
133
+ qValue: gene.qValue ?? 0.5, consecutiveFailures: gene.consecutiveFailures ?? 0,
105
134
  });
135
+ this.cache.delete(this.cacheKey(gene.failureCode, gene.category)); // invalidate
106
136
  }
107
- /** RL update after successful repair */
108
137
  recordSuccess(code, category, repairMs) {
109
138
  const row = this.stmtLookup.get(code, category);
110
139
  if (!row)
111
140
  return;
112
- const alpha = 0.1;
113
- const oldQ = row.q_value;
114
- const newQ = oldQ + alpha * (1.0 - oldQ);
115
- this.db.prepare(`
116
- UPDATE genes SET
117
- q_value = ?,
118
- avg_repair_ms = (avg_repair_ms * success_count + ?) / (success_count + 1),
119
- success_count = success_count + 1,
120
- last_success_at = ?,
121
- consecutive_failures = 0,
122
- last_used_at = datetime('now')
123
- WHERE failure_code = ? AND category = ?
124
- `).run(newQ, repairMs, Date.now(), code, category);
141
+ const newQ = row.q_value + 0.1 * (1.0 - row.q_value);
142
+ this.db.prepare(`UPDATE genes SET q_value = ?, avg_repair_ms = (avg_repair_ms * success_count + ?) / (success_count + 1), success_count = success_count + 1, last_success_at = ?, consecutive_failures = 0, last_used_at = datetime('now') WHERE failure_code = ? AND category = ?`).run(newQ, repairMs, Date.now(), code, category);
143
+ this.cache.delete(this.cacheKey(code, category));
125
144
  }
126
- /** RL update after failed repair */
127
145
  recordFailure(code, category) {
128
146
  const row = this.stmtLookup.get(code, category);
129
147
  if (!row)
130
148
  return;
131
- const alpha = 0.1;
132
- const oldQ = row.q_value;
133
- const newQ = oldQ + alpha * (0.0 - oldQ);
134
- this.db.prepare(`
135
- UPDATE genes SET
136
- q_value = ?,
137
- last_failed_at = ?,
138
- consecutive_failures = consecutive_failures + 1,
139
- last_used_at = datetime('now')
140
- WHERE failure_code = ? AND category = ?
141
- `).run(newQ, Date.now(), code, category);
142
- }
143
- list() {
144
- return this.stmtList.all().map(parseRow);
145
- }
146
- immuneCount() {
147
- return this.stmtCount.get().count;
149
+ const newQ = row.q_value + 0.1 * (0.0 - row.q_value);
150
+ this.db.prepare(`UPDATE genes SET q_value = ?, last_failed_at = ?, consecutive_failures = consecutive_failures + 1, last_used_at = datetime('now') WHERE failure_code = ? AND category = ?`).run(newQ, Date.now(), code, category);
151
+ this.cache.delete(this.cacheKey(code, category));
148
152
  }
153
+ list() { return this.stmtList.all().map(parseRow); }
154
+ immuneCount() { return this.stmtCount.get().count; }
149
155
  getSuccessRate(failureCode, strategy) {
150
- const row = this.db.prepare(`
151
- SELECT success_count, q_value FROM genes WHERE failure_code = ? AND strategy = ?
152
- `).get(failureCode, strategy);
156
+ const row = this.db.prepare(`SELECT success_count, q_value FROM genes WHERE failure_code = ? AND strategy = ?`).get(failureCode, strategy);
153
157
  if (!row || row.success_count < 3)
154
158
  return 0.5;
155
159
  return Math.min(0.5 + (row.success_count / 100), 0.95);
156
160
  }
157
161
  stats() {
158
162
  const rows = this.stmtList.all();
159
- const allPlatforms = new Set();
163
+ const allP = new Set();
160
164
  let qSum = 0;
161
165
  for (const r of rows) {
162
166
  qSum += r.q_value;
163
167
  for (const p of JSON.parse(r.platforms))
164
- allPlatforms.add(p);
168
+ allP.add(p);
169
+ }
170
+ return { totalGenes: rows.length, avgQValue: rows.length > 0 ? Math.round((qSum / rows.length) * 100) / 100 : 0, platforms: [...allP], topStrategies: rows.slice(0, 10).map(r => ({ strategy: r.strategy, count: r.success_count })) };
171
+ }
172
+ // ── Seed (D9: Cold Start) ──
173
+ seed() {
174
+ const cnt = this.db.prepare('SELECT COUNT(*) as cnt FROM genes').get().cnt;
175
+ if (cnt > 0)
176
+ return { seeded: 0 };
177
+ let seeded = 0;
178
+ const ins = this.db.prepare(`INSERT OR IGNORE INTO genes (failure_code, category, strategy, params, success_count, avg_repair_ms, platforms, q_value, consecutive_failures) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
179
+ this.db.transaction(() => {
180
+ for (const g of SEED_GENES) {
181
+ ins.run(g.failureCode, g.category, g.strategy, JSON.stringify(g.params), g.successCount, g.avgRepairMs, JSON.stringify(g.platforms), g.qValue, g.consecutiveFailures);
182
+ seeded++;
183
+ }
184
+ })();
185
+ return { seeded };
186
+ }
187
+ // ── Gene Combine (OPT-3: ELL paper) ──
188
+ combine() {
189
+ let merged = 0;
190
+ const groups = this.db.prepare(`SELECT failure_code, category, COUNT(*) as cnt FROM genes GROUP BY failure_code, category HAVING cnt > 1`).all();
191
+ for (const g of groups) {
192
+ const genes = this.db.prepare(`SELECT * FROM genes WHERE failure_code = ? AND category = ? ORDER BY q_value DESC`).all(g.failure_code, g.category);
193
+ if (genes.length <= 1)
194
+ continue;
195
+ const best = genes[0];
196
+ const allP = new Set();
197
+ let totalSC = 0;
198
+ let weightedMs = 0;
199
+ for (const gn of genes) {
200
+ totalSC += gn.success_count;
201
+ weightedMs += gn.avg_repair_ms * gn.success_count;
202
+ for (const p of JSON.parse(gn.platforms))
203
+ allP.add(p);
204
+ }
205
+ const maxQ = Math.max(...genes.map(gn => gn.q_value));
206
+ this.db.prepare(`UPDATE genes SET platforms = ?, success_count = ?, avg_repair_ms = ?, q_value = ?, last_used_at = datetime('now') WHERE id = ?`).run(JSON.stringify([...allP]), totalSC, weightedMs / Math.max(totalSC, 1), maxQ, best.id);
207
+ for (const gn of genes.slice(1)) {
208
+ this.db.prepare('DELETE FROM genes WHERE id = ?').run(gn.id);
209
+ merged++;
210
+ }
165
211
  }
166
- return {
167
- totalGenes: rows.length,
168
- avgQValue: rows.length > 0 ? Math.round((qSum / rows.length) * 100) / 100 : 0,
169
- platforms: [...allPlatforms],
170
- topStrategies: rows.slice(0, 10).map(r => ({
171
- strategy: r.strategy,
172
- count: r.success_count,
173
- })),
174
- };
175
- }
176
- close() {
177
- this.db.close();
212
+ if (merged > 0)
213
+ this.warmCache();
214
+ return { merged };
215
+ }
216
+ gc() {
217
+ const { merged } = this.combine();
218
+ const pruned = this.db.prepare(`DELETE FROM genes WHERE q_value < 0.1 AND consecutive_failures >= 3`).run().changes;
219
+ const archived = this.db.prepare(`SELECT COUNT(*) as cnt FROM genes WHERE last_used_at < datetime('now', '-180 days')`).get().cnt;
220
+ if (pruned > 0)
221
+ this.warmCache();
222
+ return { merged, pruned, archived };
223
+ }
224
+ // ── Idempotency (D5) ──
225
+ generateRepairId() { return `repair_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; }
226
+ checkRepairInProgress(code, category) {
227
+ const r = this.db.prepare(`SELECT repair_id, status, tx_hash FROM repair_log WHERE failure_code = ? AND category = ? AND status IN ('pending', 'completed') AND created_at > datetime('now', '-5 minutes') ORDER BY created_at DESC LIMIT 1`).get(code, category);
228
+ if (!r)
229
+ return { inProgress: false };
230
+ if (r.status === 'pending')
231
+ return { inProgress: true, repairId: r.repair_id };
232
+ if (r.status === 'completed' && r.tx_hash)
233
+ return { inProgress: true, repairId: r.repair_id, txHash: r.tx_hash };
234
+ return { inProgress: false };
235
+ }
236
+ logRepairStart(repairId, code, category, strategy) {
237
+ this.db.prepare(`INSERT OR IGNORE INTO repair_log (repair_id, failure_code, category, strategy, status) VALUES (?, ?, ?, ?, 'pending')`).run(repairId, code, category, strategy);
238
+ }
239
+ logRepairComplete(repairId, txHash) {
240
+ this.db.prepare(`UPDATE repair_log SET status = 'completed', tx_hash = ?, completed_at = datetime('now') WHERE repair_id = ?`).run(txHash ?? null, repairId);
241
+ }
242
+ logRepairFailed(repairId) {
243
+ this.db.prepare(`UPDATE repair_log SET status = 'failed', completed_at = datetime('now') WHERE repair_id = ?`).run(repairId);
178
244
  }
245
+ close() { this.db.close(); }
179
246
  }
180
247
  //# sourceMappingURL=gene-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gene-map.js","sourceRoot":"","sources":["../../src/engine/gene-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gene-map.js","sourceRoot":"","sources":["../../src/engine/gene-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GeneMap } from './gene-map.js';
2
+ export declare function registerShutdownHandler(geneMap: GeneMap): void;
3
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/engine/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB9D"}
@@ -0,0 +1,20 @@
1
+ let registered = false;
2
+ export function registerShutdownHandler(geneMap) {
3
+ if (registered)
4
+ return;
5
+ registered = true;
6
+ const shutdown = (signal) => {
7
+ console.error(`[helix] ${signal} received, flushing Gene Map...`);
8
+ try {
9
+ geneMap.close();
10
+ console.error('[helix] Gene Map flushed and closed.');
11
+ }
12
+ catch {
13
+ // already closed
14
+ }
15
+ process.exit(0);
16
+ };
17
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
18
+ process.on('SIGINT', () => shutdown('SIGINT'));
19
+ }
20
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/engine/lifecycle.ts"],"names":[],"mappings":"AAEA,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,IAAI,UAAU;QAAE,OAAO;IACvB,UAAU,GAAG,IAAI,CAAC;IAElB,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;QAClC,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,iCAAiC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -13,7 +13,10 @@ export declare class PcecEngine {
13
13
  };
14
14
  private readonly MAX_CYCLES;
15
15
  private cycleCount;
16
+ /** D6: Systematic failure tracker — detect repeated identical failures */
17
+ private failureTracker;
16
18
  constructor(geneMap: GeneMap, agentId?: string, options?: WrapOptions);
19
+ private checkSystematic;
17
20
  registerAdapter(adapter: PlatformAdapter): void;
18
21
  /** D16: Negative pattern guard — prevent false positives from success messages */
19
22
  private shouldSkipPerceive;
@@ -1 +1 @@
1
- {"version":3,"file":"pcec.d.ts","sourceRoot":"","sources":["../../src/engine/pcec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,OAAO,KAAK,EAEV,WAAW,EAEX,eAAe,EAEf,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AA6BpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,OAAO,CAAc;IACtB,KAAK;;;;MAAkD;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,MAAkB,EAAE,OAAO,CAAC,EAAE,WAAW;IAOhF,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI/C,kFAAkF;IAClF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,mBAAmB;YAWb,MAAM;IAyBd,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAgOpF,QAAQ;;;;;;;IAQR,UAAU,IAAI,OAAO;CAGtB"}
1
+ {"version":3,"file":"pcec.d.ts","sourceRoot":"","sources":["../../src/engine/pcec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,OAAO,KAAK,EAEV,WAAW,EAEX,eAAe,EAEf,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AA8BpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,OAAO,CAAc;IACtB,KAAK;;;;MAAkD;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,UAAU,CAAK;IACvB,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAkF;gBAE5F,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,MAAkB,EAAE,OAAO,CAAC,EAAE,WAAW;IAOhF,OAAO,CAAC,eAAe;IAiBvB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI/C,kFAAkF;IAClF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,mBAAmB;YAWb,MAAM;IAyBd,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA4PpF,QAAQ;;;;;;;IAQR,UAAU,IAAI,OAAO;CAGtB"}