@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 +177 -0
- package/dist/demo/alphaloop.d.ts +13 -0
- package/dist/demo/alphaloop.d.ts.map +1 -0
- package/dist/demo/alphaloop.js +238 -0
- package/dist/demo/alphaloop.js.map +1 -0
- package/dist/kage.d.ts +28 -0
- package/dist/kage.d.ts.map +1 -0
- package/dist/kage.js +100 -0
- package/dist/kage.js.map +1 -0
- package/dist/sui.d.ts +30 -0
- package/dist/sui.d.ts.map +1 -0
- package/dist/sui.js +161 -0
- package/dist/sui.js.map +1 -0
- package/dist/types/index.d.ts +166 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/walrus.d.ts +11 -0
- package/dist/walrus.d.ts.map +1 -0
- package/dist/walrus.js +62 -0
- package/dist/walrus.js.map +1 -0
- package/package.json +46 -0
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
|
package/dist/kage.js.map
ADDED
|
@@ -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
|
package/dist/sui.js.map
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
|
package/dist/walrus.d.ts
ADDED
|
@@ -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
|
+
}
|