@openshell-cc/miner-cli 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 (47) hide show
  1. package/.env.example +36 -0
  2. package/README.md +123 -0
  3. package/dist/auth.d.ts +17 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +50 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/config.d.ts +14 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +29 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +229 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/llm/prompts/tier1-token-injection.d.ts +17 -0
  16. package/dist/llm/prompts/tier1-token-injection.d.ts.map +1 -0
  17. package/dist/llm/prompts/tier1-token-injection.js +37 -0
  18. package/dist/llm/prompts/tier1-token-injection.js.map +1 -0
  19. package/dist/llm/prompts/tier2-social-engineering.d.ts +16 -0
  20. package/dist/llm/prompts/tier2-social-engineering.d.ts.map +1 -0
  21. package/dist/llm/prompts/tier2-social-engineering.js +35 -0
  22. package/dist/llm/prompts/tier2-social-engineering.js.map +1 -0
  23. package/dist/llm/prompts/tier3-memory-poisoning.d.ts +15 -0
  24. package/dist/llm/prompts/tier3-memory-poisoning.d.ts.map +1 -0
  25. package/dist/llm/prompts/tier3-memory-poisoning.js +36 -0
  26. package/dist/llm/prompts/tier3-memory-poisoning.js.map +1 -0
  27. package/dist/llm/provider.d.ts +11 -0
  28. package/dist/llm/provider.d.ts.map +1 -0
  29. package/dist/llm/provider.js +59 -0
  30. package/dist/llm/provider.js.map +1 -0
  31. package/dist/local-sandbox/executor.d.ts +47 -0
  32. package/dist/local-sandbox/executor.d.ts.map +1 -0
  33. package/dist/local-sandbox/executor.js +197 -0
  34. package/dist/local-sandbox/executor.js.map +1 -0
  35. package/dist/local-sandbox/mock-tools.d.ts +136 -0
  36. package/dist/local-sandbox/mock-tools.d.ts.map +1 -0
  37. package/dist/local-sandbox/mock-tools.js +163 -0
  38. package/dist/local-sandbox/mock-tools.js.map +1 -0
  39. package/dist/local-sandbox/proof.d.ts +26 -0
  40. package/dist/local-sandbox/proof.d.ts.map +1 -0
  41. package/dist/local-sandbox/proof.js +64 -0
  42. package/dist/local-sandbox/proof.js.map +1 -0
  43. package/dist/poller.d.ts +46 -0
  44. package/dist/poller.d.ts.map +1 -0
  45. package/dist/poller.js +53 -0
  46. package/dist/poller.js.map +1 -0
  47. package/package.json +43 -0
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Mock Wallet & Tool Handlers for Local Execution
3
+ *
4
+ * Copied from sandbox/src/mock-server/wallet.ts (public code, no canaryActions).
5
+ * Simulates blockchain wallet operations — records intent without real transactions.
6
+ */
7
+ export function createMockWallet(chain) {
8
+ const wallets = {
9
+ solana: {
10
+ chain: 'solana',
11
+ address: 'SimWa11et1111111111111111111111111111111111',
12
+ balances: { SOL: 5.0, USDC: 100.0 },
13
+ actionLog: [],
14
+ },
15
+ ethereum: {
16
+ chain: 'ethereum',
17
+ address: '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD0E',
18
+ balances: { ETH: 1.5, USDC: 500.0, USDT: 200.0 },
19
+ actionLog: [],
20
+ },
21
+ bsc: {
22
+ chain: 'bsc',
23
+ address: '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD0E',
24
+ balances: { BNB: 3.0, USDC: 300.0, BUSD: 150.0 },
25
+ actionLog: [],
26
+ },
27
+ base: {
28
+ chain: 'base',
29
+ address: '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD0E',
30
+ balances: { ETH: 0.5, USDC: 200.0 },
31
+ actionLog: [],
32
+ },
33
+ arbitrum: {
34
+ chain: 'arbitrum',
35
+ address: '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD0E',
36
+ balances: { ETH: 0.8, USDC: 400.0, ARB: 1000.0 },
37
+ actionLog: [],
38
+ },
39
+ };
40
+ return wallets[chain] ?? wallets.solana;
41
+ }
42
+ /**
43
+ * Build mock tool handlers that record all calls but never execute real transactions.
44
+ */
45
+ export function buildMockToolHandlers(wallet) {
46
+ const record = (name, args) => {
47
+ wallet.actionLog.push({ name, arguments: args, timestamp: Date.now() });
48
+ };
49
+ return {
50
+ // ── Trading operations ──
51
+ buy_token: (args) => {
52
+ record('buy_token', args);
53
+ return { success: true, txHash: '0xSIMULATED_BUY_TX', note: 'Simulated purchase' };
54
+ },
55
+ sell_token: (args) => {
56
+ record('sell_token', args);
57
+ return { success: true, txHash: '0xSIMULATED_SELL_TX', note: 'Simulated sale' };
58
+ },
59
+ swap_token: (args) => {
60
+ record('swap_token', args);
61
+ return { success: true, txHash: '0xSIMULATED_SWAP_TX' };
62
+ },
63
+ swap_uniswap: (args) => {
64
+ record('swap_uniswap', args);
65
+ return { success: true, txHash: '0xSIMULATED_UNISWAP_TX' };
66
+ },
67
+ // ── Transfer operations ──
68
+ transfer: (args) => {
69
+ record('transfer', args);
70
+ return { success: true, txHash: '0xSIMULATED_TRANSFER_TX' };
71
+ },
72
+ wallet_transfer: (args) => {
73
+ record('wallet_transfer', args);
74
+ return { success: true, txHash: '0xSIMULATED_WALLET_TRANSFER_TX' };
75
+ },
76
+ // ── Approval operations ──
77
+ approve_token: (args) => {
78
+ record('approve_token', args);
79
+ return { success: true, txHash: '0xSIMULATED_APPROVE_TX' };
80
+ },
81
+ // ── DeFi operations ──
82
+ supply_aave: (args) => {
83
+ record('supply_aave', args);
84
+ return { success: true, txHash: '0xSIMULATED_SUPPLY_TX' };
85
+ },
86
+ withdraw_aave: (args) => {
87
+ record('withdraw_aave', args);
88
+ return { success: true, txHash: '0xSIMULATED_WITHDRAW_TX' };
89
+ },
90
+ bridge_token: (args) => {
91
+ record('bridge_token', args);
92
+ return { success: true, txHash: '0xSIMULATED_BRIDGE_TX' };
93
+ },
94
+ // ── Token creation ──
95
+ create_token: (args) => {
96
+ record('create_token', args);
97
+ return { success: true, tokenAddress: '0xSIMULATED_TOKEN', note: 'Simulated creation' };
98
+ },
99
+ // ── System operations ──
100
+ install_skill: (args) => {
101
+ record('install_skill', args);
102
+ return { success: true, note: 'Simulated skill installation' };
103
+ },
104
+ execute_command: (args) => {
105
+ record('execute_command', args);
106
+ return { output: 'Simulated command output', exitCode: 0 };
107
+ },
108
+ send_message: (args) => {
109
+ record('send_message', args);
110
+ return { success: true, messageId: 'sim_msg_001' };
111
+ },
112
+ post_tweet: (args) => {
113
+ record('post_tweet', args);
114
+ return { success: true, tweetId: 'sim_tweet_001' };
115
+ },
116
+ // ── Read-only operations ──
117
+ check_balance: (_args) => {
118
+ record('check_balance', _args);
119
+ return { balances: wallet.balances };
120
+ },
121
+ check_portfolio: (_args) => {
122
+ record('check_portfolio', _args);
123
+ return { portfolio: wallet.balances, totalValueUSD: 1500 };
124
+ },
125
+ get_price: (args) => {
126
+ record('get_price', args);
127
+ return { price: 0.001234, change24h: '+5.2%' };
128
+ },
129
+ get_trending: (_args) => {
130
+ record('get_trending', _args);
131
+ return { tokens: [{ name: 'TestToken', price: 0.01 }] };
132
+ },
133
+ get_new_launches: (_args) => {
134
+ record('get_new_launches', _args);
135
+ return { launches: [] };
136
+ },
137
+ check_token_safety: (args) => {
138
+ record('check_token_safety', args);
139
+ return { safe: true, score: 85 };
140
+ },
141
+ analyze_contract: (args) => {
142
+ record('analyze_contract', args);
143
+ return { safe: true, issues: [] };
144
+ },
145
+ set_alert: (args) => {
146
+ record('set_alert', args);
147
+ return { success: true, alertId: 'alert_001' };
148
+ },
149
+ read_email: (_args) => {
150
+ record('read_email', _args);
151
+ return { emails: [{ from: 'user@example.com', subject: 'Test', body: 'Hello' }] };
152
+ },
153
+ read_timeline: (_args) => {
154
+ record('read_timeline', _args);
155
+ return { posts: [{ user: '@crypto_fan', text: 'Just bought some tokens!' }] };
156
+ },
157
+ browse_url: (args) => {
158
+ record('browse_url', args);
159
+ return { title: 'Simulated Page', content: 'Page content here' };
160
+ },
161
+ };
162
+ }
163
+ //# sourceMappingURL=mock-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-tools.js","sourceRoot":"","sources":["../../src/local-sandbox/mock-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAoC;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,6CAA6C;YACtD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;YACnC,SAAS,EAAE,EAAE;SACd;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;YAChD,SAAS,EAAE,EAAE;SACd;QACD,GAAG,EAAE;YACH,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;YAChD,SAAS,EAAE,EAAE;SACd;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;YACnC,SAAS,EAAE,EAAE;SACd;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;YAChD,SAAS,EAAE,EAAE;SACd;KACF,CAAA;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAA6B,EAAE,EAAE;QAC7D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACzE,CAAC,CAAA;IAED,OAAO;QACL,2BAA2B;QAC3B,SAAS,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC3C,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;QACpF,CAAC;QAED,UAAU,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;QACjF,CAAC;QAED,UAAU,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAA;QACzD,CAAC;QAED,YAAY,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC9C,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAA;QAC5D,CAAC;QAED,4BAA4B;QAC5B,QAAQ,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC1C,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAA;QAC7D,CAAC;QAED,eAAe,EAAE,CAAC,IAA6B,EAAE,EAAE;YACjD,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAA;QACpE,CAAC;QAED,4BAA4B;QAC5B,aAAa,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC/C,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAA;QAC5D,CAAC;QAED,wBAAwB;QACxB,WAAW,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC7C,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAA;QAC3D,CAAC;QAED,aAAa,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC/C,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAA;QAC7D,CAAC;QAED,YAAY,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC9C,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAA;QAC3D,CAAC;QAED,uBAAuB;QACvB,YAAY,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC9C,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;QACzF,CAAC;QAED,0BAA0B;QAC1B,aAAa,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC/C,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAA;QAChE,CAAC;QAED,eAAe,EAAE,CAAC,IAA6B,EAAE,EAAE;YACjD,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YAC/B,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;QAC5D,CAAC;QAED,YAAY,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC9C,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;QACpD,CAAC;QAED,UAAU,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;QACpD,CAAC;QAED,6BAA6B;QAC7B,aAAa,EAAE,CAAC,KAA8B,EAAE,EAAE;YAChD,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;YAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;QACtC,CAAC;QAED,eAAe,EAAE,CAAC,KAA8B,EAAE,EAAE;YAClD,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;YAChC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;QAC5D,CAAC;QAED,SAAS,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC3C,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACzB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QAChD,CAAC;QAED,YAAY,EAAE,CAAC,KAA8B,EAAE,EAAE;YAC/C,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;YAC7B,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;QACzD,CAAC;QAED,gBAAgB,EAAE,CAAC,KAA8B,EAAE,EAAE;YACnD,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;YACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QACzB,CAAC;QAED,kBAAkB,EAAE,CAAC,IAA6B,EAAE,EAAE;YACpD,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;YAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QAClC,CAAC;QAED,gBAAgB,EAAE,CAAC,IAA6B,EAAE,EAAE;YAClD,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YAChC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QACnC,CAAC;QAED,SAAS,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC3C,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAChD,CAAC;QAED,UAAU,EAAE,CAAC,KAA8B,EAAE,EAAE;YAC7C,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;YAC3B,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QACnF,CAAC;QAED,aAAa,EAAE,CAAC,KAA8B,EAAE,EAAE;YAChD,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;YAC9B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAA;QAC/E,CAAC;QAED,UAAU,EAAE,CAAC,IAA6B,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAC1B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAA;QAClE,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Execution Proof Module
3
+ *
4
+ * Computes execution hash and builds the structured submission body
5
+ * for local_compute mode. Hash algorithm matches server-side
6
+ * (proof-validator.ts:computeExecutionHash).
7
+ */
8
+ import type { LocalExecutionResult } from './executor.js';
9
+ export interface ActionLogEntry {
10
+ name: string;
11
+ arguments: Record<string, unknown>;
12
+ order: number;
13
+ }
14
+ /**
15
+ * Compute SHA-256 execution hash matching the server-side algorithm.
16
+ * canonical = JSON.stringify({ payload, actionLog: sorted by order, agentResponseHash })
17
+ */
18
+ export declare function computeExecutionHash(payload: string, actionLog: ActionLogEntry[], agentResponse: string): string;
19
+ /**
20
+ * Build the full submission body for local_compute tasks.
21
+ */
22
+ export declare function buildSubmissionBody(taskId: string, payload: string, challengeNonce: string, executionResult: LocalExecutionResult, config: {
23
+ llmProvider: string;
24
+ llmModel: string;
25
+ }): Record<string, unknown>;
26
+ //# sourceMappingURL=proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../src/local-sandbox/proof.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,cAAc,EAAE,EAC3B,aAAa,EAAE,MAAM,GACpB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,oBAAoB,EACrC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0CzB"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Execution Proof Module
3
+ *
4
+ * Computes execution hash and builds the structured submission body
5
+ * for local_compute mode. Hash algorithm matches server-side
6
+ * (proof-validator.ts:computeExecutionHash).
7
+ */
8
+ import { createHash } from 'node:crypto';
9
+ /**
10
+ * Compute SHA-256 execution hash matching the server-side algorithm.
11
+ * canonical = JSON.stringify({ payload, actionLog: sorted by order, agentResponseHash })
12
+ */
13
+ export function computeExecutionHash(payload, actionLog, agentResponse) {
14
+ const sortedLog = [...actionLog].sort((a, b) => a.order - b.order);
15
+ const agentResponseHash = createHash('sha256').update(agentResponse).digest('hex');
16
+ const canonical = JSON.stringify({
17
+ payload,
18
+ actionLog: sortedLog.map(a => ({ name: a.name, arguments: a.arguments, order: a.order })),
19
+ agentResponseHash,
20
+ });
21
+ return createHash('sha256').update(canonical).digest('hex');
22
+ }
23
+ /**
24
+ * Build the full submission body for local_compute tasks.
25
+ */
26
+ export function buildSubmissionBody(taskId, payload, challengeNonce, executionResult, config) {
27
+ const executionHash = computeExecutionHash(payload, executionResult.actionLog, executionResult.agentResponse);
28
+ const totalTokens = executionResult.tokensUsed.input + executionResult.tokensUsed.output;
29
+ // Estimate cost (rough per-token pricing)
30
+ let estimatedCostUsd = totalTokens * 0.000003; // Default Haiku-level pricing
31
+ if (config.llmModel.includes('sonnet')) {
32
+ estimatedCostUsd = totalTokens * 0.000015;
33
+ }
34
+ else if (config.llmModel.includes('gpt-4o-mini')) {
35
+ estimatedCostUsd = totalTokens * 0.000001;
36
+ }
37
+ else if (config.llmModel.includes('deepseek')) {
38
+ estimatedCostUsd = totalTokens * 0.000002;
39
+ }
40
+ return {
41
+ taskId,
42
+ payload,
43
+ executionMode: 'local_compute',
44
+ result: {
45
+ actionLog: executionResult.actionLog,
46
+ agentResponse: executionResult.agentResponse.slice(0, 5000),
47
+ modelUsed: executionResult.modelUsed,
48
+ tokensUsed: executionResult.tokensUsed,
49
+ executionTimeMs: executionResult.executionTimeMs,
50
+ rounds: executionResult.rounds,
51
+ },
52
+ proof: {
53
+ executionHash,
54
+ challengeNonce,
55
+ },
56
+ costMetrics: {
57
+ totalTokens,
58
+ estimatedCostUsd: Math.round(estimatedCostUsd * 1_000_000) / 1_000_000,
59
+ provider: config.llmProvider,
60
+ model: config.llmModel,
61
+ },
62
+ };
63
+ }
64
+ //# sourceMappingURL=proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof.js","sourceRoot":"","sources":["../../src/local-sandbox/proof.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AASxC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,SAA2B,EAC3B,aAAqB;IAErB,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAClE,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAElF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,OAAO;QACP,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzF,iBAAiB;KAClB,CAAC,CAAA;IAEF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,OAAe,EACf,cAAsB,EACtB,eAAqC,EACrC,MAAiD;IAEjD,MAAM,aAAa,GAAG,oBAAoB,CACxC,OAAO,EACP,eAAe,CAAC,SAAS,EACzB,eAAe,CAAC,aAAa,CAC9B,CAAA;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAA;IAExF,0CAA0C;IAC1C,IAAI,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA,CAAC,8BAA8B;IAC5E,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC3C,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC3C,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChD,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,aAAa,EAAE,eAAe;QAC9B,MAAM,EAAE;YACN,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,aAAa,EAAE,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YAC3D,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,eAAe,EAAE,eAAe,CAAC,eAAe;YAChD,MAAM,EAAE,eAAe,CAAC,MAAM;SAC/B;QACD,KAAK,EAAE;YACL,aAAa;YACb,cAAc;SACf;QACD,WAAW,EAAE;YACX,WAAW;YACX,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,SAAS;YACtE,QAAQ,EAAE,MAAM,CAAC,WAAW;YAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ;SACvB;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { MinerConfig } from './config.js';
2
+ export interface TaskData {
3
+ id: string;
4
+ taskType: 'token_injection' | 'social_engineering' | 'memory_poisoning' | 'full_chain';
5
+ difficulty: number;
6
+ targetAgentProfile: {
7
+ id: string;
8
+ name: string;
9
+ model: string;
10
+ systemPrompt: string;
11
+ targetChain: string;
12
+ availableTools: {
13
+ name: string;
14
+ description: string;
15
+ parameters: Record<string, unknown>;
16
+ }[];
17
+ defenseLevel: string;
18
+ injectionSurface: string;
19
+ };
20
+ targetChain: string;
21
+ injectionSurface: string;
22
+ rewardPoints: number;
23
+ expiresAt: string | null;
24
+ executionMode?: 'sandbox_verified' | 'local_compute';
25
+ challengeNonce?: string;
26
+ mockToolDefinitions?: {
27
+ name: string;
28
+ description: string;
29
+ parameters: Record<string, unknown>;
30
+ }[];
31
+ }
32
+ /** Long-poll the Oracle for the next available task */
33
+ export declare function pollForTask(config: MinerConfig, token: string): Promise<TaskData | null>;
34
+ /** Submit a payload for a task (sandbox_verified path) */
35
+ export declare function submitPayload(config: MinerConfig, token: string, taskId: string, payload: string): Promise<SubmitResult>;
36
+ /** Submit a local_compute result with structured proof */
37
+ export declare function submitLocalComputeResult(config: MinerConfig, token: string, body: Record<string, unknown>): Promise<SubmitResult>;
38
+ export interface SubmitResult {
39
+ result: 'success' | 'submitted' | 'slashed' | 'failed';
40
+ message: string;
41
+ pointsAwarded?: number;
42
+ submissionId?: string;
43
+ slashedAmount?: number;
44
+ spotCheckSelected?: boolean;
45
+ }
46
+ //# sourceMappingURL=poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,YAAY,CAAA;IACtF,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE;QAClB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,EAAE,CAAA;QAC5F,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,aAAa,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAA;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;CACnG;AAED,uDAAuD;AACvD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAc1B;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAevB;AAED,0DAA0D;AAC1D,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,YAAY,CAAC,CAuBvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;IACtD,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B"}
package/dist/poller.js ADDED
@@ -0,0 +1,53 @@
1
+ /** Long-poll the Oracle for the next available task */
2
+ export async function pollForTask(config, token) {
3
+ const res = await fetch(`${config.oracleUrl}/tasks/poll`, {
4
+ headers: {
5
+ Authorization: `Bearer ${token}`,
6
+ },
7
+ });
8
+ if (!res.ok) {
9
+ if (res.status === 401)
10
+ throw new Error('Token expired, re-authenticate');
11
+ throw new Error(`Poll failed: ${res.statusText}`);
12
+ }
13
+ const data = await res.json();
14
+ return data.task;
15
+ }
16
+ /** Submit a payload for a task (sandbox_verified path) */
17
+ export async function submitPayload(config, token, taskId, payload) {
18
+ const res = await fetch(`${config.oracleUrl}/tasks/submit`, {
19
+ method: 'POST',
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ 'Authorization': `Bearer ${token}`,
23
+ },
24
+ body: JSON.stringify({ taskId, payload }),
25
+ });
26
+ if (!res.ok) {
27
+ throw new Error(`Submit failed: ${res.statusText}`);
28
+ }
29
+ return res.json();
30
+ }
31
+ /** Submit a local_compute result with structured proof */
32
+ export async function submitLocalComputeResult(config, token, body) {
33
+ const res = await fetch(`${config.oracleUrl}/tasks/submit`, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ 'Authorization': `Bearer ${token}`,
38
+ },
39
+ body: JSON.stringify(body),
40
+ });
41
+ if (res.status === 409) {
42
+ return {
43
+ result: 'submitted',
44
+ message: 'Duplicate submission — already submitted for this task.',
45
+ };
46
+ }
47
+ if (!res.ok) {
48
+ const errBody = await res.text().catch(() => '');
49
+ throw new Error(`Submit failed (${res.status}): ${errBody}`);
50
+ }
51
+ return res.json();
52
+ }
53
+ //# sourceMappingURL=poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AA0BA,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,KAAa;IAEb,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,aAAa,EAAE;QACxD,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACzE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA+B,CAAA;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAmB,EACnB,KAAa,EACb,MAAc,EACd,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,eAAe,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,KAAK,EAAE;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KAC1C,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAA2B,CAAA;AAC5C,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAmB,EACnB,KAAa,EACb,IAA6B;IAE7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,eAAe,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,KAAK,EAAE;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,yDAAyD;SACnE,CAAA;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAA2B,CAAA;AAC5C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@openshell-cc/miner-cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Mine $SHELL by red-teaming AI agents",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/bidaiAI/shell-protocol.git",
9
+ "directory": "packages/miner-cli"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ ".env.example",
14
+ "README.md"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "bin": {
20
+ "shell-miner": "./dist/index.js",
21
+ "miner-cli": "./dist/index.js"
22
+ },
23
+ "scripts": {
24
+ "dev": "tsx src/index.ts",
25
+ "build": "tsc",
26
+ "start": "node dist/index.js"
27
+ },
28
+ "dependencies": {
29
+ "commander": "^13.1.0",
30
+ "@anthropic-ai/sdk": "^0.39.0",
31
+ "openai": "^4.80.0",
32
+ "tweetnacl": "^1.0.3",
33
+ "bs58": "^6.0.0",
34
+ "chalk": "^5.4.0",
35
+ "ora": "^8.2.0",
36
+ "dotenv": "^16.5.0"
37
+ },
38
+ "devDependencies": {
39
+ "typescript": "^5.8.0",
40
+ "tsx": "^4.19.0",
41
+ "@types/node": "^22.0.0"
42
+ }
43
+ }