Commit Graph

38332 Commits

Author SHA1 Message Date
Peter Steinberger
2a77b0b1d5 refactor(fleet): remove internal exports (#107438) 2026-07-14 04:56:37 -07:00
Peter Steinberger
372bb79cfb refactor(config): use dotenv buffer parsing 2026-07-14 04:52:10 -07:00
Peter Steinberger
6bea5ec113 refactor(talk): remove consult test dependency seam (#107432) 2026-07-14 04:49:11 -07:00
Peter Steinberger
c4a2db93d9 refactor(status): privatize channel feature rendering (#107428) 2026-07-14 04:40:29 -07:00
Peter Steinberger
35e3eff549 fix(agents): propagate auth lock release failures 2026-07-14 04:40:17 -07:00
Ayaan Zaidi
7d99de8e32 refactor(mcp): split session runtime modules for the LOC ratchet
Mechanical: manager, combined facade, install path, lifecycle, config
loading, and resolver types move to focused modules; the runtime facade
re-exports its prior surface so importers are unchanged. Deletes dead
tools-barrel re-exports flagged by check-dependencies. No behavior
change.
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
e85616940e fix(mcp): register full resolved URL for log redaction
Path-borne session tokens leak verbatim through fetch/undici transport
error strings; exact-value registration of the whole resolved URL closes
the last credential egress surface.
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
8b66fe773f feat(mcp): deliver requester-scoped MCP to shared-thread harnesses
Requester-scoped servers never enter harness-native MCP config: Codex
thread and CLI user-MCP projections partition them out (fail-closed,
static-partition fingerprints stay sender-independent so shared threads
never rotate). Codex delivers them as per-attempt dynamic tools through
a scoped-only runtime path on the same core manager, with a
session-stable advertised catalog so authed and unauthed senders share
one spec surface; unauthed calls get a clean not-connected tool error.
New SDK seam materializeRequesterScopedMcpToolsForHarnessRun lets any
future harness consume the same contract.
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
d50feceadb fix(mcp): address maintainer review of requester-scoped connections
Fail-closed app views for requester-scoped servers, tools.effective
fingerprint parity, declaration-order safe names, fail-closed duplicate
resolver registration, resolved-credential redaction registration,
per-session LRU cap on idle requester runtimes, combined-catalog re-merge
on part refresh, and SDK contract docs (timings, schema ownership).
2026-07-14 17:09:53 +05:30
Ayaan Zaidi
834561ad67 feat(mcp): resolve MCP server connections per trusted requester
Plugins can register api.registerMcpServerConnectionResolver({serverName,
resolve}) to bind an MCP server's transport (url/headers) to the trusted
sender of each message. Server identity stays static; only the connection
is per-requester. Runtimes are cached per (sessionId, channel, accountId,
senderId); runs without a trusted requester fail closed (cron, subagent,
heartbeat). Resolved credentials never enter fingerprints or logs. Static
servers keep the existing session-scoped lifecycle byte-for-byte.

Enables per-user hosted MCP sessions (e.g. per-user OAuth email/calendar)
in multi-sender channels like Slack.

Refs #106229
2026-07-14 17:09:53 +05:30
Peter Steinberger
1b02289fcf refactor(flows): trim internal export surface (#107420) 2026-07-14 04:32:33 -07:00
Peter Steinberger
e5e8d8717e refactor(agents): use diff native APIs 2026-07-14 04:31:34 -07:00
Peter Steinberger
9c03b2310e fix(terminal): keep slow clients connected under heavy output (#107348)
* fix(terminal): coalesce output and throttle slow clients

* fix(terminal): satisfy lint and deadcode gates
2026-07-14 04:28:27 -07:00
Peter Steinberger
c1b55ffab7 fix(schemas): preserve string enum fallbacks 2026-07-14 04:25:58 -07:00
Peter Steinberger
e798a76662 refactor(schemas): use TypeBox native enums 2026-07-14 04:25:58 -07:00
Peter Steinberger
2cc49503a6 refactor(hooks): trim internal export surface (#107412) 2026-07-14 04:22:46 -07:00
Peter Steinberger
bb482f474c test: avoid runtime discovery in reply fixtures (#107405) 2026-07-14 04:15:16 -07:00
Peter Steinberger
3b946e09da refactor(logging): trim internal export surface (#107407) 2026-07-14 04:12:23 -07:00
Peter Steinberger
b0efa489d1 refactor(export): guard optional scroll APIs 2026-07-14 03:53:54 -07:00
Peter Steinberger
ca83f1ca51 fix(ci): restore release validation after runtime migrations (#107371)
* test(ci): repair plugin prerelease validation

* test(zalo): preserve adapter narrowing in sender helpers

* test(ci): track current bundled startup metadata

* fix(google-meet): refresh plugin shrinkwrap
2026-07-14 03:52:44 -07:00
Peter Steinberger
e488dc0012 feat(sessions): signal watchers when an adopted upstream disappears (#107356) 2026-07-14 03:51:20 -07:00
Ayaan Zaidi
319a796079 fix(gateway): never leave the restart admission fence closed without a restart
A failed, refused, superseded, or thrown restart emission could leave the
reversible restart-signal admission fence closed forever: concurrent emitters
could overwrite the live rollback lease with a dead stand-in, the fenced body
had no try/finally, and the outer catch swallowed errors precisely because the
stuck fence made isGatewayRestartDraining() true. The gateway then rejected
every new task with GatewayDrainingError - silently - until an operator
restarted the process.

beginGatewayRestartSignalAdmission now returns null instead of stand-in
leases (single fence owner), emitPreparedGatewayRestart reopens the fence on
every non-delivery path via try/finally while preserving it whenever a queued
SIGUSR1 is unconsumed, refused-signal cleanup force-clears orphaned fences,
and admission close/reopen transitions are logged with their reason. The
self-contained SQLite restart-intent persistence moves to restart-intent.ts
to keep restart.ts within the LOC ratchet.

Fixes #107322
2026-07-14 16:14:48 +05:30
Peter Steinberger
26fe6e8ea3 refactor(audit): trim internal input types (#107390) 2026-07-14 03:43:49 -07:00
Peter Steinberger
3229fbdc48 fix(config): render Feishu group policy in Form mode (#107336)
* fix(ui): scope unsupported config guidance to fields

* fix(config): export Feishu transform inputs

* chore: remove release-owned changelog entry
2026-07-14 03:42:43 -07:00
Peter Steinberger
b68714ee42 refactor(backup): use tar read-entry APIs 2026-07-14 03:42:07 -07:00
Peter Steinberger
09e5d60d3c fix(ci): format node-host runtime/worker tests
Unformatted test edits landed on main and fail check-lint's oxfmt gate
on every branch.
2026-07-14 03:35:07 -07:00
Peter Steinberger
50e777bc25 refactor(tasks): trim internal export surface (#107385) 2026-07-14 03:33:52 -07:00
Peter Steinberger
20f145f9c1 fix(mac): enable terminal actions for paired-node sessions (#107361)
* fix(mac): enable paired-node terminal sessions

* fix(ci): align node worker bridge checks
2026-07-14 03:22:28 -07:00
Peter Steinberger
b9d0473b2e refactor(plugins): match Jiti callable contract 2026-07-14 03:20:29 -07:00
Jason (Json)
01a7f4fb3f feat(ui): add images and model selection to new sessions (#107358)
Merged via squash.

Prepared head SHA: cf99b5bab5
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-14 04:14:01 -06:00
Peter Steinberger
693d4f8fa3 test: avoid unrelated runtime discovery in agent runner tests (#107354) 2026-07-14 03:05:45 -07:00
Peter Steinberger
8ea5ee2f17 refactor(terminal): unify bounded buffers (#107337)
* refactor(terminal): unify bounded buffers

* refactor(terminal): tighten buffer closure

* refactor(terminal): keep buffer policy private
2026-07-14 03:04:37 -07:00
Peter Steinberger
ac4fd2ad42 refactor(media): use qrcode buffer renderer 2026-07-14 02:59:19 -07:00
Peter Steinberger
d8f705c0a2 refactor(skills): trim internal exports (#107353)
* refactor(skills): trim internal exports

* test(skills): derive mismatch fixture type
2026-07-14 02:58:34 -07:00
Peter Steinberger
d79573d457 fix: avoid redundant image-model calls for vision agents (#107311)
* fix: route native image inspection directly

* fix: narrow image fallback route

* style: satisfy image tool size ratchet

* test: align image fallback auth coverage

* fix: complete native image routing
2026-07-14 02:54:34 -07:00
Peter Steinberger
673b163b72 refactor(cli): use Commander native APIs 2026-07-14 02:45:52 -07:00
xingzhou
8acbf209cd fix(gateway): prevent broken emoji in WebSocket log IDs (#105001)
* fix(gateway): preserve Unicode in WebSocket log IDs

* test(gateway): cover UTF-16-safe log IDs

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 02:41:55 -07:00
Peter Steinberger
103d9ceb5e refactor(secrets): trim internal exports (#107342) 2026-07-14 02:38:46 -07:00
Peter Steinberger
92cca9343e feat(linux): headless node device capabilities (camera, location, notifications) (#107193)
* feat(linux): add node device capabilities

* fix(linux-node): actionable pending-approval error + node-host advertise integration test

* fix(linux-node): map geoclue access-denied to LOCATION_DISABLED; floor camera maxWidth to avoid zero-height scale

* fix(linux-node): clamp small camera maxWidth to 2 instead of default

* docs(linux-node): clarify where-am-i -t is a process timeout, not update throttle

* refactor(gateway): extract legacy-node filter + rejection hint to fit LOC ratchet; docs-map + deadcode baseline

* fix(gateway): drop now-unused DEFAULT_DANGEROUS_NODE_COMMANDS import after hint extraction

* test(node-host): drop imports orphaned by removed error-code test
2026-07-14 02:30:36 -07:00
snowzlmbot
e8ad0466ff fix: render assistant transcript headers safely (#99404)
* fix: render assistant transcript headers safely

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

* fix(markdown): nest crossing annotation spans

* fix(markdown): protect final transport projections

* refactor(markdown): split transcript render ownership

* test(ui): cover assistant transcript render flag

* refactor(markdown): keep transcript helpers private

* docs(changelog): note assistant transcript headers

* chore(plugin-sdk): refresh transcript annotation baseline

* fix(markdown): harden final transcript projections

* docs(changelog): defer transcript note to release

* refactor(markdown): centralize HTML tokenization

* fix(markdown): satisfy lint gates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
2026-07-14 02:25:37 -07:00
Peter Steinberger
b89f6df6b8 refactor(net): share Undici fetch normalization 2026-07-14 02:22:28 -07:00
Peter Steinberger
d87aea2b83 test(auto-reply): accelerate fallback coverage (#107316) 2026-07-14 02:21:21 -07:00
SL4N
275cc7fd8f fix(sessions): disk budget counts unremovable *.migrated sidecars and evicts live sessions instead (#107238)
* fix(sessions): exclude migration archives from disk budget

Co-authored-by: SL4N <272086617+SL4N@users.noreply.github.com>

* refactor(sessions): keep disk budget scan bounded

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: SL4N <272086617+SL4N@users.noreply.github.com>
2026-07-14 02:19:08 -07:00
Peter Steinberger
7ab879b45c refactor(net): consolidate Undici runtime loading 2026-07-14 02:11:05 -07:00
SL4N
45e651314c fix(cron): retry session lifecycle claim conflicts (#107236)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: SL4N <272086617+SL4N@users.noreply.github.com>
2026-07-14 02:02:39 -07:00
Peter Steinberger
4ab40c621a refactor(sqlite): use Kysely compile helpers 2026-07-14 02:01:04 -07:00
Peter Steinberger
c0e0be041a fix: retain who said what across group chat turns (#107025)
* fix(sessions): preserve group sender context across turns

* refactor(sessions): isolate sender replay boundary

* refactor(sessions): adapt sender replay to session boundary

* fix(agent): align sender context boundary projections

* fix(agent): retain queued sender transcript pairs

* fix(agent): forward sender boundary through session runtime

* fix(agent): preserve sender boundary invariants

* fix(agent): correlate persisted sender turns

* test(agent): satisfy sender correlation lint

* fix(agent): retain sender on persisted retries

* test(agent): type persisted retry harness

* fix(agent): match textless sender turns exactly

* refactor(agent): keep session guard within LOC budget
2026-07-14 01:58:29 -07:00
Peter Steinberger
625d859938 test(ci): harden scheduled release probes (#107272)
* test(ci): harden scheduled release probes

* docs(agents): record testbox warmup failure

* test(wizard): avoid Promise executor return
2026-07-14 01:48:10 -07:00
Peter Steinberger
69e2282c46 test(wizard): satisfy promise executor lint (#107301) 2026-07-14 01:44:26 -07:00
Peter Steinberger
03a8a7dd17 refactor(json): share JSON5 fallback parsing 2026-07-14 01:35:48 -07:00