sync: 2026-03-16 22:30 — 34 files from Alexandria
Some checks failed
Lint & Format / detect (push) Failing after 32s
Monorepo Lint / lint-shell (push) Failing after 41s
Monorepo Lint / lint-js (push) Failing after 47s
Lint & Format / js-lint (push) Has been skipped
Lint & Format / py-lint (push) Has been skipped
Lint & Format / sh-lint (push) Has been skipped
Lint & Format / go-lint (push) Has been skipped
Some checks failed
Lint & Format / detect (push) Failing after 32s
Monorepo Lint / lint-shell (push) Failing after 41s
Monorepo Lint / lint-js (push) Failing after 47s
Lint & Format / js-lint (push) Has been skipped
Lint & Format / py-lint (push) Has been skipped
Lint & Format / sh-lint (push) Has been skipped
Lint & Format / go-lint (push) Has been skipped
RoadChain-SHA2048: 9ea9121d5072e206 RoadChain-Identity: alexa@sovereign RoadChain-Full: 9ea9121d5072e20636efae2a25ea95edbd5085cc1e54e0d83186de315c63efc5aa77bd1e839f9178915aae84c5bd91b5faa0fee960e2dac8440ea1942132c9834a922f7d4d433931c7ea3f9ee4cd4706510ec5ff5be6a3fb55963a6df808b14184cb4517852fcdb8514dc14ca02fe16e318cab78ddf1993e76352bc409570415536bf1664cf5536b54acae7080fdc802508fea911ad7246da47bad7b0d31e6c745e93730ed8593f0221336af7378df60c54e2e86e96986a205641cd3a5f1380d5bd54b68d0a0f779fb152b0d8a5b0dbfd5118fc15d32b115ed581b0d715874460ae4e4420d83156dec9e9051047c95fb3ff4abb56e25bd8fc884a5eeb4d05b0a
This commit is contained in:
@@ -40,3 +40,4 @@
|
||||
0 3 * * * /Users/alexa/blackroad-operator/scripts/memory/memory-watchdog.sh sweep >> /Users/alexa/.blackroad/logs/collab-watchdog.log 2>&1
|
||||
0 9 * * * /Users/alexa/blackroad-operator/scripts/memory/memory-watchdog.sh digest --slack >> /Users/alexa/.blackroad/logs/collab-watchdog.log 2>&1
|
||||
*/5 * * * * /usr/bin/python3 /Users/alexa/blackroad-operator/scripts/memory/memory-slack-sync.py full >> /tmp/slack-sync.log 2>&1
|
||||
*/5 * * * * /Users/alexa/network-welcome.sh >> /Users/alexa/.blackroad/network/welcome.log 2>&1
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
{"node":"alice","ts":"2026-03-17T02:59:55Z","load":1.33,"mem_free_mb":3251,"mem_total_mb":3794,"temp_c":34.1,"disk_pct":84,"throttle":"0x0"}
|
||||
{"node":"alice","ts":"2026-03-17T03:26:57Z","load":4.59,"mem_free_mb":3381,"mem_total_mb":3794,"temp_c":34.6,"disk_pct":84,"throttle":"0x0"}
|
||||
|
||||
@@ -1,35 +1,29 @@
|
||||
LISTEN 0 5 0.0.0.0:8184 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8092 0.0.0.0:* users:(("python3",pid=31558,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8095 0.0.0.0:* users:(("python3",pid=18662,fd=3))
|
||||
LISTEN 0 511 0.0.0.0:8080 0.0.0.0:*
|
||||
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:8083 0.0.0.0:* users:(("node /usr/lib/n",pid=3890,fd=20))
|
||||
LISTEN 0 5 0.0.0.0:4010 0.0.0.0:* users:(("python3",pid=610,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8011 0.0.0.0:* users:(("python3",pid=828,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8010 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8013 0.0.0.0:* users:(("python3",pid=622,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8012 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8013 0.0.0.0:* users:(("python3",pid=695,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8014 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8001 0.0.0.0:* users:(("python3",pid=617,fd=6))
|
||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=6196,fd=5))
|
||||
LISTEN 0 5 0.0.0.0:8010 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8011 0.0.0.0:* users:(("python3",pid=903,fd=3))
|
||||
LISTEN 0 2048 0.0.0.0:8001 0.0.0.0:* users:(("python3",pid=692,fd=6))
|
||||
LISTEN 0 5 0.0.0.0:4010 0.0.0.0:* users:(("python3",pid=688,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8095 0.0.0.0:* users:(("python3",pid=684,fd=3))
|
||||
LISTEN 0 511 0.0.0.0:8083 0.0.0.0:* users:(("node /usr/lib/n",pid=3707,fd=20))
|
||||
LISTEN 0 5 0.0.0.0:8184 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=776,fd=9))
|
||||
LISTEN 0 200 0.0.0.0:443 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:11434 0.0.0.0:*
|
||||
LISTEN 0 32 0.0.0.0:53 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 244 127.0.0.1:5432 0.0.0.0:*
|
||||
LISTEN 0 200 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 1024 0.0.0.0:6333 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:6334 0.0.0.0:*
|
||||
LISTEN 0 200 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 32 0.0.0.0:53 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:11434 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:3000 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:9000 0.0.0.0:*
|
||||
LISTEN 0 244 127.0.0.1:5432 0.0.0.0:*
|
||||
LISTEN 0 128 [::1]:11434 [::]:*
|
||||
LISTEN 0 244 [::1]:5432 [::]:*
|
||||
LISTEN 0 511 *:8090 *:* users:(("node",pid=25140,fd=27))
|
||||
LISTEN 0 511 [::]:8080 [::]:*
|
||||
LISTEN 0 200 [::]:443 [::]:*
|
||||
LISTEN 0 511 [::1]:6379 [::]:*
|
||||
LISTEN 0 200 [::]:80 [::]:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 200 [::]:443 [::]:*
|
||||
LISTEN 0 32 [::]:53 [::]:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 200 [::]:80 [::]:*
|
||||
LISTEN 0 244 [::1]:5432 [::]:*
|
||||
LISTEN 0 128 [::1]:11434 [::]:*
|
||||
LISTEN 0 511 *:8787 *:*
|
||||
|
||||
@@ -16,8 +16,6 @@ dhcpcd.service
|
||||
docker.service
|
||||
getty@tty1.service
|
||||
hciuart.service
|
||||
nginx.service
|
||||
packagekit.service
|
||||
pi-fleet-dashboard.service
|
||||
pihole-FTL.service
|
||||
pm2-pi.service
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"hostname": "alice",
|
||||
"ts": "2026-03-17T02:59:58Z",
|
||||
"uptime_seconds": 87336,
|
||||
"ts": "2026-03-17T03:26:58Z",
|
||||
"uptime_seconds": 87,
|
||||
"kernel": "6.1.21-v8+",
|
||||
"temp_c": 33.1,
|
||||
"temp_c": 35.0,
|
||||
"memory_mb": {
|
||||
"total": 3794,
|
||||
"used": 443,
|
||||
"free": 3249
|
||||
"used": 323,
|
||||
"free": 3381
|
||||
},
|
||||
"disk": "12G/15G (84%)",
|
||||
"load": [
|
||||
1.23,
|
||||
1.13,
|
||||
1.06
|
||||
4.59,
|
||||
1.86,
|
||||
0.68
|
||||
],
|
||||
"ollama_models": [
|
||||
"qwen2.5:3b",
|
||||
@@ -25,5 +25,5 @@
|
||||
],
|
||||
"throttle": "0x0",
|
||||
"voltage": "0.9160V",
|
||||
"services_running": 45
|
||||
"services_running": 43
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:(("python3",pid
|
||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3461172,fd=8),("nginx",pid=3461171,fd=8))
|
||||
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=589,fd=4),("systemd",pid=1,fd=127))
|
||||
LISTEN 0 4096 *:8080 *:* users:(("headscale",pid=2341808,fd=12))
|
||||
LISTEN 0 511 *:3000 *:* users:(("node /srv/hello",pid=1984822,fd=19))
|
||||
LISTEN 0 511 *:3000 *:* users:(("node /srv/hello",pid=1989954,fd=19))
|
||||
LISTEN 0 511 *:3001 *:* users:(("node",pid=757,fd=21))
|
||||
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=991,fd=8))
|
||||
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=3461172,fd=9),("nginx",pid=3461171,fd=9))
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"hostname": "anastasia",
|
||||
"ts": "2026-03-17T02:59:55Z",
|
||||
"uptime_seconds": 6858287,
|
||||
"ts": "2026-03-17T03:26:58Z",
|
||||
"uptime_seconds": 6859910,
|
||||
"kernel": "5.14.0-651.el9.x86_64",
|
||||
"temp_c": 0,
|
||||
"memory_mb": {
|
||||
"total": 765,
|
||||
"used": 437,
|
||||
"free": 327
|
||||
"used": 468,
|
||||
"free": 296
|
||||
},
|
||||
"disk": "18G/25G (69%)",
|
||||
"load": [
|
||||
0.01,
|
||||
0.06,
|
||||
0.06
|
||||
0.02,
|
||||
0.04,
|
||||
0.03
|
||||
],
|
||||
"ollama_models": [],
|
||||
"throttle": "N/A",
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
{"node":"aria","ts":"2026-03-16T03:01:04Z","load":0.16,"mem_free_mb":7103,"mem_total_mb":8059,"temp_c":45.8,"disk_pct":81,"throttle":"N/A"}
|
||||
{"node":"aria","ts":"2026-03-17T03:26:56Z","load":0.41,"mem_free_mb":7091,"mem_total_mb":8059,"temp_c":40.2,"disk_pct":81,"throttle":"N/A"}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=740,fd=6))
|
||||
LISTEN 0 5 0.0.0.0:8180 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:3000 0.0.0.0:* users:(("python3",pid=973,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:3000 0.0.0.0:* users:(("python3",pid=971,fd=3))
|
||||
LISTEN 0 4096 127.0.0.1:8088 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:45067 0.0.0.0:*
|
||||
LISTEN 0 32 127.0.0.1:53 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:34001 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8180 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=740,fd=6))
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9443 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:34001 0.0.0.0:*
|
||||
LISTEN 0 32 127.0.0.1:53 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:32785 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:9090 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 4096 *:11434 *:*
|
||||
LISTEN 0 4096 *:8086 *:*
|
||||
LISTEN 0 128 *:8090 *:*
|
||||
LISTEN 0 4096 *:11434 *:*
|
||||
LISTEN 0 16 *:5900 *:*
|
||||
LISTEN 0 4096 [::]:9443 [::]:*
|
||||
LISTEN 0 4096 [::]:9000 [::]:*
|
||||
LISTEN 0 4096 *:9100 *:*
|
||||
LISTEN 0 32 [::1]:53 [::]:*
|
||||
LISTEN 0 511 [::]:80 [::]:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 511 [::]:80 [::]:*
|
||||
LISTEN 0 4096 *:9100 *:*
|
||||
LISTEN 0 4096 [::]:9000 [::]:*
|
||||
LISTEN 0 4096 [::]:9443 [::]:*
|
||||
LISTEN 0 128 [::1]:631 [::]:*
|
||||
LISTEN 0 32 [::1]:53 [::]:*
|
||||
LISTEN 0 16 *:5900 *:*
|
||||
|
||||
@@ -19,6 +19,7 @@ NetworkManager.service
|
||||
nginx.service
|
||||
node_exporter.service
|
||||
ollama.service
|
||||
packagekit.service
|
||||
pironman5.service
|
||||
polkit.service
|
||||
roadnet-failover.service
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"node":"aria","status":"down","ts":"2026-03-17T02:59:54Z"}
|
||||
{"node":"aria","status":"down","ts":"2026-03-17T03:20:28Z"}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"hostname": "aria",
|
||||
"ts": "2026-03-16T03:01:04Z",
|
||||
"uptime_seconds": 933,
|
||||
"ts": "2026-03-17T03:26:57Z",
|
||||
"uptime_seconds": 282,
|
||||
"kernel": "6.12.62+rpt-rpi-2712",
|
||||
"temp_c": 45.8,
|
||||
"temp_c": 41.9,
|
||||
"memory_mb": {
|
||||
"total": 8059,
|
||||
"used": 964,
|
||||
"free": 7094
|
||||
"used": 974,
|
||||
"free": 7084
|
||||
},
|
||||
"disk": "22G/29G (81%)",
|
||||
"load": [
|
||||
0.16,
|
||||
0.44,
|
||||
0.5
|
||||
0.41,
|
||||
1.11,
|
||||
0.6
|
||||
],
|
||||
"ollama_models": [
|
||||
"nomic-embed-text:latest",
|
||||
@@ -25,5 +25,5 @@
|
||||
],
|
||||
"throttle": "N/A",
|
||||
"voltage": "N/A",
|
||||
"services_running": 39
|
||||
"services_running": 40
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
[2026-03-16 22:00:02] [DIAL] [cecilia] Switchboard unreachable
|
||||
[2026-03-16 22:01:01] [BEAT] [cecilia] load=0.31 mem=496/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:02:01] [BEAT] [cecilia] load=0.21 mem=494/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:03:02] [BEAT] [cecilia] load=0.17 mem=493/8062MB temp=35.3C disk=33%
|
||||
[2026-03-16 22:04:01] [BEAT] [cecilia] load=0.16 mem=489/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:05:01] [BEAT] [cecilia] load=0.30 mem=458/8062MB temp=37.0C disk=33%
|
||||
[2026-03-16 22:05:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
|
||||
[2026-03-16 22:06:01] [BEAT] [cecilia] load=0.27 mem=513/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:06:23] [DIAL] [cecilia] Switchboard unreachable
|
||||
[2026-03-16 22:07:01] [BEAT] [cecilia] load=0.30 mem=490/8062MB temp=35.3C disk=33%
|
||||
[2026-03-16 22:08:01] [BEAT] [cecilia] load=0.27 mem=487/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:09:01] [BEAT] [cecilia] load=1.14 mem=521/8062MB temp=35.3C disk=33%
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] Starting cross-node health check
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] alice: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] octavia: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] gematria: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [BEAT] [cecilia] load=1.13 mem=479/8062MB temp=37.0C disk=33%
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] lucidia: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] aria: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [FLEET] [cecilia] anastasia: DOWN (no ping response)
|
||||
[2026-03-16 22:10:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
|
||||
[2026-03-16 22:11:01] [BEAT] [cecilia] load=0.69 mem=524/8062MB temp=35.3C disk=33%
|
||||
[2026-03-16 22:12:01] [BEAT] [cecilia] load=0.40 mem=517/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:13:01] [BEAT] [cecilia] load=0.31 mem=518/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:14:01] [BEAT] [cecilia] load=0.22 mem=517/8062MB temp=34.8C disk=33%
|
||||
[2026-03-16 22:15:01] [BEAT] [cecilia] load=0.18 mem=482/8062MB temp=37.0C disk=33%
|
||||
[2026-03-16 22:15:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
|
||||
[2026-03-16 22:15:01] [DIAL] [cecilia] Switchboard unreachable
|
||||
[2026-03-16 22:16:01] [BEAT] [cecilia] load=0.27 mem=508/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:17:01] [BEAT] [cecilia] load=0.21 mem=509/8062MB temp=36.4C disk=33%
|
||||
[2026-03-16 22:18:01] [BEAT] [cecilia] load=0.19 mem=505/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:19:01] [BEAT] [cecilia] load=0.25 mem=503/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] Starting cross-node health check
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] alice: DOWN (no ping response)
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] octavia: DOWN (no ping response)
|
||||
[2026-03-16 22:20:01] [BEAT] [cecilia] load=0.43 mem=479/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] gematria: DOWN (no ping response)
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] lucidia: DOWN (no ping response)
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] aria: DOWN (no ping response)
|
||||
[2026-03-16 22:20:01] [FLEET] [cecilia] anastasia: DOWN (no ping response)
|
||||
[2026-03-16 22:20:02] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
|
||||
[2026-03-16 22:21:01] [BEAT] [cecilia] load=0.23 mem=523/8062MB temp=34.2C disk=33%
|
||||
[2026-03-16 22:21:26] [DIAL] [cecilia] Switchboard unreachable
|
||||
[2026-03-16 22:22:01] [BEAT] [cecilia] load=0.13 mem=513/8062MB temp=36.4C disk=33%
|
||||
[2026-03-16 22:23:01] [BEAT] [cecilia] load=0.18 mem=494/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:24:01] [BEAT] [cecilia] load=0.13 mem=491/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:26:01] [BEAT] [cecilia] load=0.25 mem=7035/8062MB temp=38.6C disk=33%
|
||||
[2026-03-16 22:26:43] [DIAL] [cecilia] Switchboard unreachable
|
||||
[2026-03-16 22:26:56] [BEAT] [cecilia] load=0.20 mem=7051/8062MB temp=35.9C disk=33%
|
||||
[2026-03-16 22:26:56] [BEAT] [cecilia] load=0.20 mem=7051/8062MB temp=38.0C disk=33%
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"node":"cecilia","ts":"2026-03-16T07:31:43Z","load":0.51,"mem_free_mb":2119,"mem_total_mb":8062,"temp_c":39.1,"disk_pct":31,"throttle":"0x50000"}
|
||||
{"node":"cecilia","ts":"2026-03-17T03:26:56Z","load":0.20,"mem_free_mb":7051,"mem_total_mb":8062,"temp_c":38.0,"disk_pct":33,"throttle":"N/A"}
|
||||
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
2026-03-15T21:49:17-05:00
|
||||
2026-03-16T22:25:58-05:00
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
LISTEN 0 200 127.0.0.1:5432 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:34001 0.0.0.0:*
|
||||
LISTEN 0 32 192.168.4.96:53 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:5001 0.0.0.0:* users:(("python3",pid=1564,fd=3))
|
||||
LISTEN 0 128 0.0.0.0:5002 0.0.0.0:* users:(("python3",pid=1551,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:9100 0.0.0.0:*
|
||||
LISTEN 0 32 127.0.0.1:53 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:(("python3",pid=1546,fd=3))
|
||||
LISTEN 0 2048 0.0.0.0:8788 0.0.0.0:* users:(("python3",pid=1387,fd=16))
|
||||
LISTEN 0 4096 127.0.0.1:9000 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:4010 0.0.0.0:* users:(("python3",pid=1034,fd=3))
|
||||
LISTEN 0 511 0.0.0.0:8080 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=1245,fd=5))
|
||||
LISTEN 0 4096 127.0.0.1:8088 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:11435 0.0.0.0:* users:(("python3",pid=1403,fd=3))
|
||||
LISTEN 0 511 0.0.0.0:3100 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:3000 0.0.0.0:* users:(("python3",pid=1547,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:3001 0.0.0.0:*
|
||||
LISTEN 0 16 *:5900 *:*
|
||||
LISTEN 0 4096 *:9000 *:*
|
||||
LISTEN 0 4096 *:9001 *:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 511 [::]:80 [::]:*
|
||||
LISTEN 0 200 [::1]:5432 [::]:*
|
||||
LISTEN 0 511 [::]:8080 [::]:*
|
||||
LISTEN 0 4096 *:8086 *:*
|
||||
LISTEN 0 4096 *:11434 *:*
|
||||
LISTEN 0 32 [::1]:53 [::]:*
|
||||
LISTEN 0 4096 [::1]:9000 [::]:*
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
accounts-daemon.service
|
||||
avahi-daemon.service
|
||||
blackroad-agent.service
|
||||
blackroad-dashboard.service
|
||||
blackroad-monitor.service
|
||||
blackroad-nats-agent.service
|
||||
bluetooth.service
|
||||
cece-api.service
|
||||
cece-heartbeat.service
|
||||
cloudflared.service
|
||||
containerd.service
|
||||
cron.service
|
||||
dbus.service
|
||||
dnsmasq.service
|
||||
docker.service
|
||||
getty@tty1.service
|
||||
hailort.service
|
||||
influxdb.service
|
||||
minio.service
|
||||
ModemManager.service
|
||||
NetworkManager.service
|
||||
ollama.service
|
||||
pironman5.service
|
||||
polkit.service
|
||||
postgresql@17-main.service
|
||||
roadnet-failover.service
|
||||
serial-getty@ttyAMA10.service
|
||||
ssh.service
|
||||
stats-proxy.service
|
||||
systemd-journald.service
|
||||
systemd-logind.service
|
||||
systemd-timesyncd.service
|
||||
systemd-udevd.service
|
||||
udisks2.service
|
||||
user@1000.service
|
||||
user@1001.service
|
||||
wayvnc-control.service
|
||||
wayvnc.service
|
||||
wpa_supplicant.service
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"node":"cecilia","status":"down","ts":"2026-03-17T02:59:54Z"}
|
||||
{"node":"cecilia","status":"down","ts":"2026-03-17T03:20:28Z"}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"hostname": "cecilia",
|
||||
"ts": "2026-03-17T03:26:57Z",
|
||||
"uptime_seconds": 126,
|
||||
"kernel": "6.12.62+rpt-rpi-2712",
|
||||
"temp_c": 37.0,
|
||||
"memory_mb": {
|
||||
"total": 8062,
|
||||
"used": 1022,
|
||||
"free": 7040
|
||||
},
|
||||
"disk": "142G/457G (33%)",
|
||||
"load": [
|
||||
0.2,
|
||||
0.1,
|
||||
0.03
|
||||
],
|
||||
"ollama_models": [
|
||||
"deepseek-r1:1.5b",
|
||||
"nomic-embed-text:latest",
|
||||
"hf.co/mradermacher/OpenELM-1_1B-Instruct-GGUF:Q4_K_M",
|
||||
"hf.co/mradermacher/OpenELM-3B-Instruct-GGUF:Q4_K_M",
|
||||
"cece2:latest",
|
||||
"qwen3:8b",
|
||||
"llama3:8b-instruct-q4_K_M",
|
||||
"cece:latest",
|
||||
"deepseek-coder:1.3b",
|
||||
"qwen2.5-coder:3b",
|
||||
"llama3.2:3b",
|
||||
"tinyllama:latest",
|
||||
"llama3.2:latest",
|
||||
"codellama:7b",
|
||||
"llama3.2:1b"
|
||||
],
|
||||
"throttle": "N/A",
|
||||
"voltage": "N/A",
|
||||
"services_running": 39
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=682329,fd=14))
|
||||
LISTEN 0 4096 127.0.0.1:2019 0.0.0.0:* users:(("caddy",pid=26445,fd=9))
|
||||
LISTEN 0 5 0.0.0.0:11435 0.0.0.0:* users:(("python3",pid=147655,fd=3))
|
||||
LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:(("python3",pid=577215,fd=3))
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=3335327,fd=3))
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:* users:(("cloudflared",pid=156470,fd=3))
|
||||
LISTEN 0 128 127.0.0.1:8011 0.0.0.0:* users:(("sshd",pid=4152649,fd=5))
|
||||
LISTEN 0 4096 *:11434 *:* users:(("ollama",pid=279794,fd=3))
|
||||
LISTEN 0 4096 *:11436 *:* users:(("caddy",pid=26445,fd=16))
|
||||
LISTEN 0 4096 *:443 *:* users:(("caddy",pid=26445,fd=11))
|
||||
LISTEN 0 4096 *:80 *:* users:(("caddy",pid=26445,fd=15))
|
||||
LISTEN 0 4096 *:4222 *:* users:(("nats-server",pid=1353183,fd=6))
|
||||
LISTEN 0 4096 *:8222 *:* users:(("nats-server",pid=1353183,fd=3))
|
||||
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=3335327,fd=4))
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"hostname": "gematria",
|
||||
"ts": "2026-03-17T02:59:57Z",
|
||||
"uptime_seconds": 5515589,
|
||||
"ts": "2026-03-17T03:27:00Z",
|
||||
"uptime_seconds": 5517212,
|
||||
"kernel": "5.15.0-113-generic",
|
||||
"temp_c": 0,
|
||||
"memory_mb": {
|
||||
"total": 7937,
|
||||
"used": 1225,
|
||||
"free": 6262
|
||||
"used": 1218,
|
||||
"free": 6271
|
||||
},
|
||||
"disk": "53G/78G (68%)",
|
||||
"load": [
|
||||
0.02,
|
||||
0.06,
|
||||
0.08
|
||||
0.05,
|
||||
0.04
|
||||
],
|
||||
"ollama_models": [
|
||||
"qwen2.5:7b",
|
||||
|
||||
Binary file not shown.
@@ -1,14 +1,14 @@
|
||||
blackroad-gitea Up 24 hours
|
||||
road-pdns-admin Up 24 hours (healthy)
|
||||
road-pdns Up 24 hours
|
||||
road-dns-db Up 24 hours
|
||||
roadauth Up 24 hours
|
||||
roadapi Up 24 hours
|
||||
blackroad-edge-agent Up 24 hours
|
||||
blackroad.systems Up 24 hours
|
||||
blackroadai.com Up 24 hours
|
||||
blackroad-auth-gateway Up 24 hours
|
||||
blackroad-metaverse Up 24 hours
|
||||
blackroad-os Up 24 hours
|
||||
blackroad-os-carpool Up 24 hours
|
||||
pi-my-agent-1 Up 24 hours (healthy)
|
||||
blackroad-gitea Up 3 minutes
|
||||
road-pdns-admin Up 3 minutes (healthy)
|
||||
road-pdns Up 3 minutes
|
||||
road-dns-db Up 3 minutes
|
||||
roadauth Up 3 minutes
|
||||
roadapi Up 3 minutes
|
||||
blackroad-edge-agent Up 3 minutes
|
||||
blackroad.systems Up 3 minutes
|
||||
blackroadai.com Up 3 minutes
|
||||
blackroad-auth-gateway Up 3 minutes
|
||||
blackroad-metaverse Up 3 minutes
|
||||
blackroad-os Up 3 minutes
|
||||
blackroad-os-carpool Up 3 minutes
|
||||
pi-my-agent-1 Up 3 minutes (healthy)
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"node":"lucidia","ts":"2026-03-17T02:59:53Z","load":1.58,"mem_free_mb":3293,"mem_total_mb":8063,"temp_c":46.9,"disk_pct":34,"throttle":"0x0"}
|
||||
{"node":"lucidia","ts":"2026-03-17T03:26:56Z","load":3.01,"mem_free_mb":3497,"mem_total_mb":8063,"temp_c":52.4,"disk_pct":33,"throttle":"N/A"}
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
LISTEN 0 4096 100.66.235.47:38850 0.0.0.0:*
|
||||
LISTEN 0 511 127.0.0.1:4010 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:34001 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:8088 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20242 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:8889 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8787 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:35031 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:8889 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9192 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
||||
LISTEN 0 32 127.0.0.1:53 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:45253 0.0.0.0:*
|
||||
LISTEN 0 200 127.0.0.1:5432 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:4001 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:4002 0.0.0.0:*
|
||||
LISTEN 0 128 0.0.0.0:34001 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:3000 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3005 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3006 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:2222 0.0.0.0:*
|
||||
LISTEN 0 4096 100.66.235.47:38850 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20242 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:*
|
||||
LISTEN 0 511 127.0.0.1:4010 0.0.0.0:*
|
||||
LISTEN 0 4096 127.0.0.1:8088 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8011 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8000 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8180 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8182 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:*
|
||||
LISTEN 0 511 0.0.0.0:8081 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:8082 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8180 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8182 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:8011 0.0.0.0:*
|
||||
LISTEN 0 2048 0.0.0.0:8000 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3109 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:4001 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:4002 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3100 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3005 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3006 0.0.0.0:*
|
||||
LISTEN 0 5 0.0.0.0:3000 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:*
|
||||
LISTEN 0 32 127.0.0.1:53 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:2222 0.0.0.0:*
|
||||
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
|
||||
LISTEN 0 4096 0.0.0.0:3109 0.0.0.0:*
|
||||
LISTEN 0 4096 [::]:9192 [::]:*
|
||||
LISTEN 0 128 [::1]:631 [::]:*
|
||||
LISTEN 0 4096 *:9100 *:*
|
||||
LISTEN 0 4096 [::]:9090 [::]:*
|
||||
LISTEN 0 4096 [::]:9192 [::]:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 511 [::]:80 [::]:*
|
||||
LISTEN 0 128 [::1]:631 [::]:*
|
||||
LISTEN 0 4096 [::]:4001 [::]:*
|
||||
LISTEN 0 4096 [::]:4002 [::]:*
|
||||
LISTEN 0 511 *:8090 *:*
|
||||
LISTEN 0 4096 *:8086 *:*
|
||||
LISTEN 0 4096 [::]:8080 [::]:*
|
||||
LISTEN 0 4096 [::]:8082 [::]:*
|
||||
LISTEN 0 4096 *:11434 *:*
|
||||
LISTEN 0 128 [::]:22 [::]:*
|
||||
LISTEN 0 32 [::1]:53 [::]:*
|
||||
LISTEN 0 4096 [::]:3109 [::]:*
|
||||
LISTEN 0 4096 [::]:3100 [::]:*
|
||||
LISTEN 0 4096 [fd7a:115c:a1e0::5401:eb6c]:46193 [::]:*
|
||||
LISTEN 0 200 [::1]:5432 [::]:*
|
||||
LISTEN 0 4096 [::]:3002 [::]:*
|
||||
LISTEN 0 4096 [::]:3005 [::]:*
|
||||
LISTEN 0 4096 [::]:3006 [::]:*
|
||||
LISTEN 0 4096 [::]:3002 [::]:*
|
||||
LISTEN 0 4096 [::]:2222 [::]:*
|
||||
LISTEN 0 200 [::1]:5432 [::]:*
|
||||
LISTEN 0 4096 [fd7a:115c:a1e0::5401:eb6c]:46193 [::]:*
|
||||
LISTEN 0 511 *:8090 *:*
|
||||
LISTEN 0 4096 [::]:8080 [::]:*
|
||||
LISTEN 0 4096 [::]:8082 [::]:*
|
||||
LISTEN 0 4096 *:8086 *:*
|
||||
LISTEN 0 4096 [::]:4001 [::]:*
|
||||
LISTEN 0 4096 [::]:4002 [::]:*
|
||||
LISTEN 0 4096 [::]:3100 [::]:*
|
||||
LISTEN 0 4096 [::]:3109 [::]:*
|
||||
LISTEN 0 4096 *:11434 *:*
|
||||
|
||||
@@ -6,7 +6,6 @@ blackroad-agent.service
|
||||
blackroad-api.service
|
||||
blackroad-nats-agent.service
|
||||
blackroad-relay.service
|
||||
blackroad-ssh-tunnel.service
|
||||
bluetooth.service
|
||||
cloudflared.service
|
||||
colord.service
|
||||
@@ -29,7 +28,6 @@ pironman5.service
|
||||
pm2-pi.service
|
||||
polkit.service
|
||||
postgresql@17-main.service
|
||||
road-phone.service
|
||||
roadnet-failover.service
|
||||
rtkit-daemon.service
|
||||
serial-getty@ttyAMA10.service
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"hostname": "octavia",
|
||||
"ts": "2026-03-17T02:59:54Z",
|
||||
"uptime_seconds": 87152,
|
||||
"ts": "2026-03-17T03:26:57Z",
|
||||
"uptime_seconds": 189,
|
||||
"kernel": "6.12.62+rpt-rpi-2712",
|
||||
"temp_c": 47.4,
|
||||
"temp_c": 51.8,
|
||||
"memory_mb": {
|
||||
"total": 8063,
|
||||
"used": 4781,
|
||||
"free": 3281
|
||||
"used": 4592,
|
||||
"free": 3470
|
||||
},
|
||||
"disk": "74G/235G (34%)",
|
||||
"disk": "74G/235G (33%)",
|
||||
"load": [
|
||||
1.58,
|
||||
3.28,
|
||||
4.17
|
||||
3.01,
|
||||
2.63,
|
||||
1.13
|
||||
],
|
||||
"ollama_models": [
|
||||
"qwen2.5:3b",
|
||||
@@ -23,7 +23,7 @@
|
||||
"tinyllama:latest",
|
||||
"qwen2.5:1.5b"
|
||||
],
|
||||
"throttle": "0x0",
|
||||
"voltage": "0.8587V",
|
||||
"services_running": 48
|
||||
"throttle": "N/A",
|
||||
"voltage": "N/A",
|
||||
"services_running": 46
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"node":"octavia","status":"down","ts":"2026-03-17T02:59:54Z"}
|
||||
{"node":"octavia","status":"down","ts":"2026-03-17T03:26:56Z"}
|
||||
|
||||
338
operator/memory/memory-schedule.sh
Executable file
338
operator/memory/memory-schedule.sh
Executable file
@@ -0,0 +1,338 @@
|
||||
#!/bin/bash
|
||||
# BlackRoad Schedule Agent — Reads Google Calendar, posts to Slack, agents work on blocks
|
||||
# Uses MCP calendar tools via the Slack Worker API
|
||||
# Usage: memory-schedule.sh <command> [args]
|
||||
set -e
|
||||
|
||||
COLLAB_DB="$HOME/.blackroad/collaboration.db"
|
||||
SESSION_FILE="$HOME/.blackroad/memory/current-collab-session"
|
||||
SLACK_API="https://blackroad-slack.amundsonalexa.workers.dev"
|
||||
SCHEDULE_DB="$HOME/.blackroad/schedule.db"
|
||||
|
||||
PINK='\033[38;5;205m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
RED='\033[0;31m'
|
||||
BOLD='\033[1m'
|
||||
DIM='\033[2m'
|
||||
NC='\033[0m'
|
||||
|
||||
sql() { sqlite3 "$SCHEDULE_DB" "$@" 2>/dev/null; }
|
||||
|
||||
post_to_slack() {
|
||||
curl -s --max-time 3 --connect-timeout 2 \
|
||||
-X POST "$SLACK_API/post" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$(jq -n --arg t "$1" '{text:$t}')" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
get_session() {
|
||||
[[ -f "$SESSION_FILE" ]] && cat "$SESSION_FILE" || echo "unknown"
|
||||
}
|
||||
|
||||
# ── INIT ──
|
||||
cmd_init() {
|
||||
mkdir -p "$(dirname "$SCHEDULE_DB")"
|
||||
sqlite3 "$SCHEDULE_DB" <<'SQL'
|
||||
PRAGMA journal_mode=WAL;
|
||||
CREATE TABLE IF NOT EXISTS schedule_blocks (
|
||||
block_id TEXT PRIMARY KEY,
|
||||
date TEXT NOT NULL,
|
||||
start_time TEXT NOT NULL,
|
||||
end_time TEXT NOT NULL,
|
||||
summary TEXT NOT NULL,
|
||||
description TEXT DEFAULT '',
|
||||
copilot_prompt TEXT DEFAULT '',
|
||||
claimed_by TEXT DEFAULT '',
|
||||
status TEXT DEFAULT 'open',
|
||||
gcal_event_id TEXT DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_blocks_date ON schedule_blocks(date);
|
||||
CREATE TABLE IF NOT EXISTS block_logs (
|
||||
log_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
block_id TEXT NOT NULL,
|
||||
session_id TEXT NOT NULL,
|
||||
action TEXT NOT NULL,
|
||||
details TEXT DEFAULT '',
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
SQL
|
||||
echo -e "${GREEN}Schedule DB initialized${NC}"
|
||||
}
|
||||
|
||||
# ── TODAY ──
|
||||
cmd_today() {
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
|
||||
echo -e "${PINK}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${PINK}║${NC} ${BOLD}Schedule — $today${NC} ${PINK}║${NC}"
|
||||
echo -e "${PINK}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
# Check if we have today's blocks cached
|
||||
local count
|
||||
count=$(sql "SELECT count(*) FROM schedule_blocks WHERE date='$today';" 2>/dev/null || echo "0")
|
||||
|
||||
if [[ "$count" -eq 0 || "$count" == "0" ]]; then
|
||||
echo -e " ${YELLOW}No blocks cached for today. Run: $0 sync${NC}"
|
||||
echo ""
|
||||
return
|
||||
fi
|
||||
|
||||
sql "SELECT start_time, end_time, summary, claimed_by, status, copilot_prompt FROM schedule_blocks WHERE date='$today' ORDER BY start_time;" | while IFS='|' read -r start end summary claimed status prompt; do
|
||||
local icon="⬜"
|
||||
local extra=""
|
||||
case "$status" in
|
||||
claimed) icon="🔵"; extra=" ${DIM}(${claimed})${NC}" ;;
|
||||
done) icon="✅" ;;
|
||||
active) icon="🟢"; extra=" ${GREEN}ACTIVE${NC}" ;;
|
||||
esac
|
||||
echo -e " $icon ${BOLD}${start}-${end}${NC} $summary$extra"
|
||||
if [[ -n "$prompt" && "$1" == "--prompts" ]]; then
|
||||
echo -e " ${DIM}Prompt: ${prompt:0:120}${NC}"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
local open claimed done
|
||||
open=$(sql "SELECT count(*) FROM schedule_blocks WHERE date='$today' AND status='open';")
|
||||
claimed=$(sql "SELECT count(*) FROM schedule_blocks WHERE date='$today' AND status='claimed';")
|
||||
done=$(sql "SELECT count(*) FROM schedule_blocks WHERE date='$today' AND status='done';")
|
||||
echo -e " ${GREEN}$done done${NC} | ${BLUE}$claimed claimed${NC} | ${YELLOW}$open open${NC}"
|
||||
}
|
||||
|
||||
# ── SYNC — Import from calendar JSON cache ──
|
||||
cmd_sync() {
|
||||
cmd_init 2>/dev/null
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
|
||||
echo -e "${BLUE}Syncing calendar for $today...${NC}"
|
||||
|
||||
# Find the latest calendar JSON from MCP tool results
|
||||
local json_file
|
||||
json_file=$(find "$HOME/.claude/projects" -name "*.json" -path "*/tool-results/*" -newer /tmp/.schedule-sync-marker 2>/dev/null | head -1)
|
||||
|
||||
if [[ -z "$json_file" ]]; then
|
||||
# Try to find any recent calendar result
|
||||
json_file=$(find "$HOME/.claude/projects" -name "*.json" -path "*/tool-results/*" -exec grep -l "calendar" {} \; 2>/dev/null | head -1)
|
||||
fi
|
||||
|
||||
if [[ -n "$json_file" ]]; then
|
||||
# Parse events from JSON
|
||||
python3 -c "
|
||||
import json, sys
|
||||
with open('$json_file') as f:
|
||||
data = json.load(f)
|
||||
text = data[0]['text'] if isinstance(data, list) else data
|
||||
events_data = json.loads(text) if isinstance(text, str) else text
|
||||
events = events_data.get('events', [])
|
||||
today = '$today'
|
||||
for e in events:
|
||||
start = e.get('start', {})
|
||||
dt = start.get('dateTime', start.get('date', ''))
|
||||
if not dt.startswith(today):
|
||||
continue
|
||||
start_time = dt[11:16] if len(dt) > 10 else '00:00'
|
||||
end_dt = e.get('end', {}).get('dateTime', '')
|
||||
end_time = end_dt[11:16] if len(end_dt) > 10 else '23:59'
|
||||
summary = e.get('summary', '?').replace(\"'\", \"''\")
|
||||
desc = (e.get('description', '') or '').replace(\"'\", \"''\")
|
||||
# Extract Copilot prompt if present
|
||||
prompt = ''
|
||||
if 'Copilot Prompt:' in desc:
|
||||
prompt = desc.split('Copilot Prompt:')[1].strip().strip(\"'\").replace(\"'\", \"''\")
|
||||
event_id = e.get('id', '')
|
||||
block_id = f'{today}-{start_time}'
|
||||
print(f\"INSERT OR REPLACE INTO schedule_blocks (block_id, date, start_time, end_time, summary, description, copilot_prompt, gcal_event_id) VALUES ('{block_id}', '{today}', '{start_time}', '{end_time}', '{summary}', '{desc[:500]}', '{prompt[:500]}', '{event_id}');\")
|
||||
" 2>/dev/null | sqlite3 "$SCHEDULE_DB" 2>/dev/null
|
||||
|
||||
local synced
|
||||
synced=$(sql "SELECT count(*) FROM schedule_blocks WHERE date='$today';")
|
||||
echo -e "${GREEN}Synced $synced blocks for $today${NC}"
|
||||
touch /tmp/.schedule-sync-marker
|
||||
else
|
||||
echo -e "${YELLOW}No calendar data found. Use MCP calendar tools first, then re-run sync.${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── CLAIM ──
|
||||
cmd_claim() {
|
||||
local time_or_id="$1"
|
||||
[[ -z "$time_or_id" ]] && { echo -e "${RED}Usage: $0 claim <start-time or block-id>${NC}"; exit 1; }
|
||||
|
||||
local session
|
||||
session=$(get_session)
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
local now
|
||||
now=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
# Try matching by start_time first
|
||||
local block_id
|
||||
block_id=$(sql "SELECT block_id FROM schedule_blocks WHERE (start_time='$time_or_id' OR block_id='$time_or_id') AND date='$today' LIMIT 1;")
|
||||
|
||||
if [[ -z "$block_id" ]]; then
|
||||
echo -e "${RED}No block found matching '$time_or_id' for today${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
sql "UPDATE schedule_blocks SET claimed_by='$session', status='claimed' WHERE block_id='$block_id';"
|
||||
|
||||
local summary
|
||||
summary=$(sql "SELECT summary FROM schedule_blocks WHERE block_id='$block_id';")
|
||||
echo -e "${GREEN}Claimed:${NC} $summary"
|
||||
|
||||
# Show the Copilot prompt
|
||||
local prompt
|
||||
prompt=$(sql "SELECT copilot_prompt FROM schedule_blocks WHERE block_id='$block_id';")
|
||||
if [[ -n "$prompt" ]]; then
|
||||
echo -e "${CYAN}Copilot Prompt:${NC} $prompt"
|
||||
fi
|
||||
|
||||
post_to_slack "🔵 *Block Claimed* [$session]: $summary" &
|
||||
sql "INSERT INTO block_logs (block_id, session_id, action, details, created_at) VALUES ('$block_id', '$session', 'claimed', '$summary', '$now');"
|
||||
}
|
||||
|
||||
# ── COMPLETE ──
|
||||
cmd_complete() {
|
||||
local time_or_id="$1"
|
||||
[[ -z "$time_or_id" ]] && { echo -e "${RED}Usage: $0 complete <start-time or block-id>${NC}"; exit 1; }
|
||||
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
local now
|
||||
now=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
local session
|
||||
session=$(get_session)
|
||||
|
||||
local block_id
|
||||
block_id=$(sql "SELECT block_id FROM schedule_blocks WHERE (start_time='$time_or_id' OR block_id='$time_or_id') AND date='$today' LIMIT 1;")
|
||||
|
||||
if [[ -z "$block_id" ]]; then
|
||||
echo -e "${RED}No block found matching '$time_or_id'${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
sql "UPDATE schedule_blocks SET status='done' WHERE block_id='$block_id';"
|
||||
local summary
|
||||
summary=$(sql "SELECT summary FROM schedule_blocks WHERE block_id='$block_id';")
|
||||
echo -e "${GREEN}✅ Completed:${NC} $summary"
|
||||
post_to_slack "✅ *Block Done*: $summary" &
|
||||
sql "INSERT INTO block_logs (block_id, session_id, action, details, created_at) VALUES ('$block_id', '$session', 'completed', '$summary', '$now');"
|
||||
}
|
||||
|
||||
# ── PROMPT — Show the Copilot prompt for a block ──
|
||||
cmd_prompt() {
|
||||
local time_or_id="$1"
|
||||
[[ -z "$time_or_id" ]] && { echo -e "${RED}Usage: $0 prompt <start-time>${NC}"; exit 1; }
|
||||
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
|
||||
local result
|
||||
result=$(sql "SELECT summary, copilot_prompt, description FROM schedule_blocks WHERE (start_time='$time_or_id' OR block_id='$time_or_id') AND date='$today' LIMIT 1;")
|
||||
|
||||
if [[ -z "$result" ]]; then
|
||||
echo -e "${RED}No block found${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
IFS='|' read -r summary prompt desc <<< "$result"
|
||||
echo -e "${BOLD}$summary${NC}"
|
||||
echo ""
|
||||
if [[ -n "$prompt" ]]; then
|
||||
echo -e "${CYAN}Copilot Prompt:${NC}"
|
||||
echo "$prompt"
|
||||
else
|
||||
echo -e "${DIM}No Copilot prompt — full description:${NC}"
|
||||
echo "$desc"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── POST — Post today's schedule to Slack ──
|
||||
cmd_post() {
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
|
||||
local msg="📅 *Schedule — $today*\n"
|
||||
sql "SELECT start_time, end_time, summary, status FROM schedule_blocks WHERE date='$today' ORDER BY start_time;" | while IFS='|' read -r start end summary status; do
|
||||
local icon="⬜"
|
||||
case "$status" in
|
||||
claimed) icon="🔵" ;;
|
||||
done) icon="✅" ;;
|
||||
active) icon="🟢" ;;
|
||||
esac
|
||||
msg="${msg}\n${icon} ${start}-${end} ${summary}"
|
||||
done
|
||||
|
||||
post_to_slack "$msg"
|
||||
echo -e "${GREEN}Schedule posted to Slack${NC}"
|
||||
}
|
||||
|
||||
# ── NEXT — What block is coming up? ──
|
||||
cmd_next() {
|
||||
local today
|
||||
today=$(date +%Y-%m-%d)
|
||||
local now_time
|
||||
now_time=$(date +%H:%M)
|
||||
|
||||
local result
|
||||
result=$(sql "SELECT start_time, end_time, summary, copilot_prompt FROM schedule_blocks WHERE date='$today' AND start_time >= '$now_time' AND status='open' ORDER BY start_time LIMIT 1;")
|
||||
|
||||
if [[ -z "$result" ]]; then
|
||||
echo -e "${GREEN}No more open blocks today!${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
IFS='|' read -r start end summary prompt <<< "$result"
|
||||
echo -e "${BOLD}Next:${NC} ${start}-${end} ${CYAN}$summary${NC}"
|
||||
if [[ -n "$prompt" ]]; then
|
||||
echo -e "${DIM}Prompt: ${prompt:0:150}${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── HELP ──
|
||||
cmd_help() {
|
||||
cat <<EOF
|
||||
${PINK}╔════════════════════════════════════════════════════════════╗${NC}
|
||||
${PINK}║${NC} ${BOLD}BlackRoad Schedule Agent${NC} ${PINK}║${NC}
|
||||
${PINK}╚════════════════════════════════════════════════════════════╝${NC}
|
||||
|
||||
${BOLD}Commands:${NC}
|
||||
${CYAN}today [--prompts]${NC} Show today's schedule (add --prompts for Copilot prompts)
|
||||
${CYAN}sync${NC} Import today's events from calendar cache
|
||||
${CYAN}next${NC} Show next upcoming open block
|
||||
${CYAN}claim <time>${NC} Claim a block (e.g. claim 13:00)
|
||||
${CYAN}complete <time>${NC} Mark a block as done
|
||||
${CYAN}prompt <time>${NC} Show Copilot prompt for a block
|
||||
${CYAN}post${NC} Post schedule to Slack
|
||||
|
||||
${BOLD}Examples:${NC}
|
||||
$0 sync # Import from Google Calendar
|
||||
$0 today --prompts # Show schedule with AI prompts
|
||||
$0 claim 13:00 # Claim the 1pm block
|
||||
$0 prompt 16:00 # Show the Copilot prompt for 4pm
|
||||
$0 complete 13:00 # Mark 1pm block done
|
||||
EOF
|
||||
}
|
||||
|
||||
case "${1:-help}" in
|
||||
init) cmd_init ;;
|
||||
today|t) shift 2>/dev/null || true; cmd_today "$@" ;;
|
||||
sync|s) cmd_sync ;;
|
||||
claim|c) shift; cmd_claim "$@" ;;
|
||||
complete|done|d) shift; cmd_complete "$@" ;;
|
||||
prompt|p) shift; cmd_prompt "$@" ;;
|
||||
post) cmd_post ;;
|
||||
next|n) cmd_next ;;
|
||||
help|--help|-h) cmd_help ;;
|
||||
*)
|
||||
echo -e "${RED}Unknown: $1${NC}"
|
||||
cmd_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
1
roadc/.gitignore
vendored
Normal file
1
roadc/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
__pycache__/
|
||||
3
roadc/CODEOWNERS
Normal file
3
roadc/CODEOWNERS
Normal file
@@ -0,0 +1,3 @@
|
||||
# BlackRoad OS, Inc. — Code Ownership
|
||||
# All changes require review from the founder
|
||||
* @blackboxprogramming
|
||||
Reference in New Issue
Block a user