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.
Files changed (70) hide show
  1. package/README.md +150 -0
  2. package/dist/commands/credits.d.ts +7 -0
  3. package/dist/commands/credits.d.ts.map +1 -0
  4. package/dist/commands/credits.js +220 -0
  5. package/dist/commands/credits.js.map +1 -0
  6. package/dist/commands/inference.d.ts +7 -0
  7. package/dist/commands/inference.d.ts.map +1 -0
  8. package/dist/commands/inference.js +148 -0
  9. package/dist/commands/inference.js.map +1 -0
  10. package/dist/commands/init.d.ts +7 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +158 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/memory.d.ts +7 -0
  15. package/dist/commands/memory.d.ts.map +1 -0
  16. package/dist/commands/memory.js +170 -0
  17. package/dist/commands/memory.js.map +1 -0
  18. package/dist/commands/sandbox.d.ts +7 -0
  19. package/dist/commands/sandbox.d.ts.map +1 -0
  20. package/dist/commands/sandbox.js +220 -0
  21. package/dist/commands/sandbox.js.map +1 -0
  22. package/dist/commands/skill.d.ts +7 -0
  23. package/dist/commands/skill.d.ts.map +1 -0
  24. package/dist/commands/skill.js +255 -0
  25. package/dist/commands/skill.js.map +1 -0
  26. package/dist/commands/spawn.d.ts +7 -0
  27. package/dist/commands/spawn.d.ts.map +1 -0
  28. package/dist/commands/spawn.js +225 -0
  29. package/dist/commands/spawn.js.map +1 -0
  30. package/dist/commands/specter.d.ts +7 -0
  31. package/dist/commands/specter.d.ts.map +1 -0
  32. package/dist/commands/specter.js +287 -0
  33. package/dist/commands/specter.js.map +1 -0
  34. package/dist/commands/status.d.ts +7 -0
  35. package/dist/commands/status.d.ts.map +1 -0
  36. package/dist/commands/status.js +106 -0
  37. package/dist/commands/status.js.map +1 -0
  38. package/dist/commands/trust.d.ts +7 -0
  39. package/dist/commands/trust.d.ts.map +1 -0
  40. package/dist/commands/trust.js +230 -0
  41. package/dist/commands/trust.js.map +1 -0
  42. package/dist/index.d.ts +9 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +61 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/services/contracts.d.ts +40 -0
  47. package/dist/services/contracts.d.ts.map +1 -0
  48. package/dist/services/contracts.js +141 -0
  49. package/dist/services/contracts.js.map +1 -0
  50. package/dist/services/inference.d.ts +63 -0
  51. package/dist/services/inference.d.ts.map +1 -0
  52. package/dist/services/inference.js +118 -0
  53. package/dist/services/inference.js.map +1 -0
  54. package/dist/services/wallet.d.ts +35 -0
  55. package/dist/services/wallet.d.ts.map +1 -0
  56. package/dist/services/wallet.js +60 -0
  57. package/dist/services/wallet.js.map +1 -0
  58. package/dist/services/x402.d.ts +30 -0
  59. package/dist/services/x402.d.ts.map +1 -0
  60. package/dist/services/x402.js +92 -0
  61. package/dist/services/x402.js.map +1 -0
  62. package/dist/utils/config.d.ts +64 -0
  63. package/dist/utils/config.d.ts.map +1 -0
  64. package/dist/utils/config.js +93 -0
  65. package/dist/utils/config.js.map +1 -0
  66. package/dist/utils/output.d.ts +29 -0
  67. package/dist/utils/output.d.ts.map +1 -0
  68. package/dist/utils/output.js +100 -0
  69. package/dist/utils/output.js.map +1 -0
  70. package/package.json +48 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * duskware skill
