Commit Graph

68315 Commits

Author SHA1 Message Date
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
98a1535fa3 fix(mcp): regenerate plugin SDK baseline after rebase 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
2b0cd2761c test(anthropic): type node invoke mock from runtime (#107421) 2026-07-14 04:39:47 -07:00
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
97df597688 fix(twitch): abort timed-out user lookups (#107360)
Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-07-14 04:22:34 -07:00
Peter Steinberger
5688d90bf3 fix(signal): await daemon exit before restart (#107409)
Co-authored-by: zhoukailian <2415699291@qq.com>
2026-07-14 04:21:51 -07:00
Peter Steinberger
0604903f88 fix(session-catalog): authorize paired-node reads (#107410) 2026-07-14 04:19:09 -07:00
Peter Steinberger
bb482f474c test: avoid runtime discovery in reply fixtures (#107405) 2026-07-14 04:15:16 -07:00
Peter Steinberger
b911f94be7 fix(signal): reconnect receive loop after stalled container handshake (#107386)
* fix(signal): bound container receive handshake waits

Co-authored-by: NIO <hu.genshen@xydigit.com>

* test(signal): stabilize adapter mocks

---------

Co-authored-by: NIO <hu.genshen@xydigit.com>
2026-07-14 04:13:12 -07:00
Peter Steinberger
3b946e09da refactor(logging): trim internal export surface (#107407) 2026-07-14 04:12:23 -07:00
Peter Steinberger
4ea1c71b88 fix(signal): keep username targets out of phone normalization (#107365)
* fix(signal): canonicalize username targets

Co-authored-by: ly-wang19 <ly-wang19@users.noreply.github.com>

* fix(signal): canonicalize username targets

---------

Co-authored-by: ly-wang19 <ly-wang19@users.noreply.github.com>
2026-07-14 04:11:46 -07:00
Peter Steinberger
c56d1bbbbb fix(reef): send through the connected gateway (#107373)
* fix(reef): route outbound through gateway

* chore: keep Reef release note in PR
2026-07-14 04:08:36 -07:00
Peter Steinberger
6ceb72d2bd refactor(memory): split QMD manager responsibilities (#107381)
* refactor(memory): split QMD manager responsibilities

* fix(memory): keep QMD helper types private

* style(memory): format QMD debug types
2026-07-14 04:07:51 -07:00
Peter Steinberger
dd42e80480 refactor(qa-lab): split mock and Slack runtimes (#107377)
* refactor(qa-lab): split mock and Slack runtimes

* refactor(qa-lab): narrow Slack helper exports
2026-07-14 04:06:48 -07:00
Peter Steinberger
236a6b815c refactor(diffs): trim internal export surface (#107400) 2026-07-14 04:02:26 -07:00
Peter Steinberger
610c25881b fix(feishu): remove unused schema builder export (#107395) 2026-07-14 03:56:36 -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
Peter Steinberger
c5da3462b8 refactor(media): collapse MIME precedence 2026-07-14 03:50:59 -07:00
Peter Steinberger
713b6607b2 fix(google-meet): update dependency shrinkwrap (#107382)
* style(node-host): format tests

* fix(google-meet): update dependency shrinkwrap
2026-07-14 03:47:12 -07:00
Peter Steinberger
e0fd84b019 refactor(ui): use highlight.js native registry 2026-07-14 03:46:42 -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
723895d713 fix(deps): regenerate google-meet shrinkwrap for jszip
5c509efb02 added jszip without regenerating npm-shrinkwrap.json,
failing check-shrinkwrap on main.
2026-07-14 03:41:49 -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
bc4ed5cf61 feat(macos): native-feel dashboard hosting — instant reopen, preload, frame autosave, ⌘N/⌘K, route memory (#106997)
* feat(macos): native-feel dashboard hosting: instant reopen, preload, frame autosave, ⌘N/⌘K, route memory

The hosted Control UI dashboard now skips SPA reloads when reopening an
unchanged endpoint (auth-equality gated), preloads after launch when a
credentialed local/direct config exists, autosaves its window frame, maps
⌘N/⌘K menu items onto the shipped native web events, filters browser-tell
context-menu items, restores the last committed route via web-side
localStorage memory, and themes the pre-paint background.

* refactor(ui): satisfy TS LOC ratchet: move optional lazy-element helpers out of app-host

app-host.ts is over the 500-line ratchet ceiling and may not grow; move the
self-contained optional custom-element block into lazy-custom-element.ts (its
natural owner) and fold the route-restore decision into native-route-memory's
considerRouteRestore so the shell only replaces-or-persists.

* fix(macos): recover stuck dashboard command queue via deliverability gate

Replace the failure-page-only fast-path check with canDeliverNativeCommands
(live document or in-flight load); a terminally cancelled reload now falls
through to the reload path instead of queueing ⌘N/⌘K forever.

* fix(ui): let in-flight navigation win over native route restore

The one-shot startup restore now checks the rendered/pending match against
the committed bootstrap route; an explicit navigation already in flight
(replayed native new-session, fast click) is no longer clobbered.

* docs(ui): note idempotent collapse of pending native new-session replays

* fix(macos): drop queued dashboard commands on terminal load failure

Queued ⌘N/⌘K are moment-bound; surviving a failure page meant a later
recovery reload replayed stale commands (double palette toggle nets closed,
surprise navigation). Both failure entry points now clear the queue.

* fix(ui): persist native route memory only for settled router states

Mid-navigation emissions still carry the stale committed bootstrap route; an
interrupted restore could overwrite the remembered destination with it.

* fix(macos): coalesce dashboard opens for queued native commands

One in-flight open drains a manager-level queue in press order; a Task per
key press could race window creation (duplicate windows) and reorder ⌘N/⌘K
delivery on the non-immediate remote path.

* fix(macos): correct dashboard placement after frame-autosave restore

setFrameAutosaveName re-applies the stored frame; run ensureOnScreen after
both autosave-name assignments so a frame saved on a disconnected monitor
cannot restore the window off-screen.

* fix(macos): clear dashboard failure state when history restores a real document

Swipe-back/⌘[ off the failure page commits an http(s) document without
passing through load(); the flag previously stayed set and forced a reload
on the next native command.

* fix(macos): keep in-flight dashboard loads instead of restarting them

An open/update during the launch preload previously cancelled and restarted
the same-URL load; in-flight non-failure documents now count as usable in
the reload decision.

* fix(macos,ui): ⌘K legacy fallback + transient search param filtering

Command palette dispatch now sends a cancelable toggle event and falls back
to the shipped open-search event when no handler acknowledges it, so ⌘K
keeps working against older gateway-served bundles. Route memory strips
one-shot action params (?draft=) before persisting; navigation state like
?session= still restores.

* chore(i18n): register dashboard menu strings + drop unused route-memory export

native:i18n:sync inventory + per-locale artifacts for New Session / Command
Palette…; StoredNativeRoute is module-internal after the considerRouteRestore
refactor (deadcode exports gate).

* chore(i18n): rebaseline raw-copy for relocated lazy-element labels

The lazy-custom-element extraction moved three internal load-failure labels
out of app-host.ts; refresh the keyless raw-copy baseline to match (main's
new ui:i18n:verify gate).
2026-07-14 03:33:25 -07:00
Peter Steinberger
5bc101bab2 fix(deadcode): remove stale UI baseline rows (#107383) 2026-07-14 03:31:48 -07:00
Peter Steinberger
5c509efb02 refactor(google-meet): use JSZip for exports 2026-07-14 03:29:43 -07:00
Peter Steinberger
276efaa48b refactor(ui): privatize chat helpers (#107379) 2026-07-14 03:27:45 -07:00
Josh Avant
db541e5c60 fix(ios): preserve pinned tools for archive (#107188) 2026-07-14 03:25:56 -07:00
Peter Steinberger
5f75c05192 fix(deadcode): baseline new-session UI exports from #107358
check-dependencies failed on main and every PR because #107358 landed
four unused UI exports without a baseline update.
2026-07-14 03:25:29 -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
Peter Steinberger
70dbbf3bcd fix(msteams): rename shadowed close callback in lifecycle test
ee472357cb added an app.listen callback param that the inner
server.close callback shadowed, failing oxlint no-shadow on main.
2026-07-14 03:17:59 -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