Skip to content
This repository was archived by the owner on Jul 16, 2026. It is now read-only.

feat(web-server): /presenter endpoint (Phase 5.2) - #72

Merged
jgluck96 merged 1 commit into
dev-clientfrom
josh/phase-5.2-web-server-endpoints
Jun 1, 2026
Merged

jgluck96 merged 1 commit into
dev-clientfrom
josh/phase-5.2-web-server-endpoints

Conversation

@jgluck96

@jgluck96 jgluck96 commented Jun 1, 2026

Copy link
Copy Markdown

Summary

Phase 5.2 of the OSS→stando backend reconciliation — ports the one genuinely-missing, infra-backed web-server.ts endpoint from OSS sutando. Branches off dev-client per the new workflow rule.

/presenter

Exposes the presenter-mode sentinel (state/presenter-mode.sentinel, written by scripts/presenter-mode.sh and already polled by the Discord/Slack/Telegram bridges) to the React UI. stando already expected this — the existing /voice-mode comment references "the presenter badge poll to render the composite 3-mode badge", but the endpoint was never implemented.

  • Returns { active, expiresAt }; past / garbage / missing expiry → inactive (matches the bridges' is_active checks).
  • Reads via statePath('state/presenter-mode.sentinel') — the same workspace path resolve_workspace() hands the bridges, so the badge stays consistent with notification-suppression.

Endpoint audit — what was NOT ported (and why)

OSS sutando has 7 routes stando lacks. Only /presenter had live backing infra in stando + was a clean fit:

Endpoint Decision Reason
/presenter ✅ ported presenter-mode.sh + bridges already use the sentinel; UI expects it
/chat ⏸️ deferred standalone chat page; chat-ui.ts exists but unrouted — feature decision, not a sync gap
/overlays, /api/overlays ⏭️ skip no overlay-apps infra in stando — endpoints would be dead
/paidsubscriptions, /data, /scan ⏸️ gated subscription-scanner skill exists but no web-rendering layer; pulls in renderSubscriptionsHtml + a whole page

Drive-by fix

Removes tests/tasks-api.test.ts — it imported ../client/src/lib/tasks-api.ts, which PR #69 moved to the stando-ui repo. The test is orphaned in stando (the code is gone) and was already failing on dev-client. Coverage belongs in stando-ui now.

Test plan

  • new tests/web-server-presenter.test.ts — 4/4 (active future-expiry, missing, past-expiry, garbage)
  • full TS suite 244/244 (was red on dev-client due to the orphaned test; now green)
  • tsc --noEmit clean

Related

  • Base: dev-client
  • OSS source: sonichi/sutando src/web-server.ts /presenter handler
  • Follow-ups available: /chat wiring, /paidsubscriptions web UI — say the word if you want either.

Made with Cursor

Phase 5.2 of the OSS→stando backend reconciliation. Ports the one
genuinely-missing, infra-backed web-server endpoint from OSS sutando.

/presenter — exposes the presenter-mode sentinel
(state/presenter-mode.sentinel, written by scripts/presenter-mode.sh and
already polled by the Discord/Slack/Telegram bridges) to the React UI.
The UI was already designed for it: the existing /voice-mode comment
references "the presenter badge poll to render the composite 3-mode
badge", but the endpoint didn't exist. Returns { active, expiresAt };
past/garbage/missing expiry → inactive (matches the bridges' is_active
checks). Reads via statePath('state/presenter-mode.sentinel'), the same
workspace path resolve_workspace() gives the bridges.

Deliberately NOT ported (OSS-specific, no stando infra / feature
decisions, not endpoint hardening): /chat (standalone chat page),
/overlays + /api/overlays (overlay-apps manager — no overlay infra in
stando), /paidsubscriptions* (subscription-scanner web UI — skill exists
but no web rendering layer).

Also removes tests/tasks-api.test.ts: it imported
../client/src/lib/tasks-api.ts, which PR #69 moved to the stando-ui repo.
The test is orphaned in stando (code gone) — coverage belongs in
stando-ui now.

Verified: tsc clean; new tests/web-server-presenter.test.ts 4/4; full TS
suite 244/244.

Co-authored-by: Cursor <cursoragent@cursor.com>
@jgluck96

jgluck96 commented Jun 3, 2026

Copy link
Copy Markdown
Author

Superseded by #99 — clean cherry-pick onto current main (was showing 111-file diff due to PR #69 ancestor commits). #99 shows the actual 3-file change.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant