silo-agent 1.0.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/README.md +330 -0
- package/bin/silo.js +55 -0
- package/build/demo.d.ts +13 -0
- package/build/demo.js +91 -0
- package/build/demo.js.map +1 -0
- package/build/doctor.d.ts +13 -0
- package/build/doctor.js +108 -0
- package/build/doctor.js.map +1 -0
- package/build/index.d.ts +16 -0
- package/build/index.js +17 -0
- package/build/index.js.map +1 -0
- package/build/lib/agent-router.d.ts +110 -0
- package/build/lib/agent-router.js +197 -0
- package/build/lib/agent-router.js.map +1 -0
- package/build/lib/attestation.d.ts +64 -0
- package/build/lib/attestation.js +112 -0
- package/build/lib/attestation.js.map +1 -0
- package/build/lib/autonomy.d.ts +116 -0
- package/build/lib/autonomy.js +266 -0
- package/build/lib/autonomy.js.map +1 -0
- package/build/lib/crypto.d.ts +33 -0
- package/build/lib/crypto.js +63 -0
- package/build/lib/crypto.js.map +1 -0
- package/build/lib/heartbeat.d.ts +111 -0
- package/build/lib/heartbeat.js +256 -0
- package/build/lib/heartbeat.js.map +1 -0
- package/build/lib/memory-coordinator.d.ts +150 -0
- package/build/lib/memory-coordinator.js +249 -0
- package/build/lib/memory-coordinator.js.map +1 -0
- package/build/lib/memory-index.d.ts +83 -0
- package/build/lib/memory-index.js +209 -0
- package/build/lib/memory-index.js.map +1 -0
- package/build/lib/shared-memory.d.ts +165 -0
- package/build/lib/shared-memory.js +398 -0
- package/build/lib/shared-memory.js.map +1 -0
- package/build/lib/storage.d.ts +38 -0
- package/build/lib/storage.js +106 -0
- package/build/lib/storage.js.map +1 -0
- package/build/lib/vault.d.ts +71 -0
- package/build/lib/vault.js +119 -0
- package/build/lib/vault.js.map +1 -0
- package/build/mcp.d.ts +32 -0
- package/build/mcp.js +734 -0
- package/build/mcp.js.map +1 -0
- package/build/server.d.ts +1 -0
- package/build/server.js +370 -0
- package/build/server.js.map +1 -0
- package/build/tests/attestation.test.d.ts +1 -0
- package/build/tests/attestation.test.js +175 -0
- package/build/tests/attestation.test.js.map +1 -0
- package/build/tests/crypto.test.d.ts +1 -0
- package/build/tests/crypto.test.js +109 -0
- package/build/tests/crypto.test.js.map +1 -0
- package/build/verify-flow.d.ts +10 -0
- package/build/verify-flow.js +81 -0
- package/build/verify-flow.js.map +1 -0
- package/build/verify.d.ts +14 -0
- package/build/verify.js +77 -0
- package/build/verify.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { describe, it, before } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { VaultCrypto } from "../lib/crypto.js";
|
|
4
|
+
describe("VaultCrypto", () => {
|
|
5
|
+
let crypto;
|
|
6
|
+
before(async () => {
|
|
7
|
+
crypto = new VaultCrypto();
|
|
8
|
+
await crypto.init("test-secret-key-for-unit-tests");
|
|
9
|
+
});
|
|
10
|
+
// ── Initialization ──
|
|
11
|
+
it("throws if encrypt called before init", async () => {
|
|
12
|
+
const uninit = new VaultCrypto();
|
|
13
|
+
await assert.rejects(() => uninit.encrypt("hello"), { message: /not initialized/i });
|
|
14
|
+
});
|
|
15
|
+
it("throws if decrypt called before init", async () => {
|
|
16
|
+
const uninit = new VaultCrypto();
|
|
17
|
+
await assert.rejects(() => uninit.decrypt({ iv: "00", content: "00", hash: "00" }), { message: /not initialized/i });
|
|
18
|
+
});
|
|
19
|
+
// ── Encrypt / Decrypt round-trip ──
|
|
20
|
+
it("round-trips a simple string", async () => {
|
|
21
|
+
const original = "patient has arrhythmia";
|
|
22
|
+
const encrypted = await crypto.encrypt(original);
|
|
23
|
+
const decrypted = await crypto.decrypt(encrypted);
|
|
24
|
+
assert.equal(decrypted, original);
|
|
25
|
+
});
|
|
26
|
+
it("round-trips an empty string", async () => {
|
|
27
|
+
const encrypted = await crypto.encrypt("");
|
|
28
|
+
const decrypted = await crypto.decrypt(encrypted);
|
|
29
|
+
assert.equal(decrypted, "");
|
|
30
|
+
});
|
|
31
|
+
it("round-trips unicode / emoji content", async () => {
|
|
32
|
+
const original = "日本語テスト 🔐🛡️ données chiffrées";
|
|
33
|
+
const encrypted = await crypto.encrypt(original);
|
|
34
|
+
const decrypted = await crypto.decrypt(encrypted);
|
|
35
|
+
assert.equal(decrypted, original);
|
|
36
|
+
});
|
|
37
|
+
it("round-trips a large payload (10KB)", async () => {
|
|
38
|
+
const original = "A".repeat(10_000);
|
|
39
|
+
const encrypted = await crypto.encrypt(original);
|
|
40
|
+
const decrypted = await crypto.decrypt(encrypted);
|
|
41
|
+
assert.equal(decrypted, original);
|
|
42
|
+
});
|
|
43
|
+
it("round-trips JSON data", async () => {
|
|
44
|
+
const obj = { apiKey: "sk-123", tokens: [1, 2, 3], nested: { ok: true } };
|
|
45
|
+
const original = JSON.stringify(obj);
|
|
46
|
+
const encrypted = await crypto.encrypt(original);
|
|
47
|
+
const decrypted = await crypto.decrypt(encrypted);
|
|
48
|
+
assert.deepEqual(JSON.parse(decrypted), obj);
|
|
49
|
+
});
|
|
50
|
+
// ── Payload structure ──
|
|
51
|
+
it("returns a valid EncryptedPayload shape", async () => {
|
|
52
|
+
const encrypted = await crypto.encrypt("test");
|
|
53
|
+
assert.equal(typeof encrypted.iv, "string");
|
|
54
|
+
assert.equal(typeof encrypted.content, "string");
|
|
55
|
+
assert.equal(typeof encrypted.hash, "string");
|
|
56
|
+
// IV should be 12 bytes = 24 hex chars
|
|
57
|
+
assert.equal(encrypted.iv.length, 24);
|
|
58
|
+
// Hash should be SHA-256 = 64 hex chars
|
|
59
|
+
assert.equal(encrypted.hash.length, 64);
|
|
60
|
+
});
|
|
61
|
+
it("produces a deterministic content hash (SHA-256 of plaintext)", async () => {
|
|
62
|
+
const a = await crypto.encrypt("same-input");
|
|
63
|
+
const b = await crypto.encrypt("same-input");
|
|
64
|
+
assert.equal(a.hash, b.hash);
|
|
65
|
+
});
|
|
66
|
+
it("uses a unique IV for each encryption (ciphertext differs)", async () => {
|
|
67
|
+
const a = await crypto.encrypt("same-input");
|
|
68
|
+
const b = await crypto.encrypt("same-input");
|
|
69
|
+
// IVs must differ (random)
|
|
70
|
+
assert.notEqual(a.iv, b.iv);
|
|
71
|
+
// Ciphertext must differ due to different IV
|
|
72
|
+
assert.notEqual(a.content, b.content);
|
|
73
|
+
});
|
|
74
|
+
// ── Cross-key isolation ──
|
|
75
|
+
it("fails to decrypt with a different key", async () => {
|
|
76
|
+
const encrypted = await crypto.encrypt("secret");
|
|
77
|
+
const otherCrypto = new VaultCrypto();
|
|
78
|
+
await otherCrypto.init("different-secret-key");
|
|
79
|
+
await assert.rejects(() => otherCrypto.decrypt(encrypted),
|
|
80
|
+
// AES-GCM auth tag mismatch throws a generic error
|
|
81
|
+
(err) => err instanceof Error);
|
|
82
|
+
});
|
|
83
|
+
// ── Tamper detection ──
|
|
84
|
+
it("rejects tampered ciphertext (AES-GCM auth tag)", async () => {
|
|
85
|
+
const encrypted = await crypto.encrypt("important data");
|
|
86
|
+
// Flip a byte in the middle of the ciphertext
|
|
87
|
+
const chars = encrypted.content.split("");
|
|
88
|
+
const mid = Math.floor(chars.length / 2);
|
|
89
|
+
chars[mid] = chars[mid] === "a" ? "b" : "a";
|
|
90
|
+
const tampered = { ...encrypted, content: chars.join("") };
|
|
91
|
+
await assert.rejects(() => crypto.decrypt(tampered), (err) => err instanceof Error);
|
|
92
|
+
});
|
|
93
|
+
it("rejects tampered IV", async () => {
|
|
94
|
+
const encrypted = await crypto.encrypt("important data");
|
|
95
|
+
const chars = encrypted.iv.split("");
|
|
96
|
+
chars[0] = chars[0] === "a" ? "b" : "a";
|
|
97
|
+
const tampered = { ...encrypted, iv: chars.join("") };
|
|
98
|
+
await assert.rejects(() => crypto.decrypt(tampered), (err) => err instanceof Error);
|
|
99
|
+
});
|
|
100
|
+
// ── Re-init with same secret produces same key ──
|
|
101
|
+
it("re-init with same secret can decrypt previous ciphertext", async () => {
|
|
102
|
+
const encrypted = await crypto.encrypt("persistent data");
|
|
103
|
+
const newCrypto = new VaultCrypto();
|
|
104
|
+
await newCrypto.init("test-secret-key-for-unit-tests");
|
|
105
|
+
const decrypted = await newCrypto.decrypt(encrypted);
|
|
106
|
+
assert.equal(decrypted, "persistent data");
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=crypto.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../../src/tests/crypto.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SILO — Flow contract verification
|
|
3
|
+
*
|
|
4
|
+
* Reads the Galileo testnet Flow contract state and recent Submit events
|
|
5
|
+
* to verify whether submit() failures are due to testnet infrastructure
|
|
6
|
+
* (contract rejecting all submits) vs local config/code.
|
|
7
|
+
*
|
|
8
|
+
* Usage: npm run verify-flow
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SILO — Flow contract verification
|
|
3
|
+
*
|
|
4
|
+
* Reads the Galileo testnet Flow contract state and recent Submit events
|
|
5
|
+
* to verify whether submit() failures are due to testnet infrastructure
|
|
6
|
+
* (contract rejecting all submits) vs local config/code.
|
|
7
|
+
*
|
|
8
|
+
* Usage: npm run verify-flow
|
|
9
|
+
*/
|
|
10
|
+
import { ethers } from "ethers";
|
|
11
|
+
import { getFlowContract } from "@0glabs/0g-ts-sdk";
|
|
12
|
+
import dotenv from "dotenv";
|
|
13
|
+
dotenv.config();
|
|
14
|
+
const FLOW_ADDRESS = process.env.FLOW_ADDRESS ?? "0x22E03a6A89B950F1c82ec5e74F8eCa321a105296";
|
|
15
|
+
const EVM_RPC = process.env.EVM_RPC;
|
|
16
|
+
async function main() {
|
|
17
|
+
if (!process.env.PRIVATE_KEY || !EVM_RPC) {
|
|
18
|
+
console.error("Set PRIVATE_KEY and EVM_RPC in .env");
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const provider = new ethers.JsonRpcProvider(EVM_RPC);
|
|
22
|
+
const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
|
|
23
|
+
const flow = getFlowContract(FLOW_ADDRESS, signer);
|
|
24
|
+
console.log("=== 0G Flow contract verification (Galileo testnet) ===\n");
|
|
25
|
+
console.log("Flow address:", FLOW_ADDRESS);
|
|
26
|
+
console.log("RPC:", EVM_RPC);
|
|
27
|
+
console.log("");
|
|
28
|
+
// 1. Read contract state (each call separately — some may revert on testnet)
|
|
29
|
+
console.log("--- Contract state ---");
|
|
30
|
+
const read = async (name, fn) => {
|
|
31
|
+
try {
|
|
32
|
+
const v = await fn();
|
|
33
|
+
console.log(" " + name + ":", String(v));
|
|
34
|
+
return { name, ok: true, value: v };
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
const msg = e?.reason ?? e?.shortMessage ?? e?.message ?? String(e);
|
|
38
|
+
console.log(" " + name + ": REVERT —", msg.slice(0, 80));
|
|
39
|
+
return { name, ok: false, error: msg };
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
await read("paused", () => flow.paused());
|
|
43
|
+
await read("initialized", () => flow.initialized());
|
|
44
|
+
await read("numSubmissions", () => flow.numSubmissions());
|
|
45
|
+
await read("submissionIndex", () => flow.submissionIndex());
|
|
46
|
+
await read("market", () => flow.market());
|
|
47
|
+
console.log("");
|
|
48
|
+
// 2. Recent Submit events (last ~50k blocks)
|
|
49
|
+
try {
|
|
50
|
+
const block = await provider.getBlockNumber();
|
|
51
|
+
const fromBlock = Math.max(0, block - 50_000);
|
|
52
|
+
const submitFilter = flow.getEvent("Submit");
|
|
53
|
+
const events = await flow.queryFilter(submitFilter, fromBlock, block);
|
|
54
|
+
console.log("--- Submit events (last 50k blocks) ---");
|
|
55
|
+
console.log(" Current block:", block);
|
|
56
|
+
console.log(" From block:", fromBlock);
|
|
57
|
+
console.log(" Submit event count:", events.length);
|
|
58
|
+
if (events.length > 0) {
|
|
59
|
+
const last = events[events.length - 1];
|
|
60
|
+
const lastBlock = last.blockNumber;
|
|
61
|
+
console.log(" Last Submit event block:", lastBlock, "(~" + (block - lastBlock) + " blocks ago)");
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(" No Submit events in this range — consistent with testnet not accepting submits.");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.warn("Could not query Submit events:", e);
|
|
69
|
+
}
|
|
70
|
+
console.log("");
|
|
71
|
+
console.log("--- Conclusion ---");
|
|
72
|
+
console.log("If any Flow view call (e.g. initialized) reverted above: the contract is not in a");
|
|
73
|
+
console.log("normal state — this is a testnet/contract infrastructure issue, not your code.");
|
|
74
|
+
console.log("If all views succeeded but Submit events = 0: testnet is not accepting submissions.");
|
|
75
|
+
console.log("Either way: your code and config are correct. Check 0G Discord for Galileo status.");
|
|
76
|
+
}
|
|
77
|
+
main().catch((e) => {
|
|
78
|
+
console.error(e);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=verify-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-flow.js","sourceRoot":"","sources":["../src/verify-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SILO — Verify CLI
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* npm run verify -- <rootHash>
|
|
6
|
+
* npm run verify -- <rootHash> --trace (for attestation traces)
|
|
7
|
+
*
|
|
8
|
+
* This is the tool you demo to judges:
|
|
9
|
+
* 1. Store something via the MCP server
|
|
10
|
+
* 2. Copy the root hash
|
|
11
|
+
* 3. Run: npm run verify -- 0xabc123...
|
|
12
|
+
* 4. Watch it download, decrypt, and display
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
package/build/verify.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SILO — Verify CLI
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* npm run verify -- <rootHash>
|
|
6
|
+
* npm run verify -- <rootHash> --trace (for attestation traces)
|
|
7
|
+
*
|
|
8
|
+
* This is the tool you demo to judges:
|
|
9
|
+
* 1. Store something via the MCP server
|
|
10
|
+
* 2. Copy the root hash
|
|
11
|
+
* 3. Run: npm run verify -- 0xabc123...
|
|
12
|
+
* 4. Watch it download, decrypt, and display
|
|
13
|
+
*/
|
|
14
|
+
import { AgentVault } from "./lib/vault.js";
|
|
15
|
+
import dotenv from "dotenv";
|
|
16
|
+
dotenv.config();
|
|
17
|
+
async function verify() {
|
|
18
|
+
const rootHash = process.argv[2];
|
|
19
|
+
const isTrace = process.argv.includes("--trace");
|
|
20
|
+
if (!rootHash) {
|
|
21
|
+
console.log(`
|
|
22
|
+
🛡️ SILO — Verifier
|
|
23
|
+
|
|
24
|
+
Usage:
|
|
25
|
+
npm run verify -- <rootHash> Decrypt a stored memory
|
|
26
|
+
npm run verify -- <rootHash> --trace Decrypt an attestation trace
|
|
27
|
+
|
|
28
|
+
Example:
|
|
29
|
+
npm run verify -- 0x1a2b3c...
|
|
30
|
+
`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const vault = new AgentVault({
|
|
34
|
+
privateKey: process.env.PRIVATE_KEY,
|
|
35
|
+
evmRpc: process.env.EVM_RPC,
|
|
36
|
+
indexerRpc: process.env.INDEXER_RPC,
|
|
37
|
+
vaultSecret: process.env.VAULT_SECRET,
|
|
38
|
+
});
|
|
39
|
+
await vault.init();
|
|
40
|
+
console.log(`\n🔍 Fetching from 0G Storage: ${rootHash.slice(0, 20)}...`);
|
|
41
|
+
try {
|
|
42
|
+
const decrypted = await vault.retrieve(rootHash, "verify-cli");
|
|
43
|
+
if (isTrace) {
|
|
44
|
+
// Pretty-print attestation trace
|
|
45
|
+
const trace = JSON.parse(decrypted);
|
|
46
|
+
console.log(`\n🔏 Attestation Trace`);
|
|
47
|
+
console.log(`${"─".repeat(50)}`);
|
|
48
|
+
console.log(` Session: ${trace.sessionId}`);
|
|
49
|
+
console.log(` Agent: ${trace.agentAddress?.slice(0, 12)}...`);
|
|
50
|
+
console.log(` Events: ${trace.eventCount}`);
|
|
51
|
+
console.log(` Merkle Root: ${trace.merkleRoot?.slice(0, 24)}...`);
|
|
52
|
+
console.log(` Started: ${new Date(trace.startedAt).toISOString()}`);
|
|
53
|
+
console.log(` Ended: ${new Date(trace.endedAt).toISOString()}`);
|
|
54
|
+
console.log(`\n Event Log:`);
|
|
55
|
+
for (const [i, event] of (trace.events ?? []).entries()) {
|
|
56
|
+
console.log(` ${i + 1}. [${event.type}] ${new Date(event.timestamp).toISOString()} — ${event.metadata ?? ""}`);
|
|
57
|
+
console.log(` in: ${event.inputHash.slice(0, 16)}...`);
|
|
58
|
+
console.log(` out: ${event.outputHash.slice(0, 16)}...`);
|
|
59
|
+
}
|
|
60
|
+
console.log(`${"─".repeat(50)}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Regular memory
|
|
64
|
+
console.log(`\n✅ Download successful. Decrypting...`);
|
|
65
|
+
console.log(`\n🔓 Decrypted Content:`);
|
|
66
|
+
console.log(`${"─".repeat(50)}`);
|
|
67
|
+
console.log(decrypted);
|
|
68
|
+
console.log(`${"─".repeat(50)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
console.error(`\n❌ Verification failed: ${err.message}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
verify();
|
|
77
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "silo-agent",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Encrypted private memory + execution attestation for AI agents on 0G",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./build/index.js",
|
|
7
|
+
"types": "./build/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./build/index.js",
|
|
11
|
+
"types": "./build/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"silo-agent": "./bin/silo.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"build",
|
|
19
|
+
"bin",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"start": "node build/server.js",
|
|
26
|
+
"mcp": "node build/mcp.js",
|
|
27
|
+
"verify": "node build/verify.js",
|
|
28
|
+
"doctor": "node build/doctor.js",
|
|
29
|
+
"demo": "node build/demo.js",
|
|
30
|
+
"verify-flow": "node build/verify-flow.js",
|
|
31
|
+
"test": "tsc && node --test 'build/tests/*.test.js'",
|
|
32
|
+
"prepublishOnly": "npm run build"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"0g",
|
|
36
|
+
"ai-agents",
|
|
37
|
+
"privacy",
|
|
38
|
+
"mcp",
|
|
39
|
+
"openclaw",
|
|
40
|
+
"attestation",
|
|
41
|
+
"encrypted-memory",
|
|
42
|
+
"model-context-protocol"
|
|
43
|
+
],
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@0glabs/0g-ts-sdk": "0.3.3",
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
48
|
+
"cors": "^2.8.6",
|
|
49
|
+
"dotenv": "^16.4.7",
|
|
50
|
+
"ethers": "^6.13.5",
|
|
51
|
+
"express": "^5.2.1",
|
|
52
|
+
"socket.io": "^4.8.3",
|
|
53
|
+
"zod": "^3.24.2"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/cors": "^2.8.19",
|
|
57
|
+
"@types/express": "^5.0.6",
|
|
58
|
+
"@types/node": "^22.10.10",
|
|
59
|
+
"typescript": "^5.7.3"
|
|
60
|
+
}
|
|
61
|
+
}
|