dpth 0.2.0 → 0.4.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.
Files changed (54) hide show
  1. package/README.md +101 -148
  2. package/dist/adapter-sqlite.d.ts +17 -2
  3. package/dist/adapter-sqlite.d.ts.map +1 -1
  4. package/dist/adapter-sqlite.js +127 -16
  5. package/dist/adapter-sqlite.js.map +1 -1
  6. package/dist/dpth.d.ts +211 -0
  7. package/dist/dpth.d.ts.map +1 -0
  8. package/dist/dpth.js +665 -0
  9. package/dist/dpth.js.map +1 -0
  10. package/dist/entity.d.ts +1 -0
  11. package/dist/entity.d.ts.map +1 -1
  12. package/dist/entity.js +21 -5
  13. package/dist/entity.js.map +1 -1
  14. package/dist/errors.d.ts +43 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +63 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/experimental/agent-sdk.d.ts +157 -0
  19. package/dist/experimental/agent-sdk.d.ts.map +1 -0
  20. package/dist/experimental/agent-sdk.js +367 -0
  21. package/dist/experimental/agent-sdk.js.map +1 -0
  22. package/dist/experimental/economics.d.ts +203 -0
  23. package/dist/experimental/economics.d.ts.map +1 -0
  24. package/dist/experimental/economics.js +510 -0
  25. package/dist/experimental/economics.js.map +1 -0
  26. package/dist/experimental/fallback.d.ts +104 -0
  27. package/dist/experimental/fallback.d.ts.map +1 -0
  28. package/dist/experimental/fallback.js +359 -0
  29. package/dist/experimental/fallback.js.map +1 -0
  30. package/dist/experimental/federation.d.ts +224 -0
  31. package/dist/experimental/federation.d.ts.map +1 -0
  32. package/dist/experimental/federation.js +377 -0
  33. package/dist/experimental/federation.js.map +1 -0
  34. package/dist/experimental/index.d.ts +20 -0
  35. package/dist/experimental/index.d.ts.map +1 -0
  36. package/dist/experimental/index.js +20 -0
  37. package/dist/experimental/index.js.map +1 -0
  38. package/dist/index.d.ts +14 -14
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +13 -14
  41. package/dist/index.js.map +1 -1
  42. package/dist/storage.d.ts +10 -11
  43. package/dist/storage.d.ts.map +1 -1
  44. package/dist/storage.js +4 -11
  45. package/dist/storage.js.map +1 -1
  46. package/dist/types.d.ts +16 -1
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +11 -1
  49. package/dist/types.js.map +1 -1
  50. package/dist/util.d.ts +20 -0
  51. package/dist/util.d.ts.map +1 -0
  52. package/dist/util.js +28 -0
  53. package/dist/util.js.map +1 -0
  54. package/package.json +18 -26
