silo-agent 1.0.2 → 1.0.3

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/README.md CHANGED
@@ -13,9 +13,10 @@ AI agents are accumulating sensitive personal data — medical records, financia
13
13
  | **Encrypted Vault** | AES-256-GCM encryption with PBKDF2 key derivation. Data is encrypted in-memory and stored on 0G — never at rest in plaintext. |
14
14
  | **Execution Attestation** | Every store/retrieve is hashed into a Merkle tree. Commit a session to publish a verifiable proof of agent behavior without revealing content. |
15
15
  | **Multi-Agent Sharing** | Agents can securely share encrypted memories via `vault_share` and `vault_import` — enabling cross-agent collaboration with cryptographic accountability. |
16
- | **MCP Server** | 8 tools for Claude Desktop, Cursor, or any MCP-compatible client. |
16
+ | **MCP Server** | 21 tools for Claude Desktop, Cursor, or any MCP-compatible client (vault + DeFAI + shared memory + autonomy). |
17
17
  | **Real-Time Dashboard** | Live WebSocket-powered UI showing stores, retrieves, Merkle tree visualization, and session attestation ceremonies. |
18
18
  | **CLI Tools** | `verify` to prove data exists, `doctor` to validate setup, `demo` to run the full cycle. |
19
+ | **DeFAI Copilot** | Intent-to-plan API with guardrails, risk previews, explicit user approval, and optional 0G Compute rationale. |
19
20
 
20
21
  ---
21
22
 
@@ -24,7 +25,7 @@ AI agents are accumulating sensitive personal data — medical records, financia
24
25
  ```bash
25
26
  # Clone and install
26
27
  git clone https://github.com/rohanpotta/ethdenverhack.git
27
- cd silo
28
+ cd ethdenverhack
28
29
 
29
30
  # Install backend
30
31
  cd 0g-agent-shield
@@ -49,6 +50,35 @@ npm run dev
49
50
 
50
51
  Open `http://localhost:5173` to see the SILO dashboard.
51
52
 
53
+ ## Common Failures (Fast Fixes)
54
+
55
+ - `EADDRINUSE: address already in use :::3000`
56
+ - Cause: another process already uses port `3000`.
57
+ - Fix:
58
+ ```bash
59
+ lsof -i :3000
60
+ kill -9 <PID>
61
+ npm start
62
+ ```
63
+ - `ngrok ERR_NGROK_334` endpoint already online
64
+ - Cause: previous tunnel is still active.
65
+ - Fix:
66
+ ```bash
67
+ pkill -f ngrok
68
+ ngrok http 3000
69
+ ```
70
+ - `MCP silo: ... is not valid JSON`
71
+ - Cause: non-protocol logs leaked to MCP stdout.
72
+ - Fix:
73
+ - Upgrade to latest `silo-agent`.
74
+ - Keep MCP as `npx silo-agent mcp` (do not wrap in extra shell logging).
75
+ - Restart Claude Desktop after config updates.
76
+ - `0 balance — get testnet tokens from https://faucet.0g.ai`
77
+ - Cause: wallet is unfunded.
78
+ - Fix:
79
+ - Fund the exact address in your MCP/backend `PRIVATE_KEY` via faucet.
80
+ - Re-run `npm run doctor`.
81
+
52
82
  ---
53
83
 
54
84
  ## Use With Claude Desktop / Cursor
@@ -79,7 +109,9 @@ No build step or absolute paths needed — `npx` resolves the package from npm.
79
109
 
80
110
  ---
81
111
 
82
- ## MCP Tools (8)
112
+ ## MCP Tools
113
+
114
+ SILO exposes 21 MCP tools. Core vault tools:
83
115
 
84
116
  | Tool | Description |
85
117
  |---|---|
@@ -92,6 +124,13 @@ No build step or absolute paths needed — `npx` resolves the package from npm.
92
124
  | `vault_share` | Encrypt, store, and generate a share descriptor for another agent |
93
125
  | `vault_import` | Retrieve and decrypt shared memory from another agent's descriptor |
94
126
 
