Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Commit History
-
[codex] Harden agent prompt guidance (#331)
Unverified signature* Harden agent prompt guidance Co-authored-by: OpenAI Codex <codex@openai.com> * Handle streaming LLM read timeouts Co-authored-by: OpenAI Codex <codex@openai.com> * Address autonomous prompt review feedback Co-authored-by: OpenAI Codex <codex@openai.com> * Address prompt review comments Co-authored-by: OpenAI Codex <codex@openai.com> * Address reviewer feedback on prompt guidance Co-authored-by: OpenAI Codex <codex@openai.com> * Stop activation from resetting usage windows Co-authored-by: OpenAI Codex <codex@openai.com> * Harden ML dependency freshness guidance Co-authored-by: OpenAI Codex <codex@openai.com> * Constrain kernels dependency guidance Co-authored-by: OpenAI Codex <codex@openai.com> * Exclude T4 for flash attention kernels Co-authored-by: OpenAI Codex <codex@openai.com> * Use shell-safe kernels dependency spec Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>ece0775
-
[codex] Update hosted web model defaults (#328)
Unverified signature* Update hosted web model defaults Co-authored-by: OpenAI Codex <codex@openai.com> * Pin hosted web models to Novita Co-authored-by: OpenAI Codex <codex@openai.com> * Use GLM as the free web default Co-authored-by: OpenAI Codex <codex@openai.com> * Use plan-aware model for LLM health check Co-authored-by: OpenAI Codex <codex@openai.com> * Refresh Kimi test fixtures Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>433a22b
-
Remove ~900 lines of dead code across agent, backend, and frontend (#318)
Unverified signature* Remove dead code across agent, backend, and frontend A vulture/knip audit with manual repo-wide verification found ~900 lines of dead code: - Delete agent/tools/private_hf_repo_tools.py (650 lines): disabled when hf_repo_files/hf_repo_git replaced it, never imported since. - Drop orphaned functions, constants, and type aliases across agent/ and backend/ (record_jobs_access_blocked, last_fetch_error, update_local_save_status, verify_session_access, OperationType aliases, OpType.INTERRUPT in both enums, etc.). - Trim unused Sandbox client surface (pause/restart/to_dict/ tool_definitions and unused constants); keep Sandbox.connect, which the live auth integration test uses. - Remove production code only its own tests kept alive: _needs_approval (tests retargeted to _base_needs_approval / production path), fetch_hf_user_plan, _cleanup_user_orphan_sandboxes (superseded by scripts/sweep_orphan_sandboxes.py), DEFAULT_MODEL_ID alias. - Drop unused boto3 dependency (still …7943555 -
Instrument dataset usage and billing analytics (#316)
Unverified signature* Instrument session usage analytics Add durable usage_metrics snapshots, backend HF billing refreshes, and shared dataset row usage columns. Co-authored-by: OpenAI Codex <codex@openai.com> * Address usage billing review feedback Timebox billing refreshes, keep user-facing saves fire-and-forget, and share sandbox lifecycle aggregation semantics. Co-authored-by: OpenAI Codex <codex@openai.com> * Simplify HF Jobs usage label Display HF Jobs without the estimated qualifier while preserving fallback usage logic. Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>4ecc3bd -
Enforce YOLO cap across session usage (#313)
Unverified signature* Enforce YOLO cap across session usage Co-authored-by: OpenAI Codex <codex@openai.com> * Address YOLO budget review feedback Co-authored-by: OpenAI Codex <codex@openai.com> * Switch YOLO LLM cap checks to post-call warnings Co-authored-by: OpenAI Codex <codex@openai.com> * Improve YOLO cap reached CTA Co-authored-by: OpenAI Codex <codex@openai.com> * Fix YOLO blocked approval flow Show cap extension controls for pre-execution budget blocks and preserve approved tool parts during approval continuation streams. Co-authored-by: OpenAI Codex <codex@openai.com> * Sync usage meter with YOLO ledger Co-authored-by: OpenAI Codex <codex@openai.com> * Fix YOLO usage accounting drift Co-authored-by: OpenAI Codex <codex@openai.com> * Emit YOLO updates for observed spend Co-authored-by: OpenAI Codex <codex@openai.com> * Handle YOLO updates in active chat stream Co-authored-by: OpenAI Codex <codex@openai.com> * Reconcile YOLO ledger from usage fetches Co-authored-by: OpenAI Codex…d76b37c -
Use session billing endpoint for inference usage (#314)
Unverified signature* Use session billing endpoint for inference usage Replace current-session inference billing estimates with the Hugging Face session usage endpoint and ensure HF Router requests carry session IDs across providers. Co-authored-by: OpenAI Codex <codex@openai.com> * Rotate inference billing session IDs Co-authored-by: OpenAI Codex <codex@openai.com> * Address session billing review feedback Co-authored-by: OpenAI Codex <codex@openai.com> * Send Router billing session ID header Co-authored-by: OpenAI Codex <codex@openai.com> * Fix duplicate streamed assistant text Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>9e28f0f
-
Add sandbox costs to usage meter (#311)
Unverified signature* Add sandbox costs to usage meter Co-authored-by: OpenAI Codex <codex@openai.com> * Remove usage rollup buckets Co-authored-by: OpenAI Codex <codex@openai.com> * Remove obsolete usage rollup assertions Co-authored-by: OpenAI Codex <codex@openai.com> * Remove unused usage window aggregation Co-authored-by: OpenAI Codex <codex@openai.com> * Update usage event sort test Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>1b98491
-
Add session usage threshold approvals (#310)
Unverified signature* Add session usage threshold approvals Co-authored-by: OpenAI Codex <codex@openai.com> * Address usage threshold review feedback Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>18716c3 -
Add plan-aware CLI billing CTA (#309)
Unverified signature* Add plan-aware CLI billing CTA Co-authored-by: OpenAI Codex <codex@openai.com> * Address billing CTA review feedback Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>ebc9798
-
Rename idle reaper timeout to minutes (#305)
Unverified signatureCo-authored-by: OpenAI Codex <codex@openai.com>c7f69d4
-
Reset usage billing window on session activation (#296)
Unverified signature* Reset usage billing window on session activation Co-authored-by: OpenAI Codex <codex@openai.com> * Avoid resetting usage on browser refresh Co-authored-by: OpenAI Codex <codex@openai.com> * Use billing baselines for session usage resets Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>1a8fb0c
-
Implement user-billed model policy (#289)
Unverified signature* Implement user-billed model policy - bill hosted inference to user tokens and remove subsidy quota state - switch web and CLI defaults and remove Sonnet from model lists - add plan-aware inference credit CTAs Co-authored-by: OpenAI Codex <codex@openai.com> * Recommend Opus in model picker Co-authored-by: OpenAI Codex <codex@openai.com> * Remove minimum plan from model config Co-authored-by: OpenAI Codex <codex@openai.com> * Link message failures to Space discussions Co-authored-by: OpenAI Codex <codex@openai.com> * Remove compatibility quota endpoint Co-authored-by: OpenAI Codex <codex@openai.com> * Remove obsolete bill_to_user argument Co-authored-by: OpenAI Codex <codex@openai.com> * Remove model tier metadata Co-authored-by: OpenAI Codex <codex@openai.com> * Remove model picker provider subtitles Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>ded9881
-
Enforce premium quota across sessions daily (#287)
Unverified signatureCo-authored-by: OpenAI Codex <codex@openai.com>cbf5d33
-
Route LLM inference through HF Router (#282)
Unverified signature* Route LLM inference through HF Router Co-authored-by: OpenAI Codex <codex@openai.com> * Address HF router PR review Co-authored-by: OpenAI Codex <codex@openai.com> * Address router cleanup review Remove no-op prompt caching and reasoning replay paths, genericize router model handling, and update docs/tests for HF Router-only setup. Co-authored-by: OpenAI Codex <codex@openai.com> * Fix READEM --------- Co-authored-by: OpenAI Codex <codex@openai.com>437a804
-
Enable FAL endpoint to lift limits (#278)
Unverified signature* Bill premium models through the HF router on the user's HF account Route Claude Opus 4.6 and GPT-5.5 off Bedrock/native APIs onto the HF Inference Router (huggingface/anthropic/claude-opus-4.6:fal-ai and huggingface/openai/gpt-5.5:fal-ai). The same daily allowance as before (free=1, pro=20) stays company-subsidized via INFERENCE_TOKEN; once a user is past it, the session's premium_user_billed flag flips and the call bills the user's own HF OAuth token (no X-HF-Bill-To) instead of returning the old 429 cap. - llm_params: bill_to_user routes premium (anthropic/ + openai/) router calls to the user's token; free models stay subsidized. - premium_user_billed is persisted/restored and threaded through the main loop, context compaction, the research sub-agent (now downgraded to router Sonnet 4.6), and effort probes. - Frontend: per-session BillingBanner (dismissible daily); remove the now unreachable ClaudeCapDialog + 429 quota-exhausted plumbing; the model chip shows "Billed" p…c9a83ae -
Reclaim idle sessions to fix session-capacity overshoot (#277)
Unverified signature* Reclaim idle sessions and fix session-capacity overshoot Users hit "Server is at capacity (379/200)" and couldn't create sessions: idle/forgotten runtimes never left the global pool, the frontend reactivated every historical session on load, and concurrent creates could overshoot the cap. Backend: - Idle-session reaper (2h): releases the sandbox + RAM of inactive sessions and evicts them from the live pool, leaving them resumable from Mongo (persisted resumable, never "ended"). Teardown uses asyncio.wait so a shutdown cancel can't be swallowed; submit() enqueues under the lock and refuses sessions being reaped. Reaping is skipped when persistence is disabled and aborts if the resumable snapshot (incl. the message bulk_write, via save_snapshot strict mode) can't be durably written. - Global create-slot reservation closes the check-then-create race that let concurrent creates exceed MAX_SESSIONS. - last_active_at drives the reaper, stamped on genuine activity only. - Re…6cf406a
-
Create Hub artifact collections lazily (#245)
Unverified signature* Create Hub artifact collections lazily Co-authored-by: OpenAI Codex <codex@openai.com> * Cache lazy Hub collection slugs in child hooks Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>60474c1
-
Add ML Intern Hub artifact metadata (#225)
Unverified signature* Add ML Intern Hub artifact metadata Co-authored-by: OpenAI Codex <codex@openai.com> * Extend Hub artifact hooks to sandbox bash Co-authored-by: OpenAI Codex <codex@openai.com> * Create Hub artifact collections at session start Co-authored-by: OpenAI Codex <codex@openai.com> * Address Hub artifact PR review comments Co-authored-by: OpenAI Codex <codex@openai.com> * Respect Hub collection title limits Co-authored-by: OpenAI Codex <codex@openai.com> * Shorten collection session UUID fragments Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>4fc6e96
-
Add CI for tests and Ruff (#217)
Unverified signature* Add CI for tests and Ruff Co-authored-by: OpenAI Codex <codex@openai.com> * Enforce Ruff formatting in CI Co-authored-by: OpenAI Codex <codex@openai.com> * Document Ruff pre-commit checks Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>754345f -
Preserve HF token across restored sessions (#218)
Unverified signature* Preserve HF token across restored sessions Carry the authenticated HF token internally through request dependencies without exposing it from auth/me, and retry CPU sandbox preload when a session previously failed only because the token was missing. Co-authored-by: OpenAI Codex <codex@openai.com> * Address HF token restore review feedback Only restart CPU sandbox preload after the specific missing-token failure and remove the dead user hf_token fallback. Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>5de6e8f -
Retry sandbox hardware requests (#210)
Unverified signature* Retry sandbox hardware requests Retry transient Hub errors when requesting hardware for a newly duplicated private sandbox Space. This covers the deployed OAuth path where duplicate succeeds but /hardware can briefly return 401/Repository Not Found before the private Space is manageable. Co-authored-by: OpenAI Codex <codex@openai.com> * Address sandbox retry review feedback Narrow transient hardware retry handling to 401 and 404, add coverage for timeout propagation, and fix top-level spacing. Co-authored-by: OpenAI Codex <codex@openai.com> * Ensure auto CPU sandboxes are cleaned up Persist sandbox identity on session records, clean stale sandboxes during restore, skip preloading when delete/teardown restores a session, and clean live sandboxes during backend shutdown. Add a scheduled orphan sweeper workflow as a backstop. Co-authored-by: OpenAI Codex <codex@openai.com> * Remove scheduled sandbox sweeper Delete the GitHub Actions cron workflow for orphan sandbox cleanup and…7636865
-
Auto-start CPU sandboxes for sessions (#200)
Unverified signature* Auto-start CPU sandboxes for sessions Co-authored-by: Codex <codex@openai.com> * Retry sandbox runtime visibility checks Co-authored-by: Codex <codex@openai.com> * Stabilize auto CPU sandbox creation Co-authored-by: OpenAI Codex <codex@openai.com> * Address sandbox PR review comments Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>8615c28 -
Add session YOLO auto-approval budget (#201)
Unverified signature* Add session YOLO auto-approval budget Co-authored-by: Codex <codex@openai.com> * Address YOLO approval review feedback Co-authored-by: Codex <codex@openai.com> --------- Co-authored-by: Codex <codex@openai.com>77324b8 -
Use HF username for personal trace uploads (#199)
Unverified signature* Use HF username for personal trace uploads Co-authored-by: OpenAI Codex <codex@openai.com> * Remove redundant HF token branch Co-authored-by: OpenAI Codex <codex@openai.com> --------- Co-authored-by: OpenAI Codex <codex@openai.com>71e1892
-
feat(telemetry): track 5 untracked Bedrock call sites for full cost attribution (#179)
Guillaume SalouUnverified signature* feat(telemetry): track 5 untracked Bedrock call sites for full cost attribution Cost Explorer ($78,738 over 6 days) vs the session dataset's total_cost_usd (~$354/day attributed) showed the dataset captures only ~33% of real Bedrock spend. Root cause: out of 9 acompletion() call sites, only 2 (in agent_loop.py) emit the llm_call event that total_cost_usd sums. This wires telemetry into the 5 Bedrock-billing call sites that were flying blind, with a `kind` tag on each call so analytics can split spend by category: - research_tool.py × 3 → kind="research" (sub-agent loop) - context_manager.py → kind="compaction" (history summary) - effort_probe.py → kind="effort_probe" (cascade walk) Plus a fourth tag for the session-restore summary path (session_manager.py → kind="restore"). Plumbing changes: - telemetry.record_llm_call now accepts kind="..." (default "main" preserves existing behavior). - summarize_messages() and ContextManager.compact() take optional ses…7867a7a
-
Track Pro conversions + credits top-up; emit user_id + new KPIs (#174)
Aksel Joonas ReediUnverified signatureAdds two telemetry events the dashboard needs to answer "how many users converted to Pro?" and "how many came back from a billing block?": - pro_conversion: per-user Pro state lives in a new Mongo `pro_users` collection. mark_pro_seen upserts on every authenticated request and uses an atomic find_one_and_update to fire at-most-once when a user first appears as Pro after having been seen as non-Pro. Wired through session_manager.create_session via the existing `is_pro` signal from /auth. - credits_topped_up: fires from jobs_tool when an hf_job submit succeeds in a session that previously hit a billing-required tool_state_change. Guarded against re-firing within a session. build_kpis aggregates both as plain count columns. CLI/local users with no Mongo silently skip via the NoopSessionStore stub.2715896 -
Persist Space sessions in MongoDB (#170)
Aksel Joonas ReediUnverified signature* Persist Space sessions across backend restarts The hosted Space lost active conversations because sessions, approval state, event streams, and Claude quotas only lived in process memory. This adds a shared optional Mongo store for frontend sessions while keeping local and CLI runs on the no-op/local path when Mongo is absent. Constraint: Space deployment needs durable state without making PyPI/local CLI users configure Mongo. Constraint: Frontend deletes must hide sessions with a visibility tag, not erase traces needed for recovery or SFT export. Rejected: Restore every active session at startup | large user counts would create a thundering herd after deploys. Rejected: Store one giant session document | Mongo document limits make per-message snapshot docs safer. Confidence: medium Scope-risk: broad Directive: Keep session_messages as compactable runtime snapshots and session_trace_messages/session_events as append-only raw traces; do not collapse them into one collection wit…d9d9785 -
fix(sandbox): retry cleanup on transient failures + add backstop sweeper (#163)
Guillaume SalouUnverified signature* fix(sandbox): retry delete on transient failures + add backstop sweeper The agent creates a sandbox Space per session (template duplicated from burtenshaw/sandbox into the user's account). A scan on 2026-04-27 found 2,310 orphan sandbox-* Spaces — every sandbox ever created was still around. Two failure modes were causing the leak: 1. The cleanup in `_run_session.finally` doesn't fire if the pod is killed (OOM, deploy rollout, pre-emption) or if the WebSocket drops without a /shutdown. 2. When `sandbox.delete` itself failed (HF API 5xx, transient network blip, rate-limit), the previous code logged a warning and moved on. No retry, no recovery — the Space lived forever. This PR addresses both: - `_cleanup_sandbox` now retries 3× with exponential backoff (1s, 2s). Closes the transient-failure path. - New `scripts/sweep_orphan_sandboxes.py` is a standalone sweeper that finds sandbox-* forks of burtenshaw/sandbox older than N days and deletes them. Designed to run …1d50c78
-
Add Slack gateway (#116)
Unverified signature* Add messaging gateway and notify tool Co-authored-by: OpenAI Codex <codex@openai.com> * Handle Bedrock streaming permission denials Co-authored-by: OpenAI Codex <codex@openai.com> * Revert "Handle Bedrock streaming permission denials" Co-authored-by: OpenAI Codex <codex@openai.com> * Add automatic completion notifications Co-authored-by: OpenAI Codex <codex@openai.com> * Auto-attach CLI notification destinations Co-authored-by: OpenAI Codex <codex@openai.com> * Defer CLI completion notifications until render Co-authored-by: OpenAI Codex <codex@openai.com> * Increase completion notification summary cap Co-authored-by: OpenAI Codex <codex@openai.com> * Add Slack user notification defaults Co-authored-by: Codex <codex@openai.com> * Increase Slack turn completion summary limit Co-authored-by: Codex <codex@openai.com> * Remove legacy auto notification event upgrade Co-authored-by: Codex <codex@openai.com> * Require session config instead of hard-coded model fallback C…6155b26 -
feat(session): include user_id and total_cost_usd in trajectory dump (#136)
Guillaume SalouUnverified signatureAdd user_id (HF username from OAuth) to the Session object and propagate it from the SessionManager. Surface it in the trajectory JSON written by save_trajectory_local() and uploaded to the session dataset, alongside a total_cost_usd aggregate summed from existing llm_call events. This unblocks per-user cost attribution from the session dataset alone — today the dataset has session_id but no user binding, so 569Xlspend cannot be tied back to an HF account without correlating timestamps from Hub access logs (noisy, breaks for users with long-lived browser tabs). Cost data is already collected per call by agent.core.telemetry; we just propagate user identity and expose a rolled-up total.645964c
-
Fix CLI rendering corruption and split CLI/frontend model defaults (#121)
Aksel Joonas ReediUnverified signature* Stabilize CLI rendering and make surface defaults explicit The interactive CLI was interleaving live sub-agent redraws with streamed markdown output, which corrupted ANSI rendering and leaked raw control sequences into the terminal. The CLI and web app also shared one default model config even though they need different Anthropic routing defaults. Constraint: CLI default must use direct Anthropic credentials while web sessions must default to Bedrock Anthropic Constraint: Interactive terminal output must remain readable while sub-agent progress is live Rejected: Single shared config file with runtime overrides | keeps ownership of defaults implicit across surfaces Rejected: Keep background redraw ticker | concurrent terminal writers still corrupt streamed output Confidence: high Scope-risk: moderate Reversibility: clean Directive: Keep CLI and frontend default models in separate config files unless both surfaces intentionally converge again Tested: python -m compileall agent backen…3eec386
-
feat(observability)
Aksel Joonas ReediUnverified signature2a2e170
-
feat(quota): daily Opus cap + HF-org gate + cap dialog (#72)
Aksel Joonas ReediUnverified signature540437a
-
Restore expired sessions via summary-based catch-up (#52)
Aksel Joonas ReediUnverified signatureWhen the backend loses a session (typically: HF Space restarted), the chat now shows a small inline banner instead of silently erroring: Where were we? Let me skim the conversation so far and pick up right where we left off — or we can start something new. [ Catch me up ] [ Start fresh ] Flow, in one pass: * Frontend stashes the raw backend messages in localStorage on every mount-hydrate and turn_complete. When the backend 404s for the session id, the SSE transport and the mount effect both fire onSessionDead → the session is flagged `expired` in sessionStore; the sidebar marks it "needs a catch-up". * Catch me up → POST /api/session/restore-summary with the cached messages. Backend creates a fresh session, runs the existing summarizer (factored into summarize_messages() and shared with in-session compaction) with a restore-specific prompt that preserves the tool-call trail, and seeds the new session with that summary wrapped in a [SYS…962191f -
Scope model selection per session instead of globally
Sessions now clone the config on creation, so switching model in one tab only affects that tab. SessionInfo carries a `model` field the selector reads on session change; writes go to a new POST /api/session/{id}/model endpoint. The global /api/config/model route still controls the default for new sessions. Unblocks running Claude in one chat and GLM 5.1 in another concurrently.bf564b6
-
Raise MAX_SESSIONS to 200 for 8 vCPU / 32 GB Space
feadff1
-
Add message edit and regenerate from any point in conversation
Backend: add truncate_to_user_message() on ContextManager, POST /api/truncate/{session_id} endpoint, and session_manager.truncate() helper to slice conversation history to before a given user message. Frontend: add editAndRegenerate callback in useAgentChat that truncates backend + frontend messages then resubmits via existing chat flow. UserMessage gains an inline edit mode with pencil icon on hover, TextField for editing, Enter/Escape to confirm/cancel.0611031
-
feat: SSE keepalive, reconnection, and is_processing flag
Prevents SSE streams from being killed by reverse proxies during long operations and lets the frontend recover gracefully after sleep/disconnect. Backend: - SSE keepalive pings every 15s via `: keepalive` comments - New GET /api/events/{session_id} subscribe-only endpoint for reconnection - is_processing flag on AgentSession, exposed in session info API Frontend: - reconnectToStream() re-attaches to a running session via /api/events - Visibility change re-hydrates ALL sessions from backend on wake - Background sessions also re-sync (removed isActive guard on listener) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d7f2a7c
-
replace websocket transport with SSE
564aab6
-
sync: org onboarding, model updates, sandbox cleanup, prompt fixes
5af3ab5 -
fix: buffer websocket events during disconnects and replay on reconnect
ca13fee
-
fix: inject OAuth token into MCP server headers at runtime
ToolRouter now accepts hf_token and injects Authorization header into MCP server configs per-session. Config no longer needs HF_TOKEN at load time — auth is added when the session's ToolRouter is created.30aa6c1 -
fix: route all HF token usage through session.hf_token from OAuth
Remove all os.environ.get("HF_TOKEN") fallbacks. Token now flows exclusively through OAuth -> session.hf_token -> tools. - Pass hf_token through Session -> ContextManager -> _get_hf_username - Add session param to docs, repo_files, repo_git handlers - Jobs use HF_ADMIN_TOKEN for creation, user token for job secrets - Remove HF_TOKEN env setup from backend/main.py - Remove module-level username cache (broken for multi-user)33f29a8 -
feat: per-session WebSocket architecture for parallel chat sessions
Each session now owns its own useAgentChat + WebSocket transport instead of sharing a single instance. Background sessions process all events (including approval_required) continuously, fixing the bug where approvals from non-active sessions were silently dropped. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>27da720
-
feat: implement cooperative agent cancellation with cancel button
ecbfd3c
-
feat: merge HF Space improvements
79b2fcc
-
format
1181d83 -
functioning frontend and docker
ba93c86 -
Fix config path to use absolute path from project root
The config was using a relative path which failed when running from the backend directory. Now uses Path(__file__).parent.parent to get project root and build absolute path to configs/main_agent_config.json. Verified: health check returns 200 OK Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>4b261d1 -
Fix session_manager imports - define Operation/Submission locally
Operation and Submission dataclasses are defined in agent/main.py, not exported from agent.core.session. Define them locally in session_manager.py to match the expected structure. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>796d977