Files
james.maesandClaude Fable 5.1 3a4f8a6727 feat(presence): show connection counts from per-session presence
Two terminals of one user collapsed into one viewer. With collaboration
1.2.0 (qbit-collaboration #54) the snapshot says how many connections
each viewer has, and perConnection=true lists each connection.

- core: PresencePerson.connections, PresenceState.connections, an
  opt-in perConnection that fills person.leases (mode, field, start,
  this client's own lease marked self via the server's opaque id)
- TUI: the record strip, panel ("Admin x2 (you)", one line per
  terminal) and Viewing now entry show counts; the record presence
  joins with perConnection; the screen saver's Online tile counts
  connections ("2 online - you x2")
- qqq collab presence: connections column, --per-connection rows
- regenerated the client from the collaboration 1.2.0 document,
  read from the local feat/per-session-presence worktree until it
  lands on develop (extension-sources.json says so)

Servers before 1.2.0 send no connections: every person counts once and
nothing changes on screen; tests cover both.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-01 16:45:24 -06:00

2.9 KiB

Extension documents in the client

The client document (packages/ui-api-client/openapi/qqq-v1.json) is the sample server's live document for core (QQQ 4.1.0-SNAPSHOT, develop 6ac64fc66, UI API 1.8.0, which already carries esb) merged with the extension document each repository commits at src/main/resources/openapi/qqq-v1/. Rebuild it with the sample server running:

npm run spec:merge-extensions && npm run generate     # writes openapi/extension-sources.json too

Versions merged on 2026-10-31 (machine-readable copy: packages/ui-api-client/openapi/extension-sources.json):

Extension Version Prefix Operations Repository at Minimum the client needs
esb 1.1.0 /esb 5 qqq develop 6ac64fc66 (qqq-esb) 1.1.0 (operationIds, UI-API-CHANGELOG)
health 1.1.0 /health 4 qqq develop 6ac64fc66 (qqq-middleware-javalin) 1.1.0 (same)
alerts 1.2.0 /alerts 6 qbit-alerts develop a3fc6ac
assistant 1.6.0 /assistant 16 qbit-assistant develop bcf173f
collaboration 1.2.0 /qbit/collaboration 45 qbit-collaboration feat/per-session-presence 0ae1e62 (local worktree .worktrees/qbit-collab-sessions, not yet on develop) 1.1.0 (presence schemas, error contract); 1.2.0 adds per-connection presence (connections, leaseCount, perConnection), used when present
data-analysis 1.5.0 /qbit/data-analysis 21 qbit-data-analysis develop 368d2c0
db-performance 1.0.0 /qbit/db-performance 4 qbit-db-performance develop 4fd2c30
edi 1.1.0 /qbit/edi 4 qbit-edi develop 75a4e6b
qa-capture 1.0.0 /qbit/qa-capture 2 qbit-qa-capture develop 1aee6cb
quick-search 1.1.0 /qbit/quick-search 2 qbit-quick-search develop bd50e1f
release-notes 1.0.0 /qbit/release-notes 3 qbit-release-notes develop 8fed18e
secured-data 1.1.0 /qbit/secured-data 3 qbit-secured-data develop 7b302ed
sql-workbench 1.1.0 /sql-workbench 21 qbit-sql-workbench develop a182076
printing 2.1.0 /qbit/printing 17 qbit-printing feat/print-anything 2.0.0 (realtime-v1); 2.1.0 adds the table-list and text prints Ctrl+P uses

219 operations in all, 153 from extensions (printing was appended on 2026-11-01 with scripts/merge-spec.mjs, keeping the other documents as they were). No extension document conflicted with core or another (identical shared schemas such as BasicErrorResponseV1). There is no qbit-middleware-health: the health extension lives in qqq's qqq-middleware-javalin. Other qbits in the workspace (authentik, jobs, help, middleware-mcp, ...) register no UI API extension.

Minimums are only set where an extension's own docs state one; the rest accept any version the server lists. Each extension's minimum and realtime channels live in packages/core/src/extensions/registry.ts (FACTS).