127
+ DeFAI tools:
128
+
129
+ | Tool | Description |
130
+ |---|---|
131
+ | `defai_plan` | Generate a structured DeFi plan with guardrails + risk preview |
132
+ | `defai_approve` | Explicit user approval/rejection gate before execution |
133
+
95
134
  ---
96
135
 
97
136
  ## Multi-Agent Sharing
@@ -191,7 +230,7 @@ console.log(proof.merkleRoot); // public commitment
191
230
  ```
192
231
  ┌────────────────────────────────────────────────────────┐
193
232
  │ MCP Server (mcp.ts) │
194
- 8 tools for any AI client
233
+ 21 tools for any AI client
195
234
  │ pushes events to dashboard via REST │
196
235
  └────────────────────┬───────────────────────────────────┘
197
236
 
@@ -233,6 +272,9 @@ npm run doctor
233
272
  # Run the full demo cycle
234
273
  npm run demo
235
274
 
275
+ # Run the DeFAI safe-execution demo
276
+ npm run defai:demo
277
+
236
278
  # Verify a specific stored memory
237
279
  npm run verify -- <rootHash>
238
280
 
@@ -243,6 +285,44 @@ npm run verify -- <traceRootHash> --trace
243
285
  npm run verify-flow
244
286
  ```
245
287
 
288
+ ## DeFAI Endpoints
289
+
290
+ ```bash
291
+ POST /api/defai/plan
292
+ POST /api/defai/approve
293
+ ```
294
+
295
+ `/api/defai/plan` creates a structured swap plan with guardrails and simulation preview.
296
+ `/api/defai/approve` enforces explicit user control by requiring an approval/rejection action.
297
+
298
+ Set `OG_COMPUTE_URL` to route planning rationale through 0G Compute. If unavailable, SILO falls back to deterministic heuristics.
299
+
300
+ If you use the 0G starter-kit query API (`/api/services/query`), also set:
301
+ - `OG_COMPUTE_PROVIDER_ADDRESS`
302
+ - `OG_COMPUTE_FALLBACK_FEE` (default `0.01`)
303
+
304
+ ### DeFAI Scenario Card (Judge-Ready)
305
+
306
+ - Intent: `Rebalance 500 USD from ETH to USDC`
307
+ - Guardrails: `maxSlippageBps=75`, `timeoutSec=90`, `maxNotionalUsd=1000`, allowlist=`ETH,USDC,DAI,WBTC`
308
+ - AI output: structured plan with route preview, risk rationale, and simulation (`expectedOutUsd`, `minOutUsd`)
309
+ - User control: explicit `defai_approve` / `defai_reject` gate before any execution
310
+ - Evidence: plan + approval artifacts encrypted to 0G with attestation trail
311
+ - Execution mode in this MVP: `dry_run_only` (no automatic transaction broadcast)
312
+
313
+ ### DeFAI Safety Guarantees
314
+
315
+ - No transaction is auto-broadcast by SILO DeFAI MVP.
316
+ - Guardrail violations block planning before approval.
317
+ - User approval is mandatory and explicit for every plan.
318
+ - Rejection path is first-class (`defai_rejected`) and halts execution intent.
319
+ - Plan and approval artifacts are persisted on 0G for post-hoc auditability.
320
+
321
+ ### DeFAI Scope Boundary (Honest MVP)
322
+
323
+ SILO currently stops at planning + safety + approval + dry-run execution payload.
324
+ Execution adapters are pluggable via `execute(plan)` style integration and intentionally out-of-scope for this MVP.
325
+
246
326
  ---
247
327
 
248
328
  ## Project Structure
@@ -256,7 +336,7 @@ silo/
256
336
  │ │ │ ├── storage.ts # 0G Storage SDK wrapper + ABI fix
257
337
  │ │ │ ├── attestation.ts # Merkle-based execution proofs
258
338
  │ │ │ └── vault.ts # Unified public API (AgentVault)
259
- │ │ ├── mcp.ts # MCP server (8 tools)
339
+ │ │ ├── mcp.ts # MCP server (21 tools)
260
340
  │ │ ├── server.ts # Express API + WebSocket server
261
341
  │ │ ├── verify.ts # CLI: verify stored data
262
342
  │ │ ├── doctor.ts # CLI: validate environment
