@sykeclone/kage-sdk 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 ADDED
@@ -0,0 +1,177 @@
1
+ # Kage — Onchain Agent Memory Protocol
2
+
3
+ > *影 (Kage) — Shadow. What an agent remembers is its shadow on the chain.*
4
+
5
+ Kage is the missing memory layer for autonomous AI agents on Sui.
6
+ Not just persistent storage — queryable, conflict-aware, event-driven,
7
+ temporally-snapshotted, cross-graph agent cognition infrastructure.
8
+
9
+ Built for **Sui Overflow 2026 — Walrus Track**.
10
+
11
+ ---
12
+
13
+ ## The Problem
14
+
15
+ Agents today forget. They rely on fragile local memory, can't share context
16
+ across workflows, and produce zero verifiable audit trail. When a trade goes
17
+ wrong, there is no record of what the agent knew, or why it decided.
18
+
19
+ LangGraph, Mastra, ElizaOS — none of them solve this. They're all offchain.
20
+
21
+ ## Kage Solves It With 5 Primitives
22
+
23
+ | # | Feature | What it does |
24
+ |---|---------|-------------|
25
+ | 1 | **Associative Memory Index** | Tag-based semantic query — find memories by asset, action, namespace, confidence |
26
+ | 2 | **Conflict Detection** | Two agents disagree on BTC? Flagged automatically onchain |
27
+ | 3 | **Memory Inheritance** | Child agent bootstraps from parent memory — linked provenance chain |
28
+ | 4 | **Temporal Snapshots** | Freeze namespace state at any point — full time travel audit |
29
+ | 5 | **Cross-graph Sharing** | Two separate agent graphs share a memory namespace via a permissioned bridge |
30
+
31
+ Plus **event-driven triggers** — subscriptions that fire a Sui event when
32
+ a matching memory is written, waking the next agent automatically.
33
+
34
+ ---
35
+
36
+ ## Architecture
37
+
38
+ ```
39
+ Your Agent (TypeScript/Python)
40
+
41
+
42
+ Kage Runtime SDK
43
+ ┌──────────────────────────────┐
44
+ │ write() / inherit() │
45
+ │ snapshot() / share() │
46
+ │ subscribe() / recall() │
47
+ └──────────┬───────────────────┘
48
+
49
+ ┌───────┴────────┐
50
+ ▼ ▼
51
+ Walrus Sui Move
52
+ (blob storage) (truth layer)
53
+ blob_id ──────────► memory index
54
+ state JSON conflict detection
55
+ persistent subscriptions
56
+ verifiable snapshots
57
+ cross-graph bridges
58
+ ```
59
+
60
+ ---
61
+
62
+ ## Quick Start
63
+
64
+ ### 1. Deploy the contract
65
+
66
+ ```bash
67
+ chmod +x deploy.sh
68
+ ./deploy.sh # mainnet
69
+ ./deploy.sh --testnet
70
+ ```
71
+
72
+ ### 2. Configure
73
+
74
+ ```bash
75
+ cp .env.example .env
76
+ # Fill in SUI_PRIVATE_KEY_B64
77
+ # KAGE_PACKAGE_ID and KAGE_PROTOCOL_ID are filled by deploy.sh
78
+ ```
79
+
80
+ ### 3. Install and run the demo
81
+
82
+ ```bash
83
+ npm install
84
+ npm run demo
85
+ ```
86
+
87
+ ---
88
+
89
+ ## SDK Usage
90
+
91
+ ```typescript
92
+ import { Kage } from './src/kage.js';
93
+
94
+ const kage = new Kage({
95
+ suiRpcUrl: 'https://fullnode.mainnet.sui.io:443',
96
+ privateKeyB64: process.env.SUI_PRIVATE_KEY_B64!,
97
+ packageId: process.env.KAGE_PACKAGE_ID!,
98
+ protocolId: process.env.KAGE_PROTOCOL_ID!,
99
+ walrusAggregatorUrl: process.env.WALRUS_AGGREGATOR_URL!,
100
+ walrusPublisherUrl: process.env.WALRUS_PUBLISHER_URL!,
101
+ agentName: 'MyAgent',
102
+ namespace: 'myapp',
103
+ });
104
+
105
+ await kage.init();
106
+
107
+ // Write a memory
108
+ const result = await kage.write({
109
+ state: { signal: 'UP', price: 67420 },
110
+ tags: ['BTC', 'SCOUT', 'UP'],
111
+ asset: 'BTC',
112
+ action: 'BUY',
113
+ confidence: 78,
114
+ });
115
+
116
+ // Inherit from parent
117
+ const child = await kage.inherit(result.memoryId, newState, 'EXECUTE', ['BTC', 'RISK'], 65);
118
+
119
+ // Snapshot the namespace
120
+ await kage.snapshot('Pre-trade state captured');
121
+
122
+ // Cross-graph share
123
+ await kage.createBridge(otherProtocolId, 'shared-signals');
124
+ await kage.shareMemory(bridgeId, otherProtocolId, result.memoryId);
125
+
126
+ // Subscribe to BUY signals
127
+ await kage.subscribe(['BUY'], 'BTC', 'BUY', 'myapp');
128
+
129
+ // Recall a blob from Walrus
130
+ const state = await kage.recall(result.blobId);
131
+
132
+ // Report outcome (updates reputation)
133
+ await kage.reportOutcome(result.memoryId, 'SUCCESS');
134
+ ```
135
+
136
+ ---
137
+
138
+ ## AlphaLoop Demo
139
+
140
+ AlphaLoop is a live 4-node trading agent that uses Kage as its memory layer.
141
+ It pulls signals from Trend Pilot (X Layer) and runs Scout → Risk → Decide → Execute.
142
+
143
+ Every node writes to Walrus, inherits from the previous node,
144
+ and the full decision trail is anchored onchain.
145
+
146
+ ```bash
147
+ npm run demo
148
+ ```
149
+
150
+ ---
151
+
152
+ ## File Structure
153
+
154
+ ```
155
+ kage/
156
+ ├── move/
157
+ │ ├── Move.toml
158
+ │ └── sources/
159
+ │ └── kage.move # The full protocol contract
160
+ ├── src/
161
+ │ ├── kage.ts # Main SDK
162
+ │ ├── walrus.ts # Walrus client
163
+ │ ├── sui.ts # Sui Move client
164
+ │ ├── types/
165
+ │ │ └── index.ts # All TypeScript types
166
+ │ └── demo/
167
+ │ └── alphaloop.ts # Live trading agent demo
168
+ ├── deploy.sh # One-command deploy
169
+ ├── .env.example
170
+ ├── package.json
171
+ └── tsconfig.json
172
+ ```
173
+
174
+ ---
175
+
176
+ ## Built by Semideus / @syke0x
177
+ Sui Overflow 2026 — Walrus Track — $70K prize pool
@@ -0,0 +1,13 @@
1
+ /**
2
+ * AlphaLoop — Kage Demo Agent
3
+ *
4
+ * 4 nodes: Scout → Risk → Decide → Execute
5
+ * Each node writes memory to Walrus, anchors onchain via Kage protocol.
6
+ * Demonstrates: associative index, conflict detection, inheritance,
7
+ * temporal snapshots, and cross-graph sharing.
8
+ *
9
+ * Signal source: Trend Pilot API (X Layer)
10
+ * Protocol: Kage on Sui Mainnet
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=alphaloop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alphaloop.d.ts","sourceRoot":"","sources":["../../src/demo/alphaloop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * AlphaLoop — Kage Demo Agent
3
+ *
4
+ * 4 nodes: Scout → Risk → Decide → Execute
5
+ * Each node writes memory to Walrus, anchors onchain via Kage protocol.
6
+ * Demonstrates: associative index, conflict detection, inheritance,
7
+ * temporal snapshots, and cross-graph sharing.
8
+ *
9
+ * Signal source: Trend Pilot API (X Layer)
10
+ * Protocol: Kage on Sui Mainnet
11
+ */
12
+ import { config } from "dotenv";
13
+ import { resolve, dirname } from "path";
14
+ import { fileURLToPath } from "url";
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ config({ path: resolve(__dirname, "../../.env") });
17
+ import { Kage } from '../kage.js';
18
+ import crypto from 'crypto';
19
+ // ─── Config ───────────────────────────────────────────────────────────────────
20
+ const TREND_PILOT_URL = process.env.TREND_PILOT_URL ?? 'http://108.61.91.153:8000';
21
+ const ASSETS = ['BTC', 'ETH', 'XAUT'];
22
+ const CYCLE_DELAY_MS = Number(process.env.CYCLE_DELAY_MS ?? 60_000); // 1 min default
23
+ const NAMESPACE = 'alphaloop';
24
+ // ─── Kage Instance ────────────────────────────────────────────────────────────
25
+ function buildKage() {
26
+ const required = [
27
+ 'SUI_PRIVATE_KEY_B64',
28
+ 'KAGE_PACKAGE_ID',
29
+ 'KAGE_PROTOCOL_ID',
30
+ 'WALRUS_AGGREGATOR_URL',
31
+ 'WALRUS_PUBLISHER_URL',
32
+ ];
33
+ for (const key of required) {
34
+ if (!process.env[key])
35
+ throw new Error(`Missing env: ${key}`);
36
+ }
37
+ return new Kage({
38
+ suiRpcUrl: process.env.SUI_RPC_URL ?? 'https://fullnode.mainnet.sui.io:443',
39
+ privateKeyB64: process.env.SUI_PRIVATE_KEY_B64,
40
+ packageId: process.env.KAGE_PACKAGE_ID,
41
+ protocolId: process.env.KAGE_PROTOCOL_ID,
42
+ walrusAggregatorUrl: process.env.WALRUS_AGGREGATOR_URL,
43
+ walrusPublisherUrl: process.env.WALRUS_PUBLISHER_URL,
44
+ agentName: 'AlphaLoop',
45
+ namespace: NAMESPACE,
46
+ defaultTtlEpochs: 10,
47
+ cycleDelayMs: CYCLE_DELAY_MS,
48
+ });
49
+ }
50
+ // ─── Node: Scout ──────────────────────────────────────────────────────────────
51
+ async function nodeScout(kage, asset, cycleId) {
52
+ console.log(`\n[Scout] Fetching signal for ${asset}`);
53
+ const url = `${TREND_PILOT_URL}/signal/${asset}/free`;
54
+ const res = await fetch(url);
55
+ if (!res.ok)
56
+ throw new Error(`Trend Pilot free signal failed [${res.status}]`);
57
+ const free = await res.json();
58
+ // Build partial signal from free endpoint
59
+ const signal = {
60
+ asset,
61
+ direction: free.direction ?? 'HOLD',
62
+ confidence: Number(free.confidence ?? 50),
63
+ rsi: 0,
64
+ vwap: 0,
65
+ bollinger_upper: 0,
66
+ bollinger_lower: 0,
67
+ momentum: 0,
68
+ order_book_pressure: 0,
69
+ price: Number(free.price ?? 0),
70
+ timestamp: new Date().toISOString(),
71
+ };
72
+ const state = {
73
+ cycleId,
74
+ asset,
75
+ scoutSignal: signal,
76
+ startedAt: Date.now(),
77
+ };
78
+ const action = signal.direction === 'UP'
79
+ ? 'BUY'
80
+ : signal.direction === 'DOWN' ? 'SELL' : 'OBSERVE';
81
+ const writeResult = await kage.write({
82
+ state,
83
+ tags: [asset, 'SCOUT', signal.direction, `CONF_${Math.floor(signal.confidence)}`],
84
+ asset,
85
+ action,
86
+ confidence: Math.floor(signal.confidence),
87
+ namespace: NAMESPACE,
88
+ });
89
+ state.scoutBlobId = writeResult.blobId;
90
+ console.log(`[Scout] Memory #${writeResult.memoryId} | blob: ${writeResult.blobId}`);
91
+ if (writeResult.conflictDetected) {
92
+ console.warn(`[Scout] ⚠️ Conflict detected with existing memory`);
93
+ }
94
+ return { state, writeResult };
95
+ }
96
+ // ─── Node: Risk ───────────────────────────────────────────────────────────────
97
+ async function nodeRisk(kage, state, scoutMemoryId) {
98
+ console.log(`[Risk] Evaluating risk for ${state.asset}`);
99
+ let risk;
100
+ try {
101
+ const res = await fetch(`${TREND_PILOT_URL}/signal/${state.asset}/free`);
102
+ const data = await res.json();
103
+ risk = {
104
+ asset: state.asset,
105
+ risk_level: data.confidence > 70 ? 'LOW' : data.confidence > 40 ? 'MEDIUM' : 'HIGH',
106
+ volatility: Math.random() * 5,
107
+ trend: data.direction ?? 'HOLD',
108
+ momentum: data.confidence ?? 50,
109
+ };
110
+ }
111
+ catch {
112
+ risk = {
113
+ asset: state.asset,
114
+ risk_level: 'MEDIUM',
115
+ volatility: 2.5,
116
+ trend: 'UNKNOWN',
117
+ momentum: 50,
118
+ };
119
+ }
120
+ state.riskAssessment = risk;
121
+ // Inherit from scout memory — demonstrates feature 3
122
+ const writeResult = await kage.inherit(scoutMemoryId, { ...state, node: 'risk', risk }, 'OBSERVE', [state.asset, 'RISK', risk.risk_level], Math.floor(state.scoutSignal?.confidence ?? 50));
123
+ state.riskBlobId = writeResult.blobId;
124
+ console.log(`[Risk] Memory #${writeResult.childMemoryId} (inherited from #${scoutMemoryId})`);
125
+ return { state, writeResult: { ...writeResult, memoryId: writeResult.childMemoryId, blobHash: writeResult.blobId, conflictDetected: false } };
126
+ }
127
+ // ─── Node: Decide ─────────────────────────────────────────────────────────────
128
+ async function nodeDecide(kage, state) {
129
+ console.log(`[Decide] Making decision for ${state.asset}`);
130
+ const signal = state.scoutSignal;
131
+ const risk = state.riskAssessment;
132
+ let decision;
133
+ let reason;
134
+ if (risk.risk_level === 'HIGH') {
135
+ decision = 'HOLD';
136
+ reason = 'Risk too high — standing down';
137
+ }
138
+ else if (signal.direction === 'UP' && risk.risk_level === 'LOW') {
139
+ decision = 'BUY';
140
+ reason = `Strong uptrend, low risk — buying ${state.asset}`;
141
+ }
142
+ else if (signal.direction === 'DOWN' && risk.risk_level === 'LOW') {
143
+ decision = 'SELL';
144
+ reason = `Downtrend confirmed, low risk — selling ${state.asset}`;
145
+ }
146
+ else {
147
+ decision = 'HOLD';
148
+ reason = 'Mixed signals — holding position';
149
+ }
150
+ state.decision = decision;
151
+ state.decisionReason = reason;
152
+ console.log(`[Decide] → ${decision}: ${reason}`);
153
+ const writeResult = await kage.write({
154
+ state: { ...state, node: 'decide' },
155
+ tags: [state.asset, 'DECISION', decision, risk.risk_level],
156
+ asset: state.asset,
157
+ action: decision,
158
+ confidence: Math.floor(signal.confidence),
159
+ namespace: NAMESPACE,
160
+ });
161
+ state.decisionBlobId = writeResult.blobId;
162
+ return { state, writeResult };
163
+ }
164
+ // ─── Node: Execute ────────────────────────────────────────────────────────────
165
+ async function nodeExecute(kage, state, decisionMemoryId) {
166
+ console.log(`[Execute] Executing ${state.decision} on ${state.asset}`);
167
+ // In production: submit actual trade via DEX SDK
168
+ // Here: log execution intent with full provenance
169
+ const executionNote = state.decision === 'HOLD'
170
+ ? `No trade — HOLD signal on ${state.asset} @ cycle ${state.cycleId}`
171
+ : `${state.decision} order intent on ${state.asset} — reason: ${state.decisionReason}`;
172
+ state.executionNote = executionNote;
173
+ state.completedAt = Date.now();
174
+ const writeResult = await kage.write({
175
+ state: { ...state, node: 'execute' },
176
+ tags: [state.asset, 'EXECUTION', state.decision, 'CYCLE_COMPLETE'],
177
+ asset: state.asset,
178
+ action: 'EXECUTE',
179
+ confidence: 100,
180
+ namespace: NAMESPACE,
181
+ });
182
+ state.executionBlobId = writeResult.blobId;
183
+ console.log(`[Execute] ✅ ${executionNote}`);
184
+ console.log(`[Execute] Memory #${writeResult.memoryId} | blob: ${writeResult.blobId}`);
185
+ // Report outcome as PENDING (updated after trade settles)
186
+ // await kage.reportOutcome(writeResult.memoryId, 'PENDING');
187
+ return { state, writeResult };
188
+ }
189
+ // ─── Main Loop ────────────────────────────────────────────────────────────────
190
+ async function main() {
191
+ console.log('╔════════════════════════════════════════╗');
192
+ console.log('║ AlphaLoop — Kage Demo Agent ║');
193
+ console.log('║ Sui Mainnet + Walrus ║');
194
+ console.log('╚════════════════════════════════════════╝\n');
195
+ const kage = buildKage();
196
+ await kage.init();
197
+ // Subscribe to BUY signals from any agent (event-driven triggers demo)
198
+ await kage.subscribe(['BUY'], '', 'BUY', NAMESPACE);
199
+ console.log('[AlphaLoop] Subscribed to BUY signals');
200
+ const stats = await kage.stats();
201
+ console.log(`[AlphaLoop] Protocol stats:`, stats);
202
+ let cycle = 0;
203
+ while (true) {
204
+ cycle++;
205
+ console.log(`\n${'═'.repeat(50)}`);
206
+ console.log(`[AlphaLoop] Cycle #${cycle} — ${new Date().toISOString()}`);
207
+ for (const asset of ASSETS) {
208
+ try {
209
+ const cycleId = `${asset}-${cycle}-${crypto.randomBytes(4).toString('hex')}`;
210
+ // Node 1: Scout
211
+ const { state: s1, writeResult: r1 } = await nodeScout(kage, asset, cycleId);
212
+ // Node 2: Risk (inherits from Scout — feature 3)
213
+ const { state: s2, writeResult: r2 } = await nodeRisk(kage, s1, r1.memoryId);
214
+ // Node 3: Decide
215
+ const { state: s3, writeResult: r3 } = await nodeDecide(kage, s2);
216
+ // Node 4: Execute
217
+ const { state: s4, writeResult: r4 } = await nodeExecute(kage, s3, r3.memoryId);
218
+ // Feature 4: Snapshot after each asset cycle
219
+ await kage.snapshot(`Cycle ${cycle} — ${asset} complete. Decision: ${s4.decision}`, NAMESPACE);
220
+ console.log(`[AlphaLoop] ✓ ${asset} cycle complete | decision: ${s4.decision}`);
221
+ }
222
+ catch (err) {
223
+ console.error(`[AlphaLoop] ✗ ${asset} cycle failed:`, err);
224
+ }
225
+ await sleep(5_000); // 5s between assets
226
+ }
227
+ const finalStats = await kage.stats();
228
+ console.log(`\n[AlphaLoop] Protocol after cycle ${cycle}:`, finalStats);
229
+ console.log(`[AlphaLoop] Sleeping ${CYCLE_DELAY_MS / 1000}s until next cycle...`);
230
+ await sleep(CYCLE_DELAY_MS);
231
+ }
232
+ }
233
+ function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
234
+ main().catch(err => {
235
+ console.error('[AlphaLoop] Fatal:', err);
236
+ process.exit(1);
237
+ });
238
+ //# sourceMappingURL=alphaloop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alphaloop.js","sourceRoot":"","sources":["../../src/demo/alphaloop.ts"],"names":[],"mappings":"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"}
package/dist/kage.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { KageConfig, WriteMemoryParams, WriteResult, InheritResult, SnapshotResult, Action, Outcome } from './types/index.js';
2
+ export declare class Kage {
3
+ private walrus;
4
+ private sui;
5
+ private config;
6
+ private registered;
7
+ constructor(config: KageConfig);
8
+ get address(): string;
9
+ init(): Promise<void>;
10
+ write(params: WriteMemoryParams): Promise<WriteResult>;
11
+ inherit(parentMemoryId: number, newState: Record<string, unknown>, action: Action, tags: string[], confidence: number, ttlEpochs?: number): Promise<InheritResult>;
12
+ snapshot(description: string, namespace?: string): Promise<SnapshotResult>;
13
+ createBridge(targetProtocolId: string, sharedNamespace: string): Promise<string>;
14
+ shareMemory(bridgeId: string, targetProtocolId: string, memoryId: number): Promise<string>;
15
+ subscribe(watchTags: string[], watchAsset?: string, watchAction?: string, watchNamespace?: string): Promise<string>;
16
+ reportOutcome(memoryId: number, outcome: Outcome): Promise<string>;
17
+ recall(blobId: string): Promise<Record<string, unknown>>;
18
+ verify(blobId: string, hash: string): Promise<boolean>;
19
+ stats(): Promise<{
20
+ walletBalance: string;
21
+ address: string;
22
+ totalMemories: number;
23
+ totalConflicts: number;
24
+ totalSnapshots: number;
25
+ totalSubscriptions: number;
26
+ }>;
27
+ }
28
+ //# sourceMappingURL=kage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kage.d.ts","sourceRoot":"","sources":["../src/kage.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAC1C,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAC/C,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,UAAU;IAM9B,IAAI,OAAO,IAAI,MAAM,CAA6B;IAI5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsCtD,OAAO,CACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAuBnB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAc1E,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa1F,SAAS,CACb,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,SAAK,EACf,WAAW,SAAK,EAChB,cAAc,SAAK,GAClB,OAAO,CAAC,MAAM,CAAC;IAYZ,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIxD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtD,KAAK;;;;;;;;CAOZ"}
package/dist/kage.js ADDED
@@ -0,0 +1,100 @@
1
+ import { WalrusClient } from './walrus.js';
2
+ import { KageSuiClient } from './sui.js';
3
+ export class Kage {
4
+ walrus;
5
+ sui;
6
+ config;
7
+ registered = false;
8
+ constructor(config) {
9
+ this.config = config;
10
+ this.walrus = new WalrusClient(config.walrusAggregatorUrl, config.walrusPublisherUrl);
11
+ this.sui = new KageSuiClient(config.suiRpcUrl, config.privateKeyB64, config.packageId);
12
+ }
13
+ get address() { return this.sui.address; }
14
+ // ─── Bootstrap ──────────────────────────────────────────────────────────────
15
+ async init() {
16
+ if (this.registered)
17
+ return;
18
+ console.log(`[Kage] Registering agent ${this.config.agentName} in namespace ${this.config.namespace}`);
19
+ await this.sui.registerAgent(this.config.protocolId, this.config.agentName, this.config.namespace);
20
+ this.registered = true;
21
+ console.log(`[Kage] Agent registered. Address: ${this.address}`);
22
+ }
23
+ // ─── 1. Write Memory ────────────────────────────────────────────────────────
24
+ async write(params) {
25
+ const namespace = params.namespace ?? this.config.namespace;
26
+ const ttlEpochs = params.ttlEpochs ?? this.config.defaultTtlEpochs ?? 10;
27
+ // 1. Upload state blob to Walrus
28
+ console.log(`[Kage] Uploading state to Walrus — asset=${params.asset} action=${params.action}`);
29
+ const { blobId, blobHash, size } = await this.walrus.upload(params.state, ttlEpochs);
30
+ console.log(`[Kage] Blob uploaded: ${blobId} (${size}b)`);
31
+ // 2. Wait for blob propagation
32
+ await this.walrus.waitForBlob(blobId);
33
+ // 3. Anchor to Sui with full semantic metadata
34
+ const { txDigest, memoryId } = await this.sui.writeMemory(this.config.protocolId, blobId, blobHash, params.tags, params.asset, params.action, params.confidence, ttlEpochs, namespace);
35
+ console.log(`[Kage] Memory #${memoryId} anchored onchain — tx: ${txDigest}`);
36
+ return {
37
+ memoryId,
38
+ blobId,
39
+ blobHash,
40
+ txDigest,
41
+ conflictDetected: false, // resolved from event in advanced usage
42
+ };
43
+ }
44
+ // ─── 3. Inherit Memory ──────────────────────────────────────────────────────
45
+ async inherit(parentMemoryId, newState, action, tags, confidence, ttlEpochs) {
46
+ const epochs = ttlEpochs ?? this.config.defaultTtlEpochs ?? 10;
47
+ const { blobId, blobHash } = await this.walrus.upload(newState, epochs);
48
+ await this.walrus.waitForBlob(blobId);
49
+ const { txDigest, childId } = await this.sui.inheritMemory(this.config.protocolId, parentMemoryId, blobId, blobHash, tags, action, confidence, epochs);
50
+ console.log(`[Kage] Memory #${childId} inherited from #${parentMemoryId} — tx: ${txDigest}`);
51
+ return { childMemoryId: childId, parentMemoryId, blobId, txDigest };
52
+ }
53
+ // ─── 4. Snapshot ────────────────────────────────────────────────────────────
54
+ async snapshot(description, namespace) {
55
+ const ns = namespace ?? this.config.namespace;
56
+ const txDigest = await this.sui.takeSnapshot(this.config.protocolId, ns, description);
57
+ const state = await this.sui.getProtocolState(this.config.protocolId);
58
+ console.log(`[Kage] Snapshot taken — tx: ${txDigest}`);
59
+ return {
60
+ snapshotId: state.totalSnapshots - 1,
61
+ takenAtSequence: state.totalMemories,
62
+ txDigest,
63
+ };
64
+ }
65
+ // ─── 5. Cross-graph Bridge ──────────────────────────────────────────────────
66
+ async createBridge(targetProtocolId, sharedNamespace) {
67
+ const txDigest = await this.sui.createBridge(this.config.protocolId, targetProtocolId, sharedNamespace);
68
+ console.log(`[Kage] Bridge created to ${targetProtocolId} — namespace: ${sharedNamespace}`);
69
+ return txDigest;
70
+ }
71
+ async shareMemory(bridgeId, targetProtocolId, memoryId) {
72
+ const txDigest = await this.sui.shareMemoryAcross(bridgeId, this.config.protocolId, targetProtocolId, memoryId);
73
+ console.log(`[Kage] Memory #${memoryId} shared across bridge ${bridgeId}`);
74
+ return txDigest;
75
+ }
76
+ // ─── Subscriptions ──────────────────────────────────────────────────────────
77
+ async subscribe(watchTags, watchAsset = '', watchAction = '', watchNamespace = '') {
78
+ return this.sui.subscribe(this.config.protocolId, watchTags, watchAsset, watchAction, watchNamespace);
79
+ }
80
+ // ─── Outcome Feedback ───────────────────────────────────────────────────────
81
+ async reportOutcome(memoryId, outcome) {
82
+ return this.sui.recordOutcome(this.config.protocolId, memoryId, outcome);
83
+ }
84
+ // ─── Recall (Walrus fetch by blob_id) ───────────────────────────────────────
85
+ async recall(blobId) {
86
+ return this.walrus.download(blobId);
87
+ }
88
+ async verify(blobId, hash) {
89
+ return this.walrus.verify(blobId, hash);
90
+ }
91
+ // ─── Protocol State ─────────────────────────────────────────────────────────
92
+ async stats() {
93
+ const [state, balance] = await Promise.all([
94
+ this.sui.getProtocolState(this.config.protocolId),
95
+ this.sui.getBalance(),
96
+ ]);
97
+ return { ...state, walletBalance: balance, address: this.address };
98
+ }
99
+ }
100
+ //# sourceMappingURL=kage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kage.js","sourceRoot":"","sources":["../src/kage.ts"],"names":[],"mappings":"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"}
package/dist/sui.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export declare class KageSuiClient {
2
+ private client;
3
+ private keypair;
4
+ private packageId;
5
+ constructor(rpcUrl: string, privateKey: string, packageId: string);
6
+ get address(): string;
7
+ registerAgent(protocolId: string, name: string, namespace: string): Promise<string>;
8
+ writeMemory(protocolId: string, blobId: string, blobHash: string, tags: string[], asset: string, action: string, confidence: number, ttlEpochs: number, namespace: string): Promise<{
9
+ txDigest: string;
10
+ memoryId: number;
11
+ }>;
12
+ inheritMemory(protocolId: string, parentId: number, blobId: string, blobHash: string, tags: string[], action: string, confidence: number, ttlEpochs: number): Promise<{
13
+ txDigest: string;
14
+ childId: number;
15
+ }>;
16
+ takeSnapshot(protocolId: string, namespace: string, description: string): Promise<string>;
17
+ createBridge(protocolAId: string, protocolBId: string, sharedNamespace: string): Promise<string>;
18
+ shareMemoryAcross(bridgeId: string, sourceProtocolId: string, targetProtocolId: string, memoryId: number): Promise<string>;
19
+ subscribe(protocolId: string, watchTags: string[], watchAsset: string, watchAction: string, watchNamespace: string): Promise<string>;
20
+ recordOutcome(protocolId: string, memoryId: number, outcome: string): Promise<string>;
21
+ getProtocolState(protocolId: string): Promise<{
22
+ totalMemories: number;
23
+ totalConflicts: number;
24
+ totalSnapshots: number;
25
+ totalSubscriptions: number;
26
+ }>;
27
+ getBalance(): Promise<string>;
28
+ private exec;
29
+ }
30
+ //# sourceMappingURL=sui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../src/sui.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAMjE,IAAI,OAAO,IAAI,MAAM,CAAuD;IAEtE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanF,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAqB5C,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoB3C,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAazF,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAcZ,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC;IAeZ,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAarF,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAWI,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAMrB,IAAI;CAWnB"}
package/dist/sui.js ADDED
@@ -0,0 +1,161 @@
1
+ import { SuiClient } from '@mysten/sui/client';
2
+ import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
3
+ import { Transaction } from '@mysten/sui/transactions';
4
+ export class KageSuiClient {
5
+ client;
6
+ keypair;
7
+ packageId;
8
+ constructor(rpcUrl, privateKey, packageId) {
9
+ this.client = new SuiClient({ url: rpcUrl });
10
+ this.keypair = Ed25519Keypair.fromSecretKey(privateKey);
11
+ this.packageId = packageId;
12
+ }
13
+ get address() { return this.keypair.getPublicKey().toSuiAddress(); }
14
+ async registerAgent(protocolId, name, namespace) {
15
+ const tx = new Transaction();
16
+ tx.moveCall({
17
+ target: `${this.packageId}::kage::register_agent`,
18
+ arguments: [
19
+ tx.object(protocolId),
20
+ tx.pure.vector('u8', enc(name)),
21
+ tx.pure.vector('u8', enc(namespace)),
22
+ ],
23
+ });
24
+ return this.exec(tx);
25
+ }
26
+ async writeMemory(protocolId, blobId, blobHash, tags, asset, action, confidence, ttlEpochs, namespace) {
27
+ const tx = new Transaction();
28
+ tx.moveCall({
29
+ target: `${this.packageId}::kage::write_memory`,
30
+ arguments: [
31
+ tx.object(protocolId),
32
+ tx.pure.vector('u8', enc(blobId)),
33
+ tx.pure.vector('u8', hexToBytes(blobHash)),
34
+ tx.pure.vector('vector<u8>', tags.map(enc)),
35
+ tx.pure.vector('u8', enc(asset)),
36
+ tx.pure.vector('u8', enc(action)),
37
+ tx.pure.u64(confidence),
38
+ tx.pure.u64(ttlEpochs),
39
+ tx.pure.vector('u8', enc(namespace)),
40
+ ],
41
+ });
42
+ const digest = await this.exec(tx);
43
+ const state = await this.getProtocolState(protocolId);
44
+ return { txDigest: digest, memoryId: state.totalMemories - 1 };
45
+ }
46
+ async inheritMemory(protocolId, parentId, blobId, blobHash, tags, action, confidence, ttlEpochs) {
47
+ const tx = new Transaction();
48
+ tx.moveCall({
49
+ target: `${this.packageId}::kage::inherit_memory`,
50
+ arguments: [
51
+ tx.object(protocolId),
52
+ tx.pure.u64(parentId),
53
+ tx.pure.vector('u8', enc(blobId)),
54
+ tx.pure.vector('u8', hexToBytes(blobHash)),
55
+ tx.pure.vector('vector<u8>', tags.map(enc)),
56
+ tx.pure.vector('u8', enc(action)),
57
+ tx.pure.u64(confidence),
58
+ tx.pure.u64(ttlEpochs),
59
+ ],
60
+ });
61
+ const digest = await this.exec(tx);
62
+ const state = await this.getProtocolState(protocolId);
63
+ return { txDigest: digest, childId: state.totalMemories - 1 };
64
+ }
65
+ async takeSnapshot(protocolId, namespace, description) {
66
+ const tx = new Transaction();
67
+ tx.moveCall({
68
+ target: `${this.packageId}::kage::take_snapshot`,
69
+ arguments: [
70
+ tx.object(protocolId),
71
+ tx.pure.vector('u8', enc(namespace)),
72
+ tx.pure.vector('u8', enc(description)),
73
+ ],
74
+ });
75
+ return this.exec(tx);
76
+ }
77
+ async createBridge(protocolAId, protocolBId, sharedNamespace) {
78
+ const tx = new Transaction();
79
+ tx.moveCall({
80
+ target: `${this.packageId}::kage::create_bridge`,
81
+ arguments: [
82
+ tx.object(protocolAId),
83
+ tx.object(protocolBId),
84
+ tx.pure.vector('u8', enc(sharedNamespace)),
85
+ ],
86
+ });
87
+ return this.exec(tx);
88
+ }
89
+ async shareMemoryAcross(bridgeId, sourceProtocolId, targetProtocolId, memoryId) {
90
+ const tx = new Transaction();
91
+ tx.moveCall({
92
+ target: `${this.packageId}::kage::share_memory_across`,
93
+ arguments: [
94
+ tx.object(bridgeId),
95
+ tx.object(sourceProtocolId),
96
+ tx.object(targetProtocolId),
97
+ tx.pure.u64(memoryId),
98
+ ],
99
+ });
100
+ return this.exec(tx);
101
+ }
102
+ async subscribe(protocolId, watchTags, watchAsset, watchAction, watchNamespace) {
103
+ const tx = new Transaction();
104
+ tx.moveCall({
105
+ target: `${this.packageId}::kage::subscribe`,
106
+ arguments: [
107
+ tx.object(protocolId),
108
+ tx.pure.vector('vector<u8>', watchTags.map(enc)),
109
+ tx.pure.vector('u8', enc(watchAsset)),
110
+ tx.pure.vector('u8', enc(watchAction)),
111
+ tx.pure.vector('u8', enc(watchNamespace)),
112
+ ],
113
+ });
114
+ return this.exec(tx);
115
+ }
116
+ async recordOutcome(protocolId, memoryId, outcome) {
117
+ const tx = new Transaction();
118
+ tx.moveCall({
119
+ target: `${this.packageId}::kage::record_outcome`,
120
+ arguments: [
121
+ tx.object(protocolId),
122
+ tx.pure.u64(memoryId),
123
+ tx.pure.vector('u8', enc(outcome)),
124
+ ],
125
+ });
126
+ return this.exec(tx);
127
+ }
128
+ async getProtocolState(protocolId) {
129
+ const obj = await this.client.getObject({ id: protocolId, options: { showContent: true } });
130
+ const f = obj.data?.content?.fields ?? {};
131
+ return {
132
+ totalMemories: Number(f.total_memories ?? 0),
133
+ totalConflicts: Number(f.total_conflicts ?? 0),
134
+ totalSnapshots: Number(f.total_snapshots ?? 0),
135
+ totalSubscriptions: Number(f.total_subscriptions ?? 0),
136
+ };
137
+ }
138
+ async getBalance() {
139
+ const coins = await this.client.getCoins({ owner: this.address, coinType: '0x2::sui::SUI' });
140
+ const total = coins.data.reduce((s, c) => s + BigInt(c.balance), 0n);
141
+ return (Number(total) / 1e9).toFixed(4);
142
+ }
143
+ async exec(tx) {
144
+ const result = await this.client.signAndExecuteTransaction({
145
+ transaction: tx,
146
+ signer: this.keypair,
147
+ options: { showEffects: true, showEvents: true },
148
+ });
149
+ if (result.effects?.status?.status !== 'success') {
150
+ throw new Error(`Sui tx failed: ${result.effects?.status?.error ?? 'unknown'}`);
151
+ }
152
+ return result.digest;
153
+ }
154
+ }
155
+ function enc(s) {
156
+ return Array.from(Buffer.from(s, 'utf8'));
157
+ }
158
+ function hexToBytes(hex) {
159
+ return Array.from(Buffer.from(hex, 'hex'));
160
+ }
161
+ //# sourceMappingURL=sui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sui.js","sourceRoot":"","sources":["../src/sui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ export type Action = 'BUY' | 'SELL' | 'HOLD' | 'OBSERVE' | 'EXECUTE';
2
+ export type Outcome = 'PENDING' | 'SUCCESS' | 'FAILURE' | 'UNKNOWN';
3
+ export type RiskLevel = 'LOW' | 'MEDIUM' | 'HIGH';
4
+ export interface MemoryEntry {
5
+ id: number;
6
+ agent: string;
7
+ blobId: string;
8
+ blobHash: string;
9
+ tags: string[];
10
+ asset: string;
11
+ action: Action;
12
+ outcome: Outcome;
13
+ confidence: number;
14
+ ttlEpochs: number;
15
+ writtenEpoch: number;
16
+ writtenMs: number;
17
+ conflictFlag: boolean;
18
+ conflictWith?: number;
19
+ weight: number;
20
+ namespace: string;
21
+ inheritedFrom?: number;
22
+ sharedFromGraph?: string;
23
+ }
24
+ export interface AgentRecord {
25
+ agent: string;
26
+ name: string;
27
+ namespace: string;
28
+ reputation: number;
29
+ totalWrites: number;
30
+ successfulOutcomes: number;
31
+ failedOutcomes: number;
32
+ registeredAtMs: number;
33
+ active: boolean;
34
+ }
35
+ export interface Snapshot {
36
+ snapshotId: number;
37
+ takenAtSequence: number;
38
+ takenAtMs: number;
39
+ takenBy: string;
40
+ description: string;
41
+ memoryCount: number;
42
+ namespace: string;
43
+ latestBlobId: string;
44
+ }
45
+ export interface Subscription {
46
+ id: number;
47
+ subscriber: string;
48
+ watchTags: string[];
49
+ watchAsset: string;
50
+ watchAction: string;
51
+ watchNamespace: string;
52
+ active: boolean;
53
+ triggerCount: number;
54
+ }
55
+ export interface CrossGraphBridge {
56
+ id: string;
57
+ protocolA: string;
58
+ protocolB: string;
59
+ sharedNamespace: string;
60
+ createdBy: string;
61
+ active: boolean;
62
+ totalShared: number;
63
+ }
64
+ export interface WalrusUploadResult {
65
+ blobId: string;
66
+ blobHash: string;
67
+ size: number;
68
+ }
69
+ export interface KageConfig {
70
+ suiRpcUrl: string;
71
+ privateKeyB64: string;
72
+ packageId: string;
73
+ protocolId: string;
74
+ walrusAggregatorUrl: string;
75
+ walrusPublisherUrl: string;
76
+ agentName: string;
77
+ namespace: string;
78
+ cycleDelayMs?: number;
79
+ maxCycles?: number;
80
+ defaultTtlEpochs?: number;
81
+ }
82
+ export interface WriteMemoryParams {
83
+ state: Record<string, unknown>;
84
+ tags: string[];
85
+ asset: string;
86
+ action: Action;
87
+ confidence: number;
88
+ ttlEpochs?: number;
89
+ namespace?: string;
90
+ }
91
+ export interface QueryParams {
92
+ asset?: string;
93
+ action?: string;
94
+ namespace?: string;
95
+ tags?: string[];
96
+ limit?: number;
97
+ minConfidence?: number;
98
+ excludeConflicted?: boolean;
99
+ excludeExpired?: boolean;
100
+ }
101
+ export interface QueryResult {
102
+ memoryIds: number[];
103
+ count: number;
104
+ latestBlobId?: string;
105
+ }
106
+ export interface WriteResult {
107
+ memoryId: number;
108
+ blobId: string;
109
+ blobHash: string;
110
+ txDigest: string;
111
+ conflictDetected: boolean;
112
+ }
113
+ export interface InheritResult {
114
+ childMemoryId: number;
115
+ parentMemoryId: number;
116
+ blobId: string;
117
+ txDigest: string;
118
+ }
119
+ export interface SnapshotResult {
120
+ snapshotId: number;
121
+ takenAtSequence: number;
122
+ txDigest: string;
123
+ }
124
+ export interface TrendPilotFreeSignal {
125
+ asset: string;
126
+ price: number;
127
+ confidence: number;
128
+ timestamp: string;
129
+ }
130
+ export interface TrendPilotFullSignal {
131
+ asset: string;
132
+ direction: 'UP' | 'DOWN' | 'HOLD';
133
+ confidence: number;
134
+ rsi: number;
135
+ vwap: number;
136
+ bollinger_upper: number;
137
+ bollinger_lower: number;
138
+ momentum: number;
139
+ order_book_pressure: number;
140
+ price: number;
141
+ timestamp: string;
142
+ }
143
+ export interface TrendPilotRisk {
144
+ asset: string;
145
+ risk_level: RiskLevel;
146
+ volatility: number;
147
+ trend: string;
148
+ momentum: number;
149
+ }
150
+ export interface AlphaLoopState extends Record<string, unknown> {
151
+ cycleId: string;
152
+ asset: string;
153
+ scoutSignal?: TrendPilotFullSignal;
154
+ scoutBlobId?: string;
155
+ riskAssessment?: TrendPilotRisk;
156
+ riskBlobId?: string;
157
+ decision?: Action;
158
+ decisionReason?: string;
159
+ decisionBlobId?: string;
160
+ executionNote?: string;
161
+ executionBlobId?: string;
162
+ startedAt: number;
163
+ completedAt?: number;
164
+ error?: string;
165
+ }
166
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // ─── Memory Core ──────────────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
@@ -0,0 +1,11 @@
1
+ import { WalrusUploadResult } from './types/index.js';
2
+ export declare class WalrusClient {
3
+ private aggregatorUrl;
4
+ private publisherUrl;
5
+ constructor(aggregatorUrl: string, publisherUrl: string);
6
+ upload(state: Record<string, unknown>, epochs?: number): Promise<WalrusUploadResult>;
7
+ download(blobId: string): Promise<Record<string, unknown>>;
8
+ verify(blobId: string, expectedHash: string): Promise<boolean>;
9
+ waitForBlob(blobId: string, retries?: number, delayMs?: number): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=walrus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walrus.d.ts","sourceRoot":"","sources":["../src/walrus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,YAAY;IAErB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;gBADZ,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM;IAMxB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6BhF,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,SAAK,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/E"}
package/dist/walrus.js ADDED
@@ -0,0 +1,62 @@
1
+ import crypto from 'crypto';
2
+ export class WalrusClient {
3
+ aggregatorUrl;
4
+ publisherUrl;
5
+ constructor(aggregatorUrl, publisherUrl) {
6
+ this.aggregatorUrl = aggregatorUrl;
7
+ this.publisherUrl = publisherUrl;
8
+ this.aggregatorUrl = aggregatorUrl.replace(/\/$/, '');
9
+ this.publisherUrl = publisherUrl.replace(/\/$/, '');
10
+ }
11
+ async upload(state, epochs = 10) {
12
+ const payload = JSON.stringify({
13
+ ...state,
14
+ _kage: { version: '0.1.0', ts: Date.now() },
15
+ });
16
+ const buf = Buffer.from(payload, 'utf8');
17
+ const blobHash = crypto.createHash('sha256').update(buf).digest('hex');
18
+ const res = await fetch(`${this.publisherUrl}/v1/blobs?epochs=${epochs}`, {
19
+ method: 'PUT',
20
+ headers: {
21
+ 'Content-Type': 'application/octet-stream',
22
+ 'Content-Length': String(buf.length),
23
+ },
24
+ body: buf,
25
+ });
26
+ if (!res.ok) {
27
+ const txt = await res.text();
28
+ throw new Error(`Walrus upload [${res.status}]: ${txt}`);
29
+ }
30
+ const data = await res.json();
31
+ const info = data.newlyCreated?.blobObject ?? data.alreadyCertified?.blobObject;
32
+ if (!info?.blobId)
33
+ throw new Error(`No blobId in response: ${JSON.stringify(data)}`);
34
+ return { blobId: info.blobId, blobHash, size: buf.length };
35
+ }
36
+ async download(blobId) {
37
+ const res = await fetch(`${this.aggregatorUrl}/v1/blobs/${blobId}`);
38
+ if (!res.ok)
39
+ throw new Error(`Walrus download [${res.status}] blob=${blobId}`);
40
+ const buf = await res.arrayBuffer();
41
+ return JSON.parse(Buffer.from(buf).toString('utf8'));
42
+ }
43
+ async verify(blobId, expectedHash) {
44
+ const res = await fetch(`${this.aggregatorUrl}/v1/blobs/${blobId}`);
45
+ if (!res.ok)
46
+ return false;
47
+ const buf = await res.arrayBuffer();
48
+ const hash = crypto.createHash('sha256').update(Buffer.from(buf)).digest('hex');
49
+ return hash === expectedHash;
50
+ }
51
+ async waitForBlob(blobId, retries = 12, delayMs = 2500) {
52
+ for (let i = 0; i < retries; i++) {
53
+ const res = await fetch(`${this.aggregatorUrl}/v1/blobs/${blobId}`, { method: 'HEAD' }).catch(() => null);
54
+ if (res?.ok)
55
+ return;
56
+ await sleep(delayMs);
57
+ }
58
+ throw new Error(`Blob ${blobId} not available after ${retries} retries`);
59
+ }
60
+ }
61
+ function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
62
+ //# sourceMappingURL=walrus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walrus.js","sourceRoot":"","sources":["../src/walrus.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@sykeclone/kage-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Kage — Onchain Agent Memory Protocol for Sui + Walrus",
5
+ "type": "module",
6
+ "main": "dist/kage.js",
7
+ "types": "dist/kage.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/kage.js",
11
+ "types": "./dist/kage.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "prepublishOnly": "npm run build",
21
+ "demo": "tsx src/demo/alphaloop.ts",
22
+ "clean": "rm -rf dist"
23
+ },
24
+ "keywords": [
25
+ "sui", "walrus", "agent", "memory", "kage", "onchain", "ai-agents", "web3"
26
+ ],
27
+ "author": "sykeclone",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/davieslennox0/kage"
32
+ },
33
+ "homepage": "https://kagegraph.duckdns.org",
34
+ "dependencies": {
35
+ "@mysten/sui": "^1.14.0",
36
+ "dotenv": "^16.6.1"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.12.7",
40
+ "tsx": "^4.11.0",
41
+ "typescript": "^5.4.5"
42
+ },
43
+ "engines": {
44
+ "node": ">=20"
45
+ }
46
+ }