@grimoirelabs/cli 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.
- package/dist/commands/cast.d.ts +6 -0
- package/dist/commands/cast.d.ts.map +1 -1
- package/dist/commands/cast.js +102 -74
- package/dist/commands/cast.js.map +1 -1
- package/dist/commands/data-provenance.d.ts +85 -0
- package/dist/commands/data-provenance.d.ts.map +1 -0
- package/dist/commands/data-provenance.js +311 -0
- package/dist/commands/data-provenance.js.map +1 -0
- package/dist/commands/run-report.d.ts +52 -0
- package/dist/commands/run-report.d.ts.map +1 -0
- package/dist/commands/run-report.js +143 -0
- package/dist/commands/run-report.js.map +1 -0
- package/dist/commands/simulate.d.ts +7 -0
- package/dist/commands/simulate.d.ts.map +1 -1
- package/dist/commands/simulate.js +59 -45
- package/dist/commands/simulate.js.map +1 -1
- package/dist/commands/state-helpers.d.ts +3 -1
- package/dist/commands/state-helpers.d.ts.map +1 -1
- package/dist/commands/state-helpers.js +12 -2
- package/dist/commands/state-helpers.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ens-profile.d.ts +16 -0
- package/dist/lib/ens-profile.d.ts.map +1 -0
- package/dist/lib/ens-profile.js +76 -0
- package/dist/lib/ens-profile.js.map +1 -0
- package/package.json +5 -4
|
@@ -6,13 +6,15 @@ import { compileFile, execute } from "@grimoirelabs/core";
|
|
|
6
6
|
import { adapters } from "@grimoirelabs/venues";
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
import ora from "ora";
|
|
9
|
+
import { hydrateParamsFromEnsProfile, resolveEnsProfile } from "../lib/ens-profile.js";
|
|
9
10
|
import { resolveAdvisorSkillsDirs } from "./advisor-skill-helpers.js";
|
|
10
11
|
import { resolveAdvisoryHandler } from "./advisory-handlers.js";
|
|
12
|
+
import { buildRuntimeProvenanceManifest, enforceFreshnessPolicy, resolveDataPolicy, resolveReplayParams, } from "./data-provenance.js";
|
|
13
|
+
import { buildRunReportEnvelope, formatRunReportText } from "./run-report.js";
|
|
11
14
|
import { withStatePersistence } from "./state-helpers.js";
|
|
12
15
|
export async function simulateCommand(spellPath, options) {
|
|
13
16
|
const spinner = ora(`Simulating ${spellPath}...`).start();
|
|
14
17
|
try {
|
|
15
|
-
// Parse params
|
|
16
18
|
let params = {};
|
|
17
19
|
if (options.params) {
|
|
18
20
|
try {
|
|
@@ -23,7 +25,12 @@ export async function simulateCommand(spellPath, options) {
|
|
|
23
25
|
process.exit(1);
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
|
-
|
|
28
|
+
if (options.ensName) {
|
|
29
|
+
spinner.text = `Resolving ENS profile ${options.ensName}...`;
|
|
30
|
+
const profile = await resolveEnsProfile(options.ensName, { rpcUrl: options.ensRpcUrl });
|
|
31
|
+
params = hydrateParamsFromEnsProfile(params, profile);
|
|
32
|
+
console.log(chalk.dim(`ENS profile ${profile.name} -> ${profile.address ?? "unresolved"} (risk=${profile.riskProfile ?? "n/a"}, slippage=${profile.maxSlippageBps ?? "n/a"})`));
|
|
33
|
+
}
|
|
27
34
|
spinner.text = "Compiling spell...";
|
|
28
35
|
const compileResult = await compileFile(spellPath);
|
|
29
36
|
if (!compileResult.success || !compileResult.ir) {
|
|
@@ -33,11 +40,37 @@ export async function simulateCommand(spellPath, options) {
|
|
|
33
40
|
}
|
|
34
41
|
process.exit(1);
|
|
35
42
|
}
|
|
36
|
-
|
|
37
|
-
spinner.text = "Executing simulation...";
|
|
43
|
+
spinner.text = "Preparing simulation...";
|
|
38
44
|
const vault = (options.vault ?? "0x0000000000000000000000000000000000000000");
|
|
39
45
|
const chain = Number.parseInt(options.chain ?? "1", 10);
|
|
40
46
|
const spell = compileResult.ir;
|
|
47
|
+
const noState = resolveNoState(options);
|
|
48
|
+
const dataPolicy = resolveDataPolicy({
|
|
49
|
+
defaultReplay: "auto",
|
|
50
|
+
dataReplay: options.dataReplay,
|
|
51
|
+
dataMaxAge: options.dataMaxAge,
|
|
52
|
+
onStale: options.onStale,
|
|
53
|
+
});
|
|
54
|
+
const replayResolution = await resolveReplayParams({
|
|
55
|
+
spellId: spell.id,
|
|
56
|
+
params,
|
|
57
|
+
stateDir: options.stateDir,
|
|
58
|
+
noState,
|
|
59
|
+
policy: dataPolicy,
|
|
60
|
+
});
|
|
61
|
+
params = replayResolution.params;
|
|
62
|
+
const provenance = buildRuntimeProvenanceManifest({
|
|
63
|
+
runtimeMode: "simulate",
|
|
64
|
+
chainId: chain,
|
|
65
|
+
policy: dataPolicy,
|
|
66
|
+
replay: replayResolution,
|
|
67
|
+
params,
|
|
68
|
+
});
|
|
69
|
+
const freshnessWarnings = enforceFreshnessPolicy(provenance);
|
|
70
|
+
for (const warning of freshnessWarnings) {
|
|
71
|
+
console.log(chalk.yellow(`Warning: ${warning}`));
|
|
72
|
+
}
|
|
73
|
+
spinner.text = "Executing simulation...";
|
|
41
74
|
const advisorSkillsDirs = resolveAdvisorSkillsDirs(options.advisorSkillsDir) ?? [];
|
|
42
75
|
const onAdvisory = await resolveAdvisoryHandler(spell.id, {
|
|
43
76
|
advisoryPi: options.advisoryPi,
|
|
@@ -48,11 +81,15 @@ export async function simulateCommand(spellPath, options) {
|
|
|
48
81
|
advisoryTools: options.advisoryTools,
|
|
49
82
|
advisorSkillsDirs,
|
|
50
83
|
stateDir: options.stateDir,
|
|
51
|
-
noState
|
|
84
|
+
noState,
|
|
52
85
|
agentDir: options.piAgentDir,
|
|
53
86
|
cwd: process.cwd(),
|
|
54
87
|
});
|
|
55
|
-
const result = await withStatePersistence(spell.id, {
|
|
88
|
+
const result = await withStatePersistence(spell.id, {
|
|
89
|
+
stateDir: options.stateDir,
|
|
90
|
+
noState,
|
|
91
|
+
buildRunProvenance: () => provenance,
|
|
92
|
+
}, async (persistentState) => {
|
|
56
93
|
return execute({
|
|
57
94
|
spell,
|
|
58
95
|
vault,
|
|
@@ -65,53 +102,23 @@ export async function simulateCommand(spellPath, options) {
|
|
|
65
102
|
onAdvisory,
|
|
66
103
|
});
|
|
67
104
|
});
|
|
68
|
-
// Report result
|
|
69
105
|
if (result.success) {
|
|
70
106
|
spinner.succeed(chalk.green("Simulation completed successfully"));
|
|
71
107
|
}
|
|
72
108
|
else {
|
|
73
109
|
spinner.fail(chalk.red(`Simulation failed: ${result.error}`));
|
|
74
110
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
console.log(chalk.dim(` Steps executed: ${result.metrics.stepsExecuted}`));
|
|
81
|
-
console.log(chalk.dim(` Actions executed: ${result.metrics.actionsExecuted}`));
|
|
82
|
-
console.log(chalk.dim(` Errors: ${result.metrics.errors}`));
|
|
83
|
-
// Show final state
|
|
84
|
-
if (Object.keys(result.finalState).length > 0) {
|
|
85
|
-
console.log();
|
|
86
|
-
console.log(chalk.cyan("Final State:"));
|
|
87
|
-
console.log(chalk.dim(JSON.stringify(result.finalState, null, 2)));
|
|
88
|
-
}
|
|
89
|
-
// Show events
|
|
111
|
+
const report = buildRunReportEnvelope({
|
|
112
|
+
spellName: spell.meta.name,
|
|
113
|
+
result,
|
|
114
|
+
provenance,
|
|
115
|
+
});
|
|
90
116
|
console.log();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const time = new Date(entry.timestamp).toISOString().split("T")[1]?.replace("Z", "");
|
|
94
|
-
const eventType = chalk.blue(entry.event.type.padEnd(20));
|
|
95
|
-
let details = "";
|
|
96
|
-
if (entry.event.type === "step_started") {
|
|
97
|
-
details = chalk.dim(`step=${entry.event.stepId}`);
|
|
98
|
-
}
|
|
99
|
-
else if (entry.event.type === "step_completed") {
|
|
100
|
-
details = chalk.dim(`step=${entry.event.stepId}`);
|
|
101
|
-
}
|
|
102
|
-
else if (entry.event.type === "step_failed") {
|
|
103
|
-
details = chalk.red(`step=${entry.event.stepId} error=${entry.event.error}`);
|
|
104
|
-
}
|
|
105
|
-
else if (entry.event.type === "binding_set") {
|
|
106
|
-
details = chalk.dim(`${entry.event.name}=${JSON.stringify(entry.event.value)}`);
|
|
107
|
-
}
|
|
108
|
-
else if (entry.event.type === "guard_failed") {
|
|
109
|
-
details = chalk.yellow(`guard=${entry.event.guardId} msg=${entry.event.message}`);
|
|
110
|
-
}
|
|
111
|
-
console.log(` ${chalk.dim(time)} ${eventType} ${details}`);
|
|
117
|
+
if (options.json) {
|
|
118
|
+
console.log(JSON.stringify(report, null, 2));
|
|
112
119
|
}
|
|
113
|
-
|
|
114
|
-
console.log(
|
|
120
|
+
else {
|
|
121
|
+
console.log(formatRunReportText(report));
|
|
115
122
|
}
|
|
116
123
|
if (!result.success) {
|
|
117
124
|
process.exit(1);
|
|
@@ -122,4 +129,11 @@ export async function simulateCommand(spellPath, options) {
|
|
|
122
129
|
process.exit(1);
|
|
123
130
|
}
|
|
124
131
|
}
|
|
132
|
+
function resolveNoState(options) {
|
|
133
|
+
if (typeof options.noState === "boolean")
|
|
134
|
+
return options.noState;
|
|
135
|
+
if (options.state === false)
|
|
136
|
+
return true;
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
125
139
|
//# sourceMappingURL=simulate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../src/commands/simulate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../src/commands/simulate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared state persistence helpers for CLI commands
|
|
3
3
|
*/
|
|
4
|
-
import { type ExecutionResult } from "@grimoirelabs/core";
|
|
4
|
+
import { type ExecutionResult, type RunProvenance, type RunRecord } from "@grimoirelabs/core";
|
|
5
5
|
interface StatePersistenceOptions {
|
|
6
6
|
stateDir?: string;
|
|
7
7
|
noState?: boolean;
|
|
8
|
+
buildRunProvenance?: (result: ExecutionResult) => RunProvenance | undefined;
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Wraps an execution function with state load/save lifecycle.
|
|
@@ -14,5 +15,6 @@ interface StatePersistenceOptions {
|
|
|
14
15
|
* 3. Save updated state, run record, and ledger
|
|
15
16
|
*/
|
|
16
17
|
export declare function withStatePersistence(spellId: string, options: StatePersistenceOptions, executeFn: (persistentState: Record<string, unknown>) => Promise<ExecutionResult>): Promise<ExecutionResult>;
|
|
18
|
+
export declare function loadRunRecords(spellId: string, options: Pick<StatePersistenceOptions, "stateDir">): Promise<RunRecord[]>;
|
|
17
19
|
export {};
|
|
18
20
|
//# sourceMappingURL=state-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/state-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"state-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/state-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAE5B,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,aAAa,GAAG,SAAS,CAAC;CAC7E;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,GAChF,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC,GACjD,OAAO,CAAC,SAAS,EAAE,CAAC,CAQtB"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared state persistence helpers for CLI commands
|
|
3
3
|
*/
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import { SqliteStateStore, createRunRecord } from "@grimoirelabs/core";
|
|
5
|
+
import { SqliteStateStore, createRunRecord, } from "@grimoirelabs/core";
|
|
6
6
|
/**
|
|
7
7
|
* Wraps an execution function with state load/save lifecycle.
|
|
8
8
|
*
|
|
@@ -23,7 +23,7 @@ export async function withStatePersistence(spellId, options, executeFn) {
|
|
|
23
23
|
const result = await executeFn(persistentState);
|
|
24
24
|
// Persist results
|
|
25
25
|
await store.save(spellId, result.finalState);
|
|
26
|
-
await store.addRun(spellId, createRunRecord(result));
|
|
26
|
+
await store.addRun(spellId, createRunRecord(result, options.buildRunProvenance?.(result)));
|
|
27
27
|
await store.saveLedger(spellId, result.runId, result.ledgerEvents);
|
|
28
28
|
return result;
|
|
29
29
|
}
|
|
@@ -31,4 +31,14 @@ export async function withStatePersistence(spellId, options, executeFn) {
|
|
|
31
31
|
store.close();
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
export async function loadRunRecords(spellId, options) {
|
|
35
|
+
const dbPath = options.stateDir ? join(options.stateDir, "grimoire.db") : undefined;
|
|
36
|
+
const store = new SqliteStateStore({ dbPath });
|
|
37
|
+
try {
|
|
38
|
+
return await store.getRuns(spellId);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
store.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
34
44
|
//# sourceMappingURL=state-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-helpers.js","sourceRoot":"","sources":["../../src/commands/state-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"state-helpers.js","sourceRoot":"","sources":["../../src/commands/state-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAIL,gBAAgB,EAChB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAQ5B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,OAAgC,EAChC,SAAiF;IAEjF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,eAAe,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1D,UAAU;QACV,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;QAEhD,kBAAkB;QAClB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAEnE,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,OAAkD;IAElD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,7 @@ program
|
|
|
55
55
|
.option("-p, --params <json>", "Parameters as JSON")
|
|
56
56
|
.option("--vault <address>", "Vault address")
|
|
57
57
|
.option("--chain <id>", "Chain ID", "1")
|
|
58
|
+
.option("--json", "Output results as JSON")
|
|
58
59
|
.option("--advisor-skills-dir <dir...>", "Directory to load advisor skills (default: ./skills)")
|
|
59
60
|
.option("--advisory-pi", "Force advisory steps via Pi SDK (auto when configured)")
|
|
60
61
|
.option("--advisory-replay <runId>", "Replay advisory outputs from a previous run")
|
|
@@ -63,6 +64,11 @@ program
|
|
|
63
64
|
.option("--advisory-thinking <level>", "Pi thinking level (off|low|medium|high)")
|
|
64
65
|
.option("--advisory-tools <mode>", "Advisory tools: none|read|coding (default: read)")
|
|
65
66
|
.option("--pi-agent-dir <dir>", "Pi agent directory (defaults to ~/.pi/agent)")
|
|
67
|
+
.option("--data-replay <mode>", "Replay external data by runId/snapshotId (or off|auto, default: auto)")
|
|
68
|
+
.option("--data-max-age <sec>", "Maximum external data age in seconds (default: 3600)")
|
|
69
|
+
.option("--on-stale <policy>", "Stale data policy: fail|warn (default: fail)")
|
|
70
|
+
.option("--ens-name <name>", "ENS name to hydrate strategy params from text records")
|
|
71
|
+
.option("--ens-rpc-url <url>", "RPC URL for ENS lookups (defaults to ENS_RPC_URL or RPC_URL)")
|
|
66
72
|
.option("--state-dir <dir>", "Directory for state database")
|
|
67
73
|
.option("--no-state", "Disable state persistence")
|
|
68
74
|
.action(simulateCommand);
|
|
@@ -91,6 +97,11 @@ program
|
|
|
91
97
|
.option("--advisory-thinking <level>", "Pi thinking level (off|low|medium|high)")
|
|
92
98
|
.option("--advisory-tools <mode>", "Advisory tools: none|read|coding (default: read)")
|
|
93
99
|
.option("--pi-agent-dir <dir>", "Pi agent directory (defaults to ~/.pi/agent)")
|
|
100
|
+
.option("--data-replay <mode>", "Replay external data by runId/snapshotId (or off|auto; default: auto for dry-run/simulate, off for live cast)")
|
|
101
|
+
.option("--data-max-age <sec>", "Maximum external data age in seconds (default: 3600)")
|
|
102
|
+
.option("--on-stale <policy>", "Stale data policy: fail|warn (default: fail)")
|
|
103
|
+
.option("--ens-name <name>", "ENS name to hydrate strategy params from text records")
|
|
104
|
+
.option("--ens-rpc-url <url>", "RPC URL for ENS lookups (defaults to ENS_RPC_URL or RPC_URL)")
|
|
94
105
|
.option("--state-dir <dir>", "Directory for state database")
|
|
95
106
|
.option("--no-state", "Disable state persistence")
|
|
96
107
|
.action(castCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
export declare const ENS_PROFILE_KEYS: readonly ["io.grimoire.risk_profile", "io.grimoire.max_slippage_bps", "io.grimoire.preferred_settlement_chain"];
|
|
3
|
+
export interface EnsProfile {
|
|
4
|
+
name: string;
|
|
5
|
+
address?: Address;
|
|
6
|
+
text: Partial<Record<(typeof ENS_PROFILE_KEYS)[number], string>>;
|
|
7
|
+
riskProfile?: string;
|
|
8
|
+
maxSlippageBps?: number;
|
|
9
|
+
preferredSettlementChain?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface EnsProfileOptions {
|
|
12
|
+
rpcUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function resolveEnsProfile(ensName: string, options?: EnsProfileOptions): Promise<EnsProfile>;
|
|
15
|
+
export declare function hydrateParamsFromEnsProfile(params: Record<string, unknown>, profile: EnsProfile): Record<string, unknown>;
|
|
16
|
+
//# sourceMappingURL=ens-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens-profile.d.ts","sourceRoot":"","sources":["../../src/lib/ens-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,OAAO,EAAsB,MAAM,MAAM,CAAC;AAE9D,eAAO,MAAM,gBAAgB,iHAInB,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAiCrB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,UAAU,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BzB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { http, createPublicClient } from "viem";
|
|
2
|
+
export const ENS_PROFILE_KEYS = [
|
|
3
|
+
"io.grimoire.risk_profile",
|
|
4
|
+
"io.grimoire.max_slippage_bps",
|
|
5
|
+
"io.grimoire.preferred_settlement_chain",
|
|
6
|
+
];
|
|
7
|
+
const ENS_MIN_SLIPPAGE_BPS = 0;
|
|
8
|
+
const ENS_MAX_SLIPPAGE_BPS = 500;
|
|
9
|
+
export async function resolveEnsProfile(ensName, options = {}) {
|
|
10
|
+
const rpcUrl = resolveEnsRpcUrl(options.rpcUrl);
|
|
11
|
+
const normalizedName = normalizeEnsName(ensName);
|
|
12
|
+
const client = createPublicClient({ transport: http(rpcUrl) });
|
|
13
|
+
const address = await client.getEnsAddress({ name: normalizedName });
|
|
14
|
+
const textEntries = await Promise.all(ENS_PROFILE_KEYS.map(async (key) => {
|
|
15
|
+
const value = await client.getEnsText({ name: normalizedName, key });
|
|
16
|
+
return [key, value ?? undefined];
|
|
17
|
+
}));
|
|
18
|
+
const text = {};
|
|
19
|
+
for (const [key, value] of textEntries) {
|
|
20
|
+
if (typeof value === "string" && value.length > 0) {
|
|
21
|
+
text[key] = value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const riskProfile = text["io.grimoire.risk_profile"];
|
|
25
|
+
const maxSlippageBps = parseMaybeNumber(text["io.grimoire.max_slippage_bps"]);
|
|
26
|
+
const preferredSettlementChain = parseMaybeNumber(text["io.grimoire.preferred_settlement_chain"]);
|
|
27
|
+
return {
|
|
28
|
+
name: normalizedName,
|
|
29
|
+
address: address ?? undefined,
|
|
30
|
+
text,
|
|
31
|
+
riskProfile,
|
|
32
|
+
maxSlippageBps,
|
|
33
|
+
preferredSettlementChain,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function hydrateParamsFromEnsProfile(params, profile) {
|
|
37
|
+
const merged = { ...params };
|
|
38
|
+
if (profile.address && merged.payout_address === undefined) {
|
|
39
|
+
merged.payout_address = profile.address;
|
|
40
|
+
}
|
|
41
|
+
if (profile.riskProfile && merged.risk_profile === undefined) {
|
|
42
|
+
merged.risk_profile = profile.riskProfile;
|
|
43
|
+
}
|
|
44
|
+
if (profile.maxSlippageBps !== undefined && merged.max_slippage_bps === undefined) {
|
|
45
|
+
merged.max_slippage_bps = clamp(profile.maxSlippageBps, ENS_MIN_SLIPPAGE_BPS, ENS_MAX_SLIPPAGE_BPS);
|
|
46
|
+
}
|
|
47
|
+
if (profile.preferredSettlementChain !== undefined &&
|
|
48
|
+
merged.preferred_settlement_chain === undefined) {
|
|
49
|
+
merged.preferred_settlement_chain = profile.preferredSettlementChain;
|
|
50
|
+
}
|
|
51
|
+
return merged;
|
|
52
|
+
}
|
|
53
|
+
function normalizeEnsName(name) {
|
|
54
|
+
const normalized = name.trim().toLowerCase();
|
|
55
|
+
if (!normalized) {
|
|
56
|
+
throw new Error("ENS name is required");
|
|
57
|
+
}
|
|
58
|
+
return normalized;
|
|
59
|
+
}
|
|
60
|
+
function resolveEnsRpcUrl(explicit) {
|
|
61
|
+
const rpcUrl = explicit ?? process.env.ENS_RPC_URL ?? process.env.RPC_URL;
|
|
62
|
+
if (!rpcUrl) {
|
|
63
|
+
throw new Error("ENS resolution requires --ens-rpc-url, ENS_RPC_URL, or RPC_URL");
|
|
64
|
+
}
|
|
65
|
+
return rpcUrl;
|
|
66
|
+
}
|
|
67
|
+
function parseMaybeNumber(input) {
|
|
68
|
+
if (!input)
|
|
69
|
+
return undefined;
|
|
70
|
+
const parsed = Number.parseInt(input, 10);
|
|
71
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
72
|
+
}
|
|
73
|
+
function clamp(value, min, max) {
|
|
74
|
+
return Math.min(Math.max(value, min), max);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=ens-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens-profile.js","sourceRoot":"","sources":["../../src/lib/ens-profile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grimoirelabs/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "CLI for Grimoire spell execution",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,12 +19,13 @@
|
|
|
19
19
|
"test": "bun test"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@grimoirelabs/core": "0.
|
|
23
|
-
"@grimoirelabs/venues": "0.
|
|
22
|
+
"@grimoirelabs/core": "0.4.0",
|
|
23
|
+
"@grimoirelabs/venues": "0.3.0",
|
|
24
24
|
"@mariozechner/pi-coding-agent": "0.51.2",
|
|
25
25
|
"chalk": "^5.3.0",
|
|
26
26
|
"commander": "^12.1.0",
|
|
27
|
-
"ora": "^8.1.0"
|
|
27
|
+
"ora": "^8.1.0",
|
|
28
|
+
"viem": "^2.21.55"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"typescript": "^5.6.3"
|