bot-hermes
05d8e953ca
feat: agent-to-agent integrations — activity stream, steer channel, plan gate
Three fork-side integrations that turn OpenChamber from a fire-and-forget
coder into a visible, steerable, plan-gated agent:
1. Activity stream (GET /api/openchamber/agent-activity SSE)
- agent-activity/runtime.js: subscribes to global hub, normalizes
message.updated parts into structured activity events (tool-call,
file-edit, text-part), rate-limited coalescing for tool calls
- Broadcasts openchamber:agent-activity and session-completed events
- SSE endpoint with heartbeat (25s), same shape as /api/openchamber/events
2. Steer channel (POST /api/openchamber/session/:id/steer)
- session-steer/runtime.js: interrupt mode (interrupt → inject
system-level directive → resume) and queue mode (deliver on next idle)
- Follows message-queue precedent for interrupt-safe dispatch
- Broadcasts openchamber:steer-delivered on queued delivery
3. Plan-first gate (plan-gate/runtime.js + approve/reject/status routes)
- State machine per session: pending → approved | rejected | timed_out
- Injects plan-gate reminder via openchamber-sessions create prompt
- Agent emits ## Plan, runtime detects and emits openchamber:plan-ready
- Approve sends 'Proceed' prompt, reject sends revision prompt
- Configurable timeout (default 5 min), auto-approve on timeout
4. P1 shared plumbing
- cardID accepted in session create payload, stored in session metadata
- All new events carry cardID when known
Files added:
- packages/web/server/lib/agent-activity/runtime.js + runtime.test.js
- packages/web/server/lib/session-steer/runtime.js + runtime.test.js
- packages/web/server/lib/plan-gate/runtime.js + runtime.test.js
Files modified:
- packages/web/server/lib/openchamber-sessions/routes.js (cardID, planGate)
- packages/web/server/lib/opencode/feature-routes-runtime.js (route wiring)
- packages/web/server/index.js (runtime creation, SSE_PATH_PREFIXES)
- packages/web/server/lib/ui-auth/ui-auth.js (auth allowlist)
- packages/web/server/lib/realtime-proxy.js (SSE allowlist)
28 new tests passing. All pre-existing tests unaffected.
2026-09-07 22:34:56 +00:00
..
2026-09-07 22:34:56 +00:00
2026-08-22 11:55:38 +03:00
2026-09-04 22:56:27 +03:00
2026-08-13 22:44:13 +03:00
2026-09-05 17:02:28 +03:00
2026-08-24 14:03:18 +03:00
2026-08-19 00:07:57 +03:00
2026-08-13 22:44:13 +03:00
2026-09-03 11:49:34 +03:00
2026-08-30 02:24:22 +03:00
2026-08-05 13:59:17 +03:00
2026-09-06 10:55:54 +00:00
2026-09-05 21:26:21 +03:00
2026-08-17 09:57:54 +00:00
2026-09-05 20:36:46 +00:00
2026-08-31 07:37:26 -04:00
2026-09-05 20:36:46 +00:00
2026-08-30 02:18:40 +03:00
2026-04-07 22:51:14 +03:00
2026-08-24 16:22:58 +03:00
2026-09-04 22:56:27 +03:00
2026-09-05 12:27:55 +03:00
2026-08-15 10:16:31 +03:00
2026-08-18 02:59:04 +03:00
2026-09-07 22:34:56 +00:00
2026-09-07 22:34:56 +00:00
2026-07-21 20:52:20 +03:00
2026-09-07 22:34:56 +00:00
2026-08-22 11:55:38 +03:00
2026-08-30 13:19:45 +03:00
2026-09-05 02:14:26 +03:00
2026-09-05 12:40:07 +03:00
2026-08-30 13:19:45 +03:00
2026-09-03 11:49:34 +03:00
2026-09-03 11:49:35 +03:00
2026-07-21 20:52:20 +03:00
2026-09-05 10:53:34 +03:00
2026-08-21 12:12:40 +03:00
2026-09-07 22:34:56 +00:00
2026-09-05 02:14:26 +03:00
2026-09-03 11:49:35 +03:00
2026-09-04 22:56:27 +03:00
2026-09-05 21:26:21 +03:00
2026-06-26 19:27:53 +03:00
2026-08-30 02:24:22 +03:00
2026-08-27 04:10:09 +01:00
2026-09-07 22:34:56 +00:00
2026-09-06 10:55:54 +00:00
2026-08-27 04:10:09 +01:00
2026-08-03 09:12:35 +00:00
2026-08-03 09:12:35 +00:00
2026-06-05 15:01:22 +03:00
2026-06-05 15:01:22 +03:00
2026-09-05 17:02:28 +03:00
2026-07-15 14:02:12 +03:00
2026-05-24 15:46:11 +03:00
2026-05-24 15:46:11 +03:00
2026-09-07 22:34:56 +00:00
2026-06-30 01:21:42 +03:00