feat(ai): add remote coding agent sessions for SSH hosts (#1545)

* feat(ai): add host coding agent sessions with configured providers

* Wait for agent initialization and shutdown before resuming sessions

* Keep Pi transcripts outside its configuration migration directory

* Cover Pi session directory separation

* Update core permission catalog expectations for remote agents

* Install remote agent runtimes from verified official sources

* Wait for the identity panel credentials request in its test

* Add scoped SSH forwarding setup for remote agents

* Verify forwarding setup through a fresh SSH connection

* Bound the SSH forwarding verification timeout

* Return the forwarding verification callback result

* fix(ai): support agent send and interrupt keyboard shortcuts

* feat(ai): add agent queues attachments worktrees and session recovery

* fix(ai): handle deleted workspace paths and duplicate status events

* fix(ai): accept file references in root workspaces

* fix(ai): refresh paused queues after agent errors

* fix(ai): store agent sessions in plugin tables and lock down OpenCode

Agent sessions lived in a single ctx.kv value holding up to 2000 events,
which passed the 256 KB kv limit within minutes of a normal run. Every
save after that failed, so history, nativeId, queue and archive changes
were lost and every event wrote a kv audit row.

Sessions, events and queued prompts now have their own tables. A running
agent appends events in batches at most once a second with a lazy save;
session and queue changes save immediately. Prompts, drafts and stored
event text are capped in UTF-8 bytes to fit MySQL TEXT. kv:own is no
longer requested.

The OpenCode server now requires a per-session password, so other local
accounts on the host cannot drive the agent through its loopback port.

* test(upgrade): include agent session tables in the reviewed upgrade SQL
This commit is contained in:
ZacharyZcR authored and LukeGus committed 2026-10-03 16:01:47 -05:00
1 parent 77bcbdb3d6
commit bf817d8bd1
75 files changed
+7292 -6

No files matched your search

@@ -46,6 +46,9 @@ describe("ai adoption migration", () => {
});
expect(tables(db.sqlite)).toEqual([
"p_ai_agent_events",
"p_ai_agent_queue",
"p_ai_agent_sessions",
"p_ai_conversations",
"p_ai_messages",
"p_ai_proposals",
@@ -83,6 +86,9 @@ describe("ai adoption migration", () => {
db = await createTestDb(pluginDir);
expect(tables(db.sqlite)).toEqual([
"p_ai_agent_events",
"p_ai_agent_queue",
"p_ai_agent_sessions",
"p_ai_conversations",
"p_ai_messages",
"p_ai_proposals",