haikdc
d7349cce18
[haik]: refactor: rename ws_manager singleton to WS_MANAGER and await_reconnect to await_reconnect across 8 files. Module-level ConnectionManager instance follows P/uppercase constant convention (ws_manager -> WS_MANAGER in ws_manager.py). Cross-module helper _await_reconnect drops leading underscore since browser_agent.py imports it directly. Updated all ~80 call sites in agent_manager.py, agents.py, browser_agent.py, main.py, and ws_manager.py; updated monkeypatch targets in test_browser_agent_loop.py, test_browser_fast_path.py, and test_disconnect_resilience.py. 176 insertions, 176 deletions, no behavioral changes.
2026-06-13 23:51:26 -07:00
haikdc
08eb4b561f
[haik]: refactor: systematize naming conventions across 20+ backend modules. Private module-level vars renamed _foo to P_FOO, private funcs _foo to p_foo, cross-module public funcs drop leading underscores entirely (e.g. _discover_mcp_tools_http -> discover_mcp_tools_http, _load_all -> load_all_tools, _classify_services -> classify_services). Local vars inside functions lose underscores (_backend -> backend_dir, _port -> port). Unnecessary import aliases removed (import json as _json -> import json). Imports reorganized to proper source modules (derive_mcp_config from mcp_config, oauth refresh funcs from oauth_tokens). Added Public comments documenting cross-module API boundaries. Extracted PENDING_OAUTH to oauth_state.py to break circular import. No behavioral changes.
2026-06-13 23:38:39 -07:00
haikdc
87f09e9695
[haik]: refactor naming convention and clean up dead code across backend outputs and service modules. Replace all leading-underscore private names with explicit p_/P_ prefix for module-internal symbols and drop the underscore for cross-module public APIs (load_all, save, load, walk_directory, find_free_port, etc). Rename the runtime module singleton from manager to RUNTIME_MANAGER. Remove unused legacy shims from client.py (submit_event, submit_session_close, record, set_test_sink, set_user_id, update_identity), drop clear() from ring_buffer.py and buffer.py, and remove the VIEW_BUILDER_SKILL backward-compat alias. Switch runtime.py from relative to absolute imports, rename the _d route param to data, and add public-usage comments to clarify cross-module API boundaries
2026-06-13 22:01:17 -07:00
haikdc
fafbe45187
[haik]: refactor backend naming conventions across 14 files: rename module-internal functions from _fn to p_fn, module-level constants from _CONST to P_CONST, and cross-module public functions from _fn to fn (e.g. _load/_save to load/save in dashboards, _pending_oauth to PENDING_OAUTH in oauth_state, _nr to nr in sync, _process to P_PROCESS in process); hoist inline import json to module-level in modes.py; clean up redundant import subprocess alias and unused _aux_base variable; update all import sites in browser_agent, prompt_context, main, sync, and sync_custom
2026-06-13 20:34:25 -07:00
haikdc
f0d3cabc47
[haik]: refactor: standardize backend naming and import structure - strip leading underscores from all internal functions/constants across agents, settings, session, and provider modules in favor of public names or P_ prefix for module-private symbols; replace nine_router/init.py barrel re-exports with direct submodule imports (process, sync, sync_custom, oauth); hoist inline stdlib imports to module level; delete dead openai_passthrough.py GPT-5 proxy and the redundant _save_settings alias
2026-06-13 19:30:34 -07:00
haikdc
8f649eb82c
[haik]: rename _sanitize_server_name to sanitize_mcp_server_name (mcp_config canonical, agent_manager, prompt_context, main, tests, toolLabels comment), add no-underscore-names linter check banning leading-underscore Python names in backend, extract _models.py from classes.py for shared pydantic BaseModel field detection used by both classes and vulture checks, add vulture-ignore inline comment suppression and automatic pydantic field-name whitelisting to vulture.py, remove leaked payload arg from client.py sync, update README with new check docs and inline-ignore usage
2026-06-13 15:15:44 -07:00
haikdc
c8c6117d64
[haik]: remove dead code and modernize test infrastructure: drop unused functions (validate_credentials, get_provider_credentials, submit_state), remove unused imports and parameters across outputs, buffer, client, settings, credentials, service, auth, main, and tools_lib; replace hand-rolled async fakes in browser agent tests with pytest-mock mocker fixture and AsyncMock, switch to SimpleNamespace over ad-hoc test classes, adopt pytest.mark.usefixtures for unused fixture params, and add pytest-mock to dev dependencies
2026-06-13 13:01:11 -07:00
ciregenz
49bd292746
[eric] backend: answer client:ping on /ws/dashboard, the missing pong let the client heartbeat kill the socket every 35s
2026-06-09 12:59:00 -07:00
ciregenz
99ba826be2
[eric] backend: INFO logging visible in dev plus ms-level traces across the fast path
2026-06-05 16:12:32 -07:00
eric
bcb88ebefb
[eric] auth: dev-only /api/dev/token so the split-port frontend can authenticate (404s when packaged)
2026-06-01 11:55:17 -07:00
eric
ecf348f9cb
[eric] fix: autocompact now actually trims the model's history instead of just showing a marker
2026-05-31 18:00:39 -07:00
Eric and Claude Opus 4.7
cf74ada3c2
[eric] auth: generate installation_id at backend startup so first-launch sign-in always has a non-empty install_id; bump 1.1.66
...
- installation_id was created lazily on the first analytics submission; 1.1.64 removed the workflows startup poller, which was the early backend ping that used to generate it, so on a clean install the sign-in window built its google/email oauth url with an empty install_id and the cloud rejected the start
- now generated in main.py at the same pre-bind moment as the auth token, so GET /api/settings carries it from the very first fetch (no dependency on analytics timing)
- idempotent uuid4 hex, only written when missing; lazy path kept as fallback; platform-agnostic so mac is unchanged except the id exists slightly earlier
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 12:25:31 -07:00
Eric
3509c08057
[eric] workflows: remove scheduled-tasks end-to-end (frontend pages+slice, backend app+routes, electron poller), keep dock chat; bump 1.1.64
2026-05-26 11:12:29 -07:00
ciregenz
083d70def5
[eric] workflows: merge scheduled-tasks onto dev, re-home dashboard + fix backend imports
2026-05-24 23:41:53 -07:00
ciregenz
782811daac
[eric] tree: group browser sub-agent modules under agents/browser
2026-05-23 13:06:55 -07:00
ciregenz
efa240126f
[eric] tree: group anthropic proxy modules under agents/proxy
2026-05-23 13:05:53 -07:00
ciregenz
fa57be6bbb
[eric] tree: group foundational agent modules under agents/core
2026-05-23 13:05:15 -07:00
ciregenz
26b9239c8a
[eric] cycles: move OAuth flow state into a leaf module
2026-05-23 07:05:25 -07:00
ciregenz
81fea443fd
[eric] cleanup: drop dead code, dedup 9router prefix, strip em-dashes (backend)
2026-05-23 02:29:22 -07:00
ciregenz
245269c0ac
[eric] workflows: port backend scheduler + executor + schedule MCP server from dev
2026-05-21 22:29:07 -07:00
ciregenz
ac99b0090b
fixes: MCP auto-continue lists tool names + history doesn't eat chats + WS strip replayed closes
...
(1) After MCPActivate, the continuation prompt now enumerates the
activated server's callable tool names so the next turn calls them
directly instead of burning a turn on tool-discovery guesses.
(2) Resume no longer deletes the session file from disk; previously
every click on a past chat permanently removed it from history.
(3) WS replay skips agent:closed events; replaying them on a fresh
client destructively deleted the session being opened.
2026-05-20 02:10:12 -07:00
ciregenz
a1fefa0ae8
[eric] approvals: trust patterns for action approvals + smarter sensitive-file gating
2026-05-20 01:56:38 -07:00
ciregenz
91508c87b1
[eric] onboarding bug fix and ux op
2026-05-12 22:36:22 -07:00
ciregenz
2e2e8c7728
[eric] webapp-template standardization (React + Vite + FastAPI new-app starter) + swarm-debug built-in skill + stale-session recovery
2026-05-11 18:40:27 -07:00
ciregenz
1988435466
[eric] fix runtime-logs WS — missing top-level asyncio import in main.py
2026-05-11 13:51:41 -07:00
ciregenz
b4b7042af2
[eric] persistent app-backend runtime + Terminal tab (replaces one-shot execute + Console panel)
2026-05-11 13:47:55 -07:00
ciregenz
d20ff7d16c
[eric] app builder cleanup — remove Auto Run, Test Input, RenderOutput tool + Outputs activation gate
2026-05-11 09:05:45 -07:00
ciregenz
54be1e8ba1
[eric] onboarding 1.0.31 + Settings draft persistence + LM Studio fix
2026-05-10 17:57:01 -07:00
ciregenz
7a6a49655c
[eric] account flow + settings tweaks
2026-05-07 09:57:49 -07:00
ciregenz
49c649e3d9
[eric] single sync function for all state syncing
2026-05-05 12:11:07 -07:00
ciregenz
4cc1a3c7bd
[eric] restore subscription activation CORS origins
2026-05-04 20:32:34 -07:00
ciregenz
3c42d8738f
[eric] refactor internal service layer
2026-05-04 19:39:19 -07:00
ciregenz
d14cc89300
[eric] tool labels read like a person — Plugged into Gmail, Saved a snapshot, varied phrasings per call; session/turn labels
...
in sentence case; activating an MCP mid-chat now actually works instead of the model guessing at made-up tool names. Also a bunch miscelaneous ui/ux tweaks, I cant be bothered :)
2026-05-03 20:44:32 -07:00
ciregenz
9be2d87f73
[eric] WS resilience: per-session seq + ring buffer + resume protocol so agent runs survive transient disconnects (wifi flap, sleep, NAT
...
drop) instead of flipping to completed. Adds heartbeat (25s ping/10s pong), reconnect with infinite jittered backoff, outbound queue gated
on resume_ack, gap_detected fallback for long offlines, on-disk persistence of terminal events for post-restart recovery, and a
reconnecting connection state decoupled from session.status. 1089 backend tests covering 500 randomized disconnect scenarios + concurrent
broadcast races. Backend/WS handler does not cancel agent task on disconnect
2026-04-28 23:47:59 -04:00
ciregenz
5d69215739
[eric] phase 2+3: outputs gate, smart compaction, slash commands, preflight + auto-continue, bumped Anthropic SDK
2026-04-28 19:55:06 -04:00
ciregenz
30d581e9ec
[eric] phase 1: MCP activation gate, context pill, friendly 429s, -api routes so API keys actually work
2026-04-28 19:01:07 -04:00
ciregenz
f4cded781b
[eric] App Builder fixes: preview loads (auth-token threaded into iframe URL + sub-resource paths), agent keeps running when you switch tabs
...
(session+workspace persisted on the app), Settings default model/thinking now flow into App + Skill Builder drafts
2026-04-27 15:09:25 -07:00
ciregenz
2379dd92be
[eric] security: lock down the local websocket + http api with a per-install auth token
2026-04-25 02:26:13 -07:00
ciregenz
f5cc3a36fb
[eric] remove vendored 9router (now fetched from npm at build), remove Copilot, and fix subs + tools
2026-04-25 02:26:08 -07:00
ciregenz
7eb85a7127
[eric] subscription UI fixes: cards no longer flicker to the Starting-subscription-service spinner mid-task (is_running TTL cache + retry/poll on mount), show
...
Anthropic as its own picker group alongside OpenSwarm Pro when both are connected so users can pick per-request
2026-04-16 11:12:27 -07:00
ciregenz
1a68ccfc7b
[eric] OpenSwarm Pro: new managed plan alongside BYO — deep-link activation from billing checkout, onboarding + Settings card with live usage, gradient OpenSwarm Pro group in
...
the model picker, inline error cards for rate-limit/connection failures, debugger startup fix
2026-04-15 23:05:02 -07:00
ciregenz
4778cea80e
[eric] multi-model subscription support: connect ChatGPT Plus, Gemini Advanced, and GitHub Copilot subscriptions via 9Router
...
- Add BUILTIN_MODELS for OpenAI (GPT-5.4/Mini/5.3-Codex), Google (Gemini 3 Pro/Flash, 2.5 Pro/Flash), and GitHub Copilot
- Add resolve_model_id_for_sdk() and resolve_aux_model() to route prefixed model IDs (cx/, gc/, gh/) through 9Router translator
- Add GET /agents/models endpoint returning available models based on live 9Router connection state
- Enable ENABLE_TOOL_SEARCH=auto for all providers so non-Claude models get full tool access (23 built-in + all MCPs)
- Add thinking block streaming support (ThinkingBlock in stream handler + AssistantMessage) for reasoning models
- Fix Gemini 3 thought-signature errors: use skip_thought_signature_validator per Google docs
- Fix WebSearch blocked_domains/allowed_domains empty-list rejection on Anthropic API
- Fix browser_agent text_parts UnboundLocalError on non-Claude models
- Fix auxiliary LLM calls (title gen, group meta, dashboard naming, view builder, browser agent) via resolve_aux_model
- Add Codex OAuth callback listener on port 1455 for ChatGPT Plus subscription connect
- Route Gemini OAuth through system browser since Google blocks embedded webviews
- Override Electron popup user-agent for OAuth
- Fix duplicate OAuth callback with idempotent completed_oauth tracking
- Fix Settings modal tab routing and stale warning banner
- Add API key inputs for OpenAI, Google, and OpenRouter
- Add MCP warning banner when selecting non-Claude model with many tools
- Force session fork on cross-provider model switch to prevent transcript corruption
- Disable GitHub Copilot subscription card (9Router poll issue, marked preview)
- Delete dead CopilotProvider import and unused CopilotAuthButton component
2026-04-12 12:06:36 -07:00
ciregenz
4f50fc2236
[eric] delete unused Prompts feature, force AskUserQuestion for clarifying questions, clean up dead refs and TS errors
2026-04-07 22:54:18 -07:00
ciregenz
e04eb2fb74
[eric] fix browser agent for 9Router, subscription-first priority, uvx fallback for non-dev users
...
- browser_agent.py: use get_anthropic_client instead of raw api_key, fix model map for 9Router
- credentials.py + agent_manager.py: subscription (9Router) checked before API key everywhere
- main.py: clean browser-agent endpoint, no credential params
- tools_lib.py: when uvx not found, fall back to pip-installed binary from venv
- requirements.txt: add google-workspace-mcp so it works without uvx
2026-03-26 12:17:37 -07:00
ciregenz
ebea25f0c2
[eric] [eric] add PostHog analytics, 9Router subscription proxy, unified usage tracking
...
- PostHog integration: collector, analytics subapp, opt-in UI, Analytics page
- 9Router: auto-start, OAuth subscription flow, /v1/messages Anthropic format support
- Settings overhaul: multi-provider API keys, subscription connect UI, onboarding modal
- Unified usage: merge 9Router cost/token data into Settings Usage tab
- Provider system: providers/, agent_loop, tools/ (unused, for future non-Anthropic support)
- Agent SDK: restored as primary with 9Router ANTHROPIC_BASE_URL fallback
- Updated system prompt, credential resolution, dashboard analytics
2026-03-24 14:02:58 -07:00
ciregenz
8d09e46df5
[eric] add PostHog analytics integration
2026-03-24 11:48:50 -07:00
haikdc
a1138a1782
[Haik]: (ability to resume chats if force end early) (agent selection actually works as advertised) (browser control/creation tool isolation) (in dev mode can see the action input schema)
2026-03-18 14:19:42 -07:00
haikdc
6f02daff2d
[Haik]: (Browser actions shown in agent card output) (User can have item selection turned on by default in settings) (most browser related functionality works - altho spotify is tricky) (mcp discovery in prod shld worke now?)
2026-03-17 01:48:50 -07:00
haikdc
b90e5c6353
[Haik]: (Practically all forms of dashboard interaction glitches) (made dashboard selection process much more intuitive and seamless - and high level) (added BrowserAgent so the outer agent can delegate more complex tasks) (added tool to parallelize across multiple browser agents since the abstraction keeps the tool calls so high level) (Added a temporary agent insight ui over each browser as it does stuff - human in the loop is still needed)
2026-03-16 05:01:56 -07:00
haikdc
e6f1e18054
[Haik]: ckpt, this is a big one babayyy (dashboards now show screenshot previews of their contents like Apps) (Views are now called Apps) (Tools are called Actions) (Auto layout now preserves sizing and just works much better) (Browsers and Apps have larger spawn in size) (Tutorial info for how to get an anthropic key to help users - in the settings) (Added Descriptions to all 3 Main Pages in Navbar) (Also reorganized navbar and made it resizable) (Browsers now support multiple tabs) (Move the Commands page to settings - also beefed up settings a bit to encapsulate more) (Added inner glow on browser) (Added inputs in header of browser to act like normal google search)
2026-03-16 03:08:58 -07:00