Commit Graph

15306 Commits

Author SHA1 Message Date
Peter Steinberger 24d16c39ad
refactor(plugin-sdk): remove source alias residue 2026-03-29 14:53:03 +01:00
Peter Steinberger 2dd29db464
fix: ease bundled browser plugin recovery 2026-03-29 22:39:30 +09:00
Peter Steinberger f1af7d66d2
chore: bump version to 2026.3.29 2026-03-29 14:33:12 +01:00
Thomas M 0a01386756
fix: canonicalize session keys at write time (#30654) (thanks @thomasxm)
* fix: canonicalize session keys at write time to prevent orphaned sessions (#29683)

resolveSessionKey() uses hardcoded DEFAULT_AGENT_ID="main", but all read
paths canonicalize via cfg. When the configured default agent differs
(e.g. "ops" with mainKey "work"), writes produce "agent:main:main" while
reads look up "agent:ops:work", orphaning transcripts on every restart.

Fix all three write-path call sites by wrapping with
canonicalizeMainSessionAlias:
- initSessionState (auto-reply/reply/session.ts)
- runWebHeartbeatOnce (web/auto-reply/heartbeat-runner.ts)
- resolveCronAgentSessionKey (cron/isolated-agent/session-key.ts)

Add startup migration (migrateOrphanedSessionKeys) to rename existing
orphaned keys to canonical form, merging by most-recent updatedAt.

* fix: address review — track agent IDs in migration map, align snapshot key

P1: migrateOrphanedSessionKeys now tracks agentId alongside each store
path in a Map instead of inferring from the filesystem path. This
correctly handles custom session.store templates outside the default
agents/<id>/ layout.

P2: Pass the already-canonicalized sessionKey to getSessionSnapshot so
the heartbeat snapshot reads/restores use the same key as the write path.

* fix: log migration results at all early return points

migrateOrphanedSessionKeys runs before detectLegacyStateMigrations, so
it can canonicalize legacy keys (e.g. "main" → "agent:main:main") before
the legacy detector sees them. This caused the early return path to skip
logging, breaking doctor-state-migrations tests that assert log.info was
called.

Extract logMigrationResults helper and call it at every return point.

* fix: handle shared stores and ~ expansion in migration

P1: When session.store has no {agentId}, all agents resolve to the same
file. Track all agentIds per store path (Map<path, Set<id>>) and run
canonicalization once per agent. Skip cross-agent "agent:main:*"
remapping when "main" is a legitimate configured agent sharing the store,
to avoid merging its data into another agent's namespace.

P2: Use expandHomePrefix (environment-aware ~ resolution) instead of
os.homedir() in resolveStorePathFromTemplate, matching the runtime
resolveStorePath behavior for OPENCLAW_HOME/HOME overrides.

* fix: narrow cross-agent remap to provable orphan aliases only

Only remap agent:main:* keys where the suffix is a main session alias
("main" or the configured mainKey). Other agent:main:* keys — hooks,
subagents, cron sessions, per-sender keys — may be intentional
cross-agent references and must not be silently moved into another
agent's namespace.

* fix: run orphan-key session migration at gateway startup (#29683)

* fix: canonicalize cross-agent legacy main aliases in session keys (#29683)

* fix: guard shared-store migration against cross-agent legacy alias remap (#29683)

* refactor: split session-key migration out of pr 30654

---------

Co-authored-by: Your Name <your_email@example.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-29 18:59:25 +05:30
wangchunyue 2c8c4e45f1
fix: preserve fallback prompt on model fallback for new sessions (#55632) (thanks @openperf)
* fix(agents): preserve original task prompt on model fallback for new sessions

* fix(agents): use dynamic transcript check for sessionHasHistory on fallback retry

Address Greptile review feedback: replace the static !isNewSession flag
with a dynamic sessionFileHasContent() check that reads the on-disk
transcript before each fallback retry. This correctly handles the edge
case where the primary model completes at least one assistant-response
turn (flushing the user message to disk) before failing - the fallback
now sends the recovery prompt instead of duplicating the original body.

The !isNewSession short-circuit is kept as a fast path so existing
sessions skip the file read entirely.

* fix(agents): address security vulnerabilities in session fallback logic

Fixes three medium-severity security issues identified by Aisle Security Analysis on PR #55632:
- CWE-400: Unbounded session transcript read in sessionFileHasContent()
- CWE-400: Symlink-following in sessionFileHasContent()
- CWE-201: Sensitive prompt replay to a different fallback provider

* fix(agents): use JSONL parsing for session history detection (CWE-703)

Replace bounded byte-prefix substring matching in sessionFileHasContent()
with line-by-line JSONL record parsing. The previous approach could miss
an assistant message when the preceding user content exceeded the 256KB
read limit, causing a false negative that blocks cross-provider fallback
entirely.

* fix(agents): preserve fallback prompt across providers

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-29 18:35:45 +05:30
wangchunyue fc3f6fa51f
fix: preserve node exec cwd on remote hosts (#50961) (thanks @openperf)
* fix(gateway): skip local workdir resolution for remote node execution

* chore: add inline comment for non-obvious node workdir skip

* fix: preserve node exec cwd on remote hosts (#50961) (thanks @openperf)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-29 17:46:49 +05:30
Mariano 92d0b3a557
Gateway: abstract task registry storage (#56927)
Merged via squash.

Prepared head SHA: 8db9b860e8
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-03-29 12:58:06 +02:00
Mariano 17c36b5093
Gateway: track background task lifecycle (#52518)
Merged via squash.

Prepared head SHA: 7c4554204e
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-03-29 12:48:02 +02:00
Peter Steinberger 270d0c5158
fix: avoid telegram plugin self-recursive sdk imports 2026-03-29 11:32:29 +01:00
Luke 88ca0b2c3f
fix(status): handle node-only hosts on current main (#56718)
* Status: handle node-only hosts

* Status: address follow-up review nits

* Changelog: note node-only status fix

* Status: lazy-load node-only helper
2026-03-29 21:12:08 +11:00
nanakotsai 571da81a35 fix: keep openai-codex on HTTP responses transport 2026-03-29 15:04:38 +05:30
助爪 443295448c
Track ACP sessions_spawn runs and emit ACP lifecycle events (#40885)
* Fix ACP sessions_spawn lifecycle tracking

* fix(tests): resolve leftover merge markers in sessions spawn lifecycle test

* fix(agents): clarify acp spawn cleanup semantics

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-03-29 18:20:10 +09:00
Vincent Koc 7c50138f62 fix(plugins): keep built cli metadata scans lightweight 2026-03-29 17:55:17 +09:00
Hsiao A cea7162490
feat(slack): status reaction lifecycle for tool/thinking progress indicators (#56430)
Merged via squash.

Prepared head SHA: 1ba5df3e3b
Co-authored-by: hsiaoa <70124331+hsiaoa@users.noreply.github.com>
Co-authored-by: frankekn <4488090+frankekn@users.noreply.github.com>
Reviewed-by: @frankekn
2026-03-29 16:49:53 +08:00
Vincent Koc af694def5b
fix(agents): fail closed on silent turns (#52593)
* fix(agents): fail closed on silent turns

* fix(agents): suppress all silent turn emissions

* fix(agents): pass silent turns into embedded subscribe
2026-03-29 17:40:20 +09:00
Vincent Koc 57882f0351
fix(web-search): localize shared search cache (#54040)
* fix(web-search): localize shared search cache

* docs(changelog): note localized web search cache

* test(web-search): assert module-local cache behavior

* Update CHANGELOG.md
2026-03-29 17:25:07 +09:00
Vignesh Natarajan 4d54376483 Tests: stabilize shard-2 queue and channel state 2026-03-29 01:12:58 -07:00
Vignesh Natarajan 9c185faba9 Agents: cover subagent memory tool policy 2026-03-29 01:12:58 -07:00
factnest365-ops 6c85c82ba3 fix: allow memory_search and memory_get in sub-agent sessions
Remove memory_search and memory_get from SUBAGENT_TOOL_DENY_ALWAYS.

These are read-only tools with no side effects that are essential for
multi-agent setups relying on shared memory for context retrieval.

Rationale:
- Read-only tools (memory_search, memory_get) have no side effects and
  cannot modify state, send messages, or affect external systems
- Other read-only tools (read, web_search, web_fetch) are already
  available to sub-agents by default
- Multi-agent deployments with shared knowledge depend on memory tools
  for context retrieval
- The workaround (tools.subagents.tools.alsoAllow) works but requires
  manual configuration that contradicts memorySearch.enabled: true

Fixes #55385
2026-03-29 01:12:58 -07:00
Peter Steinberger 8e0ab35b0e
refactor(plugins): decouple bundled plugin runtime loading 2026-03-29 09:10:38 +01:00
Vincent Koc 1738d540f4
fix(gateway/auth): local trusted-proxy fallback to require token auth (#54536)
* fix(auth): improve local request and trusted proxy handling

* fix(gateway): require token for local trusted-proxy fallback

* docs(changelog): credit trusted-proxy auth fix

* Update src/gateway/auth.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix(gateway): fail closed on forwarded local detection

* docs(gateway): clarify fail-closed local detection

* fix(gateway): harden trusted-proxy local fallback

* fix(gateway): align trusted-proxy loopback validation

* Update CHANGELOG.md

---------

Co-authored-by: “zhangning” <zhangning.2025@bytedance.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-29 17:05:00 +09:00
Vincent Koc 9777781001
fix(subagents): preserve requester agent for inline announces (#55998)
* fix(subagents): preserve requester agent on inline announce

* docs(changelog): remove maintainer follow-up entry
2026-03-29 17:00:05 +09:00
Vincent Koc d6a4ec6a3d
fix(telegram): sanitize invalid stream-order errors (#55999)
* fix(telegram): sanitize invalid stream order errors

* docs(changelog): remove maintainer follow-up entry
2026-03-29 16:59:15 +09:00
Vincent Koc aec58d4cde
fix(agents): repair btw reasoning and oauth snapshot refresh (#56001)
* fix(agents): repair btw reasoning and oauth snapshot refresh

* Update CHANGELOG.md

* test(agents): strengthen btw reasoning assertion
2026-03-29 16:58:49 +09:00
Peter Steinberger f4d60478c9
test: reset plugin runtime state in optional tools tests 2026-03-29 08:52:12 +01:00
Ted Li ebb919e311
fix: prefer transcript model in sessions list (#55628) (thanks @MonkeyLeeT)
* gateway: prefer transcript model in sessions list

* gateway: keep live subagent model in session rows

* gateway: prefer selected model until runtime refresh

* gateway: simplify session model identity selection

* gateway: avoid transcript model fallback on cost-only reads
2026-03-29 13:20:55 +05:30
Vignesh Natarajan 08b5206b19
chore(test): harden channel plugin registry against malformed runtime state 2026-03-29 00:47:39 -07:00
Peter Steinberger c48e0f8e6a
style: normalize import order and formatting 2026-03-29 16:33:22 +09:00
Peter Steinberger 04c976b43d
refactor(markdown): share render-aware chunking 2026-03-29 16:33:22 +09:00
Peter Steinberger c664b67796
fix: apply Mistral compat across proxy transports 2026-03-29 16:32:31 +09:00
GodsBoy bc9c074b2c fix(channels): use pinned channel registry for outbound adapter resolution
loadChannelOutboundAdapter (via createChannelRegistryLoader) was reading
from getActivePluginRegistry() — the unpinned active registry that gets
replaced whenever loadOpenClawPlugins() runs (config schema reads, plugin
status queries, tool listings, etc.).

After replacement, the active registry may omit channel entries or carry
them in setup mode without outbound adapters, causing:

  Outbound not configured for channel: telegram

The channel inbound path already uses the pinned registry
(getActivePluginChannelRegistry) which is frozen at gateway startup and
survives all subsequent registry replacements. This commit aligns the
outbound path to use the same pinned surface.

Adds a regression test that pins a registry with a telegram outbound
adapter, replaces the active registry with an empty one, then asserts
loadChannelOutboundAdapter still resolves the adapter.

Fixes #54745
Fixes #54013
2026-03-29 12:54:14 +05:30
Vignesh Natarajan 4b137da582
Test: harden command queue test isolation (CI chore) 2026-03-28 23:43:03 -07:00
Vignesh Natarajan e816d0968a
Status: suppress false dual-stack loopback port warning (#53398) 2026-03-28 23:25:02 -07:00
Jakub Rusz 7e7e45c2f3
feat(matrix): add draft streaming (edit-in-place partial replies) (#56387)
Merged via squash.

Prepared head SHA: 53e566bf30
Co-authored-by: jrusz <55534579+jrusz@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-29 01:43:02 -04:00
Shen Yiming eee8e9679e
fix(clawhub): sanitize archive temp filenames (openclaw#56779)
Verified:
- pnpm build
- pnpm check
- pnpm test

Co-authored-by: soimy <1550237+soimy@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-29 00:38:03 -05:00
scoootscooob 5d81b64343
fix(exec): fail closed when sandbox is unavailable and harden deny followups (#56800)
* fix(exec): fail closed when sandbox is unavailable and harden deny followups

* docs(changelog): note exec fail-closed fix
2026-03-28 22:20:49 -07:00
Ayaan Zaidi d5e59621a7 fix: keep telegram plugin fallback explicit (#45911) (thanks @suboss87) 2026-03-29 10:45:57 +05:30
Ayaan Zaidi 1791c7c304 fix: unify telegram exec approval auth 2026-03-29 10:45:57 +05:30
Subash Natarajan aee7992629 fix(telegram): accept approval callbacks from forwarding target recipients
When approvals.exec.targets routes to a Telegram DM, the recipient
receives inline approval buttons but may not have explicit
channels.telegram.execApprovals configured. This adds a fallback
isTelegramExecApprovalTargetRecipient check so those DM recipients
can act on the buttons they were sent.

Includes accountId scoping for multi-bot deployments and 9 new tests.
2026-03-29 10:45:57 +05:30
Ayaan Zaidi e3faa99c6a
fix(plugins): preserve gateway-bindable registry reuse
# Conflicts:
#	src/agents/runtime-plugins.test.ts
#	src/agents/runtime-plugins.ts
#	src/plugins/loader.ts
#	src/plugins/tools.ts
2026-03-29 09:59:06 +05:30
Vignesh Natarajan 384a590e54
Agents UI: fix effective model and file hydration 2026-03-28 21:10:39 -07:00
Dewaldt Huysamen 27188fa39f
fix: scope subagent registry reuse to tool loading (#56240) (thanks @GodsBoy)
* fix(plugins): reuse active registry for sub-agent tool resolution

* test(plugins): harden resolveRuntimePluginRegistry with per-field, caller-shape, and cold-start tests

Add 11 regression tests covering:
- R1: Per-field isolation (coreGatewayHandlers, includeSetupOnlyChannelPlugins,
  preferSetupRuntimeForChannelPlugins each independently prevent fallback;
  empty onlyPluginIds[] treated as non-gateway-scoped)
- R2: Caller-shape regression (tools.ts, memory-runtime.ts,
  channel-resolution.ts shapes fall back; web-search-providers.runtime.ts
  with onlyPluginIds does not)
- R3: Cold-start path (null active registry falls through to loadOpenClawPlugins)

Add debug logging to resolveRuntimePluginRegistry recording which exit path
was taken (no-options, cache-key-match, non-gateway-scoped fallback, fresh load).

* refactor: simplify plugin registry resolution tests and trim happy-path debug logs

* fix(plugins): address review comments on registry fallback

- Fix cold-start test assertion: loadOpenClawPlugins always activates
  the registry (shouldActivate defaults to true), so getActivePluginRegistry()
  is not null after the call. Updated assertion to match actual behavior.

- Add safety comment documenting why the non-gateway-scoped fallback is
  safe despite cache-key mismatch: single-gateway-per-process model means
  sub-agents share workspaceDir, config, and env with the gateway.

* test(plugins): restructure per-field isolation tests to avoid load timeouts

Test isGatewayScopedLoad directly instead of going through the full
resolveRuntimePluginRegistry path which triggers expensive plugin
discovery. This fixes the includeSetupOnlyChannelPlugins test timing
out in CI while providing more precise coverage of the predicate.

* fix(plugins): expand safety comment to address startup-scoped registry concern

* fix(plugins): scope subagent registry reuse to tool loading

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-29 09:36:09 +05:30
Vignesh Natarajan 6883f688e8
Docker setup: force BuildKit for local builds 2026-03-28 20:46:35 -07:00
yuanchao ec7f19e2ef
fix(kimi): preserve valid Anthropic-compatible toolCall arguments in malformed-args repair path (openclaw#54491)
Verified:
- pnpm build
- pnpm check
- pnpm test -- src/agents/pi-embedded-runner/run/attempt.test.ts

Co-authored-by: yuanaichi <7549002+yuanaichi@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-28 22:37:50 -05:00
Vignesh Natarajan a2e4707cfe
fix(agents): recover prefixed malformed tool-call JSON 2026-03-28 20:22:22 -07:00
Vignesh Natarajan 64da916590
fix(tui): stop hijacking j/k in model search 2026-03-28 19:48:00 -07:00
Vignesh Natarajan 61a0b02931
fix(tui): preserve optimistic user messages during active runs 2026-03-28 19:32:26 -07:00
Jackjin a0407c7254
fix(line): preserve underscores inside words in stripMarkdown (#47465)
Fixes #46185.

Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm test -- extensions/line/src/markdown-to-line.test.ts src/tts/prepare-text.test.ts

Note: `pnpm check` currently fails on unchanged `extensions/microsoft/speech-provider.test.ts` lines 108 and 139 on the rebased base, outside this PR diff.
2026-03-28 21:31:09 -05:00
Edward-Qiang-2024 1c8758fbd5
Fix: Correctly estimate CJK character token count in context pruner (openclaw#39985)
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test -- src/agents/pi-extensions/context-pruning.test.ts src/utils/cjk-chars.test.ts

Co-authored-by: Edward-Qiang-2024 <176464463+Edward-Qiang-2024@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-28 21:16:52 -05:00
Vignesh Natarajan 7cf87c4e53
chore(ci): refresh generated schema snapshots 2026-03-28 19:13:36 -07:00
Tak Hoffman 38d7e808d9
test: refresh bundled plugin metadata 2026-03-28 21:07:36 -05:00
Tak Hoffman f1970b8aef
fix(line): normalize canonical ACP targets (#56713) 2026-03-28 21:05:34 -05:00
Vignesh Natarajan 89881379dc
fix(config): allow plugin channels in hooks mappings 2026-03-28 19:00:05 -07:00
Tak Hoffman 3ce48aff66
Memory: add configurable FTS5 tokenizer for CJK text support (openclaw#56707)
Verified:
- pnpm build
- pnpm check
- pnpm test -- extensions/memory-core/src/memory/manager-search.test.ts packages/memory-host-sdk/src/host/query-expansion.test.ts
- pnpm test -- extensions/memory-core/src/memory/index.test.ts -t "reindexes when extraPaths change"
- pnpm test -- src/config/schema.base.generated.test.ts
- pnpm test -- src/media-understanding/image.test.ts
- pnpm test

Co-authored-by: Mitsuyuki Osabe <24588751+carrotRakko@users.noreply.github.com>
2026-03-28 20:53:29 -05:00
Tak Hoffman 6f7ff545dd
fix(line): add ACP binding parity (#56700)
* fix(line): support ACP current-conversation binding

* fix(line): add ACP binding routing parity

* docs(changelog): note LINE ACP parity

* fix(line): accept canonical ACP binding targets
2026-03-28 20:52:31 -05:00
Masato Hoshino 9449e54f4f
feat(line): add outbound media support for image, video, and audio
pnpm install --frozen-lockfile
pnpm build
pnpm check
pnpm vitest run extensions/line/src/channel.sendPayload.test.ts extensions/line/src/send.test.ts extensions/line/src/outbound-media.test.ts

Co-authored-by: masatohoshino <246810661+masatohoshino@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-28 20:51:16 -05:00
Peter Steinberger f9b1079283
build: cut 2026.3.28 stable 2026-03-29 02:33:41 +01:00
AaronLuo00 3b95aa8804 fix: address second-round review — Latin backward compat and emoji consistency
- Two-pass line splitting: first slice at maxChars (unchanged for Latin),
  then re-split only CJK-heavy segments at chunking.tokens. This preserves
  the original ~800-char segments for ASCII lines while keeping CJK chunks
  within the token budget.

- Narrow surrogate-pair adjustment to CJK Extension B+ range (D840–D87E)
  only, so emoji surrogate pairs are not affected. Mixed CJK+emoji text
  is now handled consistently regardless of composition.

- Add tests: emoji handling (2), Latin backward-compat long-line (1).

Addresses Codex P1 (oversized CJK segments) and P2s (Latin over-splitting,
emoji surrogate inconsistency).
2026-03-29 10:22:43 +09:00
AaronLuo00 a5147d4d88 fix: address bot review — surrogate-pair counting and CJK line splitting
- Use code-point length instead of UTF-16 length in estimateStringChars()
  so that CJK Extension B+ surrogate pairs (U+20000+) are counted as 1
  character, not 2 (fixes ~25% overestimate for rare characters).

- Change long-line split step from maxChars to chunking.tokens so that
  CJK lines are sliced into token-budget-sized segments instead of
  char-budget-sized segments that produce ~4x oversized chunks.

- Add tests for both fixes: surrogate-pair handling and long CJK line
  splitting.

Addresses review feedback from Greptile and Codex bots.
2026-03-29 10:22:43 +09:00
AaronLuo00 971ecabe80 fix(memory): account for CJK characters in QMD memory chunking
The QMD memory system uses a fixed 4:1 chars-to-tokens ratio for chunk
sizing, which severely underestimates CJK (Chinese/Japanese/Korean) text
where each character is roughly 1 token. This causes oversized chunks for
CJK users, degrading vector search quality and wasting context window space.

Changes:
- Add shared src/utils/cjk-chars.ts module with CJK-aware character
  counting (estimateStringChars) and token estimation helpers
- Update chunkMarkdown() in src/memory/internal.ts to use weighted
  character lengths for chunk boundary decisions and overlap calculation
- Replace hardcoded estimateTokensFromChars in the context report
  command with the shared utility
- Add 13 unit tests for the CJK estimation module and 5 new tests for
  CJK-aware memory chunking behavior

Backward compatible: pure ASCII/Latin text behavior is unchanged.

Closes #39965
Related: #40216
2026-03-29 10:22:43 +09:00
Vignesh Natarajan 7f46b03de0 fix: keep memory flush daily files append-only (#53725) (thanks @HPluseven) 2026-03-28 18:22:11 -07:00
Vignesh Natarajan 9d1498b2c2 Agents: add memory flush append regression 2026-03-28 18:22:11 -07:00
HPluseven 60b7613156 Agents: forward memory flush append guard 2026-03-28 18:22:11 -07:00
Peter Steinberger 148a65fe90 refactor: share webhook channel status helpers 2026-03-29 02:11:22 +01:00
Gustavo Madeira Santana 2afc655bd5
ACP: document Matrix bind-here support 2026-03-28 21:07:58 -04:00
karesansui acbdafc4f4 fix: propagate webhook mode to health monitor snapshot
Webhook channels (LINE, Zalo, Nextcloud Talk, BlueBubbles) are
incorrectly flagged as stale-socket during quiet periods because
snapshot.mode is always undefined, making the mode !== "webhook"
guard in evaluateChannelHealth dead code.

Add mode: "webhook" to each webhook plugin's describeAccount and
propagate described.mode in getRuntimeSnapshot.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 02:01:25 +01:00
Peter Steinberger 9e1b524a00 fix: break mattermost runtime cycle 2026-03-29 00:43:58 +00:00
Harold Hunt fcee6fa047
Docs: add boundary AGENTS guides (#56647) 2026-03-28 20:22:03 -04:00
Vignesh Natarajan c3a0304f63
chore(test): fix stale web search audit coverage 2026-03-28 17:18:57 -07:00
Peter Steinberger 5872f860c9 feat(xai): add plugin-owned x_search onboarding 2026-03-29 00:12:37 +00:00
Gustavo Madeira Santana ebb4794952
Tests: reuse paired provider contract aliases 2026-03-28 20:08:38 -04:00
Gustavo Madeira Santana 680c30bc5d
Tests: shim config runtime for capability contracts 2026-03-28 20:02:28 -04:00
Gustavo Madeira Santana d0e0150129
Tests: retry scoped contract registry loads 2026-03-28 19:53:21 -04:00
Gustavo Madeira Santana 5289e8f0fe
Tests: lazy-load web search contract registries 2026-03-28 19:24:38 -04:00
Gustavo Madeira Santana 094524a549
Types: tighten Teams validator return type 2026-03-28 19:15:27 -04:00
Gustavo Madeira Santana bd1c48e4d9
Tests: lazy-load extension contract registries 2026-03-28 19:09:49 -04:00
Brad Groux dc382b09be
fix(msteams): accept strict Bot Framework and Entra service tokens (#56631)
* msteams: log policy-based inbound drops at info level

* fix(msteams): validate Bot Framework and Entra service token issuers

---------

Co-authored-by: Brad Groux <bradgroux@users.noreply.github.com>
2026-03-28 18:04:00 -05:00
Robin Waslander 468185d1b5
fix(agents): handle unhandled stop reasons gracefully instead of crashing (#56639)
Wrap the embedded agent stream to catch 'Unhandled stop reason: ...'
errors from the provider adapter and convert them into structured
assistant error messages instead of crashing the agent run.

Covers all unknown stop reasons so future provider additions don't
crash the runner. The wrapper becomes a harmless no-op once the
upstream dependency handles them natively.

Fixes #43607
2026-03-28 23:35:12 +01:00
Peter Steinberger 587e18cd3f chore: prepare 2026.3.28-beta.1 release 2026-03-28 22:24:51 +00:00
Peter Steinberger 8a24cbf450 chore: bump version to 2026.3.28 2026-03-28 22:05:21 +00:00
huntharo 216796f1e3 fix(xai): wire plugin-owned codeExecution config 2026-03-28 21:35:13 +00:00
huntharo b7ab0ddb55 refactor(xai): move code_execution into plugin 2026-03-28 21:35:13 +00:00
Peter Steinberger 887d7584d6 refactor(plugins): expose bundled onboard helpers 2026-03-28 21:35:13 +00:00
Peter Steinberger 46c2928234 fix(plugins): stabilize provider contract loading 2026-03-28 21:35:13 +00:00
Peter Steinberger dba1b31243 fix(xai): repair extension test boundaries 2026-03-28 21:35:13 +00:00
Peter Steinberger 1e424990a2 fix(xai): restore config-backed auth discovery 2026-03-28 21:35:13 +00:00
Peter Steinberger 2a950157b1 refactor(xai): move x_search into plugin 2026-03-28 21:35:13 +00:00
huntharo 396bf20cc6 Tools: add xAI-backed code_execution 2026-03-28 21:35:13 +00:00
huntharo 1c9684608a Docs: guide x_search toward exact-post stats lookups 2026-03-28 21:35:13 +00:00
huntharo c8ed1638ea xAI: restore generic auth and x_search seams 2026-03-28 21:35:13 +00:00
huntharo 0391e455bf Lint: drop stale model compat imports 2026-03-28 21:35:13 +00:00
huntharo 92fb4ad233 xAI: route x_search through public api seam 2026-03-28 21:35:13 +00:00
huntharo 4f3009f57e Tests: classify x_search secret target parity 2026-03-28 21:35:13 +00:00
huntharo 6e3b54430c Tests: keep extension onboarding coverage under extensions 2026-03-28 21:35:13 +00:00
huntharo 09e2ef965b Tests: fix rebased auth and runner type coverage 2026-03-28 21:35:13 +00:00
huntharo b22f65992e Build: fix rebased provider secrets helper 2026-03-28 21:35:13 +00:00
huntharo b918568b1e Rebase: reconcile xAI post-main conflicts 2026-03-28 21:35:13 +00:00
huntharo df61660a26 xAI: centralize fallback auth resolution 2026-03-28 21:35:13 +00:00
huntharo 9dd08a49a4 xAI: reuse fallback auth for runtime and discovery 2026-03-28 21:35:13 +00:00
huntharo 800042a3d5 xAI: reuse plugin key for x_search 2026-03-28 21:35:13 +00:00
huntharo 8ca3710b90 xAI: strip unsupported payload fields 2026-03-28 21:35:13 +00:00
huntharo fd748171b8 xAI: strip unsupported Responses reasoning params 2026-03-28 21:35:13 +00:00
huntharo 80a1ccc552 xAI: preserve session auth in embedded runs 2026-03-28 21:35:13 +00:00
huntharo 2765fdc2dd xAI: normalize stale Grok transport to Responses 2026-03-28 21:35:13 +00:00
huntharo f0ce658fbb xAI: add auth resolution diagnostics 2026-03-28 21:35:13 +00:00
huntharo d5fafbe3ce xAI: honor config-backed auth during provider bootstrap 2026-03-28 21:35:13 +00:00
huntharo 38e4b77e60 Tools: add x_search via xAI Responses 2026-03-28 21:35:13 +00:00
huntharo 5ed8ee6832 xAI: switch bundled provider defaults to Responses 2026-03-28 21:35:13 +00:00
Devin Robison 703e68a749
Fix HTTP OpenAI-compatible routes missing operator.write scope checks (#56618)
* Fix HTTP OpenAI-compatible routes missing operator.write scope checks

* Update src/gateway/http-endpoint-helpers.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Address Greptile feedback

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-28 15:22:21 -06:00
Robin Waslander 17479ceb43
fix(auto-reply): suppress JSON-wrapped NO_REPLY payloads before channel delivery (#56612)
Add shared isSilentReplyPayloadText() detector that catches both bare
NO_REPLY tokens and JSON {"action":"NO_REPLY"} envelopes. Apply at the
reply directive parser, reply normalizer, and embedded agent payload
builder so the control payload is stripped before any channel sees it.

Preserves media when text is only a silent control envelope.

Fixes #37727
2026-03-28 22:07:24 +01:00
Peter Steinberger 756df2e955 test: tune gateway live probe skips 2026-03-28 19:13:47 +00:00
Robin Waslander 6be14ab388
fix(cli): defer zsh compdef registration until compinit is available (#56555)
The generated zsh completion script called compdef at source time,
which fails with 'command not found: compdef' when loaded before
compinit. Replace with a deferred registration that tries immediately,
and if compdef is not yet available, queues a self-removing precmd hook
that retries on first prompt.

Handles repeated sourcing (deduped hook entry) and shells that never
run compinit (completion simply never registers, matching zsh model).

Add real zsh integration test verifying no compdef error on source and
successful registration after compinit.

Fixes #14289
2026-03-28 19:35:32 +01:00
Robin Waslander 31112d5985
fix(security): audit web search keys for all bundled providers (#56540)
hasWebSearchKey() was hardcoded to only check Brave and Perplexity
credentials. Replace with provider-aware check using
resolveBundledPluginWebSearchProviders() so Gemini, Grok/XAI, Kimi,
Moonshot, and OpenRouter credentials are recognized by the audit.

Add focused regression tests for each provider.

Fixes #34509
2026-03-28 18:55:38 +01:00
Peter Steinberger 02d4c1f2c3 refactor: derive channel metadata from plugin manifests 2026-03-28 17:17:10 +00:00
Frank Yang c14b169a1b
fix(acp): repair stale bindings after runtime exits (#56476)
* fix(acp): repair stale bindings after runtime exits

* fix(acp): narrow stale binding recovery

* fix(acp): preserve policy gating for stale sessions

* fix(acp): handle signal exits and canonical unbinds

* fix(acp): harden canonical stale-session recovery
2026-03-29 01:15:16 +08:00
Peter Steinberger 22de54d83d test: handle live model probe edge cases 2026-03-28 17:12:09 +00:00
Peter Steinberger 5194cf2019 refactor: load bundled provider catalogs dynamically 2026-03-28 16:57:36 +00:00
Tak Hoffman 54313a8730
fix(dev): rebuild dist after HEAD changes (#56510) 2026-03-28 11:49:09 -05:00
Saurabh Mishra 90e82fabb3
fix: display model name instead of ID in Telegram model selector (#56165) (#56175)
* fix: display model name instead of ID in Telegram model selector (#56165)

* fix(telegram): scope model display names by provider

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-03-28 09:23:09 -04:00
Tyler Yust 41cf93efff
fix: include extension channels in subagent announce delivery path (#56348)
* fix: include extension channels in subagent announce delivery path

* test: cover extension announce delivery routes
2026-03-28 21:15:23 +09:00
Peter Steinberger 107969c725 test: silence warning filter stderr 2026-03-28 11:57:27 +00:00
Peter Steinberger 241748ae60 test: align code region fence slices 2026-03-28 11:48:13 +00:00
Peter Steinberger aa9454f270 fix: restore xai pricing cache fallback 2026-03-28 11:43:12 +00:00
Peter Steinberger 8061b792b2 test: repair focused unit lane drift 2026-03-28 11:41:06 +00:00
Peter Steinberger aa33d585be fix: repair package contract and boundary drift 2026-03-28 11:40:40 +00:00
Peter Steinberger f44d68a4f4 test: stabilize model auth label mocks 2026-03-28 11:40:40 +00:00
Peter Steinberger c5a48a8c8a test: cover oauth profile store migration 2026-03-28 11:40:40 +00:00
Peter Steinberger 1c5a4d2a2b fix: stabilize implicit provider discovery merges 2026-03-28 11:40:40 +00:00
Peter Steinberger e34a770b8a fix: keep provider discovery on mockable lazy runtime paths 2026-03-28 11:40:40 +00:00
Peter Steinberger ff01d749fc fix: keep provider normalization on local sync paths 2026-03-28 11:40:13 +00:00
Peter Steinberger cec1703734 fix: keep model selection on local normalization paths 2026-03-28 11:40:13 +00:00
Peter Steinberger c1ae49e306 fix: keep cost lookup on sync pricing paths 2026-03-28 11:40:13 +00:00
Peter Steinberger dec91c400d fix: keep status display on sync model metadata 2026-03-28 11:37:43 +00:00
Peter Steinberger 84d1781a3a fix: avoid status-time provider normalization recursion 2026-03-28 11:35:33 +00:00
Peter Steinberger 030d2e8b71 test: fix tts status helper temp-home prefs path 2026-03-28 11:35:33 +00:00
Peter Steinberger 0e11072b84 fix: avoid speech runtime import in status output 2026-03-28 11:35:33 +00:00
Peter Steinberger 85b3c1db30 fix: defer tts provider resolution until needed 2026-03-28 11:35:33 +00:00
Ayaan Zaidi cfba0ab68f
fix(process): wait for windows close state settlement 2026-03-28 16:55:15 +05:30
Ayaan Zaidi c3c1f9df54
fix(process): wait for windows exit code settlement 2026-03-28 16:37:29 +05:30
nikus-pan bef4fa55f5
fix(model-fallback): add HTTP 410 to failover reason classification (#55201)
Merged via squash.

Prepared head SHA: 9c1780b739
Co-authored-by: nikus-pan <71585761+nikus-pan@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-28 14:03:20 +03:00
Ayaan Zaidi b31cd35b36
test(plugin-sdk): align matrix runtime api guardrail 2026-03-28 16:20:33 +05:30
Ayaan Zaidi 8d8652257c
test(providers): align active registry expectations 2026-03-28 16:15:56 +05:30
Ayaan Zaidi c06dcf6b8b
fix(plugins): preserve active capability providers 2026-03-28 15:46:24 +05:30
Ayaan Zaidi 8ea5c22985
fix(matrix): avoid heavy jiti runtime barrels 2026-03-28 15:35:05 +05:30
Ayaan Zaidi 3145757f8f
test: make minimax image path batch-stable 2026-03-28 15:07:53 +05:30
Peter Steinberger 6f6b55c072 fix: stabilize provider sdk runtime surfaces 2026-03-28 09:35:42 +00:00
Peter Steinberger a955537a61 fix: slim provider sdk surfaces 2026-03-28 09:35:42 +00:00
Peter Steinberger 2212bd0d4a test: align runtime registry fixtures 2026-03-28 09:35:42 +00:00
Peter Steinberger 1d6ba41762 test: stabilize snapshot and typing helpers 2026-03-28 09:35:42 +00:00
Ayaan Zaidi 40a09cc582
fix(irc): avoid registry bootstrap in plugin sdk seam 2026-03-28 14:58:02 +05:30
Ayaan Zaidi e0ba57e9c7
fix: preserve windows child exit codes 2026-03-28 14:55:20 +05:30
Ayaan Zaidi 7320973ab0
fix(provider-wizard): avoid hook-time model normalization 2026-03-28 14:46:12 +05:30
Ayaan Zaidi ced88298d8
test: make media runtime seam mock bun-safe 2026-03-28 14:39:47 +05:30
Mariano 0afd73c975
fix(daemon): surface probe close reasons (#56282)
Merged via squash.

Prepared head SHA: c356980aa4
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-03-28 10:04:56 +01:00
Ayaan Zaidi a68bef42eb
test: align code region fence slices 2026-03-28 14:34:01 +05:30
Kenny Xie cb5afdf108
fix: prevent matrix-js-sdk plugin load crash (#56273) (thanks @aquaright1)
* Fix matrix-js-sdk multiple entrypoint crash on plugin load

* test(matrix): cover runtime bundle import regression

* fix: prevent matrix-js-sdk plugin load crash (#56273) (thanks @aquaright1)

* fix: widen matrix-js-sdk bundle import guard (#56273) (thanks @aquaright1)

---------

Co-authored-by: Kenny Xie <kennyxie@Mac-mini-von-Kenny.local>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-28 14:27:54 +05:30
Ayaan Zaidi 3c0cf26e16
test: align media runtime registry seam 2026-03-28 14:21:17 +05:30
Ayaan Zaidi 4ef2615d7d
test: fix bedrock discovery seam typing 2026-03-28 14:09:25 +05:30
Lakshya Agarwal 4dfd2cd60c
feat: add support for extra headers in Tavily API requests (#55335)
* feat: add support for extra headers in Tavily API requests

* test(tavily-client): add unit tests for X-Client-Source header in API calls

* fix(tavily): add client source attribution (#55335) (thanks @lakshyaag-tavily)

---------

Co-authored-by: Nimrod Gutman <nimrod.gutman@gmail.com>
2026-03-28 11:36:59 +03:00
Ayaan Zaidi 6777764a6b
test: use bedrock plugin sdk seam in discovery tests 2026-03-28 14:05:49 +05:30
Peter Steinberger a631604247 fix(ci): stabilize browser bundled integration tests 2026-03-28 08:34:18 +00:00
Peter Steinberger a735a1a2d4 fix(text): handle fenced code fence termination 2026-03-28 08:34:18 +00:00
Ayaan Zaidi c0a56ac1a1
test: use suite gateway hooks for channel mcp 2026-03-28 13:52:59 +05:30
Ayaan Zaidi 5224c5bbd5
test: isolate usage pricing cache state 2026-03-28 13:48:58 +05:30
Peter Steinberger 1c833b1eb5 test: align outbound telegram bootstrap mocks 2026-03-28 08:10:47 +00:00
Peter Steinberger 48b2eb2604 test: fix media and channel regression expectations 2026-03-28 08:10:47 +00:00
Peter Steinberger 7d000088a4 fix(ci): use process env for provider compat fallback 2026-03-28 08:10:47 +00:00
Peter Steinberger f4fb45f1ee test: dedupe channel helper suites 2026-03-28 08:10:47 +00:00
Ayaan Zaidi 2181909f9a
test: update image generation runtime seam 2026-03-28 13:39:55 +05:30
Ayaan Zaidi 0feeea0994
test: make media symlink fixture idempotent 2026-03-28 13:30:11 +05:30
Ayaan Zaidi 912bd1f5cc
test: align media parse expectations 2026-03-28 13:29:14 +05:30
Peter Steinberger bd4632b9c1 fix: mark buffered reply typing runs complete 2026-03-28 07:57:28 +00:00
Peter Steinberger be38986141 fix: guard bundled channel runtime against TDZ imports 2026-03-28 07:57:28 +00:00
Ayaan Zaidi 04a40b2613
test: refresh base config schema snapshot 2026-03-28 13:25:37 +05:30
Peter Steinberger d9e7178534 fix(ci): align embedded runner and bedrock typing drift 2026-03-28 07:33:19 +00:00
Peter Steinberger 71a3ad153a fix(ci): stabilize bundled capability contract loading 2026-03-28 07:33:19 +00:00
Peter Steinberger f36354e401 test: dedupe pairing and channel contract suites 2026-03-28 07:31:40 +00:00
Peter Steinberger e7c1fcba0c test: dedupe media utility suites 2026-03-28 07:31:40 +00:00
Peter Steinberger 155915e7dc test: dedupe routing and text suites 2026-03-28 07:31:40 +00:00
Peter Steinberger 30be04cd87 fix: include matrix runtime deps for bundled installs 2026-03-28 07:27:29 +00:00
Peter Steinberger d69f20f451 fix: harden bundled channel runtime bootstrap 2026-03-28 07:10:05 +00:00
Peter Steinberger 61936938e9 refactor: move test harnesses off infra runtime 2026-03-28 06:52:06 +00:00
Peter Steinberger c65ec46490 refactor: trim remaining infra runtime residue 2026-03-28 06:41:56 +00:00
Peter Steinberger 922c90e9fa refactor: add approval runtime sdk seam 2026-03-28 06:33:07 +00:00
Peter Steinberger 0d98ce1065 refactor: add diagnostic and error runtime sdk seams 2026-03-28 06:26:38 +00:00
Peter Steinberger 70c2458861 refactor: add host and collection runtime sdk seams 2026-03-28 06:19:16 +00:00
Peter Steinberger df204b1d8f fix: restore pi embedded runner transport typing 2026-03-28 06:18:35 +00:00
Peter Steinberger eef4a7ae64
refactor(commands): drop provider default facade shims 2026-03-28 06:11:13 +00:00
Peter Steinberger d042192c7c
refactor(plugins): move provider policy hooks into plugins 2026-03-28 06:11:13 +00:00
Gustavo Madeira Santana d042543539
Tests: share agents bind command harness 2026-03-28 02:09:43 -04:00
Gustavo Madeira Santana 5292622fec
Tests: share partial module mock helper 2026-03-28 02:09:43 -04:00
Peter Steinberger 7206ddea6f test: dedupe plugin contract suites 2026-03-28 06:04:51 +00:00
Peter Steinberger 48b2291b1e test: dedupe plugin provider runtime suites 2026-03-28 06:04:51 +00:00
Peter Steinberger 89bb2cf03e test: dedupe plugin bundle discovery suites 2026-03-28 06:04:50 +00:00
Peter Steinberger 69b54cbb1f test: align pi tool schema fixture type 2026-03-28 05:59:27 +00:00
Peter Steinberger c222a44e6f refactor: add retry runtime sdk seam 2026-03-28 05:59:07 +00:00
Peter Steinberger d42c2f6a17 test(pi-tools): use typebox schema fixture 2026-03-28 05:53:59 +00:00
Peter Steinberger 06fba21a9d
test(acp): cover persisted generic conversation binds 2026-03-28 05:53:07 +00:00
Peter Steinberger 83135c31c9
refactor(acp): extract generic current conversation binding store 2026-03-28 05:53:07 +00:00
Gustavo Madeira Santana bde5bae69f
Tests: preserve heartbeat-wake exports in mocks 2026-03-28 01:52:55 -04:00
Gustavo Madeira Santana 1e4241c34a
Matrix: fix directory auth and credentials fallback 2026-03-28 01:52:55 -04:00
Gustavo Madeira Santana b253ca70ef
Tests: stabilize Matrix-related shared suites 2026-03-28 01:52:55 -04:00
Peter Steinberger a126d23f0d refactor: add fetch runtime sdk seam 2026-03-28 05:44:33 +00:00
Peter Steinberger b236f39104
refactor(agents): generalize tool schema compat cleanup 2026-03-28 05:42:46 +00:00
Peter Steinberger c7883fe892
refactor(plugins): register provider model id hooks 2026-03-28 05:42:46 +00:00
Peter Steinberger 49f693d06a refactor: widen webhook request guard sdk seam 2026-03-28 05:28:10 +00:00
Peter Steinberger d5841f6412
refactor: centralize plugin API assembly 2026-03-28 05:24:25 +00:00
Peter Steinberger 6a556c6851
test(gateway): add live docker ACP bind coverage 2026-03-28 05:23:55 +00:00
Peter Steinberger 19e8e7190b
fix(acp): avoid no-op gateway self-call after spawn 2026-03-28 05:23:55 +00:00
Peter Steinberger b12f3ce6e5
fix(gateway): support synthetic chat origins 2026-03-28 05:23:55 +00:00
Tak Hoffman 26789db868
Fix TTS contract registry test context 2026-03-28 00:23:26 -05:00
Peter Steinberger 23f0486810 fix: stabilize plugin startup boundaries 2026-03-28 05:22:26 +00:00
Ayaan Zaidi 79fb980767
test(config): refresh base schema snapshot 2026-03-28 10:47:08 +05:30
Gustavo Madeira Santana 21c00165ef
test: fix gateway handler and typing lease helper types 2026-03-28 01:11:24 -04:00
Gustavo Madeira Santana e2a2492248
Secrets: fix Matrix default-account password activity 2026-03-28 01:08:33 -04:00
Ayaan Zaidi 16f8616d9d
test(plugins): simplify typing pulse mock helper 2026-03-28 10:33:05 +05:30
Ayaan Zaidi 3a341355bf
test(gateway): fill channels status handler options 2026-03-28 10:33:05 +05:30
Peter Steinberger ab2bd34b66
refactor(xai): split provider compat facades
Co-authored-by: Harold Hunt <harold@pwrdrvr.com>
2026-03-28 05:02:41 +00:00
Peter Steinberger c4e6fdf94d
refactor(xai): move bundled xai runtime into plugin
Co-authored-by: Harold Hunt <harold@pwrdrvr.com>
2026-03-28 05:02:41 +00:00
Tak Hoffman 85064256a2
Refresh bundled plugin metadata snapshot 2026-03-28 00:00:14 -05:00
Peter Steinberger 02b8d47c6c
test: align slots helper types 2026-03-28 04:58:53 +00:00
Peter Steinberger 6d3a6bda3d
test: tighten typing lease mock helpers 2026-03-28 04:58:53 +00:00
Peter Steinberger ba02905c4f
refactor: split mcp channel bridge internals 2026-03-28 04:58:34 +00:00
Tak Hoffman a790f63056
Fix typing lease background failure tests 2026-03-27 23:57:27 -05:00
Tak Hoffman 0bcf076901
fix(regression): auto-enable channel status state 2026-03-27 23:56:29 -05:00
Peter Steinberger dc87ffa46d fix(ci): guard telegram native command auth typing 2026-03-28 04:55:26 +00:00
Brad Groux 6b0e74000d
fix(msteams): add blockStreaming config and progressive delivery (#56134)
- Add blockStreaming and blockStreamingCoalesceDefaults to MSTeams channel plugin (was the only channel missing it)
- Wire disableBlockStreaming flag in reply dispatcher from config
- Flush pending messages immediately during generation when blockStreaming is enabled
- Add comprehensive tests for schema validation and progressive flush behavior

Refs #56041
2026-03-27 23:53:24 -05:00
Tak Hoffman 3e8bad0d31
Refresh bundled plugin metadata snapshot 2026-03-27 23:52:32 -05:00
Tak Hoffman b8012221d2
fix(regression): restore slots test helper typing 2026-03-27 23:52:08 -05:00
Tak Hoffman ff348d2063
fix(regression): auto-enable gateway send selection 2026-03-27 23:51:28 -05:00
Peter Steinberger 222ba9f174 fix(ci): tighten telegram and typing test types 2026-03-28 04:49:21 +00:00
Gustavo Madeira Santana 470d6aee0f
Gateway: keep auto-enabled plugin config through startup 2026-03-28 00:49:00 -04:00
Tak Hoffman 5167841ff8
fix(regression): auto-enable channels resolve selection 2026-03-27 23:48:54 -05:00
Tak Hoffman 897a6a6c5b
fix(regression): auto-enable message channel selection 2026-03-27 23:47:56 -05:00
Tak Hoffman 384bdde514
fix(regression): persist auto-enabled directory config 2026-03-27 23:47:54 -05:00
Peter Steinberger 687d23ae8d test: restore extension boundary guardrails 2026-03-28 04:47:31 +00:00
Tak Hoffman 46ab177743
fix(regression): persist auto-enabled channel auth config 2026-03-27 23:45:57 -05:00
Tak Hoffman 8539886cd8
fix(regression): auto-enable directory channel selection 2026-03-27 23:45:29 -05:00
Peter Steinberger 811685b95f test: dedupe plugin bundle boundary suites 2026-03-28 04:44:58 +00:00
Peter Steinberger fc84dd398b test: dedupe plugin runtime registry suites 2026-03-28 04:43:29 +00:00
Peter Steinberger 25fea00bc7 test: dedupe plugin utility config suites 2026-03-28 04:43:29 +00:00
Tak Hoffman c9d5d12183
fix(regression): auto-enable channel auth selection 2026-03-27 23:42:36 -05:00
Peter Steinberger 324c621ebe fix(ci): align telegram runtime and test drift 2026-03-28 04:41:23 +00:00
Tak Hoffman 7779205aa1
Keep matrix SDK external in bundle checks 2026-03-27 23:41:00 -05:00
Tak Hoffman 363038828f
fix(regression): auto-enable gateway bootstrap snapshots 2026-03-27 23:40:51 -05:00
Peter Steinberger 0c729b6d30 test: dedupe plugin runtime utility suites 2026-03-28 04:40:08 +00:00
Peter Steinberger 12318d25ae test: dedupe plugin provider runtime status suites 2026-03-28 04:40:08 +00:00
Tak Hoffman 6fc949862a
fix(regression): repair channel setup discovery test 2026-03-27 23:38:55 -05:00
Tak Hoffman 37ab1513e0
fix(regression): auto-enable channel setup discovery 2026-03-27 23:38:55 -05:00
Tak Hoffman 1b5043f47b
fix(regression): auto-enable gateway plugin loads 2026-03-27 23:35:22 -05:00
Gustavo Madeira Santana 59535e3414
Matrix: align default account secret handling 2026-03-28 00:34:48 -04:00
Peter Steinberger 47b3bf8c89 test: drop unused capability test helper 2026-03-28 04:28:54 +00:00
Peter Steinberger 9155f3914a test: dedupe plugin provider helper suites 2026-03-28 04:28:54 +00:00
Peter Steinberger 7e921050e3 test: dedupe plugin lifecycle runtime suites 2026-03-28 04:28:54 +00:00
Peter Steinberger 04792e6c44 test: dedupe plugin bundle and discovery suites 2026-03-28 04:28:54 +00:00
Gustavo Madeira Santana 286d6b388f
Tests: remove stale runtime state setup 2026-03-28 00:25:14 -04:00
Gustavo Madeira Santana cdf19111e5
Plugins: narrow loader testing helper surface 2026-03-28 00:25:14 -04:00
Tak Hoffman 742e0c8597
fix(regression): track outbound bootstrap by channel surface 2026-03-27 23:24:51 -05:00
Tak Hoffman 12488f45c2
fix(regression): preserve announce thread ids 2026-03-27 23:22:17 -05:00
Tak Hoffman c0d4c07b88
fix(regression): scope plugin registry reuse by gateway methods 2026-03-27 23:22:10 -05:00
kakahu 158e7c517e
fix(matrix): resolve env SecretRef fallback in clean() for channel startup (#54980)
Merged via squash.

Prepared head SHA: b71a86e68e
Co-authored-by: kakahu2015 <17962485+kakahu2015@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-28 00:21:57 -04:00
Gustavo Madeira Santana 392724ae57
Plugins: reuse shared bootstrap registry resolution 2026-03-28 00:19:33 -04:00
Gustavo Madeira Santana ee7f5825c8
Plugins: share runtime registry resolution 2026-03-28 00:19:33 -04:00
Tak Hoffman c7e05f1f87
test(regression): cover mistral availability compat 2026-03-27 23:17:35 -05:00
Peter Steinberger bd28e6d444 refactor: move transport readiness onto channel runtime 2026-03-28 04:13:40 +00:00
Peter Steinberger ec5877346c
fix: harden mcp channel bridge smoke 2026-03-28 04:10:19 +00:00
Gustavo Madeira Santana 9b405f88d4
Plugins: reuse compatible runtime web search registries 2026-03-28 00:09:37 -04:00
Gustavo Madeira Santana a00127bf5b
Plugins: reuse compatible registries for runtime providers 2026-03-28 00:09:37 -04:00
Gustavo Madeira Santana fd0aac297c
Plugins: add runtime registry compatibility helper 2026-03-28 00:09:37 -04:00
Peter Steinberger 4beb231fd8 refactor: move heartbeat helpers onto channel runtime 2026-03-28 04:09:25 +00:00
Tak Hoffman d50526dddc
fix(regression): use active channel registry for generic bindings 2026-03-27 23:08:56 -05:00
Peter Steinberger 5e93419c31
fix: move Mistral compat into provider plugin 2026-03-28 04:08:37 +00:00
Tak Hoffman fd48e4090a
fix(regression): reject disabled channel auth stubs 2026-03-27 23:06:06 -05:00
Peter Steinberger 4e50548e46 fix: restore skill sourceInfo provenance handling 2026-03-28 04:05:18 +00:00
Tak Hoffman 102e313d55
fix(regression): refresh provider hook cache after config changes 2026-03-27 23:04:24 -05:00
Tak Hoffman 1e2e6fb613
fix(regression): allow auth-capable channel auto-pick without raw config 2026-03-27 23:03:52 -05:00
Peter Steinberger 578d02f40a test: dedupe plugin lifecycle registry suites 2026-03-28 04:02:35 +00:00
Peter Steinberger e74f206a68 test: dedupe plugin provider runtime suites 2026-03-28 04:02:34 +00:00
Peter Steinberger 708ff9145e test: dedupe plugin utility config suites 2026-03-28 04:02:13 +00:00
Tak Hoffman c5b1582d48
fix(regression): auto-enable web search provider loads 2026-03-27 23:00:49 -05:00
Nyanako f652d9fd81
fix: preserve indentation when stripping reply directives (#55960) (thanks @Nanako0129)
* fix: preserve indentation when stripping reply directives

* fix: preserve word boundaries when stripping reply directives

* fix: drop separator space after leading reply directives

* fix: preserve indentation when stripping reply directives (#55960) (thanks @Nanako0129)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-28 09:28:45 +05:30
Tak Hoffman ec122796f8
fix(regression): avoid loading memory runtime during shutdown 2026-03-27 22:55:40 -05:00
Peter Steinberger c5c9640374 fix: harden config write auditing 2026-03-28 03:54:54 +00:00
Peter Steinberger 5853b1aab8 fix: replay skill source drift 2026-03-28 03:53:59 +00:00
Peter Steinberger 49968982a5
fix(plugin-sdk): avoid testing export drift 2026-03-28 03:53:38 +00:00
Peter Steinberger dee2bde2f5
test(acp): cover generic conversation binds 2026-03-28 03:53:38 +00:00
Peter Steinberger ec9f96cb2a
refactor(plugin-sdk): align binding contract imports 2026-03-28 03:53:38 +00:00
Peter Steinberger d0d4b73d25
refactor(acp): centralize conversation binding context 2026-03-28 03:53:38 +00:00
Tak Hoffman 09e35e69b2
fix(regression): auto-enable provider runtime loads 2026-03-27 22:53:32 -05:00
Peter Steinberger 8147f5075b refactor: inline canonical skill source reads 2026-03-28 03:48:17 +00:00
Tak Hoffman f4f492a410
fix(regression): scope channel setup reloads by channel registry 2026-03-27 22:46:47 -05:00
Peter Steinberger ec6fba7d01 refactor: drop legacy skill source fallback 2026-03-28 03:45:56 +00:00
Peter Steinberger 24bb64b1c4 test: centralize canonical skill fixtures 2026-03-28 03:45:56 +00:00
Tak Hoffman 63e35b2d9d
fix(regression): auto-enable memory runtime loads 2026-03-27 22:44:12 -05:00
Tak Hoffman 2ba5e7ebf9
fix(regression): align plugin inspect policy with auto-enabled config 2026-03-27 22:42:59 -05:00
Tak Hoffman 2030c814ce
fix(regression): auto-enable channel setup registry loads 2026-03-27 22:41:50 -05:00
Peter Steinberger 66c4c3bec8 test: align matrix runtime api allowlist 2026-03-28 03:40:51 +00:00
Tak Hoffman 36ac9224cc
fix(regression): reload stale auto-enabled plugin tool registries 2026-03-27 22:40:24 -05:00
Tak Hoffman e20823c741
fix(regression): auto-enable plugin status loads 2026-03-27 22:39:04 -05:00
Peter Steinberger f3c8c27b3a fix: replay skill source fixture drift 2026-03-28 03:38:11 +00:00