Some checks are pending
CI / lint-and-test (push) Waiting to run
24 files: 8 pipeline lib modules, 6 diagnostics updates, 4 new diagnostics modules, telegram bot fix, 5 active operational scripts. Key changes: - Security: SQL injection prevention (alerting.py), SSL verification (review_queue.py), path traversal guard (extract.py) - Cost tracking: per-PR cost accumulation in evaluate.py - Auto-recovery: watchdog tier0 reset with retry cap + cooldown - Extraction: structured edge fields, post-write vector connection - New modules: vitality, research_tracking, research_routes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
212 lines
7.1 KiB
Bash
Executable file
212 lines
7.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# Directed research session for Vida — MA/Senior Care/International
|
|
# Wraps research-session.sh with a custom brief injected into the prompt
|
|
set -euo pipefail
|
|
|
|
AGENT="vida"
|
|
MODEL="opus"
|
|
REPO_DIR="/opt/teleo-eval/workspaces/research-${AGENT}"
|
|
FORGEJO_URL="http://localhost:3000"
|
|
FORGEJO_ADMIN_TOKEN=$(cat /opt/teleo-eval/secrets/forgejo-admin-token)
|
|
AGENT_TOKEN=$(cat "/opt/teleo-eval/secrets/forgejo-${AGENT}-token")
|
|
CLAUDE_BIN="/home/teleo/.local/bin/claude"
|
|
LOG="/opt/teleo-eval/logs/research-${AGENT}.log"
|
|
LOCKFILE="/tmp/research-${AGENT}.lock"
|
|
DATE=$(date +%Y-%m-%d)
|
|
BRANCH="${AGENT}/research-ma-senior-care-${DATE}"
|
|
BRIEF_FILE="/opt/teleo-eval/vida-research-brief.md"
|
|
DOMAIN="health"
|
|
|
|
log() { echo "[$(date -Iseconds)] $*" >> "$LOG"; }
|
|
|
|
# Lock
|
|
if [ -f "$LOCKFILE" ]; then
|
|
pid=$(cat "$LOCKFILE" 2>/dev/null)
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
log "SKIP: research session already running for $AGENT (pid $pid)"
|
|
exit 0
|
|
fi
|
|
rm -f "$LOCKFILE"
|
|
fi
|
|
echo $$ > "$LOCKFILE"
|
|
trap 'rm -f "$LOCKFILE"' EXIT
|
|
|
|
log "=== Starting DIRECTED research session for $AGENT (model: $MODEL) ==="
|
|
log "Topic: Medicare Advantage, Senior Care, International Comparisons"
|
|
|
|
# Ensure repo
|
|
if [ ! -d "$REPO_DIR/.git" ]; then
|
|
git -c http.extraHeader="Authorization: token $FORGEJO_ADMIN_TOKEN" \
|
|
clone "${FORGEJO_URL}/teleo/teleo-codex.git" "$REPO_DIR" >> "$LOG" 2>&1
|
|
fi
|
|
|
|
cd "$REPO_DIR"
|
|
git config credential.helper "!f() { echo username=m3taversal; echo password=$FORGEJO_ADMIN_TOKEN; }; f"
|
|
git remote set-url origin "${FORGEJO_URL}/teleo/teleo-codex.git" 2>/dev/null || true
|
|
git checkout main >> "$LOG" 2>&1
|
|
git pull --rebase >> "$LOG" 2>&1 || { git rebase --abort 2>/dev/null; git reset --hard origin/main >> "$LOG" 2>&1; }
|
|
|
|
# Create branch
|
|
git branch -D "$BRANCH" 2>/dev/null || true
|
|
git checkout -b "$BRANCH" >> "$LOG" 2>&1
|
|
|
|
# Read the brief
|
|
BRIEF=$(cat "$BRIEF_FILE")
|
|
|
|
RESEARCH_PROMPT="You are Vida, a Teleo knowledge base agent specializing in health and human flourishing.
|
|
|
|
## Your Task: Directed Research Session
|
|
|
|
You have a SPECIFIC research brief from the collective. This is not self-directed — follow the brief.
|
|
|
|
### Step 1: Orient (5 min)
|
|
Read these files:
|
|
- agents/vida/identity.md
|
|
- agents/vida/beliefs.md
|
|
- agents/vida/reasoning.md
|
|
- domains/health/_map.md
|
|
|
|
### Step 2: Read Your Research Brief
|
|
|
|
${BRIEF}
|
|
|
|
### Step 3: Research via Web (75 min)
|
|
|
|
For each track, use the WebSearch and WebFetch tools to find the specific sources listed in the brief. Archive everything substantive.
|
|
|
|
**Search strategy:**
|
|
- Start with the named sources (MedPAC, KFF, Commonwealth Fund, etc.)
|
|
- Follow citations to primary data
|
|
- Look for recent (2024-2026) analysis that synthesizes historical data
|
|
- Don't just find one article per question — find the BEST source per question
|
|
|
|
For each source found, create an archive file at:
|
|
inbox/archive/YYYY-MM-DD-{author-or-org}-{brief-slug}.md
|
|
|
|
Use this frontmatter:
|
|
---
|
|
type: source
|
|
title: \"Descriptive title\"
|
|
author: \"Author or Organization\"
|
|
url: https://original-url
|
|
date: YYYY-MM-DD
|
|
domain: health
|
|
secondary_domains: []
|
|
format: report | paper | article | data
|
|
status: unprocessed
|
|
priority: high | medium | low
|
|
tags: [topic1, topic2]
|
|
---
|
|
|
|
## Content
|
|
[Key excerpts, data points, findings — enough for an extractor to work with]
|
|
|
|
## Agent Notes
|
|
**Why this matters:** [1-2 sentences connecting to beliefs]
|
|
**What surprised me:** [Anything unexpected]
|
|
**KB connections:** [Which existing health claims relate?]
|
|
**Extraction hints:** [What claims should the extractor focus on?]
|
|
|
|
## Curator Notes
|
|
PRIMARY CONNECTION: [existing claim this most relates to]
|
|
WHY ARCHIVED: [what gap this fills]
|
|
EXTRACTION HINT: [scope the extractor's attention]
|
|
|
|
### Step 3 Rules:
|
|
- Archive EVERYTHING substantive — do NOT extract claims yourself
|
|
- Set all sources to status: unprocessed
|
|
- Aim for 15-25 source archives across the three tracks
|
|
- Prioritize Track 1 (MA history) — that's the anchor
|
|
- Check inbox/archive/ for existing sources before creating duplicates
|
|
|
|
### Step 4: Write Research Musing (5 min)
|
|
Write to agents/vida/musings/research-ma-senior-care-${DATE}.md:
|
|
- What you found across the three tracks
|
|
- Key surprises or gaps
|
|
- Follow-up directions for next session
|
|
- Which of your beliefs got stronger or weaker
|
|
|
|
### Step 5: Update Research Journal (3 min)
|
|
Append to agents/vida/research-journal.md (create if needed):
|
|
## Session ${DATE} — Medicare Advantage & Senior Care
|
|
**Question:** [primary research question]
|
|
**Key finding:** [most important thing learned]
|
|
**Confidence shift:** [belief updates]
|
|
|
|
### Step 6: Stop
|
|
When done archiving and writing notes, STOP. Do not commit or push."
|
|
|
|
log "Starting Claude Opus session..."
|
|
timeout 5400 "$CLAUDE_BIN" -p "$RESEARCH_PROMPT" \
|
|
--allowedTools 'Read,Write,Edit,Glob,Grep,WebSearch,WebFetch' \
|
|
--model "$MODEL" \
|
|
--permission-mode bypassPermissions \
|
|
>> "$LOG" 2>&1 || {
|
|
log "WARN: Research session failed or timed out"
|
|
# Still try to commit whatever was produced
|
|
}
|
|
|
|
log "Claude session complete"
|
|
|
|
# Check for changes
|
|
CHANGED_FILES=$(git status --porcelain)
|
|
if [ -z "$CHANGED_FILES" ]; then
|
|
log "No sources archived"
|
|
git checkout main >> "$LOG" 2>&1
|
|
exit 0
|
|
fi
|
|
|
|
# Stage and commit
|
|
git add inbox/archive/ agents/vida/musings/ agents/vida/research-journal.md 2>/dev/null || true
|
|
|
|
if git diff --cached --quiet; then
|
|
log "No valid changes to commit"
|
|
git checkout main >> "$LOG" 2>&1
|
|
exit 0
|
|
fi
|
|
|
|
SOURCE_COUNT=$(git diff --cached --name-only | grep -c "^inbox/archive/" || echo "0")
|
|
git commit -m "vida: directed research — MA, senior care, international comparisons
|
|
|
|
- ${SOURCE_COUNT} sources archived across 3 tracks
|
|
- Track 1: Medicare Advantage history & structure
|
|
- Track 2: Senior care infrastructure
|
|
- Track 3: International health system comparisons
|
|
|
|
Pentagon-Agent: Vida <HEADLESS>" >> "$LOG" 2>&1
|
|
|
|
git push -u origin "$BRANCH" --force >> "$LOG" 2>&1
|
|
log "Pushed $BRANCH"
|
|
|
|
# Open PR
|
|
EXISTING_PR=$(curl -s "${FORGEJO_URL}/api/v1/repos/teleo/teleo-codex/pulls?state=open" \
|
|
-H "Authorization: token $AGENT_TOKEN" \
|
|
| jq -r ".[] | select(.head.ref == \"$BRANCH\") | .number" 2>/dev/null)
|
|
|
|
if [ -n "$EXISTING_PR" ]; then
|
|
log "PR already exists (#$EXISTING_PR)"
|
|
else
|
|
PR_JSON=$(jq -n \
|
|
--arg title "vida: directed research — Medicare Advantage, senior care, international comparisons" \
|
|
--arg body "## Directed Research Session
|
|
|
|
Three-track investigation commissioned by Cory:
|
|
|
|
**Track 1:** Medicare Advantage — full history from 1965 to present, risk adjustment, market structure, vertical integration
|
|
**Track 2:** Senior care infrastructure — home health, PACE, caregiver crisis, aging demographics
|
|
**Track 3:** International comparisons — Commonwealth Fund, Singapore, Costa Rica, NHS, Japan LTCI
|
|
|
|
Sources archived for extraction by the claim pipeline." \
|
|
--arg base "main" \
|
|
--arg head "$BRANCH" \
|
|
'{title: $title, body: $body, base: $base, head: $head}')
|
|
|
|
curl -s -X POST "${FORGEJO_URL}/api/v1/repos/teleo/teleo-codex/pulls" \
|
|
-H "Authorization: token $AGENT_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$PR_JSON" >> "$LOG" 2>&1
|
|
log "PR opened"
|
|
fi
|
|
|
|
git checkout main >> "$LOG" 2>&1
|
|
log "=== Directed research session complete ==="
|