Commit graph

2 commits

Author SHA1 Message Date
Parfii-bot
b346250ad1 chore(sleep-tg): minor prompt tightening (compress reasoning output)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 19:25:33 +08:00
Parfii-bot
d3955521d1 feat(sleep): cloud-agent reasoning + Telegram delivery to whitelist
User pushback: "Агент должен делать осмысленные выводы! С утра должен
быть отчет и пусть он приходит куда-то! На телеграмм, например, лучше
сразу после фазы сна, бот есть"

Wires the @KeiSeiBot Telegram bot as the delivery channel for nightly
Phase B reports, with a Claude Sonnet 4.6 reasoning step in front to
distil the multi-section markdown into a single actionable brief.

NEW — `hooks/sleep-report-tg.sh` (130 LOC POSIX bash)

Pipeline:
  1. Source ~/.claude/secrets/.env  (umbrella SSoT — RULE 0.8)
  2. POST report markdown to Claude API messages endpoint with a
     system prompt mandating: TL;DR + numbers + 3-5 actionable
     findings + rule-candidates if any cross-session pattern ≥3×.
     Sonnet 4.6, max_tokens=1500, 120s timeout.
  3. Send distilled summary via Telegram sendMessage to whitelisted
     chat_id (defaults to TELEGRAM_ALLOWED_CHAT_ID env, falls back
     to 86059912).
  4. Cap message at 3900 chars (TG limit 4096).
  5. Fallback if Markdown parse_mode fails (orphan * / [ in body) →
     retry without parse_mode so the user still sees the report.
  6. Defensive on every step: missing API key → send raw excerpt;
     missing curl/jq → log + exit 0; HTTP failure → log + exit 0.
  7. Bypass: SLEEP_REPORT_TG_BYPASS=1.

WIRE — `hooks/phase-b-rem.sh`
  Step 7 (new) calls sleep-report-tg.sh after the existing commit/push
  step. Failure of TG delivery never affects Phase B's exit code —
  the local report + memory-repo push remain the source-of-truth;
  TG is convenience.

CONFIG (already done outside this commit, documented for completeness)
  - ~/.claude/secrets/.env now has TELEGRAM_BOT_TOKEN +
    TELEGRAM_ALLOWED_CHAT_ID (single-user whitelist 86059912).
  - ~/.claude/tg-webhook.py whitelist locked to {86059912}; group
    chat (-1003758632751) and partner (10954083) removed per
    user request "сделай боту только один вайт адрес". Blocked
    senders land in /var/log/tg-webhook/blocked.jsonl, no auto-reply.
  - ~/.claude/tg-contacts.json shrunk from 3 contacts to 1.

Smoke verified: today's sleep-2026-05-02.md → cloud agent emitted
TL;DR ("Opus burned $1239 across 117 runs with 100% unknown outcomes")
+ 5 findings + 3 rule-candidates → delivered to chat_id 86059912 as
msg_id 1129 (HTTP 200). Cost: 3955 in + 897 out tokens on Sonnet
≈ $0.025/run. At 1 run/night that is ~$0.75/month for full reasoning
on every nightly report.

What this does NOT yet do:
  - No retry on Telegram rate-limit (429). Single nightly call
    is well below the 30/sec limit, but if the system ever bursts
    multiple reports it would lose them.
  - No multi-day digest mode (each run is independent; future:
    weekly Sunday recap aggregating 7 reports).
  - Cloud agent prompt is hard-coded inline; future: extract to
    a path-atom-style block (post-2026-05-02 substrate work).

=== STATUS-TRUTH MARKER ===
shipped: functional
stubs: 0
cargo-check: NOT-RUN  (pure shell)
behaviour-verified: yes
follow-up-required:
  - Phase B prompt template extracted to atom (low priority)
  - Weekly recap mode (Sunday)
  - 429 rate-limit retry (defensive)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 04:38:52 +08:00