duskware 0.1.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 +150 -0
- package/dist/commands/credits.d.ts +7 -0
- package/dist/commands/credits.d.ts.map +1 -0
- package/dist/commands/credits.js +220 -0
- package/dist/commands/credits.js.map +1 -0
- package/dist/commands/inference.d.ts +7 -0
- package/dist/commands/inference.d.ts.map +1 -0
- package/dist/commands/inference.js +148 -0
- package/dist/commands/inference.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +158 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/memory.d.ts +7 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +170 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/sandbox.d.ts +7 -0
- package/dist/commands/sandbox.d.ts.map +1 -0
- package/dist/commands/sandbox.js +220 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/skill.d.ts +7 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +255 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/spawn.d.ts +7 -0
- package/dist/commands/spawn.d.ts.map +1 -0
- package/dist/commands/spawn.js +225 -0
- package/dist/commands/spawn.js.map +1 -0
- package/dist/commands/specter.d.ts +7 -0
- package/dist/commands/specter.d.ts.map +1 -0
- package/dist/commands/specter.js +287 -0
- package/dist/commands/specter.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +106 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/trust.d.ts +7 -0
- package/dist/commands/trust.d.ts.map +1 -0
- package/dist/commands/trust.js +230 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/services/contracts.d.ts +40 -0
- package/dist/services/contracts.d.ts.map +1 -0
- package/dist/services/contracts.js +141 -0
- package/dist/services/contracts.js.map +1 -0
- package/dist/services/inference.d.ts +63 -0
- package/dist/services/inference.d.ts.map +1 -0
- package/dist/services/inference.js +118 -0
- package/dist/services/inference.js.map +1 -0
- package/dist/services/wallet.d.ts +35 -0
- package/dist/services/wallet.d.ts.map +1 -0
- package/dist/services/wallet.js +60 -0
- package/dist/services/wallet.js.map +1 -0
- package/dist/services/x402.d.ts +30 -0
- package/dist/services/x402.d.ts.map +1 -0
- package/dist/services/x402.js +92 -0
- package/dist/services/x402.js.map +1 -0
- package/dist/utils/config.d.ts +64 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +93 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/output.d.ts +29 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +100 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# duskware
|
|
2
|
+
|
|
3
|
+
CLI for Duskware - Sovereign Onchain Runtime for AI Agents on Base.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g duskware
|
|
9
|
+
# or
|
|
10
|
+
npx duskware
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Initialize a new agent
|
|
17
|
+
duskware init
|
|
18
|
+
|
|
19
|
+
# Check agent status
|
|
20
|
+
duskware status
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Commands
|
|
24
|
+
|
|
25
|
+
### Agent Identity
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Deploy new AgentIdentity contract
|
|
29
|
+
duskware init --network sepolia --name "MyAgent" --capabilities "research,coding"
|
|
30
|
+
|
|
31
|
+
# Show agent status
|
|
32
|
+
duskware status
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Skills
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Mint a new skill
|
|
39
|
+
duskware skill mint
|
|
40
|
+
|
|
41
|
+
# List skills in marketplace
|
|
42
|
+
duskware skill list
|
|
43
|
+
duskware skill list --capability research
|
|
44
|
+
|
|
45
|
+
# License a skill
|
|
46
|
+
duskware skill buy <skillId>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Spawn
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Spawn a child agent
|
|
53
|
+
duskware spawn
|
|
54
|
+
|
|
55
|
+
# List children
|
|
56
|
+
duskware spawn children
|
|
57
|
+
|
|
58
|
+
# Revoke a child
|
|
59
|
+
duskware spawn revoke <childAddress>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Trust
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Submit attestation
|
|
66
|
+
duskware trust attest <agentAddress> <score> --context "Great work"
|
|
67
|
+
|
|
68
|
+
# Get trust score
|
|
69
|
+
duskware trust score
|
|
70
|
+
duskware trust score <agentAddress>
|
|
71
|
+
|
|
72
|
+
# List attestations
|
|
73
|
+
duskware trust attestations
|
|
74
|
+
|
|
75
|
+
# Dispute an attestation
|
|
76
|
+
duskware trust dispute <attestationId>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Memory
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Sync memory to IPFS + onchain
|
|
83
|
+
duskware memory sync
|
|
84
|
+
|
|
85
|
+
# Read current memory
|
|
86
|
+
duskware memory read
|
|
87
|
+
|
|
88
|
+
# Get memory version
|
|
89
|
+
duskware memory version
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Inference
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Send inference request
|
|
96
|
+
duskware inference prompt "What is the meaning of life?" --model claude-sonnet
|
|
97
|
+
|
|
98
|
+
# List available models
|
|
99
|
+
duskware inference models
|
|
100
|
+
|
|
101
|
+
# Check prepaid balance
|
|
102
|
+
duskware inference balance
|
|
103
|
+
|
|
104
|
+
# Prepay USDC for inference
|
|
105
|
+
duskware inference prepay 10
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Configuration
|
|
109
|
+
|
|
110
|
+
Config files are stored in `~/.duskware/`:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
~/.duskware/
|
|
114
|
+
├── wallet.json # Agent wallet (private key) - 0600 permissions
|
|
115
|
+
├── config.json # Agent config (address, network, etc.)
|
|
116
|
+
└── memory/ # Local memory cache
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Networks
|
|
120
|
+
|
|
121
|
+
- **Base Sepolia** (testnet): `--network sepolia`
|
|
122
|
+
- **Base Mainnet**: `--network mainnet`
|
|
123
|
+
|
|
124
|
+
## Contract Addresses
|
|
125
|
+
|
|
126
|
+
### Base Sepolia
|
|
127
|
+
- USDC: `0x036CbD53842c5426634e7929541eC2318f3dCF7e`
|
|
128
|
+
|
|
129
|
+
### Base Mainnet
|
|
130
|
+
- USDC: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`
|
|
131
|
+
|
|
132
|
+
## Development
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Install dependencies
|
|
136
|
+
npm install
|
|
137
|
+
|
|
138
|
+
# Build
|
|
139
|
+
npm run build
|
|
140
|
+
|
|
141
|
+
# Watch mode
|
|
142
|
+
npm run dev
|
|
143
|
+
|
|
144
|
+
# Run tests
|
|
145
|
+
npm test
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## License
|
|
149
|
+
|
|
150
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,eAAO,MAAM,cAAc,SACoD,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* duskware credits
|
|
3
|
+
* Manage Duskware Credits balance for inference, compute, and sandboxes
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { wrapFetchWithPayment, createSigner } from 'x402-fetch';
|
|
8
|
+
import * as output from '../utils/output.js';
|
|
9
|
+
import { loadConfig, loadWallet } from '../utils/config.js';
|
|
10
|
+
// Credits API URL
|
|
11
|
+
const CREDITS_API = process.env.CREDITS_API || 'https://duskware-credits-api.fly.dev';
|
|
12
|
+
// x402 network identifier for Base Mainnet
|
|
13
|
+
const X402_NETWORK = 'eip155:8453';
|
|
14
|
+
// Valid topup amounts
|
|
15
|
+
const VALID_AMOUNTS = ['5', '10', '25', '50', '100'];
|
|
16
|
+
export const creditsCommand = new Command('credits')
|
|
17
|
+
.description('Manage Duskware Credits for inference, compute, and sandboxes');
|
|
18
|
+
// Check balance
|
|
19
|
+
creditsCommand
|
|
20
|
+
.command('balance')
|
|
21
|
+
.description('Check your Duskware Credits balance')
|
|
22
|
+
.action(async () => {
|
|
23
|
+
const config = loadConfig();
|
|
24
|
+
const walletConfig = loadWallet();
|
|
25
|
+
if (!config || !walletConfig) {
|
|
26
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
output.header('Duskware Credits Balance');
|
|
30
|
+
output.keyValue('Agent', config.agentAddress);
|
|
31
|
+
const spinner = ora('Fetching balance...').start();
|
|
32
|
+
try {
|
|
33
|
+
const response = await fetch(`${CREDITS_API}/balance/${walletConfig.address}`);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`Failed to fetch balance: ${response.status}`);
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
spinner.stop();
|
|
39
|
+
console.log();
|
|
40
|
+
output.keyValue('Balance', output.colors.success(data.balance));
|
|
41
|
+
output.keyValue('Total Deposited', data.totalDeposited);
|
|
42
|
+
output.keyValue('Total Spent', data.totalSpent);
|
|
43
|
+
console.log();
|
|
44
|
+
output.info(`Credits can be used for inference, sandboxes, and compute.`);
|
|
45
|
+
output.info(`Top up with: duskware credits topup <5|10|25|50|100>`);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail('Failed to fetch balance');
|
|
49
|
+
if (err instanceof Error) {
|
|
50
|
+
output.error(err.message);
|
|
51
|
+
}
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// Top up credits
|
|
56
|
+
creditsCommand
|
|
57
|
+
.command('topup <amount>')
|
|
58
|
+
.description('Top up credits via x402 USDC payment ($5, $10, $25, $50, or $100)')
|
|
59
|
+
.action(async (amount) => {
|
|
60
|
+
const config = loadConfig();
|
|
61
|
+
const walletConfig = loadWallet();
|
|
62
|
+
if (!config || !walletConfig) {
|
|
63
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
// Validate amount
|
|
67
|
+
if (!VALID_AMOUNTS.includes(amount)) {
|
|
68
|
+
output.error(`Invalid amount: $${amount}`);
|
|
69
|
+
output.info(`Valid amounts: $5, $10, $25, $50, $100`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
output.header('Top Up Duskware Credits');
|
|
73
|
+
output.keyValue('Amount', `$${amount}.00`);
|
|
74
|
+
output.keyValue('Agent', walletConfig.address);
|
|
75
|
+
output.keyValue('Network', 'Base Mainnet');
|
|
76
|
+
const spinner = ora('Initializing x402 payment...').start();
|
|
77
|
+
try {
|
|
78
|
+
// Create x402 signer from private key
|
|
79
|
+
const signer = await createSigner(X402_NETWORK, walletConfig.privateKey);
|
|
80
|
+
// Create x402-wrapped fetch - handles 402 -> sign -> pay automatically
|
|
81
|
+
// Max payment is amount + 10% buffer (in micro USDC)
|
|
82
|
+
const maxPayment = BigInt(parseInt(amount) * 1_100_000);
|
|
83
|
+
const x402Fetch = wrapFetchWithPayment(fetch, signer, maxPayment);
|
|
84
|
+
spinner.text = `Processing $${amount} USDC payment via x402...`;
|
|
85
|
+
// Make topup request - x402Fetch handles payment automatically
|
|
86
|
+
const response = await x402Fetch(`${CREDITS_API}/topup/${amount}`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: { 'Content-Type': 'application/json' },
|
|
89
|
+
body: JSON.stringify({}),
|
|
90
|
+
});
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
const errorData = await response.json().catch(() => ({}));
|
|
93
|
+
throw new Error(errorData.error || `Topup failed: ${response.status}`);
|
|
94
|
+
}
|
|
95
|
+
const result = await response.json();
|
|
96
|
+
spinner.succeed('Credits added successfully!');
|
|
97
|
+
console.log();
|
|
98
|
+
output.keyValue('Amount Added', output.colors.success(`$${amount}.00`));
|
|
99
|
+
output.keyValue('New Balance', output.colors.success(result.newBalance));
|
|
100
|
+
console.log();
|
|
101
|
+
output.success(result.message);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
spinner.fail('Topup failed');
|
|
105
|
+
if (err instanceof Error) {
|
|
106
|
+
if (err.message.includes('fetch') || err.message.includes('ECONNREFUSED')) {
|
|
107
|
+
output.warning('Credits API not available.');
|
|
108
|
+
output.info(`Make sure the API is running at ${CREDITS_API}`);
|
|
109
|
+
}
|
|
110
|
+
else if (err.message.includes('insufficient') || err.message.includes('balance')) {
|
|
111
|
+
output.error('Insufficient USDC balance for payment.');
|
|
112
|
+
output.info('You need USDC on Base Mainnet to top up credits.');
|
|
113
|
+
output.info('Bridge USDC from another chain or purchase on Base.');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
output.error(err.message);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
// View transaction history
|
|
123
|
+
creditsCommand
|
|
124
|
+
.command('transactions')
|
|
125
|
+
.description('View your credits transaction history')
|
|
126
|
+
.option('-l, --limit <n>', 'Number of transactions to show', '20')
|
|
127
|
+
.action(async (options) => {
|
|
128
|
+
const config = loadConfig();
|
|
129
|
+
const walletConfig = loadWallet();
|
|
130
|
+
if (!config || !walletConfig) {
|
|
131
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
output.header('Credits Transaction History');
|
|
135
|
+
output.keyValue('Agent', walletConfig.address);
|
|
136
|
+
const spinner = ora('Fetching transactions...').start();
|
|
137
|
+
try {
|
|
138
|
+
const limit = parseInt(options.limit) || 20;
|
|
139
|
+
const response = await fetch(`${CREDITS_API}/transactions/${walletConfig.address}?limit=${limit}`);
|
|
140
|
+
if (!response.ok) {
|
|
141
|
+
throw new Error(`Failed to fetch transactions: ${response.status}`);
|
|
142
|
+
}
|
|
143
|
+
const data = await response.json();
|
|
144
|
+
spinner.stop();
|
|
145
|
+
if (data.transactions.length === 0) {
|
|
146
|
+
console.log();
|
|
147
|
+
output.info('No transactions yet.');
|
|
148
|
+
output.info('Top up credits with: duskware credits topup <5|10|25|50|100>');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
console.log();
|
|
152
|
+
// Format and display transactions
|
|
153
|
+
const rows = data.transactions.map(tx => {
|
|
154
|
+
const typeColor = tx.type === 'deposit' ? output.colors.success : output.colors.warning;
|
|
155
|
+
const amountDisplay = tx.type === 'deposit'
|
|
156
|
+
? output.colors.success(`+${tx.amount}`)
|
|
157
|
+
: output.colors.warning(`-${tx.amount.replace('-', '')}`);
|
|
158
|
+
const date = new Date(tx.createdAt);
|
|
159
|
+
const dateStr = date.toLocaleDateString('en-US', {
|
|
160
|
+
month: 'short',
|
|
161
|
+
day: 'numeric',
|
|
162
|
+
hour: '2-digit',
|
|
163
|
+
minute: '2-digit'
|
|
164
|
+
});
|
|
165
|
+
return [
|
|
166
|
+
typeColor(tx.type.padEnd(10)),
|
|
167
|
+
amountDisplay.padEnd(12),
|
|
168
|
+
tx.description.slice(0, 40),
|
|
169
|
+
dateStr
|
|
170
|
+
];
|
|
171
|
+
});
|
|
172
|
+
output.printTable(['Type', 'Amount', 'Description', 'Date'], rows.map(r => r.map(String)));
|
|
173
|
+
console.log();
|
|
174
|
+
output.info(`Showing ${data.transactions.length} most recent transactions`);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
spinner.fail('Failed to fetch transactions');
|
|
178
|
+
if (err instanceof Error) {
|
|
179
|
+
output.error(err.message);
|
|
180
|
+
}
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
// Usage breakdown
|
|
185
|
+
creditsCommand
|
|
186
|
+
.command('usage')
|
|
187
|
+
.description('View credits usage breakdown by service')
|
|
188
|
+
.action(async () => {
|
|
189
|
+
const config = loadConfig();
|
|
190
|
+
const walletConfig = loadWallet();
|
|
191
|
+
if (!config || !walletConfig) {
|
|
192
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
output.header('Credits Usage Breakdown');
|
|
196
|
+
output.keyValue('Agent', walletConfig.address);
|
|
197
|
+
const spinner = ora('Fetching usage data...').start();
|
|
198
|
+
try {
|
|
199
|
+
const response = await fetch(`${CREDITS_API}/usage/${walletConfig.address}`);
|
|
200
|
+
if (!response.ok) {
|
|
201
|
+
throw new Error(`Failed to fetch usage: ${response.status}`);
|
|
202
|
+
}
|
|
203
|
+
const data = await response.json();
|
|
204
|
+
spinner.stop();
|
|
205
|
+
console.log();
|
|
206
|
+
output.keyValue('Inference', data.inference);
|
|
207
|
+
output.keyValue('Sandboxes', data.sandbox);
|
|
208
|
+
output.keyValue('Compute', data.compute);
|
|
209
|
+
console.log(output.colors.muted('─'.repeat(30)));
|
|
210
|
+
output.keyValue('Total Spent', output.colors.accent(data.total));
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
spinner.fail('Failed to fetch usage data');
|
|
214
|
+
if (err instanceof Error) {
|
|
215
|
+
output.error(err.message);
|
|
216
|
+
}
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
//# sourceMappingURL=credits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,eAAO,MAAM,gBAAgB,SACwB,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* duskware inference
|
|
3
|
+
* AI inference via x402 USDC payments
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { wrapFetchWithPayment, createSigner } from 'x402-fetch';
|
|
8
|
+
import * as output from '../utils/output.js';
|
|
9
|
+
import { loadConfig, loadWallet } from '../utils/config.js';
|
|
10
|
+
// Inference proxy URL
|
|
11
|
+
const INFERENCE_URL = process.env.INFERENCE_URL || 'https://duskware-inference.fly.dev';
|
|
12
|
+
// x402 network identifier for Base Sepolia
|
|
13
|
+
const X402_NETWORK = 'eip155:84532';
|
|
14
|
+
// Max payment amount (0.50 USDC in base units - 6 decimals)
|
|
15
|
+
const MAX_PAYMENT = BigInt(500000);
|
|
16
|
+
export const inferenceCommand = new Command('inference')
|
|
17
|
+
.description('AI inference via x402 USDC payments');
|
|
18
|
+
// Send inference request
|
|
19
|
+
inferenceCommand
|
|
20
|
+
.command('prompt <text>')
|
|
21
|
+
.description('Send a prompt to the inference proxy (pays USDC via x402)')
|
|
22
|
+
.option('-m, --model <model>', 'Model to use', 'claude-3.5-sonnet')
|
|
23
|
+
.option('--max-tokens <n>', 'Maximum tokens', '1000')
|
|
24
|
+
.option('--system <text>', 'System prompt')
|
|
25
|
+
.action(async (text, options) => {
|
|
26
|
+
const config = loadConfig();
|
|
27
|
+
const walletConfig = loadWallet();
|
|
28
|
+
if (!config || !walletConfig) {
|
|
29
|
+
output.error('Agent not initialized. Run `duskware init` first.');
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
output.header('Inference Request');
|
|
33
|
+
output.keyValue('Model', options.model);
|
|
34
|
+
output.keyValue('Max Tokens', options.maxTokens);
|
|
35
|
+
output.keyValue('Agent', config.agentAddress);
|
|
36
|
+
const spinner = ora('Initializing x402 signer...').start();
|
|
37
|
+
try {
|
|
38
|
+
// Create x402 signer from private key
|
|
39
|
+
const signer = await createSigner(X402_NETWORK, walletConfig.privateKey);
|
|
40
|
+
// Create x402-wrapped fetch - automatically handles 402 → sign → pay
|
|
41
|
+
const x402Fetch = wrapFetchWithPayment(fetch, signer, MAX_PAYMENT);
|
|
42
|
+
// Build messages array
|
|
43
|
+
const messages = [];
|
|
44
|
+
if (options.system) {
|
|
45
|
+
messages.push({ role: 'system', content: options.system });
|
|
46
|
+
}
|
|
47
|
+
messages.push({ role: 'user', content: text });
|
|
48
|
+
spinner.text = 'Sending request with x402 payment...';
|
|
49
|
+
// Make request - x402Fetch handles payment automatically
|
|
50
|
+
const response = await x402Fetch(`${INFERENCE_URL}/inference/${options.model}`, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers: { 'Content-Type': 'application/json' },
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
messages,
|
|
55
|
+
maxTokens: parseInt(options.maxTokens),
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
const errorData = await response.json().catch(() => ({}));
|
|
60
|
+
throw new Error(errorData.error || `Request failed: ${response.status}`);
|
|
61
|
+
}
|
|
62
|
+
const result = await response.json();
|
|
63
|
+
spinner.succeed('Inference complete');
|
|
64
|
+
console.log();
|
|
65
|
+
output.header('Response');
|
|
66
|
+
console.log(result.content);
|
|
67
|
+
console.log();
|
|
68
|
+
output.keyValue('Model', result.model);
|
|
69
|
+
output.keyValue('Tokens', `${result.usage.totalTokens} (${result.usage.promptTokens} prompt + ${result.usage.completionTokens} completion)`);
|
|
70
|
+
if (result.payment) {
|
|
71
|
+
output.keyValue('Payment', `${result.payment.amount} via ${result.payment.method}`);
|
|
72
|
+
output.keyValue('Network', result.payment.network);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
spinner.fail('Inference failed');
|
|
77
|
+
if (err instanceof Error) {
|
|
78
|
+
if (err.message.includes('fetch') || err.message.includes('ECONNREFUSED')) {
|
|
79
|
+
output.warning('Inference proxy not available.');
|
|
80
|
+
output.info(`Make sure the proxy is running at ${INFERENCE_URL}`);
|
|
81
|
+
output.info('Run: cd inference-proxy && npm run dev');
|
|
82
|
+
}
|
|
83
|
+
else if (err.message.includes('insufficient') || err.message.includes('balance')) {
|
|
84
|
+
output.error('Insufficient USDC balance for payment.');
|
|
85
|
+
output.info('Get testnet USDC from: https://faucet.circle.com/');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
output.error(err.message);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// List available models
|
|
95
|
+
inferenceCommand
|
|
96
|
+
.command('models')
|
|
97
|
+
.description('List available models and pricing')
|
|
98
|
+
.action(async () => {
|
|
99
|
+
output.header('Available Models');
|
|
100
|
+
const spinner = ora('Fetching models...').start();
|
|
101
|
+
try {
|
|
102
|
+
const response = await fetch(`${INFERENCE_URL}/models`);
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
throw new Error('Failed to fetch models');
|
|
105
|
+
}
|
|
106
|
+
const models = await response.json();
|
|
107
|
+
spinner.stop();
|
|
108
|
+
output.printTable(['Model ID', 'Name', 'Provider', 'Price'], models.map(m => [m.id, m.name, m.provider, m.pricePerRequest]));
|
|
109
|
+
console.log();
|
|
110
|
+
output.info(`Endpoint: POST ${INFERENCE_URL}/inference/{model}`);
|
|
111
|
+
output.info('Payment: Automatic via x402 (USDC on Base Sepolia)');
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
spinner.stop();
|
|
115
|
+
output.warning('Inference proxy not available. Showing default models:');
|
|
116
|
+
console.log();
|
|
117
|
+
const defaultModels = [
|
|
118
|
+
{ id: 'claude-3-haiku', name: 'Claude 3 Haiku', provider: 'anthropic', price: '$0.01' },
|
|
119
|
+
{ id: 'claude-3.5-sonnet', name: 'Claude 3.5 Sonnet', provider: 'anthropic', price: '$0.05' },
|
|
120
|
+
{ id: 'claude-3-opus', name: 'Claude 3 Opus', provider: 'anthropic', price: '$0.20' },
|
|
121
|
+
{ id: 'gpt-4o', name: 'GPT-4o', provider: 'openai', price: '$0.05' },
|
|
122
|
+
{ id: 'gpt-4o-mini', name: 'GPT-4o Mini', provider: 'openai', price: '$0.01' },
|
|
123
|
+
];
|
|
124
|
+
output.printTable(['Model ID', 'Name', 'Provider', 'Price'], defaultModels.map(m => [m.id, m.name, m.provider, m.price]));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
// Health check
|
|
128
|
+
inferenceCommand
|
|
129
|
+
.command('health')
|
|
130
|
+
.description('Check inference proxy health')
|
|
131
|
+
.action(async () => {
|
|
132
|
+
output.header('Inference Proxy Health');
|
|
133
|
+
try {
|
|
134
|
+
const response = await fetch(`${INFERENCE_URL}/health`);
|
|
135
|
+
const data = await response.json();
|
|
136
|
+
output.keyValue('Status', data.status === 'ok' ? '✓ Healthy' : '✗ Unhealthy');
|
|
137
|
+
output.keyValue('Version', data.version);
|
|
138
|
+
output.keyValue('Facilitator', data.facilitator);
|
|
139
|
+
output.keyValue('Network', data.network);
|
|
140
|
+
output.keyValue('Timestamp', data.timestamp);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
output.error('Inference proxy not reachable');
|
|
144
|
+
output.info(`URL: ${INFERENCE_URL}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=inference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/commands/inference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,eAAO,MAAM,WAAW,SAkKpB,CAAC"}
|