Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f421725
feat: add owner-approved secrets for Fast Sessions
daniel-lxs Sep 9, 2026
b3819c7
feat: add credential-backed HTTP integrations for agents
mrubens Sep 9, 2026
d1a7c7f
fix: preserve custom MCP names alongside HTTP integrations
mrubens Sep 9, 2026
013af22
improve: simplify Session API key approval
daniel-lxs Sep 9, 2026
3d86ddf
Merge remote-tracking branch 'origin/develop' into feature/http-integ…
daniel-lxs Sep 9, 2026
805de92
fix: preserve environment MCPs that collide with HTTP broker
daniel-lxs Sep 9, 2026
5bcc3f9
fix: classify HTTP broker using trusted worker provenance
daniel-lxs Sep 9, 2026
e8c623e
fix: preserve MCP tool failures in Fast integration audits
daniel-lxs Sep 9, 2026
b732e37
fix: normalize empty GET and HEAD integration bodies
daniel-lxs Sep 9, 2026
078c8f0
Merge commit 'b732e37440b259c7046b699305eb8f3f91c9795f' into codex/se…
daniel-lxs Sep 9, 2026
e617182
feat: unify Session grants with the API HTTP broker
daniel-lxs Sep 9, 2026
1c5dff5
Merge remote-tracking branch 'origin/develop' into codex/session-secr…
daniel-lxs Sep 9, 2026
b90c53d
Merge remote-tracking branch 'origin/develop' into codex/session-secr…
daniel-lxs Sep 9, 2026
f646601
test: preserve GitHub catalog in broker bootstrap coverage
daniel-lxs Sep 9, 2026
c958457
feat: add live-authorized session egress control plane
daniel-lxs Sep 11, 2026
83c0413
fix: enforce session secret consent and egress boundaries
daniel-lxs Sep 11, 2026
028279d
feat: add actual pinned Iron session egress gateway
daniel-lxs Sep 11, 2026
6bd7cd4
fix: keep policy-withheld session substitutes mintable
daniel-lxs Sep 11, 2026
225afe0
fix: verify Iron archives portably and detect JSON credential echoes
daniel-lxs Sep 11, 2026
13eefa1
Merge remote-tracking branch 'origin/develop' into fix/session-secret…
daniel-lxs Sep 11, 2026
51a6cf9
test: accept CI database name in session egress race guard
daniel-lxs Sep 11, 2026
3a31c59
fix: preserve SDK auth and live gateway exchange boundaries
daniel-lxs Sep 11, 2026
2572ff4
feat: gate Docker session credentials on verified host admission
daniel-lxs Sep 11, 2026
d955e99
fix: retire retained session egress before every resume
daniel-lxs Sep 11, 2026
61c2e01
fix: initialize Docker admission tooling across user contexts
daniel-lxs Sep 11, 2026
8cc34dd
fix: execute admission helper without user-owned shims
daniel-lxs Sep 11, 2026
4737148
fix: select Docker firewall backend for session admission
daniel-lxs Sep 12, 2026
81da957
fix: reject ambiguous Docker firewall backends
daniel-lxs Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .changeset/session-secret-approvals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
"roomote": minor
---

Add prototype Session secret approvals with a prepared-request flow. The agent prepares the service, exact public HTTPS origin and port, injection policy, and expiry. Session owners follow a direct link, enter only an API key in a secure form showing the service and exact HTTPS destination, and choose Allow for this Session. Header and prefix details are available only in separate approval management. Saving atomically approves the immutable owner-and-Session-bound request and automatically sends a nonsecret continuation message when available, without copying credentials or opaque references into chat. Approvals default to 24 hours, expire within 30 days, and can be revoked from the Session.

The form is excluded from capture and replay and clears credential inputs after submission or revocation. Public documentation explains request limits, safe disposable tests, and the trust boundary: an approved upstream receives the credential and may misuse its privileges or disclose transformed values, so this is not a universal secrecy guarantee.

Fast and attached coding runs now use one API-owned HTTP transport for approved Session keys and operator integrations. Short-lived broker-only Fast authentication and persisted run attachments bind access to the live Session owner, never a caller-supplied Session ID. The broker rechecks ownership, attachment, revocation, and expiry before dispatch and before releasing the response. Session grants remain read-only on the exact approved HTTPS origin, normalize omitted/null/empty GET and HEAD bodies to no body, and enforce a 10-second deadline, 64 KiB response limit, guarded DNS, redirect refusal, and credential-echo suppression. Dynamic grants are read live independently of operator manifest reloads, without sending upstream keys to models or workers.

Session grants require no static manifest or per-service API credential environment variables. The broker remains available when operator mode is disabled; explicitly enabling operator mode still requires valid configuration and fails startup closed if it is missing or malformed. Existing deployment encryption and signing keys are reused.

Add the session egress control plane (`/api/internal/session-egress`) behind ordinary HTTP clients at real service URLs: trusted controllers register attached runs as workloads and receive one-time substitute tokens (only a keyed hash is stored), and a credential-substituting egress gateway obtains live per-request, per-phase authorization bound to the authenticated workload channel, generation, owner, Session, attached run, exact origin, and per-grant method policy before the real credential is resolved for it alone. Revocation, expiry, lease, and generation rotation invalidate substitutes immediately; audits record bounded codes only. The gateway itself ships separately; the surface stays 404 until `R_SESSION_EGRESS_GATEWAY_TOKEN` is configured. Session grants gain an explicit method policy that defaults to GET/HEAD and can only be widened by an owner acknowledging the exact prepared method list. The mediated `integration_request` Session-grant path is now a deprecated read-only compatibility path.

Add an opt-in Docker runtime checkpoint for the actual pinned Iron gateway. Fresh tasks perform normal repository and dependency setup without substitutes, then wait for controller-verified host-network admission before receiving short-lived encrypted client configuration and starting protected execution. Connector identity keys stay outside the workload, host rules bind the verified reciprocal veth/namespace identity, and ordinary clients receive only substitutes and public CA trust. Inference uses the existing trusted API gateway rather than the grant proxy. Other-provider parity, isolated Fast execution, and further lifecycle recovery remain unfinished; this checkpoint is not a full-readiness claim.
3 changes: 3 additions & 0 deletions apps/api/src/handlers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ export { inference } from './inference';
// the deployment Brain's own inference, keyless on the Brain's side
export { brainInference } from './brain-inference';

// session egress control plane: controller/gateway service principals only
export { sessionEgress } from './session-egress';

// narration tts
export { tts } from './tts';

Expand Down
Loading
Loading