clodds 1.2.9 → 1.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 (263) hide show
  1. package/dist/skills/bundled/acp/SKILL.md +188 -0
  2. package/dist/skills/bundled/acp/index.d.ts +0 -3
  3. package/dist/skills/bundled/acp/index.js +1 -1
  4. package/dist/skills/bundled/acp/index.js.map +1 -1
  5. package/dist/skills/bundled/agentbets/SKILL.md +19 -0
  6. package/dist/skills/bundled/agentbets/index.js +1 -1
  7. package/dist/skills/bundled/agentbets/index.js.map +1 -1
  8. package/dist/skills/bundled/ai-strategy/SKILL.md +111 -0
  9. package/dist/skills/bundled/ai-strategy/index.js +1 -1
  10. package/dist/skills/bundled/ai-strategy/index.js.map +1 -1
  11. package/dist/skills/bundled/alerts/SKILL.md +87 -0
  12. package/dist/skills/bundled/analytics/SKILL.md +252 -0
  13. package/dist/skills/bundled/analytics/index.js +2 -2
  14. package/dist/skills/bundled/analytics/index.js.map +1 -1
  15. package/dist/skills/bundled/arbitrage/SKILL.md +287 -0
  16. package/dist/skills/bundled/arbitrage/index.js +6 -1
  17. package/dist/skills/bundled/arbitrage/index.js.map +1 -1
  18. package/dist/skills/bundled/auto-reply/SKILL.md +285 -0
  19. package/dist/skills/bundled/auto-reply/index.js +2 -2
  20. package/dist/skills/bundled/auto-reply/index.js.map +1 -1
  21. package/dist/skills/bundled/automation/SKILL.md +242 -0
  22. package/dist/skills/bundled/automation/index.js +2 -2
  23. package/dist/skills/bundled/automation/index.js.map +1 -1
  24. package/dist/skills/bundled/backtest/SKILL.md +225 -0
  25. package/dist/skills/bundled/bags/SKILL.md +131 -0
  26. package/dist/skills/bundled/bankr/SKILL.md +114 -0
  27. package/dist/skills/bundled/betfair/SKILL.md +113 -0
  28. package/dist/skills/bundled/binance-futures/SKILL.md +84 -0
  29. package/dist/skills/bundled/binance-futures/index.d.ts +0 -3
  30. package/dist/skills/bundled/binance-futures/index.js +1 -2
  31. package/dist/skills/bundled/binance-futures/index.js.map +1 -1
  32. package/dist/skills/bundled/botchan/SKILL.md +66 -0
  33. package/dist/skills/bundled/botchan/index.d.ts +0 -3
  34. package/dist/skills/bundled/botchan/index.js +0 -1
  35. package/dist/skills/bundled/botchan/index.js.map +1 -1
  36. package/dist/skills/bundled/bridge/SKILL.md +215 -0
  37. package/dist/skills/bundled/bridge/index.js +6 -0
  38. package/dist/skills/bundled/bridge/index.js.map +1 -1
  39. package/dist/skills/bundled/bybit-futures/SKILL.md +84 -0
  40. package/dist/skills/bundled/bybit-futures/index.d.ts +0 -3
  41. package/dist/skills/bundled/bybit-futures/index.js +0 -1
  42. package/dist/skills/bundled/bybit-futures/index.js.map +1 -1
  43. package/dist/skills/bundled/clanker/SKILL.md +125 -0
  44. package/dist/skills/bundled/clanker/index.d.ts +0 -3
  45. package/dist/skills/bundled/clanker/index.js +0 -1
  46. package/dist/skills/bundled/clanker/index.js.map +1 -1
  47. package/dist/skills/bundled/copy-trading/SKILL.md +285 -0
  48. package/dist/skills/bundled/copy-trading/index.js +15 -8
  49. package/dist/skills/bundled/copy-trading/index.js.map +1 -1
  50. package/dist/skills/bundled/copy-trading-solana/SKILL.md +66 -0
  51. package/dist/skills/bundled/credentials/SKILL.md +261 -0
  52. package/dist/skills/bundled/credentials/index.js +4 -0
  53. package/dist/skills/bundled/credentials/index.js.map +1 -1
  54. package/dist/skills/bundled/crypto-hft/SKILL.md +121 -0
  55. package/dist/skills/bundled/crypto-hft/index.js +18 -3
  56. package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
  57. package/dist/skills/bundled/dca/SKILL.md +27 -0
  58. package/dist/skills/bundled/dex/SKILL.md +92 -0
  59. package/dist/skills/bundled/dex/index.js +77 -29
  60. package/dist/skills/bundled/dex/index.js.map +1 -1
  61. package/dist/skills/bundled/divergence/SKILL.md +83 -0
  62. package/dist/skills/bundled/doctor/SKILL.md +267 -0
  63. package/dist/skills/bundled/doctor/index.js +2 -8
  64. package/dist/skills/bundled/doctor/index.js.map +1 -1
  65. package/dist/skills/bundled/drift/SKILL.md +53 -0
  66. package/dist/skills/bundled/drift-sdk/SKILL.md +103 -0
  67. package/dist/skills/bundled/drift-sdk/index.d.ts +0 -3
  68. package/dist/skills/bundled/drift-sdk/index.js +0 -1
  69. package/dist/skills/bundled/drift-sdk/index.js.map +1 -1
  70. package/dist/skills/bundled/edge/SKILL.md +84 -0
  71. package/dist/skills/bundled/embeddings/SKILL.md +244 -0
  72. package/dist/skills/bundled/endaoment/SKILL.md +65 -0
  73. package/dist/skills/bundled/endaoment/index.d.ts +0 -3
  74. package/dist/skills/bundled/endaoment/index.js +0 -1
  75. package/dist/skills/bundled/endaoment/index.js.map +1 -1
  76. package/dist/skills/bundled/ens/SKILL.md +63 -0
  77. package/dist/skills/bundled/ens/index.d.ts +0 -3
  78. package/dist/skills/bundled/ens/index.js +0 -1
  79. package/dist/skills/bundled/ens/index.js.map +1 -1
  80. package/dist/skills/bundled/erc8004/SKILL.md +79 -0
  81. package/dist/skills/bundled/erc8004/index.d.ts +0 -3
  82. package/dist/skills/bundled/erc8004/index.js +0 -1
  83. package/dist/skills/bundled/erc8004/index.js.map +1 -1
  84. package/dist/skills/bundled/execution/SKILL.md +278 -0
  85. package/dist/skills/bundled/farcaster/SKILL.md +80 -0
  86. package/dist/skills/bundled/farcaster/index.js +12 -0
  87. package/dist/skills/bundled/farcaster/index.js.map +1 -1
  88. package/dist/skills/bundled/features/SKILL.md +20 -0
  89. package/dist/skills/bundled/feeds/SKILL.md +288 -0
  90. package/dist/skills/bundled/harden/SKILL.md +74 -0
  91. package/dist/skills/bundled/history/SKILL.md +257 -0
  92. package/dist/skills/bundled/hyperliquid/SKILL.md +200 -0
  93. package/dist/skills/bundled/hyperliquid/index.d.ts +0 -3
  94. package/dist/skills/bundled/hyperliquid/index.js +0 -1
  95. package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
  96. package/dist/skills/bundled/identity/SKILL.md +228 -0
  97. package/dist/skills/bundled/identity/index.js +2 -2
  98. package/dist/skills/bundled/identity/index.js.map +1 -1
  99. package/dist/skills/bundled/integrations/SKILL.md +321 -0
  100. package/dist/skills/bundled/integrations/index.js +2 -2
  101. package/dist/skills/bundled/integrations/index.js.map +1 -1
  102. package/dist/skills/bundled/jupiter/SKILL.md +163 -0
  103. package/dist/skills/bundled/jupiter/index.js +2 -2
  104. package/dist/skills/bundled/kamino/SKILL.md +69 -0
  105. package/dist/skills/bundled/ledger/SKILL.md +20 -0
  106. package/dist/skills/bundled/lighter/SKILL.md +83 -0
  107. package/dist/skills/bundled/lighter/index.d.ts +0 -3
  108. package/dist/skills/bundled/lighter/index.js +0 -1
  109. package/dist/skills/bundled/lighter/index.js.map +1 -1
  110. package/dist/skills/bundled/marginfi/SKILL.md +62 -0
  111. package/dist/skills/bundled/market-index/SKILL.md +242 -0
  112. package/dist/skills/bundled/market-index/index.js +1 -3
  113. package/dist/skills/bundled/market-index/index.js.map +1 -1
  114. package/dist/skills/bundled/markets/SKILL.md +49 -0
  115. package/dist/skills/bundled/mcp/SKILL.md +235 -0
  116. package/dist/skills/bundled/mcp/index.js +1 -3
  117. package/dist/skills/bundled/mcp/index.js.map +1 -1
  118. package/dist/skills/bundled/memory/SKILL.md +209 -0
  119. package/dist/skills/bundled/metaculus/SKILL.md +62 -0
  120. package/dist/skills/bundled/metaculus/index.js +4 -1
  121. package/dist/skills/bundled/metaculus/index.js.map +1 -1
  122. package/dist/skills/bundled/meteora/SKILL.md +28 -0
  123. package/dist/skills/bundled/meteora-dbc/SKILL.md +25 -0
  124. package/dist/skills/bundled/metrics/SKILL.md +338 -0
  125. package/dist/skills/bundled/mev/SKILL.md +239 -0
  126. package/dist/skills/bundled/mev/index.js +2 -2
  127. package/dist/skills/bundled/mev/index.js.map +1 -1
  128. package/dist/skills/bundled/mexc-futures/SKILL.md +86 -0
  129. package/dist/skills/bundled/mexc-futures/index.d.ts +0 -3
  130. package/dist/skills/bundled/mexc-futures/index.js +0 -1
  131. package/dist/skills/bundled/mexc-futures/index.js.map +1 -1
  132. package/dist/skills/bundled/mm/SKILL.md +142 -0
  133. package/dist/skills/bundled/mm/index.js +28 -27
  134. package/dist/skills/bundled/mm/index.js.map +1 -1
  135. package/dist/skills/bundled/monitoring/SKILL.md +249 -0
  136. package/dist/skills/bundled/news/SKILL.md +95 -0
  137. package/dist/skills/bundled/news/index.js +1 -2
  138. package/dist/skills/bundled/news/index.js.map +1 -1
  139. package/dist/skills/bundled/onchainkit/SKILL.md +83 -0
  140. package/dist/skills/bundled/opinion/SKILL.md +87 -0
  141. package/dist/skills/bundled/opportunity/SKILL.md +308 -0
  142. package/dist/skills/bundled/orca/SKILL.md +28 -0
  143. package/dist/skills/bundled/orca/index.js +11 -7
  144. package/dist/skills/bundled/orca/index.js.map +1 -1
  145. package/dist/skills/bundled/pairing/SKILL.md +275 -0
  146. package/dist/skills/bundled/pancakeswap/SKILL.md +93 -0
  147. package/dist/skills/bundled/pancakeswap/index.d.ts +0 -3
  148. package/dist/skills/bundled/pancakeswap/index.js +0 -1
  149. package/dist/skills/bundled/pancakeswap/index.js.map +1 -1
  150. package/dist/skills/bundled/percolator/SKILL.md +22 -0
  151. package/dist/skills/bundled/permissions/SKILL.md +269 -0
  152. package/dist/skills/bundled/permissions/index.js +2 -2
  153. package/dist/skills/bundled/permissions/index.js.map +1 -1
  154. package/dist/skills/bundled/plugins/SKILL.md +263 -0
  155. package/dist/skills/bundled/plugins/index.js +2 -2
  156. package/dist/skills/bundled/plugins/index.js.map +1 -1
  157. package/dist/skills/bundled/portfolio/SKILL.md +161 -0
  158. package/dist/skills/bundled/portfolio/index.js +1 -1
  159. package/dist/skills/bundled/portfolio/index.js.map +1 -1
  160. package/dist/skills/bundled/portfolio-sync/SKILL.md +466 -0
  161. package/dist/skills/bundled/positions/SKILL.md +262 -0
  162. package/dist/skills/bundled/predictfun/SKILL.md +109 -0
  163. package/dist/skills/bundled/predictfun/index.js +1 -1
  164. package/dist/skills/bundled/predictfun/index.js.map +1 -1
  165. package/dist/skills/bundled/predictit/SKILL.md +66 -0
  166. package/dist/skills/bundled/predictit/index.js +4 -1
  167. package/dist/skills/bundled/predictit/index.js.map +1 -1
  168. package/dist/skills/bundled/presence/SKILL.md +217 -0
  169. package/dist/skills/bundled/presence/index.js +2 -2
  170. package/dist/skills/bundled/presence/index.js.map +1 -1
  171. package/dist/skills/bundled/processes/SKILL.md +254 -0
  172. package/dist/skills/bundled/pump-swarm/SKILL.md +309 -0
  173. package/dist/skills/bundled/pumpfun/SKILL.md +145 -0
  174. package/dist/skills/bundled/pumpfun/index.js +82 -8
  175. package/dist/skills/bundled/pumpfun/index.js.map +1 -1
  176. package/dist/skills/bundled/qmd/SKILL.md +129 -0
  177. package/dist/skills/bundled/qrcoin/SKILL.md +60 -0
  178. package/dist/skills/bundled/qrcoin/index.d.ts +0 -3
  179. package/dist/skills/bundled/qrcoin/index.js +0 -1
  180. package/dist/skills/bundled/qrcoin/index.js.map +1 -1
  181. package/dist/skills/bundled/raydium/SKILL.md +198 -0
  182. package/dist/skills/bundled/remote/SKILL.md +201 -0
  183. package/dist/skills/bundled/research/SKILL.md +83 -0
  184. package/dist/skills/bundled/research/index.js +2 -2
  185. package/dist/skills/bundled/research/index.js.map +1 -1
  186. package/dist/skills/bundled/risk/SKILL.md +323 -0
  187. package/dist/skills/bundled/router/SKILL.md +233 -0
  188. package/dist/skills/bundled/routing/SKILL.md +258 -0
  189. package/dist/skills/bundled/sandbox/SKILL.md +257 -0
  190. package/dist/skills/bundled/search-config/SKILL.md +257 -0
  191. package/dist/skills/bundled/search-config/index.js +2 -2
  192. package/dist/skills/bundled/search-config/index.js.map +1 -1
  193. package/dist/skills/bundled/sessions/SKILL.md +251 -0
  194. package/dist/skills/bundled/sessions/index.js +1 -1
  195. package/dist/skills/bundled/sessions/index.js.map +1 -1
  196. package/dist/skills/bundled/setup/SKILL.md +53 -0
  197. package/dist/skills/bundled/shield/SKILL.md +21 -0
  198. package/dist/skills/bundled/signals/SKILL.md +106 -0
  199. package/dist/skills/bundled/signals/index.d.ts +0 -3
  200. package/dist/skills/bundled/signals/index.js +3 -4
  201. package/dist/skills/bundled/signals/index.js.map +1 -1
  202. package/dist/skills/bundled/sizing/SKILL.md +238 -0
  203. package/dist/skills/bundled/slippage/SKILL.md +306 -0
  204. package/dist/skills/bundled/smarkets/SKILL.md +107 -0
  205. package/dist/skills/bundled/smarkets/index.js +3 -3
  206. package/dist/skills/bundled/smarkets/index.js.map +1 -1
  207. package/dist/skills/bundled/solend/SKILL.md +63 -0
  208. package/dist/skills/bundled/strategy/SKILL.md +266 -0
  209. package/dist/skills/bundled/streaming/SKILL.md +150 -0
  210. package/dist/skills/bundled/streaming/index.js +2 -2
  211. package/dist/skills/bundled/streaming/index.js.map +1 -1
  212. package/dist/skills/bundled/tailscale/SKILL.md +249 -0
  213. package/dist/skills/bundled/tailscale/index.js +2 -2
  214. package/dist/skills/bundled/tailscale/index.js.map +1 -1
  215. package/dist/skills/bundled/ticks/SKILL.md +61 -0
  216. package/dist/skills/bundled/token-security/SKILL.md +18 -0
  217. package/dist/skills/bundled/trading-evm/SKILL.md +329 -0
  218. package/dist/skills/bundled/trading-futures/SKILL.md +865 -0
  219. package/dist/skills/bundled/trading-kalshi/SKILL.md +629 -0
  220. package/dist/skills/bundled/trading-kalshi/index.js +2 -0
  221. package/dist/skills/bundled/trading-kalshi/index.js.map +1 -1
  222. package/dist/skills/bundled/trading-manifold/SKILL.md +387 -0
  223. package/dist/skills/bundled/trading-polymarket/SKILL.md +1080 -0
  224. package/dist/skills/bundled/trading-polymarket/index.js +28 -19
  225. package/dist/skills/bundled/trading-polymarket/index.js.map +1 -1
  226. package/dist/skills/bundled/trading-solana/SKILL.md +418 -0
  227. package/dist/skills/bundled/trading-solana/index.js +1 -1
  228. package/dist/skills/bundled/trading-solana/index.js.map +1 -1
  229. package/dist/skills/bundled/trading-system/SKILL.md +290 -0
  230. package/dist/skills/bundled/triggers/SKILL.md +433 -0
  231. package/dist/skills/bundled/tts/SKILL.md +220 -0
  232. package/dist/skills/bundled/tweet-ideas/SKILL.md +77 -0
  233. package/dist/skills/bundled/usage/SKILL.md +239 -0
  234. package/dist/skills/bundled/usage/index.js +2 -2
  235. package/dist/skills/bundled/usage/index.js.map +1 -1
  236. package/dist/skills/bundled/veil/SKILL.md +76 -0
  237. package/dist/skills/bundled/veil/index.d.ts +0 -3
  238. package/dist/skills/bundled/veil/index.js +0 -1
  239. package/dist/skills/bundled/veil/index.js.map +1 -1
  240. package/dist/skills/bundled/verify/SKILL.md +199 -0
  241. package/dist/skills/bundled/verify/index.d.ts +0 -3
  242. package/dist/skills/bundled/verify/index.js +0 -1
  243. package/dist/skills/bundled/verify/index.js.map +1 -1
  244. package/dist/skills/bundled/virtuals/SKILL.md +82 -0
  245. package/dist/skills/bundled/voice/SKILL.md +217 -0
  246. package/dist/skills/bundled/voice/index.js +2 -2
  247. package/dist/skills/bundled/voice/index.js.map +1 -1
  248. package/dist/skills/bundled/weather/SKILL.md +80 -0
  249. package/dist/skills/bundled/weather/index.js +3 -0
  250. package/dist/skills/bundled/weather/index.js.map +1 -1
  251. package/dist/skills/bundled/webhooks/SKILL.md +297 -0
  252. package/dist/skills/bundled/webhooks/index.js +2 -2
  253. package/dist/skills/bundled/webhooks/index.js.map +1 -1
  254. package/dist/skills/bundled/whale-tracking/SKILL.md +287 -0
  255. package/dist/skills/bundled/whale-tracking/index.js +2 -2
  256. package/dist/skills/bundled/whale-tracking/index.js.map +1 -1
  257. package/dist/skills/bundled/yoink/SKILL.md +54 -0
  258. package/dist/skills/bundled/yoink/index.d.ts +0 -3
  259. package/dist/skills/bundled/yoink/index.js +0 -1
  260. package/dist/skills/bundled/yoink/index.js.map +1 -1
  261. package/dist/skills/executor.js +5 -3
  262. package/dist/skills/executor.js.map +1 -1
  263. package/package.json +2 -2