3
+ * Skill marketplace operations: mint, list, buy
4
+ */
5
+ import { Command } from 'commander';
6
+ import inquirer from 'inquirer';
7
+ import ora from 'ora';
8
+ import { JsonRpcProvider, Contract, Wallet } from 'ethers';
9
+ import * as output from '../utils/output.js';
10
+ import { loadConfig, loadWallet, getRpcUrl, getContractAddresses } from '../utils/config.js';
11
+ import { SKILL_NFT_ABI, ERC20_ABI, waitForTx } from '../services/contracts.js';
12
+ export const skillCommand = new Command('skill')
13
+ .description('Skill marketplace operations');
14
+ // Mint a new skill
15
+ skillCommand
16
+ .command('mint')
17
+ .description('Mint a new skill NFT')
18
+ .option('--name <name>', 'Skill name')
19
+ .option('--description <desc>', 'Skill description')
20
+ .option('--cid <cid>', 'IPFS CID of skill file')
21
+ .option('--price <price>', 'Price in USDC (e.g., 5.00)')
22
+ .action(async (options) => {
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('Mint New Skill');
30
+ // Interactive prompts
31
+ const answers = await inquirer.prompt([
32
+ {
33
+ type: 'input',
34
+ name: 'name',
35
+ message: 'Skill name:',
36
+ when: !options.name,
37
+ validate: (input) => input.length > 0 || 'Name is required',
38
+ },
39
+ {
40
+ type: 'input',
41
+ name: 'description',
42
+ message: 'Description:',
43
+ when: !options.description,
44
+ },
45
+ {
46
+ type: 'input',
47
+ name: 'cid',
48
+ message: 'IPFS CID (skill file):',
49
+ when: !options.cid,
50
+ validate: (input) => input.startsWith('Qm') || input.startsWith('bafy') || 'Invalid IPFS CID',
51
+ },
52
+ {
53
+ type: 'input',
54
+ name: 'price',
55
+ message: 'Price in USDC:',
56
+ default: '1.00',
57
+ when: !options.price,
58
+ },
59
+ {
60
+ type: 'input',
61
+ name: 'prerequisites',
62
+ message: 'Prerequisite skill IDs (comma-separated, or empty):',
63
+ default: '',
64
+ },
65
+ ]);
66
+ const name = options.name || answers.name;
67
+ const description = options.description || answers.description || '';
68
+ const cid = options.cid || answers.cid;
69
+ const priceStr = options.price || answers.price;
70
+ const priceUSDC = BigInt(Math.floor(parseFloat(priceStr) * 1_000_000));
71
+ const prerequisites = answers.prerequisites
72
+ ? answers.prerequisites.split(',').map((id) => BigInt(id.trim()))
73
+ : [];
74
+ const spinner = ora('Minting skill...').start();
75
+ try {
76
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
77
+ const addresses = getContractAddresses(config.network);
78
+ const wallet = new Wallet(walletConfig.privateKey, provider);
79
+ const skillNFT = new Contract(addresses.skillNFT, SKILL_NFT_ABI, wallet);
80
+ const tx = await skillNFT.mintSkill(name, description, cid, priceUSDC, prerequisites);
81
+ const receipt = await waitForTx(tx);
82
+ spinner.succeed('Skill minted');
83
+ output.keyValue('Transaction', output.txHash(receipt.hash));
84
+ output.keyValue('Basescan', output.basescanLink(receipt.hash, config.network));
85
+ output.keyValue('Gas Used', receipt.gasUsed.toString());
86
+ output.success(`Skill "${name}" minted successfully!`);
87
+ }
88
+ catch (err) {
89
+ spinner.fail('Minting failed');
90
+ if (err instanceof Error) {
91
+ output.error(err.message);
92
+ }
93
+ process.exit(1);
94
+ }
95
+ });
96
+ // List skills
97
+ skillCommand
98
+ .command('list')
99
+ .description('List available skills')
100
+ .option('--capability <cap>', 'Filter by capability')
101
+ .option('--limit <n>', 'Maximum skills to show', '20')
102
+ .action(async (options) => {
103
+ const config = loadConfig();
104
+ if (!config) {
105
+ output.error('Agent not initialized. Run `duskware init` first.');
106
+ process.exit(1);
107
+ }
108
+ output.header('Skill Marketplace');
109
+ try {
110
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
111
+ const addresses = getContractAddresses(config.network);
112
+ const skillNFT = new Contract(addresses.skillNFT, SKILL_NFT_ABI, provider);
113
+ // Use nextSkillId instead of totalSkills
114
+ const nextSkillId = await skillNFT.nextSkillId();
115
+ const totalCount = Number(nextSkillId) - 1; // Skills are 1-indexed
116
+ const limit = Math.min(parseInt(options.limit), totalCount);
117
+ if (totalCount <= 0) {
118
+ output.info('No skills minted yet.');
119
+ output.info('Be the first! Run `duskware skill mint`');
120
+ return;
121
+ }
122
+ const skills = [];
123
+ for (let i = 1; i <= limit; i++) {
124
+ try {
125
+ // Use skills(uint256) instead of getSkillDetails
126
+ const skill = await skillNFT.skills(i);
127
+ // skill returns: [name, description, skillCID, priceUSDC, creatorAgent, usageCount, ratingTotal, ratingCount, isActive, capability]
128
+ if (skill[8]) { // isActive
129
+ const ratingCount = Number(skill[7]);
130
+ const ratingTotal = Number(skill[6]);
131
+ skills.push({
132
+ id: i,
133
+ name: skill[0],
134
+ creator: skill[4],
135
+ price: skill[3],
136
+ usage: skill[5],
137
+ rating: ratingCount > 0 ? Math.round(ratingTotal / ratingCount) : 0,
138
+ capability: skill[9],
139
+ });
140
+ }
141
+ }
142
+ catch {
143
+ // Skill might not exist
144
+ }
145
+ }
146
+ if (skills.length === 0) {
147
+ output.info('No active skills found.');
148
+ return;
149
+ }
150
+ // Filter by capability if specified
151
+ const filteredSkills = options.capability
152
+ ? skills.filter(s => s.capability.toLowerCase().includes(options.capability.toLowerCase()))
153
+ : skills;
154
+ // Print table
155
+ output.printTable(['ID', 'Name', 'Creator', 'Price', 'Uses', 'Rating', 'Capability'], filteredSkills.map(s => [
156
+ s.id.toString(),
157
+ s.name.slice(0, 20),
158
+ output.truncateAddress(s.creator),
159
+ output.formatUSDC(s.price),
160
+ s.usage.toString(),
161
+ s.rating > 0 ? `${s.rating}/100` : '-',
162
+ s.capability,
163
+ ]));
164
+ console.log();
165
+ output.info(`Showing ${filteredSkills.length} of ${totalCount} skills`);
166
+ }
167
+ catch (err) {
168
+ if (err instanceof Error) {
169
+ output.error(`Failed to list skills: ${err.message}`);
170
+ }
171
+ process.exit(1);
172
+ }
173
+ });
174
+ // Buy/license a skill
175
+ skillCommand
176
+ .command('buy <skillId>')
177
+ .description('License a skill')
178
+ .action(async (skillId) => {
179
+ const config = loadConfig();
180
+ const walletConfig = loadWallet();
181
+ if (!config || !walletConfig) {
182
+ output.error('Agent not initialized. Run `duskware init` first.');
183
+ process.exit(1);
184
+ }
185
+ output.header('License Skill');
186
+ try {
187
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
188
+ const addresses = getContractAddresses(config.network);
189
+ const wallet = new Wallet(walletConfig.privateKey, provider);
190
+ const skillNFT = new Contract(addresses.skillNFT, SKILL_NFT_ABI, wallet);
191
+ const usdc = new Contract(addresses.usdc, ERC20_ABI, wallet);
192
+ // Get skill details using skills(uint256)
193
+ const skill = await skillNFT.skills(skillId);
194
+ // skill returns: [name, description, skillCID, priceUSDC, creatorAgent, usageCount, ratingTotal, ratingCount, isActive, capability]
195
+ const skillName = skill[0];
196
+ const priceUSDC = skill[3];
197
+ const creatorAgent = skill[4];
198
+ const isActive = skill[8];
199
+ if (!isActive) {
200
+ output.error('This skill is not active.');
201
+ return;
202
+ }
203
+ output.keyValue('Skill', skillName);
204
+ output.keyValue('Price', output.formatUSDC(priceUSDC));
205
+ output.keyValue('Creator', output.truncateAddress(creatorAgent));
206
+ // Check if already licensed
207
+ const isLicensed = await skillNFT.isLicensed(walletConfig.address, skillId);
208
+ if (isLicensed) {
209
+ output.warning('You already own this skill!');
210
+ return;
211
+ }
212
+ // Check USDC balance
213
+ const balance = await usdc.balanceOf(walletConfig.address);
214
+ if (balance < priceUSDC) {
215
+ output.error(`Insufficient USDC. Need ${output.formatUSDC(priceUSDC)}, have ${output.formatUSDC(balance)}`);
216
+ return;
217
+ }
218
+ // Confirm purchase
219
+ const { confirm } = await inquirer.prompt([
220
+ {
221
+ type: 'confirm',
222
+ name: 'confirm',
223
+ message: `License "${skillName}" for ${output.formatUSDC(priceUSDC)}?`,
224
+ default: true,
225
+ },
226
+ ]);
227
+ if (!confirm) {
228
+ output.info('Cancelled');
229
+ return;
230
+ }
231
+ // Approve USDC if needed
232
+ const allowance = await usdc.allowance(walletConfig.address, addresses.skillNFT);
233
+ if (allowance < priceUSDC) {
234
+ const spinner = ora('Approving USDC...').start();
235
+ const approveTx = await usdc.approve(addresses.skillNFT, priceUSDC);
236
+ await waitForTx(approveTx);
237
+ spinner.succeed('USDC approved');
238
+ }
239
+ // License the skill
240
+ const spinner = ora('Licensing skill...').start();
241
+ const tx = await skillNFT.licenseSkill(skillId);
242
+ const receipt = await waitForTx(tx);
243
+ spinner.succeed('Skill licensed');
244
+ output.keyValue('Transaction', output.txHash(receipt.hash));
245
+ output.keyValue('Basescan', output.basescanLink(receipt.hash, config.network));
246
+ output.success(`You now own "${skillName}"!`);
247
+ }
248
+ catch (err) {
249
+ if (err instanceof Error) {
250
+ output.error(`Failed to license skill: ${err.message}`);
251
+ }
252
+ process.exit(1);
253
+ }
254
+ });
255
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * duskware spawn
3
+ * Spawn a child agent with constraints
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const spawnCommand: Command;
7
+ //# sourceMappingURL=spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/commands/spawn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA2JrB,CAAC"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * duskware spawn
3
+ * Spawn a child agent with constraints
4
+ */
5
+ import { Command } from 'commander';
6
+ import inquirer from 'inquirer';
7
+ import ora from 'ora';
8
+ import { JsonRpcProvider, Contract, Wallet } from 'ethers';
9
+ import * as output from '../utils/output.js';
10
+ import { loadConfig, loadWallet, getRpcUrl, getContractAddresses } from '../utils/config.js';
11
+ import { SPAWN_PROTOCOL_ABI, AGENT_IDENTITY_ABI, ERC20_ABI, waitForTx } from '../services/contracts.js';
12
+ export const spawnCommand = new Command('spawn')
13
+ .description('Spawn a child agent')
14
+ .action(async () => {
15
+ const config = loadConfig();
16
+ const walletConfig = loadWallet();
17
+ if (!config || !walletConfig) {
18
+ output.error('Agent not initialized. Run `duskware init` first.');
19
+ process.exit(1);
20
+ }
21
+ output.header('Spawn Child Agent');
22
+ try {
23
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
24
+ const addresses = getContractAddresses(config.network);
25
+ const wallet = new Wallet(walletConfig.privateKey, provider);
26
+ // Check reputation (need 50+ to spawn)
27
+ const agent = new Contract(config.agentAddress, AGENT_IDENTITY_ABI, provider);
28
+ let reputationScore = 0n;
29
+ try {
30
+ reputationScore = await agent.reputationScore();
31
+ }
32
+ catch {
33
+ // Contract might not be deployed yet
34
+ }
35
+ if (reputationScore < 50n) {
36
+ output.error(`Insufficient reputation to spawn. Need 50, have ${reputationScore}`);
37
+ output.info('Build reputation through attestations first.');
38
+ return;
39
+ }
40
+ output.keyValue('Your Reputation', output.formatReputation(reputationScore));
41
+ // Interactive constraint setup
42
+ const answers = await inquirer.prompt([
43
+ {
44
+ type: 'input',
45
+ name: 'capabilities',
46
+ message: 'Child capabilities (comma-separated):',
47
+ default: 'research',
48
+ },
49
+ {
50
+ type: 'input',
51
+ name: 'dailyLimit',
52
+ message: 'Daily spending limit (USDC):',
53
+ default: '100',
54
+ },
55
+ {
56
+ type: 'input',
57
+ name: 'maxDepth',
58
+ message: 'Max spawn depth (1-5):',
59
+ default: '3',
60
+ validate: (input) => {
61
+ const n = parseInt(input);
62
+ return (n >= 1 && n <= 5) || 'Must be between 1 and 5';
63
+ },
64
+ },
65
+ {
66
+ type: 'confirm',
67
+ name: 'revocable',
68
+ message: 'Can you revoke this child?',
69
+ default: true,
70
+ },
71
+ {
72
+ type: 'input',
73
+ name: 'bootstrap',
74
+ message: 'Bootstrap stake (USDC, min 10):',
75
+ default: '10',
76
+ validate: (input) => parseFloat(input) >= 10 || 'Minimum 10 USDC',
77
+ },
78
+ ]);
79
+ const capabilities = answers.capabilities.split(',').map((c) => c.trim());
80
+ const dailyLimit = BigInt(Math.floor(parseFloat(answers.dailyLimit) * 1_000_000));
81
+ const maxDepth = parseInt(answers.maxDepth);
82
+ const revocable = answers.revocable;
83
+ const bootstrap = BigInt(Math.floor(parseFloat(answers.bootstrap) * 1_000_000));
84
+ output.header('Spawn Configuration');
85
+ output.keyValue('Capabilities', capabilities.join(', '));
86
+ output.keyValue('Daily Limit', output.formatUSDC(dailyLimit));
87
+ output.keyValue('Max Spawn Depth', maxDepth.toString());
88
+ output.keyValue('Revocable', revocable ? 'Yes' : 'No');
89
+ output.keyValue('Bootstrap Stake', output.formatUSDC(bootstrap));
90
+ // Check USDC balance
91
+ const usdc = new Contract(addresses.usdc, ERC20_ABI, wallet);
92
+ const balance = await usdc.balanceOf(walletConfig.address);
93
+ // TODO: Get spawn fee from FeeController
94
+ const spawnFee = 0n; // Free during launch period
95
+ const totalRequired = spawnFee + bootstrap;
96
+ if (balance < totalRequired) {
97
+ output.error(`Insufficient USDC. Need ${output.formatUSDC(totalRequired)}, have ${output.formatUSDC(balance)}`);
98
+ return;
99
+ }
100
+ // Confirm spawn
101
+ const { confirm } = await inquirer.prompt([
102
+ {
103
+ type: 'confirm',
104
+ name: 'confirm',
105
+ message: `Spawn child agent with ${output.formatUSDC(bootstrap)} bootstrap?`,
106
+ default: true,
107
+ },
108
+ ]);
109
+ if (!confirm) {
110
+ output.info('Cancelled');
111
+ return;
112
+ }
113
+ // Approve USDC if needed
114
+ if (totalRequired > 0n) {
115
+ const allowance = await usdc.allowance(walletConfig.address, addresses.spawnProtocol);
116
+ if (allowance < totalRequired) {
117
+ const spinner = ora('Approving USDC...').start();
118
+ const approveTx = await usdc.approve(addresses.spawnProtocol, totalRequired);
119
+ await waitForTx(approveTx);
120
+ spinner.succeed('USDC approved');
121
+ }
122
+ }
123
+ // Spawn child
124
+ const spinner = ora('Spawning child agent...').start();
125
+ const spawnProtocol = new Contract(addresses.spawnProtocol, SPAWN_PROTOCOL_ABI, wallet);
126
+ const tx = await spawnProtocol.spawn(capabilities, [], // skill allowlist (empty = all allowed)
127
+ dailyLimit, maxDepth, revocable);
128
+ const receipt = await waitForTx(tx);
129
+ spinner.succeed('Child agent spawned');
130
+ // Parse event to get child address
131
+ // In production, we'd parse the AgentSpawned event
132
+ output.keyValue('Transaction', output.txHash(receipt.hash));
133
+ output.keyValue('Basescan', output.basescanLink(receipt.hash, config.network));
134
+ output.success('Child agent created!');
135
+ output.info('The child agent can now operate with the configured constraints.');
136
+ }
137
+ catch (err) {
138
+ if (err instanceof Error) {
139
+ output.error(`Failed to spawn: ${err.message}`);
140
+ }
141
+ process.exit(1);
142
+ }
143
+ });
144
+ // List children
145
+ spawnCommand
146
+ .command('children')
147
+ .description('List your spawned children')
148
+ .action(async () => {
149
+ const config = loadConfig();
150
+ const walletConfig = loadWallet();
151
+ if (!config || !walletConfig) {
152
+ output.error('Agent not initialized. Run `duskware init` first.');
153
+ process.exit(1);
154
+ }
155
+ output.header('Spawned Children');
156
+ try {
157
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
158
+ const addresses = getContractAddresses(config.network);
159
+ const spawnProtocol = new Contract(addresses.spawnProtocol, SPAWN_PROTOCOL_ABI, provider);
160
+ const children = await spawnProtocol.getChildren(config.agentAddress);
161
+ if (children.length === 0) {
162
+ output.info('No children spawned yet.');
163
+ output.info('Run `duskware spawn` to create your first child agent.');
164
+ return;
165
+ }
166
+ output.keyValue('Total Children', children.length.toString());
167
+ console.log();
168
+ for (const childAddress of children) {
169
+ output.keyValue('Child', output.address(childAddress));
170
+ output.keyValue('Basescan', output.agentLink(childAddress, config.network));
171
+ console.log();
172
+ }
173
+ }
174
+ catch (err) {
175
+ if (err instanceof Error) {
176
+ output.error(`Failed to list children: ${err.message}`);
177
+ }
178
+ process.exit(1);
179
+ }
180
+ });
181
+ // Revoke child
182
+ spawnCommand
183
+ .command('revoke <childAddress>')
184
+ .description('Revoke a child agent')
185
+ .action(async (childAddress) => {
186
+ const config = loadConfig();
187
+ const walletConfig = loadWallet();
188
+ if (!config || !walletConfig) {
189
+ output.error('Agent not initialized. Run `duskware init` first.');
190
+ process.exit(1);
191
+ }
192
+ output.header('Revoke Child Agent');
193
+ output.keyValue('Child', output.address(childAddress));
194
+ const { confirm } = await inquirer.prompt([
195
+ {
196
+ type: 'confirm',
197
+ name: 'confirm',
198
+ message: 'Are you sure? This cannot be undone.',
199
+ default: false,
200
+ },
201
+ ]);
202
+ if (!confirm) {
203
+ output.info('Cancelled');
204
+ return;
205
+ }
206
+ try {
207
+ const provider = new JsonRpcProvider(getRpcUrl(config.network));
208
+ const addresses = getContractAddresses(config.network);
209
+ const wallet = new Wallet(walletConfig.privateKey, provider);
210
+ const spawnProtocol = new Contract(addresses.spawnProtocol, SPAWN_PROTOCOL_ABI, wallet);
211
+ const spinner = ora('Revoking child...').start();
212
+ const tx = await spawnProtocol.revokeChild(childAddress);
213
+ const receipt = await waitForTx(tx);
214
+ spinner.succeed('Child revoked');
215
+ output.keyValue('Transaction', output.txHash(receipt.hash));
216
+ output.keyValue('Basescan', output.basescanLink(receipt.hash, config.network));
217
+ }
218
+ catch (err) {
219
+ if (err instanceof Error) {
220
+ output.error(`Failed to revoke: ${err.message}`);
221
+ }
222
+ process.exit(1);
223
+ }
224
+ });
225
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/commands/spawn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAExG,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE7D,uCAAuC;QACvC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;QAED,IAAI,eAAe,GAAG,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,mDAAmD,eAAe,EAAE,CAAC,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;QAE7E,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,uCAAuC;gBAChD,OAAO,EAAE,UAAU;aACpB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,8BAA8B;gBACvC,OAAO,EAAE,KAAK;aACf;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,wBAAwB;gBACjC,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1B,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,yBAAyB,CAAC;gBACzD,CAAC;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE,IAAI;aACd;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,iCAAiC;gBAC1C,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,iBAAiB;aAClE;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAEhF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjE,qBAAqB;QACrB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3D,yCAAyC;QACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,4BAA4B;QACjD,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;QAE3C,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChH,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,0BAA0B,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa;gBAC5E,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,IAAI,aAAa,GAAG,EAAE,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;YACtF,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;gBAC7E,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC3B,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,cAAc;QACd,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEvD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACxF,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,CAClC,YAAY,EACZ,EAAE,EAAE,wCAAwC;QAC5C,UAAU,EACV,QAAQ,EACR,SAAS,CACV,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QAEpC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEvC,mCAAmC;QACnC,mDAAmD;QACnD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAE/E,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IAElF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gBAAgB;AAChB,YAAY;KACT,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE1F,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IAEH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,YAAY;KACT,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAEvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACxC;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,sCAAsC;YAC/C,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEjC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * duskware specter
3
+ * Manage autonomous AI agents (Specters)
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const specterCommand: Command;
7
+ //# sourceMappingURL=specter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specter.d.ts","sourceRoot":"","sources":["../../src/commands/specter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,eAAO,MAAM,cAAc,SAC6B,CAAC"}