@@ -0,0 +1,367 @@
1
+ /**
2
+ * dpth.io Agent SDK
3
+ *
4
+ * Simple client for agents to participate in the dpth.io network.
5
+ * Handles registration, heartbeat, task claiming, and result submission.
6
+ *
7
+ * Usage:
8
+ * const agent = new DpthAgent({
9
+ * name: 'my-agent',
10
+ * apiUrl: 'https://fathom.gib.lol/api/dpth',
11
+ * capabilities: { storageCapacityMb: 1000, cpuCores: 4, ... }
12
+ * });
13
+ *
14
+ * await agent.register();
15
+ * await agent.startWorking();
16
+ */
17
+ import { createHash, generateKeyPairSync } from 'crypto';
18
+ // ─── Agent Class ─────────────────────────────────────
19
+ export class DpthAgent {
20
+ config;
21
+ agentId = null;
22
+ publicKey;
23
+ privateKey;
24
+ running = false;
25
+ pollTimeout = null;
26
+ constructor(config) {
27
+ // Generate key pair if not provided
28
+ if (config.privateKey) {
29
+ this.privateKey = config.privateKey;
30
+ // Derive public key from private
31
+ this.publicKey = this.derivePublicKey(config.privateKey);
32
+ }
33
+ else {
34
+ const { publicKey, privateKey } = generateKeyPairSync('ed25519');
35
+ this.privateKey = privateKey.export({ type: 'pkcs8', format: 'pem' });
36
+ this.publicKey = publicKey.export({ type: 'spki', format: 'pem' });
37
+ }
38
+ this.config = {
39
+ ...config,
40
+ privateKey: this.privateKey,
41
+ pollIntervalMs: config.pollIntervalMs || 5000,
42
+ handlers: config.handlers || {},
43
+ };
44
+ }
45
+ derivePublicKey(privateKeyPem) {
46
+ // For ed25519, derive a compact public key identifier
47
+ const hash = createHash('sha256').update(privateKeyPem).digest('hex');
48
+ return `dpth:pub:${hash.slice(0, 32)}`;
49
+ }
50
+ /**
51
+ * Get a header-safe version of the public key (base64, no PEM wrapping)
52
+ */
53
+ getHeaderSafeKey() {
54
+ // Strip PEM headers and newlines for HTTP header compatibility
55
+ return this.publicKey
56
+ .replace(/-----BEGIN.*?-----/g, '')
57
+ .replace(/-----END.*?-----/g, '')
58
+ .replace(/\n/g, '')
59
+ .trim();
60
+ }
61
+ // ─── API Methods ─────────────────────────────────
62
+ async fetch(path, options) {
63
+ const url = `${this.config.apiUrl}${path}`;
64
+ const response = await fetch(url, {
65
+ ...options,
66
+ headers: {
67
+ 'Content-Type': 'application/json',
68
+ 'X-Agent-Id': this.agentId || '',
69
+ 'X-Public-Key': this.getHeaderSafeKey(),
70
+ ...options?.headers,
71
+ },
72
+ });
73
+ return response;
74
+ }
75
+ /**
76
+ * Register this agent with the network
77
+ */
78
+ async register() {
79
+ const response = await this.fetch('/agents', {
80
+ method: 'POST',
81
+ body: JSON.stringify({
82
+ name: this.config.name,
83
+ publicKey: this.publicKey,
84
+ capabilities: this.config.capabilities,
85
+ }),
86
+ });
87
+ if (!response.ok) {
88
+ const error = await response.json();
89
+ throw new Error(`Registration failed: ${error.error || response.statusText}`);
90
+ }
91
+ const result = await response.json();
92
+ this.agentId = result.agent.id;
93
+ console.log(`[dpth] Agent registered: ${this.agentId}`);
94
+ }
95
+ /**
96
+ * Deregister from the network
97
+ */
98
+ async deregister() {
99
+ if (!this.agentId)
100
+ return;
101
+ await this.fetch(`/agents?id=${this.agentId}`, {
102
+ method: 'DELETE',
103
+ });
104
+ this.agentId = null;
105
+ console.log('[dpth] Agent deregistered');
106
+ }
107
+ /**
108
+ * Fetch available tasks
109
+ */
110
+ async getTasks(limit = 10) {
111
+ const types = this.config.capabilities.taskTypes.join(',');
112
+ const response = await this.fetch(`/tasks?limit=${limit}&type=${types}`);
113
+ if (!response.ok) {
114
+ throw new Error('Failed to fetch tasks');
115
+ }
116
+ const result = await response.json();
117
+ return result.tasks;
118
+ }
119
+ /**
120
+ * Claim a task for processing
121
+ */
122
+ async claimTask(taskId) {
123
+ const response = await this.fetch('/tasks?action=claim', {
124
+ method: 'POST',
125
+ body: JSON.stringify({
126
+ taskId,
127
+ agentId: this.agentId,
128
+ }),
129
+ });
130
+ if (!response.ok) {
131
+ const error = await response.json();
132
+ throw new Error(`Failed to claim task: ${error.error}`);
133
+ }
134
+ const result = await response.json();
135
+ return result.task;
136
+ }
137
+ /**
138
+ * Complete a task with results
139
+ */
140
+ async completeTask(taskId, result) {
141
+ const response = await this.fetch('/tasks?action=complete', {
142
+ method: 'POST',
143
+ body: JSON.stringify({
144
+ taskId,
145
+ agentId: this.agentId,
146
+ success: result.success,
147
+ output: result.output,
148
+ }),
149
+ });
150
+ if (!response.ok) {
151
+ throw new Error('Failed to complete task');
152
+ }
153
+ }
154
+ /**
155
+ * Store a chunk, returns CID
156
+ */
157
+ async storeChunk(data) {
158
+ const response = await this.fetch('/storage', {
159
+ method: 'POST',
160
+ body: JSON.stringify(data),
161
+ });
162
+ if (!response.ok) {
163
+ throw new Error('Failed to store chunk');
164
+ }
165
+ const result = await response.json();
166
+ return result.cid;
167
+ }
168
+ /**
169
+ * Retrieve a chunk by CID
170
+ */
171
+ async getChunk(cid) {
172
+ const response = await this.fetch(`/storage?cid=${cid}`);
173
+ if (!response.ok) {
174
+ throw new Error('Chunk not found');
175
+ }
176
+ return response.json();
177
+ }
178
+ /**
179
+ * Get pending storage proof challenges for this agent
180
+ */
181
+ async getPendingChallenges() {
182
+ const response = await this.fetch('/proofs?pending');
183
+ if (!response.ok) {
184
+ throw new Error('Failed to get pending challenges');
185
+ }
186
+ const result = await response.json();
187
+ return result.pending.filter((c) => c.agentId === this.agentId);
188
+ }
189
+ /**
190
+ * Submit a storage proof response
191
+ * @param challengeId The challenge ID
192
+ * @param proof SHA256(chunk_data + nonce)
193
+ */
194
+ async submitProof(challengeId, proof) {
195
+ const response = await this.fetch('/proofs?action=respond', {
196
+ method: 'POST',
197
+ body: JSON.stringify({
198
+ challengeId,
199
+ agentId: this.agentId,
200
+ proof,
201
+ }),
202
+ });
203
+ if (!response.ok) {
204
+ const error = await response.json();
205
+ throw new Error(`Proof submission failed: ${error.error}`);
206
+ }
207
+ return response.json();
208
+ }
209
+ /**
210
+ * Generate a proof for a chunk + nonce
211
+ * (Agents should use this to compute proofs from their local storage)
212
+ */
213
+ static computeProof(chunkData, nonce) {
214
+ // In browser/Node environments, use Web Crypto or Node crypto
215
+ // This is a placeholder - agents implement their own
216
+ const encoder = new TextEncoder();
217
+ const data = encoder.encode(chunkData + nonce);
218
+ // Note: Real implementation needs async crypto
219
+ // This is just to show the interface
220
+ throw new Error('Implement with crypto.subtle.digest or createHash');
221
+ }
222
+ // ─── Worker Loop ─────────────────────────────────
223
+ /**
224
+ * Start the work loop — continuously poll for and process tasks
225
+ */
226
+ async startWorking() {
227
+ if (this.running)
228
+ return;
229
+ if (!this.agentId) {
230
+ await this.register();
231
+ }
232
+ this.running = true;
233
+ console.log('[dpth] Starting work loop');
234
+ this.pollLoop();
235
+ }
236
+ /**
237
+ * Stop the work loop
238
+ */
239
+ stopWorking() {
240
+ this.running = false;
241
+ if (this.pollTimeout) {
242
+ clearTimeout(this.pollTimeout);
243
+ this.pollTimeout = null;
244
+ }
245
+ console.log('[dpth] Stopped work loop');
246
+ }
247
+ async pollLoop() {
248
+ if (!this.running)
249
+ return;
250
+ try {
251
+ // Fetch available tasks
252
+ const tasks = await this.getTasks(1);
253
+ if (tasks.length > 0) {
254
+ const task = tasks[0];
255
+ await this.processTask(task);
256
+ }
257
+ }
258
+ catch (error) {
259
+ console.error('[dpth] Error in poll loop:', error);
260
+ }
261
+ // Schedule next poll
262
+ this.pollTimeout = setTimeout(() => this.pollLoop(), this.config.pollIntervalMs);
263
+ }
264
+ async processTask(task) {
265
+ console.log(`[dpth] Processing task ${task.id} (${task.type})`);
266
+ try {
267
+ // Claim the task
268
+ const claimed = await this.claimTask(task.id);
269
+ // Get handler for task type
270
+ const handler = this.config.handlers[task.type];
271
+ if (!handler) {
272
+ throw new Error(`No handler for task type: ${task.type}`);
273
+ }
274
+ // Execute handler
275
+ const result = await handler(claimed);
276
+ // Complete the task
277
+ await this.completeTask(task.id, result);
278
+ console.log(`[dpth] Completed task ${task.id}`);
279
+ }
280
+ catch (error) {
281
+ console.error(`[dpth] Task ${task.id} failed:`, error);
282
+ // Report failure
283
+ await this.completeTask(task.id, {
284
+ success: false,
285
+ error: error instanceof Error ? error.message : 'Unknown error',
286
+ });
287
+ }
288
+ }
289
+ // ─── Utilities ───────────────────────────────────
290
+ /**
291
+ * Get the agent's public key (for verification)
292
+ */
293
+ getPublicKey() {
294
+ return this.publicKey;
295
+ }
296
+ /**
297
+ * Get the agent's ID (after registration)
298
+ */
299
+ getAgentId() {
300
+ return this.agentId;
301
+ }
302
+ /**
303
+ * Check if agent is registered
304
+ */
305
+ isRegistered() {
306
+ return this.agentId !== null;
307
+ }
308
+ /**
309
+ * Check if work loop is running
310
+ */
311
+ isWorking() {
312
+ return this.running;
313
+ }
314
+ }
315
+ // ─── Built-in Task Handlers ──────────────────────────
316
+ /**
317
+ * Default embedding handler using OpenAI-compatible API
318
+ */
319
+ export function createEmbedHandler(apiKey, model = 'text-embedding-3-small') {
320
+ return async (task) => {
321
+ const text = task.input.data;
322
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
323
+ method: 'POST',
324
+ headers: {
325
+ 'Authorization': `Bearer ${apiKey}`,
326
+ 'Content-Type': 'application/json',
327
+ },
328
+ body: JSON.stringify({
329
+ model,
330
+ input: text,
331
+ }),
332
+ });
333
+ if (!response.ok) {
334
+ throw new Error(`Embedding API failed: ${response.statusText}`);
335
+ }
336
+ const result = await response.json();
337
+ return {
338
+ success: true,
339
+ output: {
340
+ data: result.data[0].embedding,
341
+ },
342
+ };
343
+ };
344
+ }
345
+ /**
346
+ * Default extraction handler (simple regex-based)
347
+ */
348
+ export function createExtractHandler() {
349
+ return async (task) => {
350
+ const text = task.input.data;
351
+ // Simple email extraction
352
+ const emails = text.match(/[\w.-]+@[\w.-]+\.\w+/g) || [];
353
+ // Simple number extraction
354
+ const numbers = text.match(/\$?[\d,]+\.?\d*/g) || [];
355
+ return {
356
+ success: true,
357
+ output: {
358
+ data: {
359
+ emails,
360
+ numbers,
361
+ length: text.length,
362
+ },
363
+ },
364
+ };
365
+ };
366
+ }
367
+ //# sourceMappingURL=agent-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-sdk.js","sourceRoot":"","sources":["../../src/experimental/agent-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * dpth.io Economics Engine
3
+ *
4
+ * The credit system that makes agents want to contribute.
5
+ * Every contribution earns credits, every query costs credits.
6
+ * Designed for future token migration without rebuilding.
7
+ *
8
+ * Core concepts:
9
+ * - Credits are minted on contribution (storage, compute, GPU)
10
+ * - Credits are burned on consumption (queries, inference)
11
+ * - Tier multipliers reward long-term contributors
12
+ * - Rate limits prevent abuse without killing free access
13
+ * - Migration snapshots enable future token claims
14
+ */
15
+ export type CreditAction = 'earn' | 'spend' | 'bonus' | 'penalty' | 'transfer' | 'migration_snapshot';
16
+ export type CreditCategory = 'storage' | 'compute' | 'gpu' | 'inference' | 'query' | 'training' | 'bonus' | 'penalty' | 'transfer' | 'system';
17
+ export interface CreditTransaction {
18
+ id: string;
19
+ agentId: string;
20
+ action: CreditAction;
21
+ amount: number;
22
+ reason: string;
23
+ category: CreditCategory;
24
+ reference?: string;
25
+ balanceAfter: number;
26
+ timestamp: string;
27
+ /** For transfers: recipient agent */
28
+ toAgentId?: string;
29
+ }
30
+ export interface AgentBalance {
31
+ agentId: string;
32
+ balance: number;
33
+ totalEarned: number;
34
+ totalSpent: number;
35
+ earningsByCategory: Record<string, number>;
36
+ spendingByCategory: Record<string, number>;
37
+ transactionCount: number;
38
+ /** Claimable for future token migration */
39
+ claimableCredits: number;
40
+ /** Rate limit state */
41
+ rateLimit: RateLimitState;
42
+ /** Migration snapshot (if taken) */
43
+ migrationSnapshot?: {
44
+ balance: number;
45
+ timestamp: string;
46
+ snapshotId: string;
47
+ };
48
+ lastActivity: string;
49
+ createdAt: string;
50
+ }
51
+ export interface RateLimitState {
52
+ /** Queries remaining in current window */
53
+ queriesRemaining: number;
54
+ /** Inference requests remaining in current window */
55
+ inferenceRemaining: number;
56
+ /** Window reset time */
57
+ windowResetAt: string;
58
+ /** Current tier limits */
59
+ tier: string;
60
+ }
61
+ export interface CreditRates {
62
+ storagePerMbPerDay: number;
63
+ computePerTask: number;
64
+ gpuPerInferenceTask: number;
65
+ gpuPer1kTokens: number;
66
+ gpuPerImage: number;
67
+ storageProofBonus: number;
68
+ trainingRoundBonus: number;
69
+ queryBaseCost: number;
70
+ inferenceBaseCost: number;
71
+ /** Per 1k tokens for inference requests */
72
+ inferencePer1kTokens: number;
73
+ tierMultipliers: Record<string, number>;
74
+ }
75
+ export interface TierLimits {
76
+ /** Queries per hour */
77
+ queriesPerHour: number;
78
+ /** Inference requests per hour */
79
+ inferencePerHour: number;
80
+ /** Max single transaction */
81
+ maxTransactionSize: number;
82
+ /** Can participate in training */
83
+ canTrain: boolean;
84
+ /** Can transfer credits */
85
+ canTransfer: boolean;
86
+ }
87
+ export interface NetworkSupply {
88
+ totalMinted: number;
89
+ totalBurned: number;
90
+ totalCirculating: number;
91
+ totalTransactions: number;
92
+ /** Velocity: transactions in last 24h */
93
+ velocity24h: number;
94
+ /** Gini coefficient (0=equal, 1=concentrated) */
95
+ giniCoefficient: number;
96
+ }
97
+ export interface PricingSignal {
98
+ /** Current demand multiplier (>1 = high demand, <1 = low) */
99
+ demandMultiplier: number;
100
+ /** Network utilization (0-1) */
101
+ utilization: number;
102
+ /** Suggested query price */
103
+ queryPrice: number;
104
+ /** Suggested inference price */
105
+ inferencePrice: number;
106
+ timestamp: string;
107
+ }
108
+ export declare const DEFAULT_RATES: CreditRates;
109
+ export declare const TIER_LIMITS: Record<string, TierLimits>;
110
+ /**
111
+ * Earn credits for a contribution.
112
+ * Amount is multiplied by the agent's tier multiplier.
113
+ */
114
+ export declare function earnCredits(agentId: string, amount: number, reason: string, category: CreditCategory, options?: {
115
+ reference?: string;
116
+ tier?: string;
117
+ }): CreditTransaction;
118
+ /**
119
+ * Spend credits for a service (query, inference, etc).
120
+ * Throws if insufficient balance.
121
+ */
122
+ export declare function spendCredits(agentId: string, amount: number, reason: string, category: CreditCategory, options?: {
123
+ reference?: string;
124
+ }): CreditTransaction;
125
+ /**
126
+ * Transfer credits between agents.
127
+ * Requires trusted tier or above.
128
+ */
129
+ export declare function transferCredits(fromAgentId: string, toAgentId: string, amount: number, reason: string, fromTier?: string): {
130
+ fromTx: CreditTransaction;
131
+ toTx: CreditTransaction;
132
+ };
133
+ /**
134
+ * Apply a penalty (bad behavior, failed proofs, etc).
135
+ */
136
+ export declare function penalizeAgent(agentId: string, amount: number, reason: string, reference?: string): CreditTransaction;
137
+ /**
138
+ * Check if an agent can perform an action under rate limits.
139
+ * Automatically resets windows and adjusts by tier.
140
+ */
141
+ export declare function checkRateLimit(agentId: string, action: 'query' | 'inference', tier?: string): {
142
+ allowed: boolean;
143
+ remaining: number;
144
+ resetAt: string;
145
+ };
146
+ /**
147
+ * Calculate current pricing based on network conditions.
148
+ * High demand → higher prices → incentivizes more supply.
149
+ * Low demand → lower prices → encourages usage.
150
+ */
151
+ export declare function getPricingSignal(): PricingSignal;
152
+ /**
153
+ * Auto-calculate and award credits for a storage contribution.
154
+ */
155
+ export declare function rewardStorage(agentId: string, megabytes: number, tier?: string): CreditTransaction;
156
+ /**
157
+ * Auto-calculate and award credits for a compute task.
158
+ */
159
+ export declare function rewardCompute(agentId: string, taskId: string, tier?: string): CreditTransaction;
160
+ /**
161
+ * Auto-calculate and award credits for GPU inference.
162
+ */
163
+ export declare function rewardGpuInference(agentId: string, tokensGenerated: number, taskId: string, tier?: string): CreditTransaction;
164
+ /**
165
+ * Auto-calculate and award credits for a training round.
166
+ */
167
+ export declare function rewardTraining(agentId: string, roundId: string, tier?: string): CreditTransaction;
168
+ /**
169
+ * Charge for an inference request based on token count.
170
+ */
171
+ export declare function chargeInference(agentId: string, tokensUsed: number, requestId: string): CreditTransaction;
172
+ /**
173
+ * Create a migration snapshot of all balances.
174
+ * Used when transitioning from credits to tokens.
175
+ * Returns snapshot metadata.
176
+ */
177
+ export declare function createMigrationSnapshot(): {
178
+ snapshotId: string;
179
+ timestamp: string;
180
+ agentsSnapshotted: number;
181
+ totalClaimable: number;
182
+ };
183
+ export declare function getBalance(agentId: string): AgentBalance | undefined;
184
+ export declare function getSupply(): NetworkSupply;
185
+ export declare function getLeaderboard(limit?: number, sortBy?: 'balance' | 'earned' | 'spent'): Array<{
186
+ rank: number;
187
+ agentId: string;
188
+ balance: number;
189
+ totalEarned: number;
190
+ totalSpent: number;
191
+ }>;
192
+ export declare function getTransactionHistory(agentId: string, limit?: number): CreditTransaction[];
193
+ export declare function getRates(): CreditRates;
194
+ export declare function updateRates(updates: Partial<CreditRates>): CreditRates;
195
+ export declare function getTierLimits(tier: string): TierLimits;
196
+ export declare function clearEconomics(): void;
197
+ export declare class InsufficientCreditsError extends Error {
198
+ readonly agentId: string;
199
+ readonly balance: number;
200
+ readonly required: number;
201
+ constructor(agentId: string, balance: number, required: number);
202
+ }
203
+ //# sourceMappingURL=economics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"economics.d.ts","sourceRoot":"","sources":["../../src/experimental/economics.ts"],"names":[],"mappings":"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"}