@helix-agent/core 0.1.0 → 0.2.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.
- package/dist/engine/gene-map.d.ts +13 -1
- package/dist/engine/gene-map.d.ts.map +1 -1
- package/dist/engine/gene-map.js +94 -44
- package/dist/engine/gene-map.js.map +1 -1
- package/dist/engine/pcec.d.ts +9 -11
- package/dist/engine/pcec.d.ts.map +1 -1
- package/dist/engine/pcec.js +206 -155
- package/dist/engine/pcec.js.map +1 -1
- package/dist/engine/provider.d.ts +15 -0
- package/dist/engine/provider.d.ts.map +1 -0
- package/dist/engine/provider.js +112 -0
- package/dist/engine/provider.js.map +1 -0
- package/dist/engine/types.d.ts +36 -2
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/engine/types.js +4 -16
- package/dist/engine/types.js.map +1 -1
- package/dist/engine/wrap.d.ts.map +1 -1
- package/dist/engine/wrap.js +42 -16
- package/dist/engine/wrap.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/platforms/coinbase/index.d.ts +3 -0
- package/dist/platforms/coinbase/index.d.ts.map +1 -0
- package/dist/platforms/coinbase/index.js +3 -0
- package/dist/platforms/coinbase/index.js.map +1 -0
- package/dist/platforms/coinbase/perceive.d.ts +3 -0
- package/dist/platforms/coinbase/perceive.d.ts.map +1 -0
- package/dist/platforms/coinbase/perceive.js +71 -0
- package/dist/platforms/coinbase/perceive.js.map +1 -0
- package/dist/platforms/coinbase/strategies.d.ts +3 -0
- package/dist/platforms/coinbase/strategies.d.ts.map +1 -0
- package/dist/platforms/coinbase/strategies.js +45 -0
- package/dist/platforms/coinbase/strategies.js.map +1 -0
- package/dist/platforms/index.d.ts +1 -0
- package/dist/platforms/index.d.ts.map +1 -1
- package/dist/platforms/index.js +10 -22
- package/dist/platforms/index.js.map +1 -1
- package/package.json +13 -4
package/dist/engine/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export type ErrorCode = 'payment-required' | 'payment-insufficient' | 'payment-expired' | 'verification-failed' | 'method-unsupported' | 'malformed-credential' | 'invalid-challenge' | 'tx-reverted' | 'swap-reverted' | 'token-uninitialized' | 'tip-403' | 'policy-violation' | 'cascade-failure' | 'offramp-failed' | 'rate-limited' | 'server-error' | 'timeout' | 'unknown';
|
|
2
2
|
export type FailureCategory = 'balance' | 'session' | 'currency' | 'signature' | 'batch' | 'service' | 'dex' | 'compliance' | 'cascade' | 'offramp' | 'network' | 'policy' | 'auth' | 'unknown';
|
|
3
3
|
export type Severity = 'low' | 'medium' | 'high' | 'critical';
|
|
4
|
-
export type Platform = 'tempo' | 'privy' | 'stripe' | 'generic' | 'unknown';
|
|
4
|
+
export type Platform = 'tempo' | 'privy' | 'coinbase' | 'stripe' | 'generic' | 'unknown';
|
|
5
|
+
export type HelixMode = 'observe' | 'auto' | 'full';
|
|
5
6
|
export interface FailureClassification {
|
|
6
7
|
code: ErrorCode;
|
|
7
8
|
category: FailureCategory;
|
|
@@ -34,6 +35,10 @@ export interface GeneCapsule {
|
|
|
34
35
|
successCount: number;
|
|
35
36
|
avgRepairMs: number;
|
|
36
37
|
platforms: Platform[];
|
|
38
|
+
qValue: number;
|
|
39
|
+
consecutiveFailures: number;
|
|
40
|
+
lastSuccessAt?: number;
|
|
41
|
+
lastFailedAt?: number;
|
|
37
42
|
createdAt?: string;
|
|
38
43
|
lastUsedAt?: string;
|
|
39
44
|
}
|
|
@@ -46,13 +51,31 @@ export interface RepairResult {
|
|
|
46
51
|
immune: boolean;
|
|
47
52
|
totalMs: number;
|
|
48
53
|
revenueProtected: number;
|
|
54
|
+
mode: HelixMode;
|
|
55
|
+
explanation: string;
|
|
56
|
+
verified: boolean;
|
|
57
|
+
skippedStrategies?: string[];
|
|
58
|
+
costEstimate: number;
|
|
49
59
|
}
|
|
50
60
|
export interface PlatformAdapter {
|
|
51
61
|
name: Platform;
|
|
52
62
|
perceive(error: Error, context?: Record<string, unknown>): FailureClassification | null;
|
|
53
63
|
construct(failure: FailureClassification): RepairCandidate[];
|
|
54
64
|
}
|
|
55
|
-
export
|
|
65
|
+
export interface HelixProviderConfig {
|
|
66
|
+
rpcUrl?: string;
|
|
67
|
+
privateKey?: string;
|
|
68
|
+
privy?: {
|
|
69
|
+
appId: string;
|
|
70
|
+
appSecret: string;
|
|
71
|
+
walletId?: string;
|
|
72
|
+
};
|
|
73
|
+
coinbase?: {
|
|
74
|
+
apiKeyName: string;
|
|
75
|
+
apiKeyPrivateKey: string;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export type SseEventType = 'perceive' | 'construct' | 'evaluate' | 'commit' | 'verify' | 'gene' | 'immune' | 'error' | 'stats' | 'retry';
|
|
56
79
|
export interface SseEvent {
|
|
57
80
|
type: SseEventType;
|
|
58
81
|
agentId: string;
|
|
@@ -77,6 +100,17 @@ export interface WrapOptions {
|
|
|
77
100
|
geneMapPath?: string;
|
|
78
101
|
platforms?: string[];
|
|
79
102
|
config?: Partial<HelixConfig>;
|
|
103
|
+
mode?: HelixMode;
|
|
104
|
+
enabled?: boolean | (() => boolean);
|
|
105
|
+
maxRepairCostUsd?: number;
|
|
106
|
+
maxSlippage?: number;
|
|
107
|
+
approvedTokens?: string[];
|
|
108
|
+
allowCategories?: string[];
|
|
109
|
+
blockStrategies?: string[];
|
|
110
|
+
provider?: HelixProviderConfig;
|
|
111
|
+
onRepair?: (result: RepairResult) => void;
|
|
112
|
+
onFailure?: (result: RepairResult) => void;
|
|
113
|
+
onHelixError?: (error: Error) => void;
|
|
80
114
|
}
|
|
81
115
|
export declare const REVENUE_AT_RISK: Record<string, number>;
|
|
82
116
|
export declare const DEFAULT_CONFIG: HelixConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engine/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engine/types.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/types.js
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
// ── Error Codes ──────────────────────────────────────────────────
|
|
2
|
-
// Platform-agnostic error codes. Each platform's perceive() maps
|
|
3
|
-
// platform-specific errors to these universal codes.
|
|
4
2
|
// ── Revenue estimates per category ──────────────────────────────
|
|
5
3
|
export const REVENUE_AT_RISK = {
|
|
6
|
-
balance: 150,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
batch: 500,
|
|
11
|
-
service: 300,
|
|
12
|
-
dex: 175,
|
|
13
|
-
compliance: 250,
|
|
14
|
-
cascade: 1000,
|
|
15
|
-
offramp: 400,
|
|
16
|
-
network: 100,
|
|
17
|
-
policy: 200,
|
|
18
|
-
auth: 50,
|
|
19
|
-
unknown: 50,
|
|
4
|
+
balance: 150, session: 50, currency: 200, signature: 100,
|
|
5
|
+
batch: 500, service: 300, dex: 175, compliance: 250,
|
|
6
|
+
cascade: 1000, offramp: 400, network: 100, policy: 200,
|
|
7
|
+
auth: 50, unknown: 50,
|
|
20
8
|
};
|
|
21
9
|
// ── Default Config ──────────────────────────────────────────────
|
|
22
10
|
export const DEFAULT_CONFIG = {
|
package/dist/engine/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/engine/types.ts"],"names":[],"mappings":"AAAA,oEAAoE;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/engine/types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAoLpE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;IACxD,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;IACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;IACtD,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;CACtB,CAAC;AAEF,mEAAmE;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,4CAA4C;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IACpC,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,kBAAkB;CAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../src/engine/wrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAC;AAO5D,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAW9D;AAmBD,wBAAgB,IAAI,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACnD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,EACxC,OAAO,CAAC,EAAE,WAAW,GACpB,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../src/engine/wrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAC;AAO5D,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAW9D;AAmBD,wBAAgB,IAAI,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACnD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,EACxC,OAAO,CAAC,EAAE,WAAW,GACpB,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAoEtC;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAI/B"}
|
package/dist/engine/wrap.js
CHANGED
|
@@ -7,7 +7,7 @@ let _defaultEngine = null;
|
|
|
7
7
|
let _defaultGeneMap = null;
|
|
8
8
|
export function createEngine(options) {
|
|
9
9
|
const geneMap = new GeneMap(options?.geneMapPath ?? options?.config?.geneMapPath ?? DEFAULT_CONFIG.geneMapPath);
|
|
10
|
-
const engine = new PcecEngine(geneMap, options?.agentId ?? options?.config?.projectName ?? 'default');
|
|
10
|
+
const engine = new PcecEngine(geneMap, options?.agentId ?? options?.config?.projectName ?? 'default', options);
|
|
11
11
|
for (const adapter of defaultAdapters) {
|
|
12
12
|
if (!options?.platforms || options.platforms.includes(adapter.name) || adapter.name === 'generic') {
|
|
13
13
|
engine.registerAdapter(adapter);
|
|
@@ -18,7 +18,7 @@ export function createEngine(options) {
|
|
|
18
18
|
function getDefaultEngine(options) {
|
|
19
19
|
if (!_defaultEngine) {
|
|
20
20
|
const geneMap = new GeneMap(options?.geneMapPath ?? options?.config?.geneMapPath ?? DEFAULT_CONFIG.geneMapPath);
|
|
21
|
-
const engine = new PcecEngine(geneMap, options?.agentId ?? 'default');
|
|
21
|
+
const engine = new PcecEngine(geneMap, options?.agentId ?? 'default', options);
|
|
22
22
|
for (const adapter of defaultAdapters) {
|
|
23
23
|
if (!options?.platforms || options.platforms.includes(adapter.name) || adapter.name === 'generic') {
|
|
24
24
|
engine.registerAdapter(adapter);
|
|
@@ -34,32 +34,58 @@ export function wrap(fn, options) {
|
|
|
34
34
|
const verbose = options?.verbose ?? options?.config?.verbose ?? DEFAULT_CONFIG.verbose;
|
|
35
35
|
const agentId = options?.agentId ?? 'wrapped';
|
|
36
36
|
return async (...args) => {
|
|
37
|
+
// ── KILL SWITCH ──
|
|
38
|
+
const enabled = typeof options?.enabled === 'function'
|
|
39
|
+
? options.enabled()
|
|
40
|
+
: (options?.enabled ?? true);
|
|
41
|
+
if (!enabled) {
|
|
42
|
+
return await fn(...args);
|
|
43
|
+
}
|
|
37
44
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
38
45
|
try {
|
|
39
46
|
return await fn(...args);
|
|
40
47
|
}
|
|
41
48
|
catch (error) {
|
|
42
49
|
if (attempt === maxRetries) {
|
|
43
|
-
if (verbose)
|
|
50
|
+
if (verbose)
|
|
44
51
|
console.error(`\x1b[31m[helix] All ${maxRetries} repair attempts exhausted\x1b[0m`);
|
|
45
|
-
}
|
|
46
52
|
throw error;
|
|
47
53
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
console.log(`\x1b[33m[helix] Payment failed (attempt ${attempt + 1}/${maxRetries}), engaging PCEC...\x1b[0m`);
|
|
51
|
-
}
|
|
52
|
-
bus.emit('retry', agentId, { attempt: attempt + 1, maxRetries });
|
|
53
|
-
const result = await engine.repair(error);
|
|
54
|
-
if (!result.success) {
|
|
54
|
+
try {
|
|
55
|
+
const { engine } = getDefaultEngine(options);
|
|
55
56
|
if (verbose) {
|
|
56
|
-
console.
|
|
57
|
+
console.log(`\x1b[33m[helix] Payment failed (attempt ${attempt + 1}/${maxRetries}), engaging PCEC...\x1b[0m`);
|
|
58
|
+
}
|
|
59
|
+
bus.emit('retry', agentId, { attempt: attempt + 1, maxRetries });
|
|
60
|
+
const result = await engine.repair(error);
|
|
61
|
+
if (result.success) {
|
|
62
|
+
options?.onRepair?.(result);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
options?.onFailure?.(result);
|
|
66
|
+
}
|
|
67
|
+
if (result.mode === 'observe') {
|
|
68
|
+
// In observe mode, throw original error with recommendation attached
|
|
69
|
+
const enriched = error;
|
|
70
|
+
enriched.helixRecommendation = result;
|
|
71
|
+
throw enriched;
|
|
72
|
+
}
|
|
73
|
+
if (!result.success) {
|
|
74
|
+
if (verbose)
|
|
75
|
+
console.error(`\x1b[31m[helix] PCEC repair failed, retrying...\x1b[0m`);
|
|
76
|
+
}
|
|
77
|
+
else if (verbose) {
|
|
78
|
+
const tag = result.immune ? '\x1b[36m⚡ IMMUNE' : '\x1b[32m✓ REPAIRED';
|
|
79
|
+
console.log(`${tag}\x1b[0m via ${result.winner?.strategy} in ${result.totalMs}ms ($${result.revenueProtected} protected)`);
|
|
57
80
|
}
|
|
58
81
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
82
|
+
catch (helixError) {
|
|
83
|
+
if (helixError.helixRecommendation) {
|
|
84
|
+
throw helixError; // re-throw observe mode enriched error
|
|
85
|
+
}
|
|
86
|
+
// Helix itself errored — graceful fallback
|
|
87
|
+
options?.onHelixError?.(helixError);
|
|
88
|
+
throw error; // throw ORIGINAL error
|
|
63
89
|
}
|
|
64
90
|
}
|
|
65
91
|
}
|
package/dist/engine/wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../src/engine/wrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,IAAI,cAAc,GAAsB,IAAI,CAAC;AAC7C,IAAI,eAAe,GAAmB,IAAI,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,OAAqB;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;IAChH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../src/engine/wrap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { wrap, createEngine, shutdown } from './engine/wrap.js';
|
|
2
|
-
export type { WrapOptions } from './engine/types.js';
|
|
3
|
-
export type { FailureClassification, RepairCandidate, GeneCapsule, RepairResult, PlatformAdapter, ErrorCode, FailureCategory, Platform, Severity, SseEvent, SseEventType, HelixConfig, } from './engine/types.js';
|
|
2
|
+
export type { FailureClassification, RepairCandidate, GeneCapsule, RepairResult, PlatformAdapter, ErrorCode, FailureCategory, Platform, Severity, SseEvent, SseEventType, HelixConfig, WrapOptions, HelixMode, HelixProviderConfig, } from './engine/types.js';
|
|
4
3
|
export { REVENUE_AT_RISK, DEFAULT_CONFIG } from './engine/types.js';
|
|
5
|
-
export { tempoAdapter, privyAdapter, genericAdapter, stripeAdapter, defaultAdapters } from './platforms/index.js';
|
|
4
|
+
export { tempoAdapter, privyAdapter, coinbaseAdapter, genericAdapter, stripeAdapter, defaultAdapters } from './platforms/index.js';
|
|
6
5
|
export { PcecEngine } from './engine/pcec.js';
|
|
7
6
|
export { GeneMap } from './engine/gene-map.js';
|
|
8
7
|
export { EventBus, bus } from './engine/bus.js';
|
|
9
8
|
export { evaluate } from './engine/evaluate.js';
|
|
9
|
+
export { HelixProvider } from './engine/provider.js';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGhE,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGnI,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
export { wrap, createEngine, shutdown } from './engine/wrap.js';
|
|
3
3
|
export { REVENUE_AT_RISK, DEFAULT_CONFIG } from './engine/types.js';
|
|
4
4
|
// ── Platform adapters (for advanced users) ──
|
|
5
|
-
export { tempoAdapter, privyAdapter, genericAdapter, stripeAdapter, defaultAdapters } from './platforms/index.js';
|
|
5
|
+
export { tempoAdapter, privyAdapter, coinbaseAdapter, genericAdapter, stripeAdapter, defaultAdapters } from './platforms/index.js';
|
|
6
6
|
// ── Engine internals (for advanced users) ──
|
|
7
7
|
export { PcecEngine } from './engine/pcec.js';
|
|
8
8
|
export { GeneMap } from './engine/gene-map.js';
|
|
9
9
|
export { EventBus, bus } from './engine/bus.js';
|
|
10
10
|
export { evaluate } from './engine/evaluate.js';
|
|
11
|
+
export { HelixProvider } from './engine/provider.js';
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqBhE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,+CAA+C;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEnI,8CAA8C;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platforms/coinbase/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platforms/coinbase/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perceive.d.ts","sourceRoot":"","sources":["../../../src/platforms/coinbase/perceive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAY,MAAM,uBAAuB,CAAC;AAE7E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB,GAAG,IAAI,CAwG/G"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export function coinbasePerceive(error, _context) {
|
|
2
|
+
const msg = error.message;
|
|
3
|
+
const platform = 'coinbase';
|
|
4
|
+
// ── CDP API / Server Wallet Errors ──
|
|
5
|
+
if (msg.includes('rate_limit_exceeded') || (msg.includes('429') && msg.includes('cdp')))
|
|
6
|
+
return { code: 'rate-limited', category: 'auth', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
7
|
+
if (msg.includes('faucet_limit_exceeded') || (msg.includes('faucet') && msg.includes('limit')))
|
|
8
|
+
return { code: 'rate-limited', category: 'auth', severity: 'low', platform, details: msg, timestamp: Date.now() };
|
|
9
|
+
if (msg.includes('transfer_quote_expired') || (msg.includes('quote') && msg.includes('expired')))
|
|
10
|
+
return { code: 'invalid-challenge', category: 'session', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
11
|
+
if (msg.includes('transfer_amount_out_of_bounds') || (msg.includes('amount') && msg.includes('out of bounds')))
|
|
12
|
+
return { code: 'payment-insufficient', category: 'balance', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
13
|
+
if (msg.includes('idempotency_error') || (msg.includes('422') && msg.includes('idempotency')))
|
|
14
|
+
return { code: 'malformed-credential', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
15
|
+
if (msg.includes('malformed_transaction') || msg.includes('Malformed unsigned transaction'))
|
|
16
|
+
return { code: 'malformed-credential', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
17
|
+
if (msg.includes('internal_server_error') || (msg.includes('500') && msg.includes('cdp')))
|
|
18
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
19
|
+
if (msg.includes('bad_gateway') || (msg.includes('502') && !msg.includes('x402')))
|
|
20
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
21
|
+
if (msg.includes('service_unavailable') || (msg.includes('503') && !msg.includes('x402') && !msg.includes('-32503')))
|
|
22
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
23
|
+
if (msg.includes('network_timeout') || (msg.includes('timed_out') && !msg.includes('gateway')))
|
|
24
|
+
return { code: 'timeout', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
25
|
+
if (msg.includes('504') || (msg.includes('timed_out') && msg.includes('gateway')))
|
|
26
|
+
return { code: 'timeout', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
27
|
+
if (msg.includes('network_connection_failed'))
|
|
28
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
29
|
+
// ── Paymaster / Bundler / ERC-4337 Errors ──
|
|
30
|
+
if (msg.includes('GAS_ESTIMATION_ERROR') || msg.includes('-32004') || msg.includes('Gas estimation failed'))
|
|
31
|
+
return { code: 'payment-insufficient', category: 'balance', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
32
|
+
if (msg.includes('AA25') || msg.includes('Invalid account nonce'))
|
|
33
|
+
return { code: 'verification-failed', category: 'signature', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
34
|
+
if (msg.includes('EXECUTION_REVERTED') || msg.includes('-32521') || msg.includes('execution reverted'))
|
|
35
|
+
return { code: 'tx-reverted', category: 'batch', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
36
|
+
if (msg.includes('AA21') || msg.includes("didn't pay prefund"))
|
|
37
|
+
return { code: 'payment-insufficient', category: 'balance', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
38
|
+
if (msg.includes('AA13') || msg.includes('initCode failed'))
|
|
39
|
+
return { code: 'payment-insufficient', category: 'balance', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
40
|
+
if (msg.includes('max per user op spend limit'))
|
|
41
|
+
return { code: 'policy-violation', category: 'policy', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
42
|
+
if (msg.includes('max monthly org spend limit'))
|
|
43
|
+
return { code: 'policy-violation', category: 'policy', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
44
|
+
if (msg.includes('max global usd spend limit'))
|
|
45
|
+
return { code: 'policy-violation', category: 'policy', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
46
|
+
if (msg.includes('maximum per address transaction count'))
|
|
47
|
+
return { code: 'policy-violation', category: 'policy', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
48
|
+
if (msg.includes('maximum per address sponsorship'))
|
|
49
|
+
return { code: 'policy-violation', category: 'policy', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
50
|
+
if (msg.includes('INVALID_FIELDS') || msg.includes('-32602') || msg.includes('INVALID_ARGUMENT'))
|
|
51
|
+
return { code: 'malformed-credential', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
52
|
+
if (msg.includes('INTERNAL_ERROR') && msg.includes('paymaster'))
|
|
53
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
54
|
+
if (msg.includes('UNAVAILABLE_ERROR') || msg.includes('-32003'))
|
|
55
|
+
return { code: 'server-error', category: 'service', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
56
|
+
if (msg.includes('SHORT_DEADLINE') || msg.includes('-32503') || msg.includes('deadline too short'))
|
|
57
|
+
return { code: 'timeout', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
58
|
+
// ── x402 Payment Protocol Errors ──
|
|
59
|
+
if (msg.includes('insufficient') && (msg.includes('USDC') || msg.includes('token balance')) && msg.includes('402'))
|
|
60
|
+
return { code: 'payment-insufficient', category: 'balance', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
61
|
+
if (msg.includes('wrong network') || (msg.includes('different network') && msg.includes('payment')))
|
|
62
|
+
return { code: 'token-uninitialized', category: 'network', severity: 'high', platform, details: msg, timestamp: Date.now() };
|
|
63
|
+
if (msg.includes('scheme') && msg.includes('not') && (msg.includes('registered') || msg.includes('found')))
|
|
64
|
+
return { code: 'malformed-credential', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
65
|
+
if (msg.includes('x402Version') || (msg.includes('payload') && msg.includes('version') && msg.includes('mismatch')))
|
|
66
|
+
return { code: 'malformed-credential', category: 'service', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
67
|
+
if (msg.includes('RPC') && (msg.includes('rate') || msg.includes('limit') || msg.includes('unavailable')))
|
|
68
|
+
return { code: 'rate-limited', category: 'auth', severity: 'medium', platform, details: msg, timestamp: Date.now() };
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=perceive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perceive.js","sourceRoot":"","sources":["../../../src/platforms/coinbase/perceive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../../src/platforms/coinbase/strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,EAAE,CAkDnF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function coinbaseConstruct(failure) {
|
|
2
|
+
if (failure.category === 'policy') {
|
|
3
|
+
return [
|
|
4
|
+
{ id: 'cb_split_userop', strategy: 'split_transaction', description: 'Split userOperation into smaller ops under spend limit', estimatedCostUsd: 0.02, estimatedSpeedMs: 500, requirements: [], score: 0, successProbability: 0.85, platform: 'coinbase' },
|
|
5
|
+
{ id: 'cb_self_pay', strategy: 'self_pay_gas', description: 'Bypass Paymaster, pay gas directly from account', estimatedCostUsd: 0.05, estimatedSpeedMs: 300, requirements: ['privateKey'], score: 0, successProbability: 0.90, platform: 'coinbase' },
|
|
6
|
+
{ id: 'cb_switch_wallet', strategy: 'switch_endpoint', description: 'Switch to address with remaining quota', estimatedCostUsd: 0, estimatedSpeedMs: 100, requirements: ['alt_wallet'], score: 0, successProbability: 0.80, platform: 'coinbase' },
|
|
7
|
+
];
|
|
8
|
+
}
|
|
9
|
+
if (failure.platform === 'coinbase' && failure.category === 'signature') {
|
|
10
|
+
return [
|
|
11
|
+
{ id: 'cb_refresh_nonce', strategy: 'refresh_nonce', description: 'Fetch nonce from EntryPoint for smart account', estimatedCostUsd: 0, estimatedSpeedMs: 200, requirements: ['rpcUrl'], score: 0, successProbability: 0.93, platform: 'coinbase' },
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
if (failure.platform === 'coinbase' && failure.category === 'balance') {
|
|
15
|
+
return [
|
|
16
|
+
{ id: 'cb_increase_gas', strategy: 'fix_params', description: 'Increase verificationGasLimit and preVerificationGas', estimatedCostUsd: 0, estimatedSpeedMs: 100, requirements: [], score: 0, successProbability: 0.85, platform: 'coinbase' },
|
|
17
|
+
{ id: 'cb_fund_account', strategy: 'topup_from_reserve', description: 'Fund smart account with ETH for prefund', estimatedCostUsd: 0.10, estimatedSpeedMs: 2000, requirements: ['privateKey'], score: 0, successProbability: 0.80, platform: 'coinbase' },
|
|
18
|
+
{ id: 'cb_reduce', strategy: 'reduce_request', description: 'Reduce transaction value to fit within gas budget', estimatedCostUsd: 0, estimatedSpeedMs: 50, requirements: [], score: 0, successProbability: 0.90, platform: 'coinbase' },
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
if (failure.platform === 'coinbase' && failure.category === 'network') {
|
|
22
|
+
return [
|
|
23
|
+
{ id: 'cb_switch_net', strategy: 'switch_network', description: 'Switch to correct network for x402 payment', estimatedCostUsd: 0, estimatedSpeedMs: 200, requirements: ['rpcUrl'], score: 0, successProbability: 0.92, platform: 'coinbase' },
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
if (failure.platform === 'coinbase' && failure.category === 'session') {
|
|
27
|
+
return [
|
|
28
|
+
{ id: 'cb_refresh_quote', strategy: 'retry', description: 'Request fresh transfer quote and retry', estimatedCostUsd: 0, estimatedSpeedMs: 300, requirements: [], score: 0, successProbability: 0.88, platform: 'coinbase' },
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
if (failure.platform === 'coinbase' && failure.code === 'malformed-credential') {
|
|
32
|
+
return [
|
|
33
|
+
{ id: 'cb_fix_params', strategy: 'fix_params', description: 'Fix transaction encoding and populate missing fields', estimatedCostUsd: 0, estimatedSpeedMs: 50, requirements: [], score: 0, successProbability: 0.85, platform: 'coinbase' },
|
|
34
|
+
{ id: 'cb_new_idempotency', strategy: 'retry', description: 'Generate new idempotency key and retry', estimatedCostUsd: 0, estimatedSpeedMs: 100, requirements: [], score: 0, successProbability: 0.90, platform: 'coinbase' },
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
if (failure.code === 'timeout' && failure.platform === 'coinbase') {
|
|
38
|
+
return [
|
|
39
|
+
{ id: 'cb_extend_deadline', strategy: 'extend_deadline', description: 'Extend userOperation deadline by 300s', estimatedCostUsd: 0, estimatedSpeedMs: 50, requirements: [], score: 0, successProbability: 0.90, platform: 'coinbase' },
|
|
40
|
+
{ id: 'cb_backoff', strategy: 'backoff_retry', description: 'Wait and retry with extended timeout', estimatedCostUsd: 0, estimatedSpeedMs: 2000, requirements: [], score: 0, successProbability: 0.80, platform: 'coinbase' },
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../../src/platforms/coinbase/strategies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PlatformAdapter } from '../engine/types.js';
|
|
2
2
|
export declare const tempoAdapter: PlatformAdapter;
|
|
3
3
|
export declare const privyAdapter: PlatformAdapter;
|
|
4
|
+
export declare const coinbaseAdapter: PlatformAdapter;
|
|
4
5
|
export declare const genericAdapter: PlatformAdapter;
|
|
5
6
|
export declare const stripeAdapter: PlatformAdapter;
|
|
6
7
|
export declare const defaultAdapters: PlatformAdapter[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,eAAO,MAAM,YAAY,EAAE,eAAuF,CAAC;AACnH,eAAO,MAAM,YAAY,EAAE,eAAuF,CAAC;AACnH,eAAO,MAAM,eAAe,EAAE,eAAgG,CAAC;AAC/H,eAAO,MAAM,cAAc,EAAE,eAA6F,CAAC;AAC3H,eAAO,MAAM,aAAa,EAAE,eAA0F,CAAC;AAGvH,eAAO,MAAM,eAAe,EAAE,eAAe,EAM5C,CAAC"}
|
package/dist/platforms/index.js
CHANGED
|
@@ -2,35 +2,23 @@ import { tempoPerceive } from './tempo/perceive.js';
|
|
|
2
2
|
import { tempoConstruct } from './tempo/strategies.js';
|
|
3
3
|
import { privyPerceive } from './privy/perceive.js';
|
|
4
4
|
import { privyConstruct } from './privy/strategies.js';
|
|
5
|
+
import { coinbasePerceive } from './coinbase/perceive.js';
|
|
6
|
+
import { coinbaseConstruct } from './coinbase/strategies.js';
|
|
5
7
|
import { genericPerceive } from './generic/perceive.js';
|
|
6
8
|
import { genericConstruct } from './generic/strategies.js';
|
|
7
9
|
import { stripePerceive } from './stripe/perceive.js';
|
|
8
10
|
import { stripeConstruct } from './stripe/strategies.js';
|
|
9
|
-
export const tempoAdapter = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
name: 'privy',
|
|
16
|
-
perceive: privyPerceive,
|
|
17
|
-
construct: privyConstruct,
|
|
18
|
-
};
|
|
19
|
-
export const genericAdapter = {
|
|
20
|
-
name: 'generic',
|
|
21
|
-
perceive: genericPerceive,
|
|
22
|
-
construct: genericConstruct,
|
|
23
|
-
};
|
|
24
|
-
export const stripeAdapter = {
|
|
25
|
-
name: 'stripe',
|
|
26
|
-
perceive: stripePerceive,
|
|
27
|
-
construct: stripeConstruct,
|
|
28
|
-
};
|
|
29
|
-
// Default adapter chain: Tempo → Privy → Stripe → Generic (fallback)
|
|
11
|
+
export const tempoAdapter = { name: 'tempo', perceive: tempoPerceive, construct: tempoConstruct };
|
|
12
|
+
export const privyAdapter = { name: 'privy', perceive: privyPerceive, construct: privyConstruct };
|
|
13
|
+
export const coinbaseAdapter = { name: 'coinbase', perceive: coinbasePerceive, construct: coinbaseConstruct };
|
|
14
|
+
export const genericAdapter = { name: 'generic', perceive: genericPerceive, construct: genericConstruct };
|
|
15
|
+
export const stripeAdapter = { name: 'stripe', perceive: stripePerceive, construct: stripeConstruct };
|
|
16
|
+
// Default adapter chain: Tempo → Privy → Coinbase → Stripe → Generic (fallback)
|
|
30
17
|
export const defaultAdapters = [
|
|
31
18
|
tempoAdapter,
|
|
32
19
|
privyAdapter,
|
|
20
|
+
coinbaseAdapter,
|
|
33
21
|
stripeAdapter,
|
|
34
|
-
genericAdapter,
|
|
22
|
+
genericAdapter,
|
|
35
23
|
];
|
|
36
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAoB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platforms/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACnH,MAAM,CAAC,MAAM,YAAY,GAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACnH,MAAM,CAAC,MAAM,eAAe,GAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAC/H,MAAM,CAAC,MAAM,cAAc,GAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC3H,MAAM,CAAC,MAAM,aAAa,GAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAEvH,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,aAAa;IACb,cAAc;CACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helix-agent/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Self-healing infrastructure for AI agent payments. Auto-repairs payment failures across Tempo, Privy, Stripe, and any HTTP service.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,9 +24,18 @@
|
|
|
24
24
|
"prepublishOnly": "npm run build && npm run test"
|
|
25
25
|
},
|
|
26
26
|
"keywords": [
|
|
27
|
-
"agent",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
27
|
+
"agent",
|
|
28
|
+
"payments",
|
|
29
|
+
"self-healing",
|
|
30
|
+
"pcec",
|
|
31
|
+
"gene-map",
|
|
32
|
+
"mpp",
|
|
33
|
+
"tempo",
|
|
34
|
+
"privy",
|
|
35
|
+
"stripe",
|
|
36
|
+
"error-recovery",
|
|
37
|
+
"ai-agent",
|
|
38
|
+
"machine-payments"
|
|
30
39
|
],
|
|
31
40
|
"author": "Helix Contributors",
|
|
32
41
|
"license": "MIT",
|