@@ -0,0 +1,14 @@
1
+ /**
2
+ * SILO DeFAI Demo
3
+ *
4
+ * Demonstrates:
5
+ * 1) Intent -> structured DeFi plan
6
+ * 2) Guardrails + risk explanation
7
+ * 3) Simulation preview
8
+ * 4) Explicit user approval gate
9
+ * 5) Encrypted attestation artifacts on 0G
10
+ *
11
+ * Usage:
12
+ * npm run defai:demo
13
+ */
14
+ export {};
@@ -0,0 +1,75 @@
1
+ /**
2
+ * SILO DeFAI Demo
3
+ *
4
+ * Demonstrates:
5
+ * 1) Intent -> structured DeFi plan
6
+ * 2) Guardrails + risk explanation
7
+ * 3) Simulation preview
8
+ * 4) Explicit user approval gate
9
+ * 5) Encrypted attestation artifacts on 0G
10
+ *
11
+ * Usage:
12
+ * npm run defai:demo
13
+ */
14
+ import dotenv from "dotenv";
15
+ import { AgentVault } from "./lib/vault.js";
16
+ import { buildStructuredPlan, guardrailViolations } from "./lib/defai.js";
17
+ dotenv.config();
18
+ async function run() {
19
+ const vault = new AgentVault({
20
+ privateKey: process.env.PRIVATE_KEY,
21
+ evmRpc: process.env.EVM_RPC,
22
+ indexerRpc: process.env.INDEXER_RPC,
23
+ vaultSecret: process.env.VAULT_SECRET,
24
+ });
25
+ await vault.init();
26
+ const input = {
27
+ intent: "Rebalance 500 USD from ETH to USDC with strict risk limits",
28
+ tokenIn: "ETH",
29
+ tokenOut: "USDC",
30
+ amountUsd: 500,
31
+ guardrails: {
32
+ maxSlippageBps: 75,
33
+ timeoutSec: 90,
34
+ tokenAllowlist: ["ETH", "USDC", "DAI", "WBTC"],
35
+ maxNotionalUsd: 1000,
36
+ },
37
+ };
38
+ console.log("\n=== SILO DeFAI Demo ===");
39
+ console.log(`Agent: ${vault.address}`);
40
+ console.log(`Intent: ${input.intent}`);
41
+ const violations = guardrailViolations(input);
42
+ if (violations.length > 0) {
43
+ console.log("Guardrail violations:");
44
+ for (const v of violations)
45
+ console.log(` - ${v}`);
46
+ process.exit(1);
47
+ }
48
+ const plan = await buildStructuredPlan(input);
49
+ console.log(`\nPlan ID: ${plan.planId}`);
50
+ console.log(`Risk: ${plan.risk.level.toUpperCase()} — ${plan.risk.explanation}`);
51
+ console.log(`Preview: expectedOut=$${plan.preview.expectedOutUsd}, minOut=$${plan.preview.minOutUsd}, impact=${plan.preview.simulatedPriceImpactBps}bps`);
52
+ console.log(`Compute: ${plan.compute.provider} (${plan.compute.used ? "used" : "fallback"})`);
53
+ console.log(`Approval required: ${plan.userApprovalRequired ? "yes" : "no"}`);
54
+ const planStore = await vault.store(JSON.stringify(plan, null, 2), "defai_plan");
55
+ console.log(`Plan artifact rootHash: ${planStore.rootHash}`);
56
+ const approved = true; // Demo path: explicit user approval
57
+ const approval = {
58
+ planId: plan.planId,
59
+ approved,
60
+ reason: "User reviewed preview and accepted guardrails",
61
+ timestamp: Date.now(),
62
+ };
63
+ const approvalStore = await vault.store(JSON.stringify(approval, null, 2), "defai_user_approved");
64
+ console.log(`Approval artifact rootHash: ${approvalStore.rootHash}`);
65
+ const commit = await vault.commitSession();
66
+ console.log(`\nCommitted session ${commit.sessionId}`);
67
+ console.log(`Merkle root: ${commit.merkleRoot}`);
68
+ console.log(`Trace rootHash: ${commit.traceRootHash}`);
69
+ console.log("\nDeFAI flow complete: intent -> plan -> approval -> attestation.");
70
+ }
71
+ run().catch((err) => {
72
+ console.error("DeFAI demo failed:", err.message);
73
+ process.exit(1);
74
+ });
75
+ //# sourceMappingURL=defai-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defai-demo.js","sourceRoot":"","sources":["../src/defai-demo.ts"],"names":[],"mappings":"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"}
package/build/doctor.js CHANGED
@@ -55,13 +55,25 @@ const checks = [
55
55
  {
56
56
  name: "Indexer RPC reachable",
57
57
  fn: async () => {
58
- // Simple fetch to check the indexer is up
59
58
  const url = process.env.INDEXER_RPC;
60
- // The indexer doesn't have a simple health endpoint,
61
- // so we just verify the URL is set and looks valid
62
59
  if (!url.startsWith("http"))
63
60
  throw new Error("Invalid URL");
64
- return url;
61
+ const controller = new AbortController();
62
+ const timeout = setTimeout(() => controller.abort(), 5000);
63
+ try {
64
+ const response = await fetch(url, {
65
+ method: "GET",
66
+ signal: controller.signal,
67
+ });
68
+ return `${url} (HTTP ${response.status})`;
69
+ }
70
+ catch (error) {
71
+ const message = error instanceof Error ? error.message : "Unknown indexer error";
72
+ throw new Error(message);
73
+ }
74
+ finally {
75
+ clearTimeout(timeout);
76
+ }
65
77
  },
66
78
  },
67
79
  {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAOhB,MAAM,MAAM,GAAY;IACtB;QACE,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,uBAAuB;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACrG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QACrD,CAAC;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,2CAA2C;YAC3C,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,uDAAuD,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;YAChE,OAAO,GAAG,KAAK,eAAe,OAAO,GAAG,CAAC;QAC3C,CAAC;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,GAAG,SAAS,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;QAC/D,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,0CAA0C;YAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAY,CAAC;YACrC,qDAAqD;YACrD,mDAAmD;YACnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC;QACb,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAY,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,SAAS,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACjE,OAAO,eAAe,CAAC;QACzB,CAAC;KACF;CACF,CAAC;AAEF,KAAK,UAAU,MAAM;IACnB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface Guardrails {
2
+ maxSlippageBps: number;
3
+ timeoutSec: number;
4
+ tokenAllowlist: string[];
5
+ maxNotionalUsd: number;
6
+ }
7
+ export interface PlanInput {
8
+ intent: string;
9
+ tokenIn: string;
10
+ tokenOut: string;
11
+ amountUsd: number;
12
+ guardrails: Guardrails;
13
+ }
14
+ export interface PlanStep {
15
+ id: string;
16
+ action: "quote" | "approve" | "swap" | "confirm";
17
+ description: string;
18
+ }
19
+ export interface RiskReport {
20
+ level: "low" | "medium" | "high";
21
+ reasons: string[];
22
+ explanation: string;
23
+ }
24
+ export interface PlanPreview {
25
+ expectedOutUsd: number;
26
+ minOutUsd: number;
27
+ simulatedPriceImpactBps: number;
28
+ route: string[];
29
+ }
30
+ export interface StructuredPlan {
31
+ planId: string;
32
+ createdAt: number;
33
+ input: PlanInput;
34
+ steps: PlanStep[];
35
+ constraints: Guardrails;
36
+ risk: RiskReport;
37
+ preview: PlanPreview;
38
+ userApprovalRequired: true;
39
+ compute: {
40
+ used: boolean;
41
+ provider: "heuristic" | "0g-compute";
42
+ rationale: string;
43
+ };
44
+ }
45
+ export declare function maybeComputeRationale(input: PlanInput): Promise<{
46
+ used: boolean;
47
+ provider: "heuristic" | "0g-compute";
48
+ rationale: string;
49
+ }>;
50
+ export declare function buildStructuredPlan(input: PlanInput): Promise<StructuredPlan>;
51
+ export declare function guardrailViolations(input: PlanInput): string[];
@@ -0,0 +1,163 @@
1
+ function clamp(num, min, max) {
2
+ return Math.max(min, Math.min(max, num));
3
+ }
4
+ function estimateImpactBps(amountUsd) {
5
+ if (amountUsd <= 250)
6
+ return 15;
7
+ if (amountUsd <= 1000)
8
+ return 35;
9
+ if (amountUsd <= 5000)
10
+ return 85;
11
+ return 150;
12
+ }
13
+ function evaluateRisk(input, impactBps) {
14
+ const reasons = [];
15
+ if (impactBps > 100)
16
+ reasons.push("Estimated price impact is elevated for requested size.");
17
+ if (input.guardrails.maxSlippageBps > 150)
18
+ reasons.push("Max slippage setting is permissive.");
19
+ if (input.amountUsd > input.guardrails.maxNotionalUsd * 0.8)
20
+ reasons.push("Trade size is near your configured notional limit.");
21
+ const level = reasons.length >= 2 ? "high" : reasons.length === 1 ? "medium" : "low";
22
+ const explanation = level === "low"
23
+ ? "Plan is within configured limits and expected impact is small."
24
+ : level === "medium"
25
+ ? "Plan is executable but has one notable risk signal. Review before approval."
26
+ : "Plan crosses multiple risk signals. Consider reducing size or tightening guardrails.";
27
+ return { level, reasons, explanation };
28
+ }
29
+ export async function maybeComputeRationale(input) {
30
+ const computeUrl = process.env.OG_COMPUTE_URL?.trim();
31
+ if (!computeUrl) {
32
+ return {
33
+ used: false,
34
+ provider: "heuristic",
35
+ rationale: `Heuristic plan for ${input.intent.toLowerCase()} with strict user guardrails.`,
36
+ };
37
+ }
38
+ try {
39
+ const model = process.env.OG_COMPUTE_MODEL?.trim() || "qwen-2.5-7b-instruct";
40
+ const authToken = process.env.OG_COMPUTE_API_KEY?.trim();
41
+ const providerAddress = process.env.OG_COMPUTE_PROVIDER_ADDRESS?.trim();
42
+ const fallbackFee = Number(process.env.OG_COMPUTE_FALLBACK_FEE ?? "0.01");
43
+ const headers = { "Content-Type": "application/json" };
44
+ if (authToken)
45
+ headers.Authorization = `Bearer ${authToken}`;
46
+ // We support three request/response styles:
47
+ // 1) 0G starter kit query endpoint:
48
+ // POST /api/services/query
49
+ // { providerAddress, query, fallbackFee }
50
+ // -> { success: true, response: { content: "..." } }
51
+ // 1) Custom endpoint: { rationale: "..." }
52
+ // 2) OpenAI-compatible chat completions:
53
+ // { choices: [{ message: { content: "..." } }] }
54
+ const isStarterKitQuery = computeUrl.includes("/api/services/query") && !!providerAddress;
55
+ const starterKitQuery = JSON.stringify({
56
+ providerAddress,
57
+ query: [
58
+ `Intent: ${input.intent}`,
59
+ `Pair: ${input.tokenIn} -> ${input.tokenOut}`,
60
+ `Amount: ${input.amountUsd} USD`,
61
+ `Constraints: ${JSON.stringify(input.guardrails)}`,
62
+ `Return concise risk-aware rationale only.`,
63
+ ].join("\n"),
64
+ fallbackFee,
65
+ });
66
+ const defaultQuery = JSON.stringify({
67
+ model,
68
+ task: "defi-planning-rationale",
69
+ messages: [
70
+ {
71
+ role: "system",
72
+ content: "You are a DeFi risk planner. Return concise rationale aligned to guardrails.",
73
+ },
74
+ {
75
+ role: "user",
76
+ content: JSON.stringify({
77
+ intent: input.intent,
78
+ tokenIn: input.tokenIn,
79
+ tokenOut: input.tokenOut,
80
+ amountUsd: input.amountUsd,
81
+ constraints: input.guardrails,
82
+ }),
83
+ },
84
+ ],
85
+ input: {
86
+ intent: input.intent,
87
+ tokenIn: input.tokenIn,
88
+ tokenOut: input.tokenOut,
89
+ amountUsd: input.amountUsd,
90
+ constraints: input.guardrails,
91
+ }
92
+ });
93
+ const res = await fetch(computeUrl, {
94
+ method: "POST",
95
+ headers,
96
+ body: isStarterKitQuery ? starterKitQuery : defaultQuery,
97
+ });
98
+ if (!res.ok)
99
+ throw new Error(`status ${res.status}`);
100
+ const data = await res.json();
101
+ const rationale = data.response?.content?.trim()
102
+ || data.rationale?.trim()
103
+ || data.output_text?.trim()
104
+ || data.text?.trim()
105
+ || data.choices?.[0]?.message?.content?.trim();
106
+ if (!rationale)
107
+ throw new Error("missing rationale");
108
+ return {
109
+ used: true,
110
+ provider: "0g-compute",
111
+ rationale,
112
+ };
113
+ }
114
+ catch {
115
+ return {
116
+ used: false,
117
+ provider: "heuristic",
118
+ rationale: `Fallback heuristic plan for ${input.intent.toLowerCase()} (0G Compute unavailable).`,
119
+ };
120
+ }
121
+ }
122
+ export async function buildStructuredPlan(input) {
123
+ const planId = `plan_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
124
+ const impactBps = estimateImpactBps(input.amountUsd);
125
+ const slippageCap = clamp(input.guardrails.maxSlippageBps, 5, 500);
126
+ const effectiveSlip = Math.max(impactBps, Math.min(slippageCap, impactBps + 20));
127
+ const expectedOutUsd = Number((input.amountUsd * (1 - impactBps / 10000)).toFixed(2));
128
+ const minOutUsd = Number((input.amountUsd * (1 - effectiveSlip / 10000)).toFixed(2));
129
+ const risk = evaluateRisk(input, impactBps);
130
+ const compute = await maybeComputeRationale(input);
131
+ return {
132
+ planId,
133
+ createdAt: Date.now(),
134
+ input,
135
+ steps: [
136
+ { id: "s1", action: "quote", description: "Fetch route quote and verify token allowlist." },
137
+ { id: "s2", action: "approve", description: `Set token approval cap to exact notional (${input.amountUsd} USD equivalent).` },
138
+ { id: "s3", action: "swap", description: `Swap ${input.tokenIn} -> ${input.tokenOut} with max slippage ${input.guardrails.maxSlippageBps} bps.` },
139
+ { id: "s4", action: "confirm", description: "Require explicit user confirmation before final transaction broadcast." },
140
+ ],
141
+ constraints: input.guardrails,
142
+ risk,
143
+ preview: {
144
+ expectedOutUsd,
145
+ minOutUsd,
146
+ simulatedPriceImpactBps: impactBps,
147
+ route: [input.tokenIn, "USDC", input.tokenOut],
148
+ },
149
+ userApprovalRequired: true,
150
+ compute,
151
+ };
152
+ }
153
+ export function guardrailViolations(input) {
154
+ const violations = [];
155
+ if (!input.guardrails.tokenAllowlist.includes(input.tokenIn))
156
+ violations.push(`${input.tokenIn} is not in token allowlist.`);
157
+ if (!input.guardrails.tokenAllowlist.includes(input.tokenOut))
158
+ violations.push(`${input.tokenOut} is not in token allowlist.`);
159
+ if (input.amountUsd > input.guardrails.maxNotionalUsd)
160
+ violations.push(`Amount ${input.amountUsd} exceeds max notional ${input.guardrails.maxNotionalUsd}.`);
161
+ return violations;
162
+ }
163
+ //# sourceMappingURL=defai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defai.js","sourceRoot":"","sources":["../../src/lib/defai.ts"],"names":[],"mappings":"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"}
package/build/mcp.d.ts CHANGED
@@ -16,6 +16,8 @@
16
16
  * vault_status — Show vault status and session info
17
17
  * vault_share — Store + generate share descriptor for another agent
18
18
  * vault_import — Retrieve shared memory from another agent
19
+ * defai_plan — Intent -> structured DeFi plan with guardrails
20
+ * defai_approve — Explicit approval/rejection gate for a plan
19
21
  *
20
22
  * Tools (Shared Memory):
21
23
  * memory_write — Write data to a named shared memory channel