feat(server-mode): pane presence and typing audit (sharing phase 4)

A pane's tab shows the other people who have it open (pane-presence.js,
in memory, fed by the /ws-pty attach; GET /api/lanes/:id/presence and the
pane_presence broadcast to the owner and full collaborators) and says
"Billed to <name>" for a pane a collaborator opened (startedBy on the run).
The first real keystroke of each attach into a shared workspace's pane by
anyone but its owner is audited as `type into <run id>` (mouse, focus and
terminal replies to tmux do not count). The pty socket now pings, so a
vanished browser is ended at the next re-check and leaves the presence list.
This commit is contained in:
2026-11-06 11:32:25 +07:00
parent 879a6bb02d
commit 18e574a765
21 changed files with 568 additions and 8 deletions
+23
View File
@@ -20478,6 +20478,29 @@ paths:
description: ENOTOWNER.
'404':
description: ENOLANE — workspace not found.
/api/lanes/{id}/presence:
get:
tags:
- Lanes
summary: Who has which of a workspace's panes open
description: 'Server mode (local mode: `{panes: {}}`). `{panes: {<run id>: [{id, name}]}}` — the users with a terminal attached to each pane, from memory; changes arrive as the WebSocket message `pane_presence` `{laneId, runId, users}` (the workspace''s owner and the users it is shared with).'
operationId: getLanePresence
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: '`{panes}`.'
content:
application/json:
schema:
type: object
additionalProperties: true
'404':
description: ENOLANE — workspace not found.
/api/lanes/{id}/sessions/{sid}/shares:
get:
tags: