@smilintux/skcapstone 0.4.6 → 0.5.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/.github/workflows/publish.yml +8 -1
- package/docs/CUSTOM_AGENT.md +184 -0
- package/docs/GETTING_STARTED.md +3 -0
- package/launchd/com.skcapstone.daemon.plist +52 -0
- package/launchd/com.skcapstone.memory-compress.plist +45 -0
- package/launchd/com.skcapstone.skcomm-heartbeat.plist +33 -0
- package/launchd/com.skcapstone.skcomm-queue-drain.plist +34 -0
- package/launchd/install-launchd.sh +156 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/scripts/archive-sessions.sh +88 -0
- package/scripts/install.sh +39 -8
- package/scripts/notion-api.py +259 -0
- package/scripts/nvidia-proxy.mjs +878 -0
- package/scripts/proxy-monitor.sh +89 -0
- package/scripts/refresh-anthropic-token.sh +94 -0
- package/scripts/skgateway.mjs +856 -0
- package/scripts/telegram-catchup-all.sh +136 -0
- package/scripts/watch-anthropic-token.sh +117 -0
- package/src/skcapstone/__init__.py +1 -1
- package/src/skcapstone/_cli_monolith.py +4 -4
- package/src/skcapstone/api.py +36 -35
- package/src/skcapstone/auction.py +8 -8
- package/src/skcapstone/blueprint_registry.py +2 -2
- package/src/skcapstone/blueprints/builtins/itil-operations.yaml +40 -0
- package/src/skcapstone/brain_first.py +238 -0
- package/src/skcapstone/chat.py +4 -4
- package/src/skcapstone/cli/__init__.py +2 -0
- package/src/skcapstone/cli/agents_spawner.py +5 -2
- package/src/skcapstone/cli/chat.py +5 -2
- package/src/skcapstone/cli/consciousness.py +5 -2
- package/src/skcapstone/cli/daemon.py +116 -41
- package/src/skcapstone/cli/itil.py +434 -0
- package/src/skcapstone/cli/memory.py +4 -4
- package/src/skcapstone/cli/skills_cmd.py +2 -2
- package/src/skcapstone/cli/soul.py +5 -2
- package/src/skcapstone/cli/status.py +11 -8
- package/src/skcapstone/cli/upgrade_cmd.py +7 -4
- package/src/skcapstone/cli/watch_cmd.py +9 -6
- package/src/skcapstone/config_validator.py +7 -4
- package/src/skcapstone/consciousness_config.py +27 -0
- package/src/skcapstone/consciousness_loop.py +20 -18
- package/src/skcapstone/coordination.py +6 -2
- package/src/skcapstone/daemon.py +51 -42
- package/src/skcapstone/dashboard.py +8 -8
- package/src/skcapstone/defaults/lumina/config/claude-hooks.md +42 -0
- package/src/skcapstone/doctor.py +5 -2
- package/src/skcapstone/dreaming.py +1440 -0
- package/src/skcapstone/emotion_tracker.py +2 -2
- package/src/skcapstone/export.py +2 -2
- package/src/skcapstone/fuse_mount.py +21 -13
- package/src/skcapstone/heartbeat.py +33 -29
- package/src/skcapstone/itil.py +1104 -0
- package/src/skcapstone/launchd.py +426 -0
- package/src/skcapstone/mcp_server.py +306 -4
- package/src/skcapstone/mcp_tools/__init__.py +4 -0
- package/src/skcapstone/mcp_tools/_helpers.py +2 -2
- package/src/skcapstone/mcp_tools/ansible_tools.py +7 -4
- package/src/skcapstone/mcp_tools/brain_first_tools.py +90 -0
- package/src/skcapstone/mcp_tools/capauth_tools.py +7 -4
- package/src/skcapstone/mcp_tools/coord_tools.py +8 -4
- package/src/skcapstone/mcp_tools/did_tools.py +9 -6
- package/src/skcapstone/mcp_tools/gtd_tools.py +1 -1
- package/src/skcapstone/mcp_tools/itil_tools.py +657 -0
- package/src/skcapstone/mcp_tools/memory_tools.py +6 -2
- package/src/skcapstone/mcp_tools/soul_tools.py +6 -2
- package/src/skcapstone/mdns_discovery.py +2 -2
- package/src/skcapstone/metrics.py +8 -8
- package/src/skcapstone/migrate_memories.py +2 -2
- package/src/skcapstone/models.py +14 -0
- package/src/skcapstone/onboard.py +137 -14
- package/src/skcapstone/peer_directory.py +2 -2
- package/src/skcapstone/providers/docker.py +2 -2
- package/src/skcapstone/scheduled_tasks.py +107 -0
- package/src/skcapstone/service_health.py +83 -4
- package/src/skcapstone/sync_watcher.py +2 -2
- package/src/skcapstone/systemd.py +17 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# proxy-monitor.sh — Quick health check for nvidia-proxy tuning
|
|
3
|
+
# Usage: ./proxy-monitor.sh [minutes] (default: last 30 minutes)
|
|
4
|
+
MINS=${1:-30}
|
|
5
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
6
|
+
SINCE=$(date -v-${MINS}M '+%Y-%m-%d %H:%M:%S')
|
|
7
|
+
else
|
|
8
|
+
SINCE=$(date -d "$MINS minutes ago" '+%Y-%m-%d %H:%M:%S')
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
echo "=== NVIDIA Proxy Monitor (last ${MINS}m) ==="
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# Request count & model breakdown
|
|
15
|
+
echo "--- Requests by Model ---"
|
|
16
|
+
journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
17
|
+
| grep -oP 'model=\K[^ ]+' | sort | uniq -c | sort -rn
|
|
18
|
+
echo ""
|
|
19
|
+
|
|
20
|
+
# Body size stats
|
|
21
|
+
echo "--- Body Sizes (bytes) ---"
|
|
22
|
+
SIZES=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
23
|
+
| grep -oP 'bodyLen=\K[0-9]+' | sort -n)
|
|
24
|
+
if [ -n "$SIZES" ]; then
|
|
25
|
+
COUNT=$(echo "$SIZES" | wc -l)
|
|
26
|
+
MIN=$(echo "$SIZES" | head -1)
|
|
27
|
+
MAX=$(echo "$SIZES" | tail -1)
|
|
28
|
+
AVG=$(echo "$SIZES" | awk '{s+=$1} END {printf "%.0f", s/NR}')
|
|
29
|
+
echo " count=$COUNT min=${MIN} avg=${AVG} max=${MAX} limit=120000"
|
|
30
|
+
if [ "$MAX" -gt 100000 ]; then
|
|
31
|
+
echo " ⚠️ Max approaching limit — consider bumping MAX_BODY_BYTES"
|
|
32
|
+
elif [ "$MAX" -lt 40000 ]; then
|
|
33
|
+
echo " ✅ Plenty of headroom — no conversation trimming needed"
|
|
34
|
+
else
|
|
35
|
+
echo " 👀 Moderate usage — monitor for growth"
|
|
36
|
+
fi
|
|
37
|
+
else
|
|
38
|
+
echo " (no requests)"
|
|
39
|
+
fi
|
|
40
|
+
echo ""
|
|
41
|
+
|
|
42
|
+
# Trimming events
|
|
43
|
+
echo "--- Trimming Events ---"
|
|
44
|
+
CONV_TRIM=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
45
|
+
| grep -c "trimmed history")
|
|
46
|
+
AGGRESSIVE=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
47
|
+
| grep -c "AGGRESSIVE")
|
|
48
|
+
SYS_TRIM=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
49
|
+
| grep -c "trimmed system prompt")
|
|
50
|
+
TOOL_LIMIT=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
51
|
+
| grep -c "TOOL LIMIT")
|
|
52
|
+
echo " conversation trims: $CONV_TRIM"
|
|
53
|
+
echo " aggressive trims: $AGGRESSIVE"
|
|
54
|
+
echo " system prompt trims: $SYS_TRIM"
|
|
55
|
+
echo " tool limit hits: $TOOL_LIMIT"
|
|
56
|
+
if [ "$AGGRESSIVE" -gt 0 ]; then
|
|
57
|
+
echo " ⚠️ Aggressive trims happening — bump MAX_BODY_BYTES or keepEnd"
|
|
58
|
+
elif [ "$CONV_TRIM" -gt 0 ]; then
|
|
59
|
+
echo " 👀 Some conversation trimming — watch if it increases"
|
|
60
|
+
else
|
|
61
|
+
echo " ✅ No conversation trimming — settings have headroom"
|
|
62
|
+
fi
|
|
63
|
+
echo ""
|
|
64
|
+
|
|
65
|
+
# Error/retry stats
|
|
66
|
+
echo "--- Errors & Retries ---"
|
|
67
|
+
RETRIES=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
68
|
+
| grep -c "attempt=[2-4]")
|
|
69
|
+
ERRORS=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
70
|
+
| grep -cE "4[0-9]{2}|5[0-9]{2}|error|Error")
|
|
71
|
+
OK=$(journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
72
|
+
| grep -c "200 OK")
|
|
73
|
+
echo " 200 OK: $OK"
|
|
74
|
+
echo " retries: $RETRIES"
|
|
75
|
+
echo " errors: $ERRORS"
|
|
76
|
+
echo ""
|
|
77
|
+
|
|
78
|
+
# Response times (rough — from consecutive timestamps)
|
|
79
|
+
echo "--- Keyword Activations ---"
|
|
80
|
+
journalctl --user -u nvidia-proxy --no-pager --since "$SINCE" 2>/dev/null \
|
|
81
|
+
| grep -oP 'keyword-activated tools: \[\K[^\]]+' \
|
|
82
|
+
| tr ',' '\n' | sort | uniq -c | sort -rn | head -10
|
|
83
|
+
echo ""
|
|
84
|
+
|
|
85
|
+
# Current settings
|
|
86
|
+
echo "--- Current Proxy Settings ---"
|
|
87
|
+
grep -E "MAX_BODY_BYTES|MAX_SYSTEM_BYTES|allTools.length >|counter >= |keepEnd.*Math" \
|
|
88
|
+
/home/cbrd21/clawd/skcapstone-repos/skcapstone/scripts/nvidia-proxy.mjs 2>/dev/null \
|
|
89
|
+
| sed 's/^[[:space:]]*/ /'
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Sync Anthropic OAuth token from Claude Code credentials to OpenClaw gateway
|
|
3
|
+
#
|
|
4
|
+
# Claude Code manages its own token refresh internally (writing to .credentials.json).
|
|
5
|
+
# This script simply reads the current token and syncs it to:
|
|
6
|
+
# 1. ~/.openclaw/openclaw.json (anthropic provider apiKey)
|
|
7
|
+
# 2. ~/.openclaw/.env (ANTHROPIC_API_KEY)
|
|
8
|
+
# 3. systemd override (ANTHROPIC_API_KEY env var)
|
|
9
|
+
# Then restarts the gateway if the token changed.
|
|
10
|
+
#
|
|
11
|
+
# Run via systemd timer every 2 hours.
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
_sed_i() { if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "$@"; else sed -i "$@"; fi; }
|
|
15
|
+
|
|
16
|
+
CREDS="$HOME/.claude/.credentials.json"
|
|
17
|
+
OPENCLAW_JSON="$HOME/.openclaw/openclaw.json"
|
|
18
|
+
OPENCLAW_ENV="$HOME/.openclaw/.env"
|
|
19
|
+
OVERRIDE_CONF="$HOME/.config/systemd/user/openclaw-gateway.service.d/override.conf"
|
|
20
|
+
|
|
21
|
+
if [ ! -f "$CREDS" ]; then
|
|
22
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Claude credentials not found at $CREDS"
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Read current token and expiry from Claude Code credentials
|
|
27
|
+
ACCESS_TOKEN=$(python3 -c "import json; print(json.load(open('$CREDS'))['claudeAiOauth']['accessToken'])")
|
|
28
|
+
EXPIRES_AT=$(python3 -c "import json; print(json.load(open('$CREDS'))['claudeAiOauth']['expiresAt'])")
|
|
29
|
+
|
|
30
|
+
REMAINING=$(python3 -c "import time; print(f'{($EXPIRES_AT/1000 - time.time())/3600:.1f}h')")
|
|
31
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Current token: ${ACCESS_TOKEN:0:20}... (expires in $REMAINING)"
|
|
32
|
+
|
|
33
|
+
# Check what's currently in the systemd override
|
|
34
|
+
OLD_TOKEN=""
|
|
35
|
+
if [ -f "$OVERRIDE_CONF" ]; then
|
|
36
|
+
OLD_TOKEN=$(grep "ANTHROPIC_API_KEY=" "$OVERRIDE_CONF" 2>/dev/null | sed 's/.*ANTHROPIC_API_KEY=//' || true)
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
if [ "$OLD_TOKEN" = "$ACCESS_TOKEN" ]; then
|
|
40
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Token already synced, no changes needed"
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Token mismatch detected, syncing..."
|
|
45
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Old: ${OLD_TOKEN:0:20}..."
|
|
46
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] New: ${ACCESS_TOKEN:0:20}..."
|
|
47
|
+
|
|
48
|
+
# 1. Update openclaw.json
|
|
49
|
+
if [ -f "$OPENCLAW_JSON" ]; then
|
|
50
|
+
python3 -c "
|
|
51
|
+
import json
|
|
52
|
+
with open('$OPENCLAW_JSON') as f:
|
|
53
|
+
cfg = json.load(f)
|
|
54
|
+
if 'providers' in cfg.get('models', {}):
|
|
55
|
+
if 'anthropic' in cfg['models']['providers']:
|
|
56
|
+
cfg['models']['providers']['anthropic']['apiKey'] = '$ACCESS_TOKEN'
|
|
57
|
+
with open('$OPENCLAW_JSON', 'w') as f:
|
|
58
|
+
json.dump(cfg, f, indent=2)
|
|
59
|
+
f.write('\n')
|
|
60
|
+
print('[sync] Updated openclaw.json')
|
|
61
|
+
else:
|
|
62
|
+
print('[sync] No anthropic provider in openclaw.json')
|
|
63
|
+
else:
|
|
64
|
+
print('[sync] No providers section in openclaw.json')
|
|
65
|
+
"
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# 2. Update .env
|
|
69
|
+
if grep -q "^ANTHROPIC_API_KEY=" "$OPENCLAW_ENV" 2>/dev/null; then
|
|
70
|
+
_sed_i "s|^ANTHROPIC_API_KEY=.*|ANTHROPIC_API_KEY=$ACCESS_TOKEN|" "$OPENCLAW_ENV"
|
|
71
|
+
else
|
|
72
|
+
echo "ANTHROPIC_API_KEY=$ACCESS_TOKEN" >> "$OPENCLAW_ENV"
|
|
73
|
+
fi
|
|
74
|
+
echo "[sync] Updated .env"
|
|
75
|
+
|
|
76
|
+
# 3. Update systemd override
|
|
77
|
+
NVIDIA_KEY=$(grep "NVIDIA_API_KEY=" "$OVERRIDE_CONF" 2>/dev/null | sed 's/.*NVIDIA_API_KEY=//' || true)
|
|
78
|
+
cat > "$OVERRIDE_CONF" << EOF
|
|
79
|
+
[Unit]
|
|
80
|
+
StartLimitIntervalSec=60
|
|
81
|
+
StartLimitBurst=10
|
|
82
|
+
|
|
83
|
+
[Service]
|
|
84
|
+
RestartSec=10
|
|
85
|
+
Environment=NVIDIA_API_KEY=${NVIDIA_KEY}
|
|
86
|
+
Environment=ANTHROPIC_API_KEY=${ACCESS_TOKEN}
|
|
87
|
+
EOF
|
|
88
|
+
echo "[sync] Updated systemd override"
|
|
89
|
+
|
|
90
|
+
# 4. Reload and restart gateway
|
|
91
|
+
systemctl --user daemon-reload
|
|
92
|
+
systemctl --user restart openclaw-gateway
|
|
93
|
+
|
|
94
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Gateway restarted with synced token (expires in $REMAINING)"
|