@grimoirelabs/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.
- package/dist/builders/expressions.d.ts +33 -0
- package/dist/builders/expressions.d.ts.map +1 -0
- package/dist/builders/expressions.js +57 -0
- package/dist/builders/expressions.js.map +1 -0
- package/dist/builders/index.d.ts +44 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/index.js +32 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/spell-builder.d.ts +124 -0
- package/dist/builders/spell-builder.d.ts.map +1 -0
- package/dist/builders/spell-builder.js +299 -0
- package/dist/builders/spell-builder.js.map +1 -0
- package/dist/builders/step-builder.d.ts +212 -0
- package/dist/builders/step-builder.d.ts.map +1 -0
- package/dist/builders/step-builder.js +499 -0
- package/dist/builders/step-builder.js.map +1 -0
- package/dist/compiler/expression-parser.d.ts +14 -0
- package/dist/compiler/expression-parser.d.ts.map +1 -0
- package/dist/compiler/expression-parser.js +460 -0
- package/dist/compiler/expression-parser.js.map +1 -0
- package/dist/compiler/grimoire/ast.d.ts +450 -0
- package/dist/compiler/grimoire/ast.d.ts.map +1 -0
- package/dist/compiler/grimoire/ast.js +19 -0
- package/dist/compiler/grimoire/ast.js.map +1 -0
- package/dist/compiler/grimoire/errors.d.ts +65 -0
- package/dist/compiler/grimoire/errors.d.ts.map +1 -0
- package/dist/compiler/grimoire/errors.js +86 -0
- package/dist/compiler/grimoire/errors.js.map +1 -0
- package/dist/compiler/grimoire/index.d.ts +24 -0
- package/dist/compiler/grimoire/index.d.ts.map +1 -0
- package/dist/compiler/grimoire/index.js +63 -0
- package/dist/compiler/grimoire/index.js.map +1 -0
- package/dist/compiler/grimoire/parser.d.ts +135 -0
- package/dist/compiler/grimoire/parser.d.ts.map +1 -0
- package/dist/compiler/grimoire/parser.js +2148 -0
- package/dist/compiler/grimoire/parser.js.map +1 -0
- package/dist/compiler/grimoire/tokenizer.d.ts +59 -0
- package/dist/compiler/grimoire/tokenizer.d.ts.map +1 -0
- package/dist/compiler/grimoire/tokenizer.js +509 -0
- package/dist/compiler/grimoire/tokenizer.js.map +1 -0
- package/dist/compiler/grimoire/transformer.d.ts +71 -0
- package/dist/compiler/grimoire/transformer.d.ts.map +1 -0
- package/dist/compiler/grimoire/transformer.js +1011 -0
- package/dist/compiler/grimoire/transformer.js.map +1 -0
- package/dist/compiler/index.d.ts +45 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +97 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/ir-generator.d.ts +16 -0
- package/dist/compiler/ir-generator.d.ts.map +1 -0
- package/dist/compiler/ir-generator.js +997 -0
- package/dist/compiler/ir-generator.js.map +1 -0
- package/dist/compiler/validator.d.ts +15 -0
- package/dist/compiler/validator.d.ts.map +1 -0
- package/dist/compiler/validator.js +401 -0
- package/dist/compiler/validator.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/circuit-breaker.d.ts +59 -0
- package/dist/runtime/circuit-breaker.d.ts.map +1 -0
- package/dist/runtime/circuit-breaker.js +155 -0
- package/dist/runtime/circuit-breaker.js.map +1 -0
- package/dist/runtime/context.d.ts +92 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +219 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/error-classifier.d.ts +16 -0
- package/dist/runtime/error-classifier.d.ts.map +1 -0
- package/dist/runtime/error-classifier.js +38 -0
- package/dist/runtime/error-classifier.js.map +1 -0
- package/dist/runtime/expression-evaluator.d.ts +36 -0
- package/dist/runtime/expression-evaluator.d.ts.map +1 -0
- package/dist/runtime/expression-evaluator.js +391 -0
- package/dist/runtime/expression-evaluator.js.map +1 -0
- package/dist/runtime/index.d.ts +12 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/interpreter.d.ts +59 -0
- package/dist/runtime/interpreter.d.ts.map +1 -0
- package/dist/runtime/interpreter.js +414 -0
- package/dist/runtime/interpreter.js.map +1 -0
- package/dist/runtime/skills/registry.d.ts +11 -0
- package/dist/runtime/skills/registry.d.ts.map +1 -0
- package/dist/runtime/skills/registry.js +73 -0
- package/dist/runtime/skills/registry.js.map +1 -0
- package/dist/runtime/sqlite-state-store.d.ts +28 -0
- package/dist/runtime/sqlite-state-store.d.ts.map +1 -0
- package/dist/runtime/sqlite-state-store.js +180 -0
- package/dist/runtime/sqlite-state-store.js.map +1 -0
- package/dist/runtime/state-store.d.ts +52 -0
- package/dist/runtime/state-store.d.ts.map +1 -0
- package/dist/runtime/state-store.js +32 -0
- package/dist/runtime/state-store.js.map +1 -0
- package/dist/runtime/steps/action.d.ts +17 -0
- package/dist/runtime/steps/action.d.ts.map +1 -0
- package/dist/runtime/steps/action.js +430 -0
- package/dist/runtime/steps/action.js.map +1 -0
- package/dist/runtime/steps/advisory.d.ts +28 -0
- package/dist/runtime/steps/advisory.d.ts.map +1 -0
- package/dist/runtime/steps/advisory.js +209 -0
- package/dist/runtime/steps/advisory.js.map +1 -0
- package/dist/runtime/steps/compute.d.ts +9 -0
- package/dist/runtime/steps/compute.d.ts.map +1 -0
- package/dist/runtime/steps/compute.js +74 -0
- package/dist/runtime/steps/compute.js.map +1 -0
- package/dist/runtime/steps/conditional.d.ts +14 -0
- package/dist/runtime/steps/conditional.d.ts.map +1 -0
- package/dist/runtime/steps/conditional.js +58 -0
- package/dist/runtime/steps/conditional.js.map +1 -0
- package/dist/runtime/steps/emit.d.ts +9 -0
- package/dist/runtime/steps/emit.d.ts.map +1 -0
- package/dist/runtime/steps/emit.js +70 -0
- package/dist/runtime/steps/emit.js.map +1 -0
- package/dist/runtime/steps/halt.d.ts +9 -0
- package/dist/runtime/steps/halt.d.ts.map +1 -0
- package/dist/runtime/steps/halt.js +19 -0
- package/dist/runtime/steps/halt.js.map +1 -0
- package/dist/runtime/steps/loop.d.ts +14 -0
- package/dist/runtime/steps/loop.d.ts.map +1 -0
- package/dist/runtime/steps/loop.js +109 -0
- package/dist/runtime/steps/loop.js.map +1 -0
- package/dist/runtime/steps/parallel.d.ts +9 -0
- package/dist/runtime/steps/parallel.d.ts.map +1 -0
- package/dist/runtime/steps/parallel.js +87 -0
- package/dist/runtime/steps/parallel.js.map +1 -0
- package/dist/runtime/steps/pipeline.d.ts +9 -0
- package/dist/runtime/steps/pipeline.d.ts.map +1 -0
- package/dist/runtime/steps/pipeline.js +125 -0
- package/dist/runtime/steps/pipeline.js.map +1 -0
- package/dist/runtime/steps/try.d.ts +13 -0
- package/dist/runtime/steps/try.d.ts.map +1 -0
- package/dist/runtime/steps/try.js +222 -0
- package/dist/runtime/steps/try.js.map +1 -0
- package/dist/runtime/steps/wait.d.ts +9 -0
- package/dist/runtime/steps/wait.d.ts.map +1 -0
- package/dist/runtime/steps/wait.js +38 -0
- package/dist/runtime/steps/wait.js.map +1 -0
- package/dist/types/actions.d.ts +162 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +5 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/execution.d.ts +276 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +5 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/expressions.d.ts +100 -0
- package/dist/types/expressions.d.ts.map +1 -0
- package/dist/types/expressions.js +48 -0
- package/dist/types/expressions.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/ir.d.ts +187 -0
- package/dist/types/ir.d.ts.map +1 -0
- package/dist/types/ir.js +5 -0
- package/dist/types/ir.js.map +1 -0
- package/dist/types/policy.d.ts +123 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +5 -0
- package/dist/types/policy.js.map +1 -0
- package/dist/types/primitives.d.ts +76 -0
- package/dist/types/primitives.d.ts.map +1 -0
- package/dist/types/primitives.js +10 -0
- package/dist/types/primitives.js.map +1 -0
- package/dist/types/steps.d.ts +226 -0
- package/dist/types/steps.d.ts.map +1 -0
- package/dist/types/steps.js +5 -0
- package/dist/types/steps.js.map +1 -0
- package/dist/venues/index.d.ts +6 -0
- package/dist/venues/index.d.ts.map +1 -0
- package/dist/venues/index.js +26 -0
- package/dist/venues/index.js.map +1 -0
- package/dist/venues/types.d.ts +40 -0
- package/dist/venues/types.d.ts.map +1 -0
- package/dist/venues/types.js +5 -0
- package/dist/venues/types.js.map +1 -0
- package/dist/wallet/executor.d.ts +109 -0
- package/dist/wallet/executor.d.ts.map +1 -0
- package/dist/wallet/executor.js +354 -0
- package/dist/wallet/executor.js.map +1 -0
- package/dist/wallet/index.d.ts +14 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +13 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/keystore.d.ts +44 -0
- package/dist/wallet/keystore.d.ts.map +1 -0
- package/dist/wallet/keystore.js +296 -0
- package/dist/wallet/keystore.js.map +1 -0
- package/dist/wallet/provider.d.ts +111 -0
- package/dist/wallet/provider.d.ts.map +1 -0
- package/dist/wallet/provider.js +309 -0
- package/dist/wallet/provider.js.map +1 -0
- package/dist/wallet/tx-builder.d.ts +85 -0
- package/dist/wallet/tx-builder.d.ts.map +1 -0
- package/dist/wallet/tx-builder.js +290 -0
- package/dist/wallet/tx-builder.js.map +1 -0
- package/dist/wallet/types.d.ts +116 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +86 -0
- package/dist/wallet/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-based StateStore implementation
|
|
3
|
+
* Uses bun:sqlite when available, otherwise falls back to better-sqlite3.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdirSync } from "node:fs";
|
|
6
|
+
import { createRequire } from "node:module";
|
|
7
|
+
import { dirname } from "node:path";
|
|
8
|
+
const DEFAULT_DB_PATH = ".grimoire/grimoire.db";
|
|
9
|
+
const DEFAULT_MAX_RUNS = 100;
|
|
10
|
+
class BetterSqliteAdapter {
|
|
11
|
+
db;
|
|
12
|
+
constructor(dbPath) {
|
|
13
|
+
const BetterSqlite = loadBetterSqlite3();
|
|
14
|
+
this.db = new BetterSqlite(dbPath);
|
|
15
|
+
}
|
|
16
|
+
exec(sql) {
|
|
17
|
+
this.db.exec(sql);
|
|
18
|
+
}
|
|
19
|
+
query(sql) {
|
|
20
|
+
const stmt = this.db.prepare(sql);
|
|
21
|
+
return {
|
|
22
|
+
get: (...params) => stmt.get(...params),
|
|
23
|
+
all: (...params) => stmt.all(...params),
|
|
24
|
+
run: (...params) => {
|
|
25
|
+
stmt.run(...params);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
transaction(fn) {
|
|
30
|
+
const wrapped = this.db.transaction(fn);
|
|
31
|
+
return () => {
|
|
32
|
+
wrapped();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
close() {
|
|
36
|
+
this.db.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function loadBetterSqlite3() {
|
|
40
|
+
const require = createRequire(import.meta.url);
|
|
41
|
+
try {
|
|
42
|
+
return require("better-sqlite3");
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
throw new Error(`SqliteStateStore requires bun:sqlite (Bun) or better-sqlite3 (Node). Install better-sqlite3 to use SqliteStateStore in Node (npm i better-sqlite3). (${message})`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function createDatabase(dbPath) {
|
|
50
|
+
const isBun = typeof globalThis.Bun !== "undefined";
|
|
51
|
+
if (isBun) {
|
|
52
|
+
const require = createRequire(import.meta.url);
|
|
53
|
+
const { Database } = require("bun:sqlite");
|
|
54
|
+
return new Database(dbPath);
|
|
55
|
+
}
|
|
56
|
+
return new BetterSqliteAdapter(dbPath);
|
|
57
|
+
}
|
|
58
|
+
export class SqliteStateStore {
|
|
59
|
+
db;
|
|
60
|
+
maxRuns;
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
const dbPath = options.dbPath ?? DEFAULT_DB_PATH;
|
|
63
|
+
this.maxRuns = options.maxRuns ?? DEFAULT_MAX_RUNS;
|
|
64
|
+
// Ensure parent directory exists
|
|
65
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
66
|
+
this.db = createDatabase(dbPath);
|
|
67
|
+
this.db.exec("PRAGMA journal_mode = WAL");
|
|
68
|
+
this.initSchema();
|
|
69
|
+
}
|
|
70
|
+
initSchema() {
|
|
71
|
+
this.db.exec(`
|
|
72
|
+
CREATE TABLE IF NOT EXISTS spell_state (
|
|
73
|
+
spell_id TEXT PRIMARY KEY,
|
|
74
|
+
state TEXT NOT NULL,
|
|
75
|
+
updated_at TEXT NOT NULL
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CREATE TABLE IF NOT EXISTS runs (
|
|
79
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
80
|
+
spell_id TEXT NOT NULL,
|
|
81
|
+
run_id TEXT NOT NULL,
|
|
82
|
+
timestamp TEXT NOT NULL,
|
|
83
|
+
success INTEGER NOT NULL,
|
|
84
|
+
error TEXT,
|
|
85
|
+
duration INTEGER NOT NULL,
|
|
86
|
+
metrics TEXT NOT NULL,
|
|
87
|
+
final_state TEXT NOT NULL,
|
|
88
|
+
UNIQUE(spell_id, run_id)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
CREATE TABLE IF NOT EXISTS ledger (
|
|
92
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
93
|
+
spell_id TEXT NOT NULL,
|
|
94
|
+
run_id TEXT NOT NULL,
|
|
95
|
+
entries TEXT NOT NULL,
|
|
96
|
+
UNIQUE(spell_id, run_id)
|
|
97
|
+
);
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
async load(spellId) {
|
|
101
|
+
const row = this.db
|
|
102
|
+
.query("SELECT state FROM spell_state WHERE spell_id = ?")
|
|
103
|
+
.get(spellId);
|
|
104
|
+
if (!row)
|
|
105
|
+
return null;
|
|
106
|
+
return JSON.parse(row.state);
|
|
107
|
+
}
|
|
108
|
+
async save(spellId, state) {
|
|
109
|
+
this.db
|
|
110
|
+
.query(`INSERT INTO spell_state (spell_id, state, updated_at)
|
|
111
|
+
VALUES (?, ?, ?)
|
|
112
|
+
ON CONFLICT(spell_id) DO UPDATE SET state = excluded.state, updated_at = excluded.updated_at`)
|
|
113
|
+
.run(spellId, JSON.stringify(state), new Date().toISOString());
|
|
114
|
+
}
|
|
115
|
+
async addRun(spellId, run) {
|
|
116
|
+
const tx = this.db.transaction(() => {
|
|
117
|
+
this.db
|
|
118
|
+
.query(`INSERT INTO runs (spell_id, run_id, timestamp, success, error, duration, metrics, final_state)
|
|
119
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
120
|
+
.run(spellId, run.runId, run.timestamp, run.success ? 1 : 0, run.error ?? null, run.duration, JSON.stringify(run.metrics), JSON.stringify(run.finalState));
|
|
121
|
+
// Prune old runs beyond maxRuns
|
|
122
|
+
this.db
|
|
123
|
+
.query(`DELETE FROM runs WHERE spell_id = ? AND id NOT IN (
|
|
124
|
+
SELECT id FROM runs WHERE spell_id = ? ORDER BY id DESC LIMIT ?
|
|
125
|
+
)`)
|
|
126
|
+
.run(spellId, spellId, this.maxRuns);
|
|
127
|
+
});
|
|
128
|
+
tx();
|
|
129
|
+
}
|
|
130
|
+
async getRuns(spellId, limit) {
|
|
131
|
+
const query = limit
|
|
132
|
+
? "SELECT * FROM runs WHERE spell_id = ? ORDER BY id DESC LIMIT ?"
|
|
133
|
+
: "SELECT * FROM runs WHERE spell_id = ? ORDER BY id DESC";
|
|
134
|
+
const rows = limit
|
|
135
|
+
? this.db.query(query).all(spellId, limit)
|
|
136
|
+
: this.db.query(query).all(spellId);
|
|
137
|
+
return rows.map(rowToRunRecord);
|
|
138
|
+
}
|
|
139
|
+
async saveLedger(spellId, runId, entries) {
|
|
140
|
+
this.db
|
|
141
|
+
.query(`INSERT INTO ledger (spell_id, run_id, entries)
|
|
142
|
+
VALUES (?, ?, ?)
|
|
143
|
+
ON CONFLICT(spell_id, run_id) DO UPDATE SET entries = excluded.entries`)
|
|
144
|
+
.run(spellId, runId, JSON.stringify(entries, bigintReplacer));
|
|
145
|
+
}
|
|
146
|
+
async loadLedger(spellId, runId) {
|
|
147
|
+
const row = this.db
|
|
148
|
+
.query("SELECT entries FROM ledger WHERE spell_id = ? AND run_id = ?")
|
|
149
|
+
.get(spellId, runId);
|
|
150
|
+
if (!row)
|
|
151
|
+
return null;
|
|
152
|
+
return JSON.parse(row.entries);
|
|
153
|
+
}
|
|
154
|
+
async listSpells() {
|
|
155
|
+
const rows = this.db
|
|
156
|
+
.query("SELECT spell_id FROM spell_state ORDER BY spell_id")
|
|
157
|
+
.all();
|
|
158
|
+
return rows.map((r) => r.spell_id);
|
|
159
|
+
}
|
|
160
|
+
/** Close the database connection */
|
|
161
|
+
close() {
|
|
162
|
+
this.db.close();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function rowToRunRecord(row) {
|
|
166
|
+
return {
|
|
167
|
+
runId: row.run_id,
|
|
168
|
+
timestamp: row.timestamp,
|
|
169
|
+
success: row.success === 1,
|
|
170
|
+
error: row.error ?? undefined,
|
|
171
|
+
duration: row.duration,
|
|
172
|
+
metrics: JSON.parse(row.metrics),
|
|
173
|
+
finalState: JSON.parse(row.final_state),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/** JSON replacer that converts bigint values to strings */
|
|
177
|
+
function bigintReplacer(_key, value) {
|
|
178
|
+
return typeof value === "bigint" ? value.toString() : value;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=sqlite-state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-state-store.js","sourceRoot":"","sources":["../../src/runtime/sqlite-state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Store interface and helpers
|
|
3
|
+
* Abstract persistence layer for spell state across runs
|
|
4
|
+
*/
|
|
5
|
+
import type { ExecutionResult, LedgerEntry } from "../types/execution.js";
|
|
6
|
+
/**
|
|
7
|
+
* Serialized run metrics (bigint → string)
|
|
8
|
+
*/
|
|
9
|
+
export interface RunMetrics {
|
|
10
|
+
stepsExecuted: number;
|
|
11
|
+
actionsExecuted: number;
|
|
12
|
+
gasUsed: string;
|
|
13
|
+
advisoryCalls: number;
|
|
14
|
+
errors: number;
|
|
15
|
+
retries: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Record of a single spell execution
|
|
19
|
+
*/
|
|
20
|
+
export interface RunRecord {
|
|
21
|
+
runId: string;
|
|
22
|
+
timestamp: string;
|
|
23
|
+
success: boolean;
|
|
24
|
+
error?: string;
|
|
25
|
+
duration: number;
|
|
26
|
+
metrics: RunMetrics;
|
|
27
|
+
finalState: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Abstract interface for persisting spell state and run history
|
|
31
|
+
*/
|
|
32
|
+
export interface StateStore {
|
|
33
|
+
/** Load persistent state for a spell (null if never saved) */
|
|
34
|
+
load(spellId: string): Promise<Record<string, unknown> | null>;
|
|
35
|
+
/** Save persistent state for a spell */
|
|
36
|
+
save(spellId: string, state: Record<string, unknown>): Promise<void>;
|
|
37
|
+
/** Append a run record */
|
|
38
|
+
addRun(spellId: string, run: RunRecord): Promise<void>;
|
|
39
|
+
/** Get run records, most recent first */
|
|
40
|
+
getRuns(spellId: string, limit?: number): Promise<RunRecord[]>;
|
|
41
|
+
/** Save ledger entries for a run */
|
|
42
|
+
saveLedger(spellId: string, runId: string, entries: LedgerEntry[]): Promise<void>;
|
|
43
|
+
/** Load ledger entries for a run */
|
|
44
|
+
loadLedger(spellId: string, runId: string): Promise<LedgerEntry[] | null>;
|
|
45
|
+
/** List all spell IDs with saved state */
|
|
46
|
+
listSpells(): Promise<string[]>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a RunRecord from an ExecutionResult
|
|
50
|
+
*/
|
|
51
|
+
export declare function createRunRecord(result: ExecutionResult): RunRecord;
|
|
52
|
+
//# sourceMappingURL=state-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../src/runtime/state-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAoB,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE/D,wCAAwC;IACxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE,0BAA0B;IAC1B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,yCAAyC;IACzC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/D,oCAAoC;IACpC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF,oCAAoC;IACpC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1E,0CAA0C;IAC1C,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACjC;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAUlE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Store interface and helpers
|
|
3
|
+
* Abstract persistence layer for spell state across runs
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Serialize ExecutionMetrics to RunMetrics (bigint → string)
|
|
7
|
+
*/
|
|
8
|
+
function serializeMetrics(metrics) {
|
|
9
|
+
return {
|
|
10
|
+
stepsExecuted: metrics.stepsExecuted,
|
|
11
|
+
actionsExecuted: metrics.actionsExecuted,
|
|
12
|
+
gasUsed: metrics.gasUsed.toString(),
|
|
13
|
+
advisoryCalls: metrics.advisoryCalls,
|
|
14
|
+
errors: metrics.errors,
|
|
15
|
+
retries: metrics.retries,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a RunRecord from an ExecutionResult
|
|
20
|
+
*/
|
|
21
|
+
export function createRunRecord(result) {
|
|
22
|
+
return {
|
|
23
|
+
runId: result.runId,
|
|
24
|
+
timestamp: new Date(result.startTime).toISOString(),
|
|
25
|
+
success: result.success,
|
|
26
|
+
error: result.error,
|
|
27
|
+
duration: result.duration,
|
|
28
|
+
metrics: serializeMetrics(result.metrics),
|
|
29
|
+
finalState: result.finalState,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../src/runtime/state-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuDH;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAyB;IACjD,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;QACnC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Step Executor
|
|
3
|
+
* Executes on-chain actions using the wallet executor when provided.
|
|
4
|
+
*/
|
|
5
|
+
import type { ExecutionContext, StepResult } from "../../types/execution.js";
|
|
6
|
+
import type { ActionStep } from "../../types/steps.js";
|
|
7
|
+
import type { Executor } from "../../wallet/executor.js";
|
|
8
|
+
import type { ExecutionMode } from "../../wallet/executor.js";
|
|
9
|
+
import type { CircuitBreakerManager } from "../circuit-breaker.js";
|
|
10
|
+
import type { InMemoryLedger } from "../context.js";
|
|
11
|
+
export interface ActionExecutionOptions {
|
|
12
|
+
mode: ExecutionMode;
|
|
13
|
+
executor?: Executor;
|
|
14
|
+
circuitBreakerManager?: CircuitBreakerManager;
|
|
15
|
+
}
|
|
16
|
+
export declare function executeActionStep(step: ActionStep, ctx: ExecutionContext, ledger: InMemoryLedger, options: ActionExecutionOptions): Promise<StepResult>;
|
|
17
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/runtime/steps/action.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CA+NrB"}
|