Commit graph

39071 commits

Author SHA1 Message Date
Ishaan Jaffer
830fa3b16b
fix(v2 managed agents): type stream_events as a sync def returning AsyncIterator 2026-05-07 13:53:06 -07:00
Ishaan Jaffer
594fb905b4
style(v2 managed agents): black-format test_happy_paths.py 2026-05-07 13:48:36 -07:00
Ishaan Jaffer
6306d67b73
style(v2 managed agents): black-format conftest.py 2026-05-07 13:48:36 -07:00
Ishaan Jaffer
891a749847
style(v2 managed agents): black-format test_agents.py 2026-05-07 13:48:35 -07:00
Ishaan Jaffer
c91ae4fd1b
test(v2 managed agents): bypass async client cache in opencode adapter tests 2026-05-07 13:48:35 -07:00
Ishaan Jaffer
3585b3db04
style(v2 managed agents): black-format router.py 2026-05-07 13:48:30 -07:00
Ishaan Jaffer
3fdb612ed6
feat(v2 managed agents): add ManagedAgents httpxSpecialProvider 2026-05-07 13:48:30 -07:00
Ishaan Jaffer
a868298980
fix(v2 managed agents): use shared async httpx client pool in OpencodeAdapter 2026-05-07 13:48:30 -07:00
Ishaan Jaffer
23bf7645ad
refactor(v2 managed agents): update path refs in qa_happy_path.sh after move 2026-05-07 13:29:01 -07:00
Ishaan Jaffer
bcce0a2b8c
refactor(v2 managed agents): update path refs in test_happy_paths.py after move 2026-05-07 13:29:01 -07:00
Ishaan Jaffer
1af8a322d1
refactor(v2 managed agents): update path refs in conftest.py after move 2026-05-07 13:29:01 -07:00
Ishaan Jaffer
936a733a58
test(v2 managed agents): update import path for events endpoints to proxy/ 2026-05-07 13:28:56 -07:00
Ishaan Jaffer
304a4466ee
test(v2 managed agents): update import path for messages endpoints to proxy/ 2026-05-07 13:28:56 -07:00
Ishaan Jaffer
f63b000b4a
test(v2 managed agents): update import path for sessions endpoints to proxy/ 2026-05-07 13:28:56 -07:00
Ishaan Jaffer
d07c01781f
test(v2 managed agents): assert litellm_api_key is encrypted at rest 2026-05-07 13:28:51 -07:00
Ishaan Jaffer
9407171825
test(v2 managed agents): cover cross-session permission auto-grant block 2026-05-07 13:28:51 -07:00
Ishaan Jaffer
d2d9221322
feat(v2 managed agents): backstop UNIQUE(name, created_by) in migration SQL 2026-05-07 13:28:43 -07:00
Ishaan Jaffer
218d43c1b1
feat(v2 managed agents): add UNIQUE(name, created_by) on LiteLLM_ManagedAgent (proxy-extras schema copy) 2026-05-07 13:28:43 -07:00
Ishaan Jaffer
b9d27bf631
feat(v2 managed agents): add UNIQUE(name, created_by) on LiteLLM_ManagedAgent (proxy schema copy) 2026-05-07 13:28:43 -07:00
Ishaan Jaffer
34bff71a41
feat(v2 managed agents): add UNIQUE(name, created_by) on LiteLLM_ManagedAgent (root schema) 2026-05-07 13:28:43 -07:00
Ishaan Jaffer
dcd969e981
fix(v2 managed agents): scope opencode permission auto-grant to caller's session 2026-05-07 13:28:36 -07:00
Ishaan Jaffer
ff8fd44324
docs(v2 managed agents): point base adapter docstring to new router path 2026-05-07 13:28:29 -07:00
Ishaan Jaffer
ec3cad7f9c
docs(v2 managed agents): clarify SDK vs proxy layout in package docstring 2026-05-07 13:28:28 -07:00
Ishaan Jaffer
f2d8d78027
fix(v2 managed agents): apply default_user fallback in events SSE stream 2026-05-07 13:28:23 -07:00
Ishaan Jaffer
ab24b21209
fix(v2 managed agents): apply default_user fallback in messages handlers 2026-05-07 13:28:23 -07:00
Ishaan Jaffer
4521837bcb
fix(v2 managed agents): apply default_user fallback to GET /v2/sessions/:id 2026-05-07 13:28:23 -07:00
Ishaan Jaffer
79d6b0df5d
fix(v2 managed agents): encrypt litellm_api_key at rest + DB-level 409 backstop 2026-05-07 13:28:17 -07:00
Ishaan Jaffer
56a068de71
refactor(v2 managed agents): update sub-router imports to new package path 2026-05-07 13:28:12 -07:00
Ishaan Jaffer
d46de49d9d
refactor(v2 managed agents): update import path for managed_agents_router 2026-05-07 13:28:07 -07:00
Ishaan Jaffer
25cf9ceb51
refactor(v2 managed agents): move endpoints package into proxy/ for FastAPI rule 2026-05-07 13:27:46 -07:00
Ishaan Jaffer
7e0e4f1dfc
fix(v2 managed agents ui): only treat assistant in_progress as active
User messages from opencode have no completed_at and normalize to status=in_progress,
which made hasInProgress always true → Stop button stuck on. Filter to assistant-only.
2026-05-07 13:04:09 -07:00
Ishaan Jaffer
07315c47e9
ui(v2 managed agents): live updates, sticky composer, Enter sends, queued state
- Sidebar: removed nav items (New Agent, Automations, Dashboard, Bugbot)
- Search placeholder: 'Search sessions ⌘K'
- Composer is sticky at the bottom (outside scroll container) so the thread scrolls cleanly
- Enter sends; Shift+Enter inserts a newline (Cmd+Enter no longer required)
- Optimistic user message renders with a 'queued' spinner badge until the server confirms
- Always poll /v2/sessions every 5s so externally-created sessions appear in the rail without reload
- Always poll /messages (5s when idle, 2s when in_progress) so externally-sent messages appear without reload
- Auto-scroll only triggers when user is already near the bottom (no hijacking)
2026-05-07 12:55:14 -07:00
Ishaan Jaffer
eefa44f702
ui(v2 managed agents): cursor-style sessions UI — Inter font, Tailwind, lucide icons
- Sidebar: hamburger + search input, nav items (New Agent/Automations/Dashboard/Bugbot), session groups (Today/This Week/This Month/Older), active item with blue tinted bg + dot, user footer with avatar
- MainPanel: breadcrumb header agent / repo, max-w-720 thread, user messages as quoted prompt blocks (gray bg rounded-xl), flowing assistant markdown, tool calls as expandable cards with emerald check icon
- Composer: large bordered rounded-xl input, model name on left, dark circular Send (ArrowUp) or Stop (Square) on right
- Inter + JetBrains Mono via Google Fonts
2026-05-07 12:49:20 -07:00
Ishaan Jaffer
2ed9408ed3
ui(v2 managed agents): polish sessions UI — left rail, refined typography, dev-tool aesthetic
- sessions list as left rail (was full-page list view)
- group sessions by Today/This Week/Last Week/Older
- active row uses subtle bg (was 2px border)
- status dots only render for non-ready states
- header shows agent name from agentNameById fallback
- composer in rounded bordered container with consolidated footer
- stop button is filled-dark SVG square (was bold ascii character)
- markdown sizes tightened (h1 17px, h2 15px, h3 13.5px, body 13.5/1.6)
- user messages render as bold quote-headers with hairline separator
- redirect /sessions to latest session
2026-05-07 12:35:22 -07:00
Ishaan Jaffer
3e86ce0680
test(v2 managed agents): cover OpencodeAdapter.abort 2026-05-07 12:19:47 -07:00
Ishaan Jaffer
c32fd21e00
test(v2 managed agents): cover POST /v2/sessions/:id/abort endpoint 2026-05-07 12:19:45 -07:00
Ishaan Jaffer
81585d1171
test(v2 managed agents): cover GET /v2/sessions global listing 2026-05-07 12:19:45 -07:00
Ishaan Jaffer
a87ec3ff81
feat(v2 managed agents): add POST /v2/sessions/:id/abort endpoint 2026-05-07 12:19:40 -07:00
Ishaan Jaffer
ea3310af66
feat(v2 managed agents): implement abort in OpencodeAdapter (best-effort POST /abort) 2026-05-07 12:19:40 -07:00
Ishaan Jaffer
7e077657fc
feat(v2 managed agents): add abort method to SandboxAdapter Protocol 2026-05-07 12:19:35 -07:00
Ishaan Jaffer
fbd73ff970
feat(v2 managed agents): add GET /v2/sessions global listing endpoint 2026-05-07 12:19:34 -07:00
Ishaan Jaffer
b1afebe9d1
feat(v2 managed agents): add list_sessions DB helper for global session listing 2026-05-07 12:19:30 -07:00
Ishaan Jaffer
3a38f8eddb
test(v2 managed agents): drop unused monkeypatch fixture from same-name test
test_create_agent_same_name_different_user_returns_200 requested monkeypatch
but only used app.dependency_overrides. Pyright flagged the parameter as
unaccessed; remove it.
2026-05-07 12:08:18 -07:00
Ishaan Jaffer
cd5febf03d
fix(v2 managed agents): satisfy pyright on _row_to_agent_response config access
Use getattr with a None default and isinstance narrowing instead of hasattr to
unwrap prisma.Json-style configs. Pyright was flagging .data access on the
dict branch of the union; this rewrites the path so the type narrows cleanly
without an Any cast.
2026-05-07 12:08:12 -07:00
Ishaan Jaffer
9379f7f206
test(v2 managed agents): cover GET /v2/agents/:agent_id/sessions listing
Adds 9 tests: agent_id scoping (no leakage from other agents), unknown
agent 404, other-user agent 404, defense-in-depth created_by scoping,
internal sandbox_url/sandbox_metadata stripped from listing, 4-record
pagination walk, status filter, invalid cursor 422, db-not-connected 500.
2026-05-07 12:01:36 -07:00
Ishaan Jaffer
f278696a87
test(v2 managed agents): cover GET /v2/agents listing
Adds 7 tests: caller scoping, api_key masking, 4-record pagination walk
via cursor, empty result, invalid cursor 422, db-not-connected 500.
2026-05-07 12:01:30 -07:00
Ishaan Jaffer
7015d5e7fa
feat(v2 managed agents): add GET /v2/agents/:agent_id/sessions listing endpoint
Verifies agent ownership before listing (404 for unknown/unowned agents).
Sessions are scoped by created_by independent of the agent check, so a
mis-owned session row cannot leak. Optional ?status= filter, same offset
cursor as GET /v2/agents. sandbox_url and sandbox_metadata stripped per
contract \xc2\xa76.2/\xc2\xa76.3.
2026-05-07 12:01:25 -07:00
Ishaan Jaffer
0701110091
feat(v2 managed agents): add GET /v2/agents listing endpoint
Newest-first, scoped to caller, simple offset cursor (decimal string).
litellm_api_key is masked on every row in the response.
2026-05-07 12:01:19 -07:00
Ishaan Jaffer
2370235e65
feat(v2 managed agents): add list_agents and list_sessions_for_agent db helpers
Both scoped by created_by, ordered by created_at desc, simple offset-based
pagination via take/skip. list_sessions_for_agent supports an optional
SessionStatus filter.
2026-05-07 12:01:14 -07:00
Ishaan Jaffer
ef9bfa6f68
feat(v2 managed agents): add AgentList and SessionList typed models
Used by the new GET /v2/agents and GET /v2/agents/:agent_id/sessions
listing endpoints. Each list response carries data + next_cursor + has_more
for simple offset-based pagination.
2026-05-07 12:01:09 -07:00