Commit Graph

17429 Commits

Author SHA1 Message Date
Peter Steinberger
eef80f31cf Tests: fix stale expectations and weak token generation 2026-04-06 23:44:26 +08:00
Vincent Koc
6775611c5d refactor(gateway): type inline tool auth helpers 2026-04-06 16:42:16 +01:00
Vincent Koc
6b12e3ebf6 fix(contracts): stabilize bundled channel artifact loading 2026-04-06 16:40:54 +01:00
Vincent Koc
c3b19d204a perf(test): lazy-load bundled channel secrets 2026-04-06 16:40:41 +01:00
Peter Steinberger
349a1c58f9 refactor: re-duplicate auth and session helpers 2026-04-06 16:38:57 +01:00
Peter Steinberger
cdf321b320 refactor: re-duplicate outbound helpers 2026-04-06 16:38:57 +01:00
Peter Steinberger
9c24bda43b refactor: re-duplicate channel plugin helpers 2026-04-06 16:38:57 +01:00
Peter Steinberger
a6a379b37c refactor: re-duplicate plugin config helpers 2026-04-06 16:38:57 +01:00
Vincent Koc
00f256dd31 refactor(gateway): type tool resolution paths 2026-04-06 16:36:51 +01:00
Peter Steinberger
aa6f6135db fix: tighten TUI phase handling and heartbeat session guards (#61463) (thanks @100yenadmin) 2026-04-06 16:35:22 +01:00
Eva
2d481c9329 fix(heartbeat): add subagent guard to resolveHeartbeatSession production code 2026-04-06 16:35:22 +01:00
Eva
aaf5307638 fix(gateway): seq-based cursor pagination + sanitize SSE fast path
- Pagination now searches by message seq value instead of using
  cursorSeq-1 as array index. After sanitization drops rows, seqs
  become sparse and positional indexing breaks cursor traversal.
- SSE unbounded fast path now sanitizes incremental messages through
  sanitizeChatHistoryMessages before emitting, so NO_REPLY and
  directive messages are suppressed consistently with initial history.
2026-04-06 16:35:22 +01:00
Eva
22d8e47a50 fix(agents,gateway): adopt phase-aware assistant text extraction 2026-04-06 16:35:22 +01:00
Peter Steinberger
0b9993df95 fix(agents): keep phaseless OpenAI WS text buffered until phase resolves (#61968)
* fix(agents): gate WS text delta emission on valid phase value, not map key existence

When output_item.added arrives without phase metadata, outputItemPhaseById
stores undefined. The previous .has() check returned true for undefined
values, bypassing the buffering gate and leaking commentary as unphased
visible content.

Fix: change .has() to .get() !== undefined on both delta and done handlers.

Fixes #61477

* docs: note WS phase buffering fix (#61954) (thanks @100yenadmin)

* test(agents): cover phaseless WS output_text.done buffering (#61954)

* test(commands): fix session-store import path for tsgo (#61968)

---------

Co-authored-by: Eva <eva@100yen.org>
2026-04-06 16:35:16 +01:00
Vincent Koc
56136c83b7 refactor(plugins): type sync hook handlers 2026-04-06 16:35:11 +01:00
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