Commit Graph

17314 Commits

Author SHA1 Message Date
Peter Steinberger
de20d3a024 refactor(plugin-sdk): add simple completion runtime entrypoint 2026-04-06 16:29:43 +01:00
Peter Steinberger
7a5e65c71b test(channels): fix add and facade fixtures 2026-04-06 16:27:38 +01:00
Peter Steinberger
cfb7779584 refactor(deadcode): remove agent command shims 2026-04-06 16:24:12 +01:00
Peter Steinberger
41c700fe9e refactor(deadcode): remove command auth shims 2026-04-06 16:18:20 +01:00
Peter Steinberger
514328a9ad style(repo): format touched helpers and tests 2026-04-06 16:16:10 +01:00
Peter Steinberger
0c5e6037b0 fix(openai): clarify auth routes in picker and docs 2026-04-06 16:14:51 +01:00
Peter Steinberger
2b6e08bbfa refactor: remove confirmed dead helpers 2026-04-06 16:13:26 +01:00
Peter Steinberger
d7e3df5eaa perf(test): expand light lane routing 2026-04-06 16:13:21 +01:00
Peter Steinberger
16d0f0567e fix: preserve legacy replay phase boundaries (#61529) (thanks @100yenadmin) 2026-04-06 23:09:29 +08:00
Eva
a200a746fc fix(agents): correct phase-buffering test expectation for mid-stream deltas 2026-04-06 23:09:29 +08:00
Eva
a58726e1ed fix(agents): inherit message-level phase for untagged blocks during replay splitting
Fixes #61476

Untagged text blocks in mixed assistant messages were forced to undefined
phase when any sibling had an explicit textSignature phase. Now they
correctly inherit the message-level assistantMessagePhase, preventing
commentary leaks during history replay.

Removes the hasExplicitBlockPhase scan — untagged blocks always inherit
m.phase. Blocks with explicit textSignature.phase still use their own.

94/94 tests pass. Regression test added for mixed explicit/untagged blocks.
2026-04-06 23:09:29 +08:00
Vincent Koc
f94a018191 perf(test): slim secrets runtime coverage hotspot 2026-04-06 16:08:05 +01:00
Peter Steinberger
1fb44f0aad fix: separate selected session model resolution 2026-04-06 16:07:50 +01:00
Vincent Koc
9c3d9c5c18 chore(lint): drop stale repo lint comments 2026-04-06 16:01:23 +01:00
Vincent Koc
c7a562683a chore(agents): drop stale lint comments 2026-04-06 15:59:22 +01:00
Vincent Koc
cb770057b0 chore(lint): drop stale config and gateway lint comments 2026-04-06 15:57:32 +01:00
Vincent Koc
2537ae503d chore(plugins): drop stale core channel lint comments 2026-04-06 15:56:41 +01:00
Peter Steinberger
378b2c2f5c fix(check): absorb latest main lint drift 2026-04-06 15:56:02 +01:00
Peter Steinberger
d12029a15a fix(check): repair plugin runtime type drift batch 2026-04-06 15:54:12 +01:00
Vincent Koc
8fe7b3730f fix(check): restore gateway status tls mock typing 2026-04-06 15:53:16 +01:00
Vincent Koc
5765c4cb2a fix(check): repair latest command and stream type drift 2026-04-06 15:46:53 +01:00
jjjojoj
b35b176837 fix: recognize api.grok.x.ai as xAI-native endpoint
Fixes #61377

The provider attribution code only recognized api.x.ai as the xAI-native
endpoint. Some users have api.grok.x.ai configured (or it appears in
certain DNS/config scenarios) which would not resolve as xAI-native,
causing web_search tool failures.

This change adds api.grok.x.ai as an alias for xAI-native endpoint
classification alongside api.x.ai.
2026-04-06 15:45:34 +01:00
Peter Steinberger
baf4119ae3 fix: harden local TLS gateway probes (#61935) (thanks @ThanhNguyxn07) 2026-04-06 15:44:30 +01:00
ThanhNguyxn07
b77964f704 fix(gateway-status): use local TLS probe targets with fingerprint
When gateway.tls.enabled is true, gateway status probes now target local loopback/tailnet over wss and pass the local TLS fingerprint for localLoopback probes. This avoids false unreachable results for healthy local TLS gateways.

Fixes #61767

Co-authored-by: ThanhNguyxn <thanhnguyentuan2007@gmail.com>
2026-04-06 15:44:30 +01:00
Peter Steinberger
5a54005b4d fix(plugins): restore green runtime gates 2026-04-06 15:42:51 +01:00
Nimrod Gutman
6f566585d8 fix(ios): harden watch exec approval review (#61757)
* fix(ios): harden watch exec approval review

* fix(ios): address watch approval review feedback

* fix(ios): finalize watch approval background recovery

* fix(ios): finalize watch approval background recovery (#61757) (thanks @ngutman)
2026-04-06 17:42:42 +03:00
openperf
e777a2b230 fix(process ): migrate legacy command-queue singleton missing activeTaskWaiters
After a SIGUSR1 in-process restart following an npm upgrade from v2026.4.2
to v2026.4.5, the globalThis singleton created by the old code version
lacks the activeTaskWaiters field added in v2026.4.5.  resolveGlobalSingleton
returns the stale object as-is, causing notifyActiveTaskWaiters() to call
Array.from(undefined) and crash the gateway in a loop.

Add a schema migration step in getQueueState() that patches the missing
field on legacy singleton objects.  Add a regression test that plants a
v2026.4.2-shaped state object and verifies resetAllLanes() and
waitForActiveTasks() succeed without throwing.

Fixes #61905
2026-04-06 15:41:14 +01:00
Vincent Koc
a36bb119be test(secrets): reduce serial vitest drag 2026-04-06 15:40:35 +01:00
Peter Steinberger
ff7fe37d17 refactor(cli): normalize route boundaries 2026-04-06 15:38:04 +01:00
Vincent Koc
7bb61a07db fix(check): repair plugin and secret type drift 2026-04-06 15:36:42 +01:00
Peter Steinberger
8326349939 fix(test): stabilize docker claude cli live lane 2026-04-06 15:31:08 +01:00
Peter Steinberger
ac38f332c5 fix(anthropic): prefer claude cli over setup-token 2026-04-06 15:31:07 +01:00
Peter Steinberger
fa67ab2358 fix: preserve gateway-bindable loader compatibility 2026-04-06 15:28:41 +01:00
HansY
c78defdc2f plugins: exclude runtimeSubagentMode from loader cache key
The plugin loader cache key included runtimeSubagentMode, which is
derived from allowGatewaySubagentBinding. Since different call sites in
the message processing pipeline pass different values for this flag,
each call produced a distinct cache key, triggering redundant
register() calls (40+ in 24 seconds after startup).

runtimeSubagentMode does not affect which plugins are loaded or how
they are configured — it is only metadata stored alongside the active
registry state. Removing it from the cache key lets all call sites
share the same cached registry regardless of their binding mode.

Fixes #61756
2026-04-06 15:28:41 +01:00
Peter Steinberger
9e0d632928 fix(gateway): unify session history snapshots 2026-04-06 15:26:55 +01:00
Peter Steinberger
8838fdc916 refactor: share web provider runtime helpers 2026-04-06 15:26:32 +01:00
Peter Steinberger
58f4099a4f refactor: share plugin runtime load context 2026-04-06 15:26:32 +01:00
Peter Steinberger
3599ab2e56 fix(agents): honor verbose defaults and trim process setup 2026-04-06 15:24:59 +01:00
Peter Steinberger
cd5b1653f6 feat: declare explicit media provider capabilities 2026-04-06 15:24:38 +01:00
Peter Steinberger
29df67c491 test(acp): prove lazy reset re-ensures bound sessions 2026-04-06 15:24:16 +01:00
Onur
b34fa9c868 ACP: reset bound sessions lazily 2026-04-06 15:24:16 +01:00
Peter Steinberger
8d095147b4 fix: restore check gate 2026-04-06 15:20:03 +01:00
Peter Steinberger
979c81d9dd test(auth): cover readonly runtime auth inheritance 2026-04-06 15:19:34 +01:00
Peter Steinberger
adb750fa63 perf(test): trim secrets runtime snapshot lane 2026-04-06 15:19:34 +01:00
Peter Steinberger
91749930d4 fix: restore check-time path inference 2026-04-06 15:18:55 +01:00
Vincent Koc
ac6f696baa fix(check): repair typed test and cli drift 2026-04-06 15:14:37 +01:00
biefan
0f075e1b8a fix: restore terminal keyboard state on tui exit (#49130) (thanks @biefan) (#49130)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-06 15:14:08 +01:00
Peter Steinberger
26a5ab1c6f fix(utils): harden directive block placeholders 2026-04-06 15:11:44 +01:00
szx007
af7c21f207 fix: preserve code block indentation in normalizeDirectiveWhitespace
## Summary

- Problem: `normalizeDirectiveWhitespace` applied whitespace-collapsing regexes globally, including inside fenced code blocks (` ``` ` / `~~~`) and indent-code-blocks (4-space / tab), corrupting indentation in assistant replies that contain code snippets
- Why it matters: Any language where indentation is significant (Python, Go, YAML, etc.) or visually meaningful would render incorrectly after stripping inline directive tags
- What changed: Stash code blocks under a Unicode private-use sentinel (`\uE000`) before normalization, run the existing prose regexes on the masked text, then restore the original blocks verbatim
- What did NOT change: All prose normalization rules are retained as-is (`\r\n`, multi-space collapse, leading blank-line strip, trailing whitespace, 3+ newline fold)

## Change Type

- [x] Bug fix

## Scope

- [ ] Gateway / orchestration

## Root Cause

- Root cause: Prose whitespace regexes were applied to the full text string with no awareness of Markdown code block boundaries
- Missing detection / guardrail: No tests covered indented content inside fenced blocks
- Contributing context: Directive tag stripping (`[[reply_to_current]]`, `[[audio_as_voice]]`) is applied before delivery, making the normalization step a silent corruption point for code-heavy replies

## Regression Test Plan

- Coverage level that should have caught this:
  - [x] Unit test
- Target test or file: `src/utils/directive-tags.test.ts`
- Scenario the test should lock in: `parseInlineDirectives` with fenced/indent code blocks must preserve all leading whitespace inside those blocks
- Why this is the smallest reliable guardrail: Pure function with deterministic string in/out; no mocks needed
- If no new test is added, why not: 7 new unit tests added

## User-visible / Behavior Changes

Code blocks in assistant replies containing `[[reply_to_current]]` or `[[audio_as_voice]]` directives now retain correct indentation after the directive is stripped.

## Security Impact

- New permissions/capabilities? No
- Secrets/tokens handling changed? No
- New/changed network calls? No
- Command/tool execution surface changed? No
- Data access scope changed? No

## Compatibility / Migration

- Backward compatible? Yes
- Config/env changes? No
- Migration needed? No

Co-Authored-By: Codemax <codemax@binance.com>
2026-04-06 15:11:44 +01:00
Peter Steinberger
c7c0550dc9 fix: seed SSE history state from one snapshot (#61855) (thanks @100yenadmin) 2026-04-06 15:05:33 +01:00