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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user