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.
- package/dist/skills/bundled/acp/SKILL.md +188 -0
- package/dist/skills/bundled/acp/index.d.ts +0 -3
- package/dist/skills/bundled/acp/index.js +1 -1
- package/dist/skills/bundled/acp/index.js.map +1 -1
- package/dist/skills/bundled/agentbets/SKILL.md +19 -0
- package/dist/skills/bundled/agentbets/index.js +1 -1
- package/dist/skills/bundled/agentbets/index.js.map +1 -1
- package/dist/skills/bundled/ai-strategy/SKILL.md +111 -0
- package/dist/skills/bundled/ai-strategy/index.js +1 -1
- package/dist/skills/bundled/ai-strategy/index.js.map +1 -1
- package/dist/skills/bundled/alerts/SKILL.md +87 -0
- package/dist/skills/bundled/analytics/SKILL.md +252 -0
- package/dist/skills/bundled/analytics/index.js +2 -2
- package/dist/skills/bundled/analytics/index.js.map +1 -1
- package/dist/skills/bundled/arbitrage/SKILL.md +287 -0
- package/dist/skills/bundled/arbitrage/index.js +6 -1
- package/dist/skills/bundled/arbitrage/index.js.map +1 -1
- package/dist/skills/bundled/auto-reply/SKILL.md +285 -0
- package/dist/skills/bundled/auto-reply/index.js +2 -2
- package/dist/skills/bundled/auto-reply/index.js.map +1 -1
- package/dist/skills/bundled/automation/SKILL.md +242 -0
- package/dist/skills/bundled/automation/index.js +2 -2
- package/dist/skills/bundled/automation/index.js.map +1 -1
- package/dist/skills/bundled/backtest/SKILL.md +225 -0
- package/dist/skills/bundled/bags/SKILL.md +131 -0
- package/dist/skills/bundled/bankr/SKILL.md +114 -0
- package/dist/skills/bundled/betfair/SKILL.md +113 -0
- package/dist/skills/bundled/binance-futures/SKILL.md +84 -0
- package/dist/skills/bundled/binance-futures/index.d.ts +0 -3
- package/dist/skills/bundled/binance-futures/index.js +1 -2
- package/dist/skills/bundled/binance-futures/index.js.map +1 -1
- package/dist/skills/bundled/botchan/SKILL.md +66 -0
- package/dist/skills/bundled/botchan/index.d.ts +0 -3
- package/dist/skills/bundled/botchan/index.js +0 -1
- package/dist/skills/bundled/botchan/index.js.map +1 -1
- package/dist/skills/bundled/bridge/SKILL.md +215 -0
- package/dist/skills/bundled/bridge/index.js +6 -0
- package/dist/skills/bundled/bridge/index.js.map +1 -1
- package/dist/skills/bundled/bybit-futures/SKILL.md +84 -0
- package/dist/skills/bundled/bybit-futures/index.d.ts +0 -3
- package/dist/skills/bundled/bybit-futures/index.js +0 -1
- package/dist/skills/bundled/bybit-futures/index.js.map +1 -1
- package/dist/skills/bundled/clanker/SKILL.md +125 -0
- package/dist/skills/bundled/clanker/index.d.ts +0 -3
- package/dist/skills/bundled/clanker/index.js +0 -1
- package/dist/skills/bundled/clanker/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading/SKILL.md +285 -0
- package/dist/skills/bundled/copy-trading/index.js +15 -8
- package/dist/skills/bundled/copy-trading/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading-solana/SKILL.md +66 -0
- package/dist/skills/bundled/credentials/SKILL.md +261 -0
- package/dist/skills/bundled/credentials/index.js +4 -0
- package/dist/skills/bundled/credentials/index.js.map +1 -1
- package/dist/skills/bundled/crypto-hft/SKILL.md +121 -0
- package/dist/skills/bundled/crypto-hft/index.js +18 -3
- package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
- package/dist/skills/bundled/dca/SKILL.md +27 -0
- package/dist/skills/bundled/dex/SKILL.md +92 -0
- package/dist/skills/bundled/dex/index.js +77 -29
- package/dist/skills/bundled/dex/index.js.map +1 -1
- package/dist/skills/bundled/divergence/SKILL.md +83 -0
- package/dist/skills/bundled/doctor/SKILL.md +267 -0
- package/dist/skills/bundled/doctor/index.js +2 -8
- package/dist/skills/bundled/doctor/index.js.map +1 -1
- package/dist/skills/bundled/drift/SKILL.md +53 -0
- package/dist/skills/bundled/drift-sdk/SKILL.md +103 -0
- package/dist/skills/bundled/drift-sdk/index.d.ts +0 -3
- package/dist/skills/bundled/drift-sdk/index.js +0 -1
- package/dist/skills/bundled/drift-sdk/index.js.map +1 -1
- package/dist/skills/bundled/edge/SKILL.md +84 -0
- package/dist/skills/bundled/embeddings/SKILL.md +244 -0
- package/dist/skills/bundled/endaoment/SKILL.md +65 -0
- package/dist/skills/bundled/endaoment/index.d.ts +0 -3
- package/dist/skills/bundled/endaoment/index.js +0 -1
- package/dist/skills/bundled/endaoment/index.js.map +1 -1
- package/dist/skills/bundled/ens/SKILL.md +63 -0
- package/dist/skills/bundled/ens/index.d.ts +0 -3
- package/dist/skills/bundled/ens/index.js +0 -1
- package/dist/skills/bundled/ens/index.js.map +1 -1
- package/dist/skills/bundled/erc8004/SKILL.md +79 -0
- package/dist/skills/bundled/erc8004/index.d.ts +0 -3
- package/dist/skills/bundled/erc8004/index.js +0 -1
- package/dist/skills/bundled/erc8004/index.js.map +1 -1
- package/dist/skills/bundled/execution/SKILL.md +278 -0
- package/dist/skills/bundled/farcaster/SKILL.md +80 -0
- package/dist/skills/bundled/farcaster/index.js +12 -0
- package/dist/skills/bundled/farcaster/index.js.map +1 -1
- package/dist/skills/bundled/features/SKILL.md +20 -0
- package/dist/skills/bundled/feeds/SKILL.md +288 -0
- package/dist/skills/bundled/harden/SKILL.md +74 -0
- package/dist/skills/bundled/history/SKILL.md +257 -0
- package/dist/skills/bundled/hyperliquid/SKILL.md +200 -0
- package/dist/skills/bundled/hyperliquid/index.d.ts +0 -3
- package/dist/skills/bundled/hyperliquid/index.js +0 -1
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
- package/dist/skills/bundled/identity/SKILL.md +228 -0
- package/dist/skills/bundled/identity/index.js +2 -2
- package/dist/skills/bundled/identity/index.js.map +1 -1
- package/dist/skills/bundled/integrations/SKILL.md +321 -0
- package/dist/skills/bundled/integrations/index.js +2 -2
- package/dist/skills/bundled/integrations/index.js.map +1 -1
- package/dist/skills/bundled/jupiter/SKILL.md +163 -0
- package/dist/skills/bundled/jupiter/index.js +2 -2
- package/dist/skills/bundled/kamino/SKILL.md +69 -0
- package/dist/skills/bundled/ledger/SKILL.md +20 -0
- package/dist/skills/bundled/lighter/SKILL.md +83 -0
- package/dist/skills/bundled/lighter/index.d.ts +0 -3
- package/dist/skills/bundled/lighter/index.js +0 -1
- package/dist/skills/bundled/lighter/index.js.map +1 -1
- package/dist/skills/bundled/marginfi/SKILL.md +62 -0
- package/dist/skills/bundled/market-index/SKILL.md +242 -0
- package/dist/skills/bundled/market-index/index.js +1 -3
- package/dist/skills/bundled/market-index/index.js.map +1 -1
- package/dist/skills/bundled/markets/SKILL.md +49 -0
- package/dist/skills/bundled/mcp/SKILL.md +235 -0
- package/dist/skills/bundled/mcp/index.js +1 -3
- package/dist/skills/bundled/mcp/index.js.map +1 -1
- package/dist/skills/bundled/memory/SKILL.md +209 -0
- package/dist/skills/bundled/metaculus/SKILL.md +62 -0
- package/dist/skills/bundled/metaculus/index.js +4 -1
- package/dist/skills/bundled/metaculus/index.js.map +1 -1
- package/dist/skills/bundled/meteora/SKILL.md +28 -0
- package/dist/skills/bundled/meteora-dbc/SKILL.md +25 -0
- package/dist/skills/bundled/metrics/SKILL.md +338 -0
- package/dist/skills/bundled/mev/SKILL.md +239 -0
- package/dist/skills/bundled/mev/index.js +2 -2
- package/dist/skills/bundled/mev/index.js.map +1 -1
- package/dist/skills/bundled/mexc-futures/SKILL.md +86 -0
- package/dist/skills/bundled/mexc-futures/index.d.ts +0 -3
- package/dist/skills/bundled/mexc-futures/index.js +0 -1
- package/dist/skills/bundled/mexc-futures/index.js.map +1 -1
- package/dist/skills/bundled/mm/SKILL.md +142 -0
- package/dist/skills/bundled/mm/index.js +28 -27
- package/dist/skills/bundled/mm/index.js.map +1 -1
- package/dist/skills/bundled/monitoring/SKILL.md +249 -0
- package/dist/skills/bundled/news/SKILL.md +95 -0
- package/dist/skills/bundled/news/index.js +1 -2
- package/dist/skills/bundled/news/index.js.map +1 -1
- package/dist/skills/bundled/onchainkit/SKILL.md +83 -0
- package/dist/skills/bundled/opinion/SKILL.md +87 -0
- package/dist/skills/bundled/opportunity/SKILL.md +308 -0
- package/dist/skills/bundled/orca/SKILL.md +28 -0
- package/dist/skills/bundled/orca/index.js +11 -7
- package/dist/skills/bundled/orca/index.js.map +1 -1
- package/dist/skills/bundled/pairing/SKILL.md +275 -0
- package/dist/skills/bundled/pancakeswap/SKILL.md +93 -0
- package/dist/skills/bundled/pancakeswap/index.d.ts +0 -3
- package/dist/skills/bundled/pancakeswap/index.js +0 -1
- package/dist/skills/bundled/pancakeswap/index.js.map +1 -1
- package/dist/skills/bundled/percolator/SKILL.md +22 -0
- package/dist/skills/bundled/permissions/SKILL.md +269 -0
- package/dist/skills/bundled/permissions/index.js +2 -2
- package/dist/skills/bundled/permissions/index.js.map +1 -1
- package/dist/skills/bundled/plugins/SKILL.md +263 -0
- package/dist/skills/bundled/plugins/index.js +2 -2
- package/dist/skills/bundled/plugins/index.js.map +1 -1
- package/dist/skills/bundled/portfolio/SKILL.md +161 -0
- package/dist/skills/bundled/portfolio/index.js +1 -1
- package/dist/skills/bundled/portfolio/index.js.map +1 -1
- package/dist/skills/bundled/portfolio-sync/SKILL.md +466 -0
- package/dist/skills/bundled/positions/SKILL.md +262 -0
- package/dist/skills/bundled/predictfun/SKILL.md +109 -0
- package/dist/skills/bundled/predictfun/index.js +1 -1
- package/dist/skills/bundled/predictfun/index.js.map +1 -1
- package/dist/skills/bundled/predictit/SKILL.md +66 -0
- package/dist/skills/bundled/predictit/index.js +4 -1
- package/dist/skills/bundled/predictit/index.js.map +1 -1
- package/dist/skills/bundled/presence/SKILL.md +217 -0
- package/dist/skills/bundled/presence/index.js +2 -2
- package/dist/skills/bundled/presence/index.js.map +1 -1
- package/dist/skills/bundled/processes/SKILL.md +254 -0
- package/dist/skills/bundled/pump-swarm/SKILL.md +309 -0
- package/dist/skills/bundled/pumpfun/SKILL.md +145 -0
- package/dist/skills/bundled/pumpfun/index.js +82 -8
- package/dist/skills/bundled/pumpfun/index.js.map +1 -1
- package/dist/skills/bundled/qmd/SKILL.md +129 -0
- package/dist/skills/bundled/qrcoin/SKILL.md +60 -0
- package/dist/skills/bundled/qrcoin/index.d.ts +0 -3
- package/dist/skills/bundled/qrcoin/index.js +0 -1
- package/dist/skills/bundled/qrcoin/index.js.map +1 -1
- package/dist/skills/bundled/raydium/SKILL.md +198 -0
- package/dist/skills/bundled/remote/SKILL.md +201 -0
- package/dist/skills/bundled/research/SKILL.md +83 -0
- package/dist/skills/bundled/research/index.js +2 -2
- package/dist/skills/bundled/research/index.js.map +1 -1
- package/dist/skills/bundled/risk/SKILL.md +323 -0
- package/dist/skills/bundled/router/SKILL.md +233 -0
- package/dist/skills/bundled/routing/SKILL.md +258 -0
- package/dist/skills/bundled/sandbox/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/index.js +2 -2
- package/dist/skills/bundled/search-config/index.js.map +1 -1
- package/dist/skills/bundled/sessions/SKILL.md +251 -0
- package/dist/skills/bundled/sessions/index.js +1 -1
- package/dist/skills/bundled/sessions/index.js.map +1 -1
- package/dist/skills/bundled/setup/SKILL.md +53 -0
- package/dist/skills/bundled/shield/SKILL.md +21 -0
- package/dist/skills/bundled/signals/SKILL.md +106 -0
- package/dist/skills/bundled/signals/index.d.ts +0 -3
- package/dist/skills/bundled/signals/index.js +3 -4
- package/dist/skills/bundled/signals/index.js.map +1 -1
- package/dist/skills/bundled/sizing/SKILL.md +238 -0
- package/dist/skills/bundled/slippage/SKILL.md +306 -0
- package/dist/skills/bundled/smarkets/SKILL.md +107 -0
- package/dist/skills/bundled/smarkets/index.js +3 -3
- package/dist/skills/bundled/smarkets/index.js.map +1 -1
- package/dist/skills/bundled/solend/SKILL.md +63 -0
- package/dist/skills/bundled/strategy/SKILL.md +266 -0
- package/dist/skills/bundled/streaming/SKILL.md +150 -0
- package/dist/skills/bundled/streaming/index.js +2 -2
- package/dist/skills/bundled/streaming/index.js.map +1 -1
- package/dist/skills/bundled/tailscale/SKILL.md +249 -0
- package/dist/skills/bundled/tailscale/index.js +2 -2
- package/dist/skills/bundled/tailscale/index.js.map +1 -1
- package/dist/skills/bundled/ticks/SKILL.md +61 -0
- package/dist/skills/bundled/token-security/SKILL.md +18 -0
- package/dist/skills/bundled/trading-evm/SKILL.md +329 -0
- package/dist/skills/bundled/trading-futures/SKILL.md +865 -0
- package/dist/skills/bundled/trading-kalshi/SKILL.md +629 -0
- package/dist/skills/bundled/trading-kalshi/index.js +2 -0
- package/dist/skills/bundled/trading-kalshi/index.js.map +1 -1
- package/dist/skills/bundled/trading-manifold/SKILL.md +387 -0
- package/dist/skills/bundled/trading-polymarket/SKILL.md +1080 -0
- package/dist/skills/bundled/trading-polymarket/index.js +28 -19
- package/dist/skills/bundled/trading-polymarket/index.js.map +1 -1
- package/dist/skills/bundled/trading-solana/SKILL.md +418 -0
- package/dist/skills/bundled/trading-solana/index.js +1 -1
- package/dist/skills/bundled/trading-solana/index.js.map +1 -1
- package/dist/skills/bundled/trading-system/SKILL.md +290 -0
- package/dist/skills/bundled/triggers/SKILL.md +433 -0
- package/dist/skills/bundled/tts/SKILL.md +220 -0
- package/dist/skills/bundled/tweet-ideas/SKILL.md +77 -0
- package/dist/skills/bundled/usage/SKILL.md +239 -0
- package/dist/skills/bundled/usage/index.js +2 -2
- package/dist/skills/bundled/usage/index.js.map +1 -1
- package/dist/skills/bundled/veil/SKILL.md +76 -0
- package/dist/skills/bundled/veil/index.d.ts +0 -3
- package/dist/skills/bundled/veil/index.js +0 -1
- package/dist/skills/bundled/veil/index.js.map +1 -1
- package/dist/skills/bundled/verify/SKILL.md +199 -0
- package/dist/skills/bundled/verify/index.d.ts +0 -3
- package/dist/skills/bundled/verify/index.js +0 -1
- package/dist/skills/bundled/verify/index.js.map +1 -1
- package/dist/skills/bundled/virtuals/SKILL.md +82 -0
- package/dist/skills/bundled/voice/SKILL.md +217 -0
- package/dist/skills/bundled/voice/index.js +2 -2
- package/dist/skills/bundled/voice/index.js.map +1 -1
- package/dist/skills/bundled/weather/SKILL.md +80 -0
- package/dist/skills/bundled/weather/index.js +3 -0
- package/dist/skills/bundled/weather/index.js.map +1 -1
- package/dist/skills/bundled/webhooks/SKILL.md +297 -0
- package/dist/skills/bundled/webhooks/index.js +2 -2
- package/dist/skills/bundled/webhooks/index.js.map +1 -1
- package/dist/skills/bundled/whale-tracking/SKILL.md +287 -0
- package/dist/skills/bundled/whale-tracking/index.js +2 -2
- package/dist/skills/bundled/whale-tracking/index.js.map +1 -1
- package/dist/skills/bundled/yoink/SKILL.md +54 -0
- package/dist/skills/bundled/yoink/index.d.ts +0 -3
- package/dist/skills/bundled/yoink/index.js +0 -1
- package/dist/skills/bundled/yoink/index.js.map +1 -1
- package/dist/skills/executor.js +5 -3
- package/dist/skills/executor.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: presence
|
|
3
|
+
description: "Online status, activity tracking, and multi-device sync"
|
|
4
|
+
emoji: "🟢"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Presence - Complete API Reference
|
|
8
|
+
|
|
9
|
+
Manage online status, track activity across devices, and sync presence information.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Chat Commands
|
|
14
|
+
|
|
15
|
+
### View Status
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/presence Show your status
|
|
19
|
+
/presence who Who's online
|
|
20
|
+
/presence activity Recent activity
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Set Status
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/presence online Set online
|
|
27
|
+
/presence away Set away
|
|
28
|
+
/presence dnd Do not disturb
|
|
29
|
+
/presence offline Appear offline
|
|
30
|
+
/presence status "In a meeting" Custom status
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Devices
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/presence devices Your connected devices
|
|
37
|
+
/presence sync Force sync all devices
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## TypeScript API Reference
|
|
43
|
+
|
|
44
|
+
### Create Presence Service
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { createPresenceService } from 'clodds/presence';
|
|
48
|
+
|
|
49
|
+
const presence = createPresenceService({
|
|
50
|
+
// Update interval
|
|
51
|
+
heartbeatIntervalMs: 30000,
|
|
52
|
+
|
|
53
|
+
// Auto-away after idle
|
|
54
|
+
awayAfterMs: 300000, // 5 minutes
|
|
55
|
+
|
|
56
|
+
// Storage
|
|
57
|
+
storage: 'redis', // 'redis' | 'memory'
|
|
58
|
+
redisUrl: process.env.REDIS_URL,
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Get Status
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// Get own status
|
|
66
|
+
const status = await presence.getStatus(userId);
|
|
67
|
+
|
|
68
|
+
console.log(`Status: ${status.status}`); // 'online' | 'away' | 'dnd' | 'offline'
|
|
69
|
+
console.log(`Custom: ${status.customStatus}`);
|
|
70
|
+
console.log(`Last seen: ${status.lastSeen}`);
|
|
71
|
+
console.log(`Device: ${status.activeDevice}`);
|
|
72
|
+
|
|
73
|
+
// Get multiple users
|
|
74
|
+
const statuses = await presence.getStatuses(['user-1', 'user-2', 'user-3']);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Set Status
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// Set status
|
|
81
|
+
await presence.setStatus(userId, 'online');
|
|
82
|
+
await presence.setStatus(userId, 'away');
|
|
83
|
+
await presence.setStatus(userId, 'dnd');
|
|
84
|
+
await presence.setStatus(userId, 'offline');
|
|
85
|
+
|
|
86
|
+
// Set custom status message
|
|
87
|
+
await presence.setCustomStatus(userId, 'Trading BTC');
|
|
88
|
+
|
|
89
|
+
// Clear custom status
|
|
90
|
+
await presence.clearCustomStatus(userId);
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Activity Tracking
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// Record activity
|
|
97
|
+
await presence.recordActivity(userId, {
|
|
98
|
+
type: 'message',
|
|
99
|
+
channelId: 'telegram-123',
|
|
100
|
+
timestamp: Date.now(),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Get recent activity
|
|
104
|
+
const activity = await presence.getActivity(userId, {
|
|
105
|
+
limit: 10,
|
|
106
|
+
since: Date.now() - 3600000, // Last hour
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
for (const event of activity) {
|
|
110
|
+
console.log(`${event.type} at ${event.timestamp}`);
|
|
111
|
+
console.log(` Channel: ${event.channelId}`);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Device Presence
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
// Get user's devices
|
|
119
|
+
const devices = await presence.getDevices(userId);
|
|
120
|
+
|
|
121
|
+
for (const device of devices) {
|
|
122
|
+
console.log(`${device.id}: ${device.name}`);
|
|
123
|
+
console.log(` Status: ${device.status}`);
|
|
124
|
+
console.log(` Last seen: ${device.lastSeen}`);
|
|
125
|
+
console.log(` Active: ${device.isActive}`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Set device status
|
|
129
|
+
await presence.setDeviceStatus(userId, deviceId, 'online');
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Who's Online
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// Get online users
|
|
136
|
+
const online = await presence.getOnlineUsers({
|
|
137
|
+
channelId: 'telegram-123', // Optional: filter by channel
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
for (const user of online) {
|
|
141
|
+
console.log(`${user.name}: ${user.status}`);
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Event Handlers
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
// Status changes
|
|
149
|
+
presence.on('statusChange', (userId, oldStatus, newStatus) => {
|
|
150
|
+
console.log(`${userId}: ${oldStatus} -> ${newStatus}`);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// User came online
|
|
154
|
+
presence.on('online', (userId) => {
|
|
155
|
+
console.log(`${userId} is now online`);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// User went offline
|
|
159
|
+
presence.on('offline', (userId) => {
|
|
160
|
+
console.log(`${userId} went offline`);
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Sync Across Devices
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Force sync
|
|
168
|
+
await presence.sync(userId);
|
|
169
|
+
|
|
170
|
+
// Get sync status
|
|
171
|
+
const syncStatus = await presence.getSyncStatus(userId);
|
|
172
|
+
console.log(`Devices synced: ${syncStatus.synced}/${syncStatus.total}`);
|
|
173
|
+
console.log(`Last sync: ${syncStatus.lastSync}`);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Status Types
|
|
179
|
+
|
|
180
|
+
| Status | Description |
|
|
181
|
+
|--------|-------------|
|
|
182
|
+
| `online` | Active and available |
|
|
183
|
+
| `away` | Idle/inactive |
|
|
184
|
+
| `dnd` | Do not disturb |
|
|
185
|
+
| `offline` | Not available |
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Auto-Away
|
|
190
|
+
|
|
191
|
+
Presence automatically changes to `away` after inactivity:
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
const presence = createPresenceService({
|
|
195
|
+
awayAfterMs: 300000, // 5 min idle -> away
|
|
196
|
+
offlineAfterMs: 3600000, // 1 hour idle -> offline
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Multi-Device Sync
|
|
203
|
+
|
|
204
|
+
When user is active on multiple devices:
|
|
205
|
+
- Most recent activity determines primary device
|
|
206
|
+
- Status syncs across all devices
|
|
207
|
+
- Custom status shared everywhere
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Best Practices
|
|
212
|
+
|
|
213
|
+
1. **Use heartbeats** — Keep status accurate
|
|
214
|
+
2. **Set away appropriately** — Don't spam status changes
|
|
215
|
+
3. **Custom status** — Let others know what you're doing
|
|
216
|
+
4. **Review devices** — Keep device list clean
|
|
217
|
+
5. **DND for focus** — Mute notifications during trades
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/bundled/presence/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/bundled/presence/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: processes
|
|
3
|
+
description: "Background jobs, long-running processes, and task management"
|
|
4
|
+
emoji: "⚙️"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Processes - Complete API Reference
|
|
8
|
+
|
|
9
|
+
Spawn and manage background processes, long-running jobs, and scheduled tasks.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Chat Commands
|
|
14
|
+
|
|
15
|
+
### Spawn Jobs
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/job spawn "npm run backtest" Start background job
|
|
19
|
+
/job spawn "python train.py" --name ml Named job
|
|
20
|
+
/job spawn "node bot.js" --restart Auto-restart on exit
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Manage Jobs
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/jobs List all jobs
|
|
27
|
+
/job status <id> Check job status
|
|
28
|
+
/job output <id> View job output
|
|
29
|
+
/job output <id> --follow Stream output
|
|
30
|
+
/job stop <id> Stop job
|
|
31
|
+
/job restart <id> Restart job
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Logs
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
/job logs <id> View logs
|
|
38
|
+
/job logs <id> --tail 100 Last 100 lines
|
|
39
|
+
/job logs <id> --since 1h Last hour
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## TypeScript API Reference
|
|
45
|
+
|
|
46
|
+
### Create Process Manager
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { createProcessManager } from 'clodds/processes';
|
|
50
|
+
|
|
51
|
+
const processes = createProcessManager({
|
|
52
|
+
// Working directory
|
|
53
|
+
cwd: process.cwd(),
|
|
54
|
+
|
|
55
|
+
// Environment
|
|
56
|
+
env: process.env,
|
|
57
|
+
|
|
58
|
+
// Limits
|
|
59
|
+
maxProcesses: 10,
|
|
60
|
+
maxMemoryMB: 1024,
|
|
61
|
+
|
|
62
|
+
// Logging
|
|
63
|
+
logDir: './logs/jobs',
|
|
64
|
+
maxLogSizeMB: 100,
|
|
65
|
+
|
|
66
|
+
// Storage
|
|
67
|
+
storage: 'sqlite',
|
|
68
|
+
dbPath: './jobs.db',
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Spawn Process
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Simple spawn
|
|
76
|
+
const job = await processes.spawn({
|
|
77
|
+
command: 'npm',
|
|
78
|
+
args: ['run', 'backtest'],
|
|
79
|
+
name: 'backtest-btc',
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
console.log(`Job ID: ${job.id}`);
|
|
83
|
+
console.log(`PID: ${job.pid}`);
|
|
84
|
+
|
|
85
|
+
// With options
|
|
86
|
+
const job = await processes.spawn({
|
|
87
|
+
command: 'python',
|
|
88
|
+
args: ['train.py', '--epochs', '100'],
|
|
89
|
+
name: 'ml-training',
|
|
90
|
+
|
|
91
|
+
// Environment
|
|
92
|
+
env: {
|
|
93
|
+
...process.env,
|
|
94
|
+
CUDA_VISIBLE_DEVICES: '0',
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
// Working directory
|
|
98
|
+
cwd: '/path/to/ml-project',
|
|
99
|
+
|
|
100
|
+
// Auto-restart
|
|
101
|
+
restart: true,
|
|
102
|
+
maxRestarts: 3,
|
|
103
|
+
restartDelayMs: 5000,
|
|
104
|
+
|
|
105
|
+
// Resource limits
|
|
106
|
+
maxMemoryMB: 4096,
|
|
107
|
+
timeoutMs: 3600000, // 1 hour
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### List Jobs
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
const jobs = await processes.list();
|
|
115
|
+
|
|
116
|
+
for (const job of jobs) {
|
|
117
|
+
console.log(`${job.id}: ${job.name}`);
|
|
118
|
+
console.log(` Status: ${job.status}`); // 'running' | 'stopped' | 'failed' | 'completed'
|
|
119
|
+
console.log(` PID: ${job.pid}`);
|
|
120
|
+
console.log(` Started: ${job.startedAt}`);
|
|
121
|
+
console.log(` Memory: ${job.memoryMB}MB`);
|
|
122
|
+
console.log(` CPU: ${job.cpuPercent}%`);
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Get Status
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
const status = await processes.getStatus(jobId);
|
|
130
|
+
|
|
131
|
+
console.log(`Status: ${status.status}`);
|
|
132
|
+
console.log(`Exit code: ${status.exitCode}`);
|
|
133
|
+
console.log(`Runtime: ${status.runtimeMs}ms`);
|
|
134
|
+
console.log(`Restarts: ${status.restarts}`);
|
|
135
|
+
console.log(`Memory: ${status.memoryMB}MB`);
|
|
136
|
+
console.log(`CPU: ${status.cpuPercent}%`);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Get Output
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// Get all output
|
|
143
|
+
const output = await processes.getOutput(jobId);
|
|
144
|
+
console.log(output.stdout);
|
|
145
|
+
console.log(output.stderr);
|
|
146
|
+
|
|
147
|
+
// Get last N lines
|
|
148
|
+
const output = await processes.getOutput(jobId, { tail: 100 });
|
|
149
|
+
|
|
150
|
+
// Stream output
|
|
151
|
+
const stream = processes.streamOutput(jobId);
|
|
152
|
+
stream.on('stdout', (data) => console.log(data));
|
|
153
|
+
stream.on('stderr', (data) => console.error(data));
|
|
154
|
+
stream.on('exit', (code) => console.log(`Exit: ${code}`));
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Stop Job
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// Graceful stop (SIGTERM)
|
|
161
|
+
await processes.stop(jobId);
|
|
162
|
+
|
|
163
|
+
// Force kill (SIGKILL)
|
|
164
|
+
await processes.stop(jobId, { force: true });
|
|
165
|
+
|
|
166
|
+
// Stop all
|
|
167
|
+
await processes.stopAll();
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Restart Job
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
await processes.restart(jobId);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Event Handlers
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
processes.on('started', (job) => {
|
|
180
|
+
console.log(`Job started: ${job.name}`);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
processes.on('stopped', (job) => {
|
|
184
|
+
console.log(`Job stopped: ${job.name} (code: ${job.exitCode})`);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
processes.on('failed', (job, error) => {
|
|
188
|
+
console.error(`Job failed: ${job.name}`, error);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
processes.on('output', (job, type, data) => {
|
|
192
|
+
console.log(`[${job.name}] ${type}: ${data}`);
|
|
193
|
+
});
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Job Status
|
|
199
|
+
|
|
200
|
+
| Status | Description |
|
|
201
|
+
|--------|-------------|
|
|
202
|
+
| `running` | Currently executing |
|
|
203
|
+
| `stopped` | Stopped by user |
|
|
204
|
+
| `completed` | Finished successfully |
|
|
205
|
+
| `failed` | Exited with error |
|
|
206
|
+
| `restarting` | Auto-restarting |
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Use Cases
|
|
211
|
+
|
|
212
|
+
### Run Backtest
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
const job = await processes.spawn({
|
|
216
|
+
command: 'npm',
|
|
217
|
+
args: ['run', 'backtest', '--', '--strategy', 'momentum'],
|
|
218
|
+
name: 'backtest-momentum',
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// Wait for completion
|
|
222
|
+
const result = await processes.wait(job.id);
|
|
223
|
+
console.log(`Backtest complete: ${result.exitCode === 0 ? 'success' : 'failed'}`);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Train ML Model
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const job = await processes.spawn({
|
|
230
|
+
command: 'python',
|
|
231
|
+
args: ['train.py'],
|
|
232
|
+
name: 'ml-training',
|
|
233
|
+
cwd: './ml',
|
|
234
|
+
maxMemoryMB: 8192,
|
|
235
|
+
timeoutMs: 86400000, // 24 hours
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// Monitor progress
|
|
239
|
+
processes.streamOutput(job.id).on('stdout', (line) => {
|
|
240
|
+
if (line.includes('Epoch')) {
|
|
241
|
+
console.log(line);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Best Practices
|
|
249
|
+
|
|
250
|
+
1. **Name your jobs** — Easier to identify
|
|
251
|
+
2. **Set timeouts** — Prevent runaway processes
|
|
252
|
+
3. **Monitor memory** — Prevent OOM kills
|
|
253
|
+
4. **Use restart sparingly** — Debug failures first
|
|
254
|
+
5. **Check logs** — Always review output
|