Commit Graph

33319 Commits

Author SHA1 Message Date
Shakker
bbe3dc6c2f fix: sanitize models list terminal output 2026-04-22 04:51:38 +01:00
Shakker
754125947a fix: include partial provider discovery fallbacks 2026-04-22 04:51:38 +01:00
Shakker
ae35795c04 docs: add models catalog changelog 2026-04-22 04:51:38 +01:00
Shakker
10959aa980 fix: restrict static model catalogs to bundled providers 2026-04-22 04:51:38 +01:00
Shakker
f3da6e96b7 fix: bound static provider catalog listing 2026-04-22 04:51:38 +01:00
Shakker
d6c7b468ea fix: honor provider hook aliases in catalog filters 2026-04-22 04:51:38 +01:00
Shakker
f9bac5038c fix: harden static provider catalog path 2026-04-22 04:51:38 +01:00
Shakker
d73c31110b fix: harden static provider catalog listing 2026-04-22 04:51:38 +01:00
Shakker
04ecf284fc fix: use static provider catalogs for model listing 2026-04-22 04:51:38 +01:00
Shakker
651d5e0022 docs: document provider catalog model discovery 2026-04-22 04:51:38 +01:00
Shakker
8ba52acc41 fix: add Kimi K2.6 provider catalog rows 2026-04-22 04:51:38 +01:00
Shakker
cc78dd2044 fix: show provider catalog models in all list 2026-04-22 04:51:38 +01:00
Peter Steinberger
11f38afbfc docs: note memory-core cron startup warning fix (#69941) (thanks @Sanjays2402) 2026-04-22 04:50:25 +01:00
Sanjay Santhanam
a37321ad5f fix(memory-core): suppress startup "cron service unavailable" warning (closes #69939)
memory-core registers a gateway:startup hook that runs reconcileManagedDreamingCron() before deps.cron is attached to the startup event (the startup hook is deferred via a 250ms setTimeout in server.impl).

Downgrade the first startup-time "cron service unavailable" warning to a debug log, and rely on the existing runtime reconciliation path to warn if the cron service truly stays unavailable after boot. The managed dreaming cron job itself runs correctly — this was a log-noise regression, not a functional failure.

Signed-off-by: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com>
2026-04-22 04:50:25 +01:00
Peter Steinberger
f027d8faa7 refactor(discord): share native interaction channel context 2026-04-22 04:47:57 +01:00
Peter Steinberger
00cdab99bf test: harden ci timing cleanup 2026-04-22 04:45:19 +01:00
Peter Steinberger
4d223950a0 perf(ci): use tsgo for sdk declaration emit 2026-04-22 04:45:19 +01:00
Gustavo Madeira Santana
a197b544fe fix(doctor): route setup doctor discovery (#69919)
Merged via squash.

Prepared head SHA: 90c7067941
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-21 23:40:22 -04:00
Peter Steinberger
a8a023779d fix(discord): preserve fetched thread parent for plugin commands (#69908) (thanks @neeravmakwana) 2026-04-22 04:31:31 +01:00
Neerav Makwana
349d86c152 fix(discord): move in-check inside try/catch in channel-access helper
Wrap the `key in channel` probe inside the existing `try/catch` in `readDiscordChannelPropertySafe` so a throwing Proxy `has` trap (or any other reflective error on the presence check) degrades to `undefined` instead of propagating, matching the existing behavior for throwing getters on the value read.

Add a regression test that exposes the interaction channel through a Proxy whose `has` trap throws on `parentId` and asserts the slash-command path still defers and dispatches.

No behavior change for Carbon prototype getters or plain-object channels: the safe accessor still traverses the prototype chain (required for Carbon's `GuildThreadChannel.parentId`), still returns `undefined` for missing or throwing reads, and still preserves null-to-undefined coercion downstream.
2026-04-22 04:31:31 +01:00
Neerav Makwana
dbf8fd0db7 fix(discord): read channel.parentId through safe accessor on partial thread channels
The Carbon `GuildThreadChannel.parentId` getter throws "Cannot access rawData on partial Channel" whenever Discord delivers a partial thread (for example when an interaction channel is unhydrated). The existing `"parentId" in channel` guard did not help because the `in` operator returns true for prototype getters without invoking them, so the read still crashed `/new` and similar slash commands, guild reactions, and the native model picker when invoked from inside a thread.

Expose a `resolveDiscordChannelParentIdSafe` helper alongside the other channel accessors and use it everywhere we currently read `channel.parentId` from the inbound Discord channel. When the getter throws, the helper returns `undefined`, and the downstream code already falls back to re-fetching the thread id via `resolveDiscordChannelInfo`, keeping authorization/config lookups on the same inputs as before.

Add a regression test that installs a throwing `parentId` getter on a partial guild thread channel and asserts the slash-command path still defers and dispatches instead of surfacing an unauthorized reply.

Fixes #69861
2026-04-22 04:31:31 +01:00
Peter Steinberger
b0734664f8 style: format touched code 2026-04-22 04:24:45 +01:00
Peter Steinberger
2b09c3c7c7 perf(ci): use tsgo for extension boundary compiles 2026-04-22 04:22:38 +01:00
Peter Steinberger
23a017be7c fix: suppress Mattermost quoted reasoning replies (#69927) (thanks @lawrence3699) 2026-04-22 04:10:28 +01:00
lawrence3699
bb43c7b89f fix(mattermost): suppress reasoning previews 2026-04-22 04:10:28 +01:00
lawrence3699
367faac596 fix(mattermost): suppress reasoning-only replies 2026-04-22 04:10:28 +01:00
Peter Steinberger
115accfc82 ci: narrow extension boundary cache inputs 2026-04-22 04:08:42 +01:00
Peter Steinberger
24c409035c perf(gateway): lazy load deferred plugin bootstrap 2026-04-22 04:06:22 +01:00
Peter Steinberger
cb4ec1265f fix(agents): align embedded built-in tool types 2026-04-22 03:42:49 +01:00
Ayaan Zaidi
407107276f fix: report cron message trace channel (#69940) (thanks @davehappyminion) 2026-04-22 08:12:20 +05:30
Ayaan Zaidi
2da1406b29 test(cron): trim message trace comments 2026-04-22 08:12:20 +05:30
davehappyminion
9db67e79a5 fix(cron): narrow accountId spoof guard to explicit mismatch only
Addresses codex P1 review on PR #69940: the previous guard rejected
targets that simply omitted accountId, but message-tool fills accountId
from the agent's bound account at exec time (message-tool.ts:730-733),
so account-bound cron jobs legitimately start with target.accountId
undefined. Rejecting that case lost skipMessagingToolDelivery, causing
dispatchCronDelivery to double-send.

Now we only reject when the tool explicitly names a *different*
accountId — which is the real CWE-284 spoof vector. Omission matches.

Tests updated accordingly:
- matcher unit test: flipped "omit accountId" case from false to true;
  "accountIds differ" case preserved as the real spoof guard
- integration tests: one legitimate-default case (rewrite happens),
  one explicit-mismatch case (rewrite suppressed)

658 cron tests pass.
2026-04-22 08:12:20 +05:30
davehappyminion
851bef9c25 fix(cron): rewrite generic message provider in trace + guard accountId spoof
When a cron job sends via the generic `message` tool, the delivery trace
previously recorded `messageToolSentTo[i].channel = "message"` even
though the send was resolved to a specific channel (e.g. telegram). This
made `jq` diffing intended-vs-actual awkward for the happy path.

Fix:
- `normalizeMessagingToolTarget` now rewrites `channel: "message"`
  to the resolved channel when `matchesMessagingToolDeliveryTarget`
  confirms the tool send matches the resolved cron delivery target.
  Genuinely unmatched generic sends keep the literal "message" so
  audits can still flag them.

- `matchesMessagingToolDeliveryTarget` now requires strict accountId
  equality whenever the resolved delivery carries an `accountId`. An
  omitted `target.accountId` previously short-circuited the guard and
  was treated as a wildcard, letting a generic send spoof attribution to
  any bot identity in the cron delivery trace (CWE-284). This was
  flagged by Aisle on #69771.

Tests:
- Unit: `matchesMessagingToolDeliveryTarget` rejects omitted-accountId
  against account-tied delivery; still matches same-accountId.
- Integration: cron run trace rewrites generic "message" to the
  resolved channel, preserves accountId on both sides, and leaves the
  literal "message" provider in place when the tool send omits
  accountId against an account-tied delivery.
2026-04-22 08:12:20 +05:30
Peter Steinberger
e8f18f95d5 test(docker): cover slack bundled runtime deps 2026-04-22 03:40:37 +01:00
Peter Steinberger
25e2e64ce4 test(docker): cover bundled channel update deps 2026-04-22 03:40:37 +01:00
Peter Steinberger
f9b20c7d17 fix(plugins): repair bundled runtime deps during doctor 2026-04-22 03:40:37 +01:00
Peter Steinberger
6608a50b39 perf(ci): trim gateway watch regression build 2026-04-22 03:35:19 +01:00
Peter Steinberger
0f4dc42767 build: update pi packages to 0.68.1 2026-04-22 03:35:15 +01:00
Peter Steinberger
de6f548a7c fix: suppress disabled channel read-only presence 2026-04-22 03:21:07 +01:00
Aaron U'Ren
8d021ee7bf perf(plugins): prefer native jiti for bundled plugin dist modules (#69925)
Merged via squash.

Prepared head SHA: 1b2da10865
Co-authored-by: aauren <1392295+aauren@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-21 22:18:35 -04:00
Val Alexander
fe663de8c7 fix(ui): add clear pending config updates action (#68178)
Merged via squash.

Prepared head SHA: 1a3cb66fcb
Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com>
Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com>
Reviewed-by: @BunsDev
2026-04-21 21:11:51 -05:00
Peter Steinberger
e92079be6b fix: finish browser click timeout recovery (#63524) 2026-04-22 03:08:36 +01:00
Dongseok Paeng
cd82b94333 fix(browser): propagate click aborts through agent act routes
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-22 03:08:36 +01:00
Dongseok Paeng
adc05f090a fix(browser): time out stuck chrome mcp clicks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-22 03:08:36 +01:00
Peter Steinberger
c97c5a5aff fix: canonicalize opencode-go base URL 2026-04-22 03:05:48 +01:00
Peter Steinberger
1801b90460 chore: bump version to 2026.4.22 2026-04-22 03:04:53 +01:00
Peter Steinberger
d41c6403d5 docs: credit Chrome MCP timeout fix (#69733) 2026-04-22 03:02:49 +01:00
ayeshakhalid192007-dev
55c415a1da fix(browser): address review comments on Chrome MCP timeout handling 2026-04-22 03:02:49 +01:00
ayeshakhalid192007-dev
88268aa2cd fix(browser): make chrome.internal tests pass on Linux (existsSync mock) 2026-04-22 03:02:49 +01:00
ayeshakhalid192007-dev
dc9c46a8df fix(browser): reset Chrome MCP session after navigate_page timeout
navigateChromeMcpPage() now always passes a timeout to the Chrome MCP
navigate_page tool (defaulting to CHROME_MCP_NAVIGATE_TIMEOUT_MS when
the caller omits timeoutMs), and callTool() grows an optional safety-net
that tears down a stuck session via Promise.race so the next caller gets
a fresh subprocess. The catch block gains a transport-identity guard to
avoid clobbering a concurrently-created replacement session.
2026-04-22 03:02:49 +01:00