fix(dashboard): use curated AI/dev burn instead of full card total - #10
Open
kdwhpgxgrc-spec wants to merge 110 commits into
Open
fix(dashboard): use curated AI/dev burn instead of full card total#10kdwhpgxgrc-spec wants to merge 110 commits into
kdwhpgxgrc-spec wants to merge 110 commits into
Conversation
…pabase data - FastAPI server with 11 endpoints (pipeline, kpis, expenses, tasks, debt, skills) - Dark glass frontend: net banner, 4 KPIs, school pipeline, expenses, tasks, debt tracker - Apple Card CSV parser for expense auto-update - Supabase client for live school/trial data - Pipeline check and trial follow-up skill modals - Launch: bash dashboard/launch.sh → http://localhost:8080 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rd data - Parser now sorts by filename date (not mtime) — April correctly beats March - Split Claude Max (manual $130) from Anthropic API (CSV-tracked usage) - Added: ElevenLabs $5.27, OpenRouter $34.14, n8n Cloud $25.58, Fal.ai $10.66 - Real April burn: $373/mo (was seeded at $249) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Machine, Gravity Claw Bridge
Clones the visualization layer from Jack Roberts' "Claude Code Agentic OS"
video into the existing FastAPI dashboard. Five new tabs under "OS Layer"
in the sidebar; hash routing (#pillars, #memory, #roi, #dreams, #bridge)
makes views deep-linkable.
Features:
- Six Pillars: 6 cards (Models / Plans / Memory / Skills / Knowledge /
Connections) with live status probes (Supabase, Pinecone, Obsidian,
local memory).
- Memory feed: aggregates recent writes from ~/.claude/projects MEMORY.md,
Gravity Claw Obsidian vault, Supabase tables, and Pinecone index.
- ROI panel: monthly AI spend vs value saved (per-skill minutes × hourly
rate), with inefficiency flags (opus-on-cheap-task, never-invoked-skill).
- Dream Machine: overnight analyzer of ~/.claude/projects/**/*.jsonl
transcripts; scores 8 dimensions (repeated tasks, slow workflows, token
waste, memory gaps, skill underuse, tool overuse, cross-tool friction,
knowledge silos) and writes ranked recommendations to data/dreams/.
- Gravity Claw Bridge: two-way HTTP bridge with /api/bridge/{handshake,
query,push,local-test}. Auto-generates BRIDGE_TOKEN into .env on first
boot. Reuses GC's TELEGRAM_BOT_TOKEN for push alerts. install.md guides
pasting bridge prompt into GC's CLAUDE.md.
Scheduling:
- scripts/install_dream_cron.sh installs a launchd agent on macOS
(com.agcoachpro.aios.dream, 02:00 daily) or falls back to crontab.
Launcher:
- "AIOS Dashboard.command" — double-click in Finder to start the server.
No regression: existing /api/pipeline, /api/expenses, /api/tasks,
/api/debt, /api/kpis, /api/skills/pipeline-check unchanged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Reflects that the GC bot runs on Railway and reaches the dashboard via a public tunnel rather than 127.0.0.1. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
https://aios.agcoachos.com replaces ephemeral trycloudflare URL. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…adge /api/kpis returns trial_schools, not trial_count — JS was reading wrong key and rendering "undefined schools in trial". Fixed by using nullish coalescing on trial_schools. Also hide the sidebar Schools badge when trial count is 0 (was rendering a confusing "0" pill next to the label). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…atus Supabase rows use 'trial' but pipeline summary was filtering for 'trialing' — caused trial_count to always be 0 even when 7 trials existed. Now matches either value. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- New scripts/gmail_client.py — InstalledAppFlow OAuth, list_threads, get_thread, send_draft helpers. - New /api/inbox endpoints — status, authorize, list, thread, draft. - New Inbox view: thread list w/ unread dots, search query box, click-to- open modal for thread body. - Sidebar Inbox shows unread count badge. - .gitignore for .gmail-credentials.json + .gmail-token.json (never commit OAuth secrets). Requires Desktop-type OAuth client in a GCP project with Gmail API enabled. Credentials path: dashboard/.gmail-credentials.json. Token auto-generated on first authorize. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ng, and integrate financial/business context documentation.
…w viz - Scoped CSS bumps font sizes ~2x for all OS Layer views (panel titles, pillar cards, feed rows, dream cards, ROI panels). Easier to read. - Added padding-bottom:80px to .view so content no longer gets cut at bottom edge. - New Knowledge Graph radial viz at top of Memory tab: SVG with glow filter, central AIOS hub, source hubs (obsidian / pinecone / supabase / local-memory) in inner ring, leaf nodes for recent items. Hover reveals full summary via title attr. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- New scripts/memory_graph.py: builds nodes + edges from .claude/projects workspaces, memory files, Obsidian decisions, daily sessions, skills, Pinecone vector index. Tags stale files (>30d mtime). - New /api/memory-graph endpoint. - Replaced static SVG diagram with vanilla-JS force-directed simulation (repulsion + spring + center pull). Glowing nodes via SVG filter, curved edges, draggable canvas-style frame. Header shows workspace / file / vector counts; stats card shows decisions, skills, sessions, stale. Legend strip with color-coded categories matching Jack Roberts' OpenClaw memory graph reference. - Bumped OS Layer typography another step (panel titles 24px, pillar members 19px, KPI values 56px, feed rows 18px, dream cards 21px). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Tripled repulsion (1800 → 6000), longer links (110 → 160), softer center pull — nodes spread across canvas instead of clumping. - Removed 600-tick cap; sim now runs perpetually with gentle jitter added after settle for "live" feel. - Workspace labels strip -Users-aaronfamilylivestock- and -Volumes-Samsung-PSSD-T7- prefixes so they show actual project name. - Bumped node label font 13→16 with text-shadow for legibility. - Graph height 640→760. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Every font-size declaration in index.html doubled, with floor of 20px. Dashboard view now matches OS Layer view in readability. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bumped every font-size declaration <15px (9/10/11/12/13/14) up to 15px. Right column was hard to read on default Dashboard view; OS Layer views already at 15+. Now consistent minimum across the whole UI. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matches the "stars in space, interacting when something fires" look from Jack Roberts' reference. - 140 twinkling background stars (animated opacity) for cosmic depth. - Two-layer glow on nodes (inner solid + outer halo with 10px blur). - Edge fire animation: each edge randomly pulses every 100-500 ticks, brightens to its kind color for 40 frames then fades back. Mimics "memory fires" interaction. - Curved edges use perpendicular offset proportional to length — longer arcs for distant nodes. - Sidebar gets overflow-y:auto so bottom tools no longer get cut off. Sidebar fonts dialed to 11-14px (overrides 15px global floor so the nav fits in 240px column). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
K2 hybrid — Karpathy LLM Wiki in vault + Roberts CC-OS dashboard + Herk skills/agents. 8-phase rollout, all 7 sections approved by Bryan during brainstorm. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Self-review caught ambiguous AIS-OS/dreams/ vs dashboard/data/dreams/. Existing path is canonical. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
22 tasks, TDD on Python scripts, codex adversarial review on sensitive ingest pipeline. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
9/9 tests pass — Card dataclass, validate_cards (max 4, dup ids, invalid dims), build_card_json round-trip, write_dream_output, DreamConfig defaults. Dry-run mode confirmed. Overwrites dashboard/data/dreams/2026-05-16.json (expected). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gacy inbox archive 16 wiki pages created across people/, concepts/, sources/, comparisons/, analysis/. All 4 raw files archived to _ingested/. Index, log, hot updated. Lint: 7 issues (5 false-positive [[links]] in prose/code, 1 unassigned domain for inbox placeholder, 0 orphans). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ds vault wiki - Restored stash wip-dashboard-before-three-brain-build - Added 3 dashboard cards: #card-knowledge, #card-hot, #card-dreams (Tasks+Debt row) - Appended loadVaultCards() JS: fetches wiki/index.md, wiki/hot.md, dreams JSON - Added load_vault_wiki_nodes() to memory_graph.py; integrated 17 wiki nodes into build() - Smoke test: 17 vault wiki nodes detected, all categories mapped correctly Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- memory_graph: point GC memory walk at gravity-claw/memory (not hermes-claw) - wizard_detect: check ~/.local/bin and ~/.npm-global/bin so Claude/Codex/Gemini detect - dreams UI: add Promote to skill button, visual state per status, task link after Turn into task - dream_machine: use 60-char snippet in headline instead of useless hash; pass skill_trigger to cards - promote.py: derive slug and SKILL.md trigger from skill_trigger phrase, not hash artifact Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
promote.py now rejects non-repeated-task dims (skill-underuse, slow-workflow, etc) instead of shipping junk-trigger skill stubs. Slug prefers skill_trigger over headline. Dismiss action persists headline to config.snoozed_dream_headlines so dream_machine skips on next run.
Current pull bridge dead — aios.agcoachos.com returns Cloudflare Access 403 to Railway. Spec inverts direction: AIOS cron writes snapshot JSON into hermes-claw/hermes/state/, Hermes reads files instead of HTTP. Survives laptop-offline. Status: proposed, not built.
Implements the push half of decisions/0001. Writes pipeline.json, dreams.json, roi.json, pillars.json, tasks.json, snapshot.meta.json into the hermes-claw repo. --no-commit skips the git commit/push step (used by tests + dev runs). Reuses bridge.snapshot() so payload shape matches the existing pull path. Next: launchd schedule + delete the dead pull plugin once push has been running cleanly for a week.
_fetch_openrouter_account_usage now reads OPENROUTER_API_KEY through _read_env_value so the dashboard finds the key in AIS-OS .env without needing a shell export. New _fetch_openrouter_activity_tokens paginates /api/v1/activity (which requires a sk-or-prov-* provisioning key, separate from the inference key) and aggregates the last 30 days into input/output/billable tokens + cost. The provisioning key is read from OPENROUTER_MANAGEMENT_KEY in the same .env fallback path. Results flow into source_breakdown["openrouter"] so the dashboard's "Source Coverage" panel shows real generation counts, token totals, and cost instead of zeros. When the provisioning key is missing, a data_quality entry surfaces the gap with the dashboard URL. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Two bugs surfaced once a real provisioning key landed in AIS-OS .env: 1. cutoff was offset-aware (datetime.now(timezone.utc)) but the parsed activity row timestamp was offset-naive (no Z suffix in the OpenRouter response), causing 'can\\'t compare offset-naive and offset-aware datetimes'. Naive timestamps now get tzinfo=UTC before the comparison. 2. The activity row uses prompt_tokens / completion_tokens, not the tokens_prompt / tokens_completion names assumed earlier. Token aggregation was returning 0. Generation count also lives in row['requests'] (rows are pre-aggregated per model/day), so the counter now sums that instead of incrementing by 1. End-to-end: 11,245 generations · 100.8M input · 769k output · 101.6M billable · \$81.16 over the last 30d, populated into source_breakdown['openrouter'] so the AIS-OS dashboard's Source Coverage panel now shows OpenRouter alongside Claude Code / Codex. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Self-improvement loop referenced these files but they never existed. Creates them with accurate current state: hc_nlm tools marked fixed (b93308036), lessons backfilled from session history, decision context and rejected ideas extracted from decisions/log.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
NLM re-authenticated 2026-05-24. Frank librarian back to running. Image generation deprioritized — no current need. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- NLM re-authenticated, Frank back to running - FAL_KEY deferred (no current need) - Deleted 3 dormant notebooks (Higgsfield, Pairstart, Cow Lot) - Consolidated 3 AI notebooks into 2 (merged Hermes into "AI Agents & Hermes") - Only nateherkai#5 (Hermes push bridge) remains open Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Hermes push bridge was built and running since 2026-05-23 but decision spec and log still said "proposed". Updated to shipped. All 5 active concerns now resolved. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Burn KPI was showing $1781 (entire Apple Card statement including AFL livestock purchases + personal expenses). Now shows $373 curated AI/dev expenses — the number Bryan actually controls for Ag Coach Pro. Also fixes config.json subscriptions to match actual plans (Claude Max 5x $100, ChatGPT Plus $20, Gemini $21.31). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
achibukz
added a commit
to achibukz/AIS-OS
that referenced
this pull request
Aug 28, 2026
…6 lenses); tasks: Asa STORM run + achiAgy OS-agnostic rename
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
🤖 Generated with Claude Code