mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-31 17:10:43 +02:00
- terminal.Manager: OnSessionStart/OnSessionStop hooks fire around the
manager's register/deregister so callers can safely mark/unmark
external state (GC protection, audit rows) without racing Get/Done.
- daemon: wires the hooks to markActiveEnvRoot(filepath.Dir(workDir))
so an idle terminal on a done/cancelled issue can't have its workdir
reclaimed mid-session, and emits structured slog audit records
(user_id/task_id/duration; no keystrokes — RFC §Auth).
- server: persists every PTY open/close to a new terminal_sessions
table (migration 091) as the source behind the audit log and the
new `type=terminal` rows in `multica issue runs`. New endpoint
GET /api/issues/{id}/terminal-sessions.
- CLI: `multica issue runs` merges the agent task runs feed with the
terminal sessions feed, sorted by started_at; terminal rows render
with agent="terminal" and close_reason in the ERROR column. Old
servers without the endpoint degrade silently.
- server/handler/terminal_ws.go: pass parsed Cols/Rows query values
to sendOpenToDaemon so the first PTY frame matches the client's
viewport; post-open resize is now just a defensive patch (addresses
Emacs's Phase 3 non-blocking nit).
Co-authored-by: multica-agent <github@multica.ai>