@@ -0,0 +1,275 @@
1
+ ---
2
+ name: pairing
3
+ description: "User pairing, authentication, and trust management"
4
+ emoji: "🔗"
5
+ ---
6
+
7
+ # Pairing - Complete API Reference
8
+
9
+ Pair new users to Clodds, manage trust levels, and control access across channels.
10
+
11
+ ---
12
+
13
+ ## Chat Commands
14
+
15
+ ### Pairing (New Users)
16
+
17
+ ```
18
+ /pair Request pairing (generates code)
19
+ /pair-code ABC123 Enter pairing code
20
+ /unpair Remove your pairing
21
+ ```
22
+
23
+ ### Admin Commands
24
+
25
+ ```
26
+ /pairing list List pending requests
27
+ /pairing approve <code> Approve pairing request
28
+ /pairing reject <code> Reject pairing request
29
+ /pairing users List paired users
30
+ /pairing remove <user> Remove user pairing
31
+ ```
32
+
33
+ ### Trust Management
34
+
35
+ ```
36
+ /trust <user> owner Grant owner trust
37
+ /trust <user> paired Standard trust
38
+ /trust list List trust levels
39
+ ```
40
+
41
+ ---
42
+
43
+ ## TypeScript API Reference
44
+
45
+ ### Create Pairing Service
46
+
47
+ ```typescript
48
+ import { createPairingService } from 'clodds/pairing';
49
+
50
+ const pairing = createPairingService({
51
+ // Code settings
52
+ codeLength: 8,
53
+ codeExpiryMinutes: 60,
54
+ maxPendingPerChannel: 3,
55
+
56
+ // Auto-approve settings
57
+ autoApproveLocal: true, // Auto-approve localhost
58
+ autoApproveTailscale: true, // Auto-approve Tailscale IPs
59
+ autoApproveOwners: true, // Owners auto-approve their requests
60
+
61
+ // Storage
62
+ storage: 'sqlite',
63
+ dbPath: './pairing.db',
64
+ });
65
+ ```
66
+
67
+ ### Create Pairing Request
68
+
69
+ ```typescript
70
+ // User requests pairing
71
+ const request = await pairing.createPairingRequest({
72
+ channelId: 'telegram-123',
73
+ userId: 'telegram-user-456',
74
+ username: 'johndoe',
75
+ displayName: 'John Doe',
76
+ });
77
+
78
+ console.log(`Pairing code: ${request.code}`);
79
+ console.log(`Expires: ${request.expiresAt}`);
80
+ console.log(`Share this code with an admin to get approved`);
81
+ ```
82
+
83
+ ### Validate Code
84
+
85
+ ```typescript
86
+ // Check if code is valid
87
+ const valid = await pairing.validateCode({
88
+ code: 'ABC123XY',
89
+ });
90
+
91
+ if (valid) {
92
+ console.log(`Valid code for user: ${valid.username}`);
93
+ console.log(`Channel: ${valid.channelId}`);
94
+ }
95
+ ```
96
+
97
+ ### Approve Request
98
+
99
+ ```typescript
100
+ // Admin approves pairing
101
+ await pairing.approveRequest({
102
+ code: 'ABC123XY',
103
+ approvedBy: 'admin-user-id',
104
+ trustLevel: 'paired',
105
+ });
106
+ ```
107
+
108
+ ### Reject Request
109
+
110
+ ```typescript
111
+ // Admin rejects pairing
112
+ await pairing.rejectRequest({
113
+ code: 'ABC123XY',
114
+ rejectedBy: 'admin-user-id',
115
+ reason: 'Unknown user',
116
+ });
117
+ ```
118
+
119
+ ### Check Pairing Status
120
+
121
+ ```typescript
122
+ // Check if user is paired
123
+ const isPaired = await pairing.isPaired({
124
+ channelId: 'telegram-123',
125
+ userId: 'telegram-user-456',
126
+ });
127
+
128
+ if (isPaired) {
129
+ console.log('User is paired and can use Clodds');
130
+ }
131
+ ```
132
+
133
+ ### Get Trust Level
134
+
135
+ ```typescript
136
+ const trust = await pairing.getTrustLevel({
137
+ channelId: 'telegram-123',
138
+ userId: 'telegram-user-456',
139
+ });
140
+
141
+ console.log(`Trust level: ${trust}`);
142
+ // 'owner' | 'paired' | 'stranger'
143
+
144
+ // Check specific permission
145
+ if (trust === 'owner') {
146
+ console.log('Full admin access');
147
+ } else if (trust === 'paired') {
148
+ console.log('Standard trading access');
149
+ } else {
150
+ console.log('No access - must pair first');
151
+ }
152
+ ```
153
+
154
+ ### List Pending Requests
155
+
156
+ ```typescript
157
+ const pending = await pairing.listPendingRequests({
158
+ channelId: 'telegram-123', // Optional: filter by channel
159
+ });
160
+
161
+ for (const req of pending) {
162
+ console.log(`Code: ${req.code}`);
163
+ console.log(`User: ${req.username} (${req.displayName})`);
164
+ console.log(`Requested: ${req.createdAt}`);
165
+ console.log(`Expires: ${req.expiresAt}`);
166
+ }
167
+ ```
168
+
169
+ ### List Paired Users
170
+
171
+ ```typescript
172
+ const users = await pairing.listPairedUsers({
173
+ channelId: 'telegram-123', // Optional: filter by channel
174
+ });
175
+
176
+ for (const user of users) {
177
+ console.log(`${user.username}: ${user.trustLevel}`);
178
+ console.log(` Paired: ${user.pairedAt}`);
179
+ console.log(` Approved by: ${user.approvedBy}`);
180
+ }
181
+ ```
182
+
183
+ ### Check Owner Status
184
+
185
+ ```typescript
186
+ const isOwner = await pairing.isOwner({
187
+ channelId: 'telegram-123',
188
+ userId: 'telegram-user-456',
189
+ });
190
+
191
+ if (isOwner) {
192
+ console.log('User has owner privileges');
193
+ }
194
+ ```
195
+
196
+ ### Remove Pairing
197
+
198
+ ```typescript
199
+ // Remove user's pairing
200
+ await pairing.removePairing({
201
+ channelId: 'telegram-123',
202
+ userId: 'telegram-user-456',
203
+ });
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Trust Levels
209
+
210
+ | Level | Access |
211
+ |-------|--------|
212
+ | **owner** | Full admin: approve users, manage settings, trading |
213
+ | **paired** | Standard: trading, portfolio, queries |
214
+ | **stranger** | None: must pair first |
215
+
216
+ ---
217
+
218
+ ## Pairing Code Format
219
+
220
+ - **Length**: 8 characters
221
+ - **Characters**: Uppercase letters + numbers
222
+ - **Excludes**: 0, O, 1, I, L (avoid confusion)
223
+ - **Example**: `ABC234XY`
224
+
225
+ ---
226
+
227
+ ## Auto-Approve Rules
228
+
229
+ | Condition | Behavior |
230
+ |-----------|----------|
231
+ | Localhost | Auto-approve with owner trust |
232
+ | Tailscale IP | Auto-approve with owner trust |
233
+ | Owner request | Auto-approve their other channels |
234
+
235
+ ---
236
+
237
+ ## Security Features
238
+
239
+ | Feature | Description |
240
+ |---------|-------------|
241
+ | **Code expiry** | Codes expire after 1 hour |
242
+ | **Rate limiting** | Max 3 pending per channel |
243
+ | **Unambiguous codes** | No confusable characters |
244
+ | **Audit trail** | Who approved/rejected when |
245
+
246
+ ---
247
+
248
+ ## CLI Admin Commands
249
+
250
+ ```bash
251
+ # List pending pairing requests
252
+ clodds pairing list telegram
253
+
254
+ # Approve a request
255
+ clodds pairing approve ABC234XY
256
+
257
+ # List paired users
258
+ clodds pairing users telegram
259
+
260
+ # Add user directly (bypass code)
261
+ clodds pairing add telegram user-123
262
+
263
+ # Remove user
264
+ clodds pairing remove telegram user-123
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Best Practices
270
+
271
+ 1. **Share codes securely** — Don't post in public channels
272
+ 2. **Set expiry appropriately** — Shorter for sensitive systems
273
+ 3. **Review pending regularly** — Don't let requests pile up
274
+ 4. **Use owner sparingly** — Most users only need 'paired'
275
+ 5. **Audit periodically** — Review who has access
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: pancakeswap
3
+ description: "PancakeSwap — Multi-chain DEX (BNB Chain, ETH, ARB, Base)"
4
+ emoji: "🥞"
5
+ commands:
6
+ - /cake
7
+ gates:
8
+ envs:
9
+ - EVM_PRIVATE_KEY
10
+ ---
11
+
12
+ # PancakeSwap
13
+
14
+ Multi-chain AMM DEX with V3 concentrated liquidity. Swap tokens on BNB Chain, Ethereum, Arbitrum, and Base.
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ # Set credentials
20
+ export EVM_PRIVATE_KEY="0x..."
21
+
22
+ # Get a quote
23
+ /cake quote BNB USDT 1 --chain bsc
24
+
25
+ # Execute swap
26
+ /cake swap BNB USDT 1 --chain bsc
27
+
28
+ # Check price
29
+ /cake price CAKE USDT --chain bsc
30
+ ```
31
+
32
+ ## Commands
33
+
34
+ | Command | Description |
35
+ |---------|-------------|
36
+ | `/cake swap <from> <to> <amount> [--chain bsc]` | Execute swap |
37
+ | `/cake quote <from> <to> <amount> [--chain bsc]` | Get quote without executing |
38
+ | `/cake price <tokenA> <tokenB> [--chain bsc]` | Get relative price |
39
+ | `/cake balance <token> [--chain bsc]` | Check token balance |
40
+ | `/cake help` | Show commands |
41
+
42
+ ## Chain Flag
43
+
44
+ Use `--chain` to select network (default: bsc):
45
+
46
+ | Flag | Network |
47
+ |------|---------|
48
+ | `--chain bsc` | BNB Smart Chain (default) |
49
+ | `--chain eth` | Ethereum |
50
+ | `--chain arb` | Arbitrum |
51
+ | `--chain base` | Base |
52
+
53
+ ## Examples
54
+
55
+ ```bash
56
+ # Swap 1 BNB to USDT on BSC
57
+ /cake swap BNB USDT 1
58
+
59
+ # Swap 100 USDC to CAKE on Ethereum
60
+ /cake swap USDC CAKE 100 --chain eth
61
+
62
+ # Get quote for WETH to USDC on Arbitrum
63
+ /cake quote WETH USDC 0.5 --chain arb
64
+
65
+ # Check CAKE balance on BSC
66
+ /cake balance CAKE
67
+ ```
68
+
69
+ ## Common Tokens
70
+
71
+ | Token | BSC | ETH | ARB | Base |
72
+ |-------|-----|-----|-----|------|
73
+ | CAKE | Yes | Yes | Yes | Yes |
74
+ | USDC | Yes | Yes | Yes | Yes |
75
+ | USDT | Yes | Yes | Yes | - |
76
+ | WBNB | Yes | - | - | - |
77
+ | WETH | - | Yes | Yes | Yes |
78
+
79
+ ## Configuration
80
+
81
+ ```bash
82
+ # Required
83
+ export EVM_PRIVATE_KEY="0x..."
84
+
85
+ # Optional: custom RPC URLs
86
+ export BSC_RPC_URL="https://..."
87
+ export ETH_RPC_URL="https://..."
88
+ ```
89
+
90
+ ## Resources
91
+
92
+ - [PancakeSwap App](https://pancakeswap.finance)
93
+ - [PancakeSwap Docs](https://docs.pancakeswap.finance)
@@ -11,9 +11,6 @@ export declare const skill: {
11
11
  description: string;
12
12
  usage: string;
13
13
  }[];
14
- requires: {
15
- env: string[];
16
- };
17
14
  handler(args: string): Promise<string>;
18
15
  };
19
16
  export default skill;
@@ -189,7 +189,6 @@ exports.skill = {
189
189
  usage: '/cake <command>',
190
190
  },
191
191
  ],
192
- requires: { env: ['EVM_PRIVATE_KEY'] },
193
192
  async handler(args) {
194
193
  const parts = args.trim().split(/\s+/);
195
194
  const cmd = parts[0]?.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/bundled/pancakeswap/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/bundled/pancakeswap/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: percolator
3
+ description: "On-chain Solana perpetual futures"
4
+ command: percolator
5
+ emoji: "⚡"
6
+ ---
7
+
8
+ # Percolator
9
+
10
+ On-chain Solana perpetual futures with leverage via Percolator protocol.
11
+
12
+ ## Commands
13
+
14
+ ```
15
+ /percolator status Show market state (price, OI, funding, spread)
16
+ /percolator positions View your open positions
17
+ /percolator long <size> Open long position (size in USD)
18
+ /percolator short <size> Open short position (size in USD)
19
+ /percolator deposit <amount> Deposit USDC collateral
20
+ /percolator withdraw <amount> Withdraw USDC collateral
21
+ /percolator help Show help
22
+ ```
@@ -0,0 +1,269 @@
1
+ ---
2
+ name: permissions
3
+ description: "Command approvals, tool policies, and exec security"
4
+ emoji: "🛡️"
5
+ ---
6
+
7
+ # Permissions - Complete API Reference
8
+
9
+ Manage command execution approvals, tool access policies, and security controls.
10
+
11
+ ---
12
+
13
+ ## Chat Commands
14
+
15
+ ### View Permissions
16
+
17
+ ```
18
+ /permissions View current permissions
19
+ /permissions list List all rules
20
+ /permissions pending View pending approvals
21
+ /permissions history View approval history
22
+ ```
23
+
24
+ ### Approve/Reject
25
+
26
+ ```
27
+ /approve Approve pending command
28
+ /approve <id> Approve specific request
29
+ /reject Reject pending command
30
+ /reject <id> "reason" Reject with reason
31
+ ```
32
+
33
+ ### Allow/Block Rules
34
+
35
+ ```
36
+ /permissions allow "npm install" Allow pattern
37
+ /permissions allow "git *" Allow with wildcard
38
+ /permissions block "rm -rf" Block dangerous command
39
+ /permissions remove <rule-id> Remove rule
40
+ ```
41
+
42
+ ### Security Mode
43
+
44
+ ```
45
+ /permissions mode Check current mode
46
+ /permissions mode allowlist Only allowed commands
47
+ /permissions mode blocklist Block specific commands
48
+ /permissions mode full Allow all (dangerous)
49
+ ```
50
+
51
+ ---
52
+
53
+ ## TypeScript API Reference
54
+
55
+ ### Create Permissions Manager
56
+
57
+ ```typescript
58
+ import { createPermissionsManager } from 'clodds/permissions';
59
+
60
+ const perms = createPermissionsManager({
61
+ // Security mode
62
+ mode: 'allowlist', // 'deny' | 'allowlist' | 'blocklist' | 'full'
63
+
64
+ // Default rules
65
+ defaultAllow: [
66
+ 'ls *',
67
+ 'cat *',
68
+ 'git status',
69
+ 'git diff',
70
+ 'npm run *',
71
+ ],
72
+
73
+ defaultBlock: [
74
+ 'rm -rf *',
75
+ 'sudo *',
76
+ 'chmod 777 *',
77
+ ],
78
+
79
+ // Approval settings
80
+ requireApproval: true,
81
+ approvalTimeoutMs: 60000,
82
+
83
+ // Storage
84
+ storage: 'sqlite',
85
+ dbPath: './permissions.db',
86
+ });
87
+ ```
88
+
89
+ ### Check Permission
90
+
91
+ ```typescript
92
+ // Check if command is allowed
93
+ const result = await perms.check({
94
+ command: 'npm install lodash',
95
+ userId: 'user-123',
96
+ context: 'Installing dependency',
97
+ });
98
+
99
+ if (result.allowed) {
100
+ console.log('Command allowed');
101
+ } else if (result.needsApproval) {
102
+ console.log(`Waiting for approval: ${result.requestId}`);
103
+ } else {
104
+ console.log(`Blocked: ${result.reason}`);
105
+ }
106
+ ```
107
+
108
+ ### Request Approval
109
+
110
+ ```typescript
111
+ // Request approval for command
112
+ const request = await perms.requestApproval({
113
+ command: 'docker build -t myapp .',
114
+ userId: 'user-123',
115
+ reason: 'Building application container',
116
+ });
117
+
118
+ console.log(`Request ID: ${request.id}`);
119
+ console.log(`Status: ${request.status}`);
120
+
121
+ // Wait for approval
122
+ const approved = await perms.waitForApproval(request.id, {
123
+ timeoutMs: 60000,
124
+ });
125
+
126
+ if (approved) {
127
+ console.log('Approved! Executing...');
128
+ }
129
+ ```
130
+
131
+ ### Approve/Reject
132
+
133
+ ```typescript
134
+ // Approve request
135
+ await perms.approve({
136
+ requestId: 'req-123',
137
+ approvedBy: 'admin-user',
138
+ note: 'Looks safe',
139
+ });
140
+
141
+ // Reject request
142
+ await perms.reject({
143
+ requestId: 'req-123',
144
+ rejectedBy: 'admin-user',
145
+ reason: 'Command too broad',
146
+ });
147
+ ```
148
+
149
+ ### List Pending
150
+
151
+ ```typescript
152
+ // Get pending approvals
153
+ const pending = await perms.listPending();
154
+
155
+ for (const req of pending) {
156
+ console.log(`[${req.id}] ${req.command}`);
157
+ console.log(` User: ${req.userId}`);
158
+ console.log(` Reason: ${req.reason}`);
159
+ console.log(` Requested: ${req.createdAt}`);
160
+ }
161
+ ```
162
+
163
+ ### Add Rules
164
+
165
+ ```typescript
166
+ // Add allow rule
167
+ await perms.addRule({
168
+ type: 'allow',
169
+ pattern: 'npm run *',
170
+ description: 'Allow npm scripts',
171
+ createdBy: 'admin',
172
+ });
173
+
174
+ // Add block rule
175
+ await perms.addRule({
176
+ type: 'block',
177
+ pattern: 'rm -rf /',
178
+ description: 'Prevent root deletion',
179
+ createdBy: 'admin',
180
+ });
181
+
182
+ // List rules
183
+ const rules = await perms.listRules();
184
+
185
+ for (const rule of rules) {
186
+ console.log(`${rule.type}: ${rule.pattern}`);
187
+ }
188
+
189
+ // Remove rule
190
+ await perms.removeRule('rule-id');
191
+ ```
192
+
193
+ ### Tool Policies
194
+
195
+ ```typescript
196
+ // Set tool policy for agent
197
+ await perms.setToolPolicy({
198
+ agentId: 'trading',
199
+ allow: ['execute', 'portfolio', 'markets'],
200
+ deny: ['browser', 'docker', 'exec'],
201
+ });
202
+
203
+ // Check tool access
204
+ const canUse = perms.isToolAllowed('trading', 'execute');
205
+
206
+ // Get agent's allowed tools
207
+ const tools = perms.getAllowedTools('trading');
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Security Modes
213
+
214
+ | Mode | Behavior |
215
+ |------|----------|
216
+ | **deny** | Block all exec commands |
217
+ | **allowlist** | Only explicitly allowed commands |
218
+ | **blocklist** | Block specific patterns, allow rest |
219
+ | **full** | Allow all (dangerous!) |
220
+
221
+ ---
222
+
223
+ ## Pattern Syntax
224
+
225
+ | Pattern | Matches |
226
+ |---------|---------|
227
+ | `npm install` | Exact command |
228
+ | `npm *` | npm with any args |
229
+ | `git status` | Exact command |
230
+ | `* --version` | Any command with --version |
231
+
232
+ ---
233
+
234
+ ## Built-in Safety Rules
235
+
236
+ Always blocked regardless of mode:
237
+ - `rm -rf /`
238
+ - `sudo rm -rf`
239
+ - `chmod 777 /`
240
+ - `:(){ :|:& };:` (fork bomb)
241
+ - Commands with shell injection patterns
242
+
243
+ ---
244
+
245
+ ## CLI Commands
246
+
247
+ ```bash
248
+ # List permission rules
249
+ clodds permissions list
250
+
251
+ # Add allow pattern
252
+ clodds permissions allow "npm run *"
253
+
254
+ # View pending approvals
255
+ clodds permissions pending
256
+
257
+ # Approve request
258
+ clodds permissions approve req-123
259
+ ```
260
+
261
+ ---
262
+
263
+ ## Best Practices
264
+
265
+ 1. **Use allowlist mode** — Most secure, explicit permissions
266
+ 2. **Review pending regularly** — Don't let requests pile up
267
+ 3. **Specific patterns** — `npm install lodash` over `npm *`
268
+ 4. **Audit history** — Review what was approved
269
+ 5. **Tool policies** — Restrict agent tool access