freedom-intelligence/scripts/consume-fi-brief-spawn.sh
tegwick 70cbfe0c6c Catch up field brief, catalog Kimi K3, and wire live daily recurrence.
Add 2026-08-03 week catch-up brief with Kimi K3 as S1 strategic (collection
deferred on ~1454 GiB vs 850 GiB soft quota), document recurrence ops, and add a
workstation due-notice consumer cron helper. Production schedule was applied to
railiance ConfigMap and Temporal (weekdays 07:30 Europe/Berlin).
2026-08-03 17:37:53 +02:00

74 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# Workstation consumer for FI daily research brief spawns.
#
# activity-core emits activity_task_spawn (state-hub sink) with
# target_repo=freedom-intelligence. This script:
# 1) checks fi_brief_status due (or open spawn)
# 2) reminds operator / runs playbook path
# 3) does NOT invent brief content — open a session with the playbook
#
# Schedule suggestion (Europe/Berlin, after 07:30 spawn):
# 40 7 * * 1-5 /home/worsch/freedom-intelligence/scripts/consume-fi-brief-spawn.sh
#
# Env:
# STATE_HUB_URL default http://127.0.0.1:8000
# FI_REPO default /home/worsch/freedom-intelligence
set -euo pipefail
STATE_HUB_URL="${STATE_HUB_URL:-http://127.0.0.1:8000}"
FI_REPO="${FI_REPO:-/home/worsch/freedom-intelligence}"
LOG_DIR="${FI_REPO}/.local/consumer-logs"
mkdir -p "$LOG_DIR"
log="$LOG_DIR/$(date +%Y-%m-%d).log"
{
echo "=== $(date -Is) consume-fi-brief-spawn ==="
# Prefer activity-core resolver if available; else raw progress heuristic
due_json=""
if command -v uv >/dev/null 2>&1 && [[ -d /home/worsch/activity-core ]]; then
due_json="$(
cd /home/worsch/activity-core &&
STATE_HUB_URL="$STATE_HUB_URL" uv run python -c "
from activity_core.context_resolvers.state_hub import _fi_brief_status
import json
print(json.dumps(_fi_brief_status({'repo': 'freedom-intelligence'}), default=str))
" 2>/dev/null || true
)"
fi
if [[ -z "$due_json" ]]; then
echo "WARN: could not query fi_brief_status; check STATE_HUB_URL=$STATE_HUB_URL"
exit 0
fi
echo "status: $due_json"
due="$(python3 -c "import json,sys; d=json.loads(sys.argv[1]); print(d['items'][0]['due'])" "$due_json")"
date_s="$(python3 -c "import json,sys; d=json.loads(sys.argv[1]); print(d['items'][0]['date'])" "$due_json")"
if [[ "$due" != "True" && "$due" != "true" ]]; then
echo "not due for $date_s — exit"
exit 0
fi
y="${date_s:0:4}"
m="${date_s:5:2}"
brief_path="$FI_REPO/briefs/$y/$m/$date_s.md"
echo "DUE: produce brief at $brief_path"
echo "Playbook: $FI_REPO/docs/daily-brief-playbook.md"
echo "On completion POST event_type=fi_daily_brief detail.repo=freedom-intelligence detail.date=$date_s"
# Non-interactive marker for operators / agents
notice="$LOG_DIR/DUE-$date_s.txt"
cat >"$notice" <<EOF
FI daily research brief is DUE for $date_s.
1. cd $FI_REPO
2. Follow docs/daily-brief-playbook.md
3. Write $brief_path
4. Post State Hub progress event fi_daily_brief
Spawn consumer ran at $(date -Is).
EOF
echo "wrote $notice"
} | tee -a "$log"