Commit Graph

68987 Commits

Author SHA1 Message Date
Peter Steinberger
08ecf63bb6 fix(deadcode): resolve strict-workspace fallout from bundled plugin roots
The strict knip workspaces landed in #108547 flagged seven files. Two are
convention-resolved and become explicit entries (discord configured-state via
the package-state probes, qa-lab cli via the SDK facade basename resolver);
the other five were dead barrels/wrappers superseded by canonical modules and
are deleted (browser bridge/cdp barrels, discord timeouts wrapper, openai
register.runtime, qa-lab model-selection wrapper).
2026-07-16 03:08:17 +01:00
Peter Steinberger
d42dfed3f2 chore(codex): format usage module, fix marker import in test 2026-07-16 03:06:48 +01:00
Peter Steinberger
7864a6e6ad fix(codex): import ProviderUsageSnapshot from provider-usage 2026-07-16 03:06:47 +01:00
Peter Steinberger
7eeb1096db fix(codex): re-home app-server usage reporting on the harness seam
The deleted text provider's usage hook was the only source for the /status
Codex subscription usage line. Harnesses can now contribute an optional
usage snapshot (provider hooks keep priority; only distinct synthetic hook
owners fall through), and the codex harness reports app-server rate limits
via account/rateLimits/read with the same conversion and account identity
as before. No text provider resurrected; deadcode and SDK surface gates
clean.
2026-07-16 03:06:47 +01:00
Peter Steinberger
9c5eab471c chore(doctor): format migration tests, keep cron migration helpers module-local 2026-07-16 03:06:46 +01:00
Peter Steinberger
1491977816 test(doctor): surface the blocked-provider warning through the real route-warnings path
The preview test mocked codex-route-warnings wholesale; the consolidated
blocked-merge warning now flows through it, so the auto-merge case runs the
actual implementation once. Migration identity helpers stay module-local;
codex-route-model-ref formatting fixed.
2026-07-16 03:06:45 +01:00
Peter Steinberger
ea0fe35265 fix(codex): post-fold media route signal, drop unused migration exports
- codex media substitution keys on the registered media-understanding
  provider (image capability + default model) instead of the deleted text
  provider's synthetic auth probe; deterministic injected route in tests
- migration helper exports without production consumers are module-local;
  the blocked-provider warning assertion goes through the plan export
2026-07-16 03:06:45 +01:00
Peter Steinberger
fabdfc90db chore(protocol): regenerate Swift gateway models for agentRuntime 2026-07-16 03:06:44 +01:00
Peter Steinberger
6bcb561012 fix(codex): repair identity-fold CI fan-out
- null-vs-undefined runtime record type at the provider-move helper
- gateway models.list fixtures expect the new agentRuntime intent field
  (codex/implicit for policy-backed OpenAI routes, openclaw/implicit for
  synthetic routes without provider policy)
- split doctor cron legacy-repair into its own module to satisfy the
  max-lines gate without suppressions; callers import directly
2026-07-16 03:06:43 +01:00
Peter Steinberger
3c8269ca52 refactor(codex)!: fold the codex text provider into openai with a doctor migration
The live codex text provider was a redundant projection of the openai
catalog (exclusive provider ownership; the openai plugin's ChatGPT OAuth
discovery already serves gpt-5.6-* route-aware). Folding it:

- extensions/codex no longer registers a text provider, catalog entry, or
  synthetic text auth; provider.ts/provider-catalog.ts/provider-discovery.ts
  and the route-blind model-name heuristics are deleted; the narrow
  post-harness reasoning fallback moves to an app-server-owned module
- openai thinking policy keys on explicit selected-route provenance
  (api === openai-chatgpt-responses) instead of value-shape inference
- models.list gains an optional additive agentRuntime field (configured
  intent); session agentHarnessId remains the execution proof
- doctor --fix migrates the shipped codex/* config shape end to end:
  every model slot, provider-config merge with blocker-aware conflict
  handling, sessions, cron payloads (two-phase: runtime policy persists
  before cron refs rewrite), transcripts; migrated refs carry model-scoped
  agentRuntime.id=codex preserving the shipped wizard semantics; auto
  runtime policies normalize to codex with sibling fields preserved;
  blocked provider conflicts retain the whole legacy namespace fail-closed
  with an actionable warning
- the stale openai:default profile cleanup (#91352) was deliberately
  deferred to a follow-up after review showed it needs per-agent identity
  proofs; doctor keeps warning about unusable profiles

Fixes #105561
Fixes #84637
Fixes #90420
2026-07-16 03:06:43 +01:00
Goutam Adwant
154d53c4f6 fix(state): gateway starts when WSL chmod returns EROFS (#108258)
* fix(state): tolerate guarded EROFS chmod failures

* fix(state): keep EROFS mode handling fail-closed

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 18:55:49 -07:00
Alix-007
5c97107c7a fix(ui): bound mount recovery probes (#108163)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 18:51:42 -07:00
Peter Steinberger
a14fad5ff8 fix(docs-i18n): preserve list marker structure 2026-07-15 21:47:53 -04:00
mushuiyu886
6f22ef08a3 fix(tui): preserve emoji in split local shell output (#108268)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 18:38:09 -07:00
Peter Steinberger
169ed48866 refactor(deadcode): tighten Anthropic extension roots (#108547) 2026-07-15 18:35:24 -07:00
xingzhou
cde78074b2 fix(providers): preserve UTF-8 in local service diagnostics (#108518)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 18:26:50 -07:00
Alix-007
dcf110756f fix(xai): apply request policy to video generation requests (#104836) 2026-07-15 21:22:46 -04:00
Peter Steinberger
d4183facf1 refactor(deadcode): tighten extension root modeling (#108538) 2026-07-15 18:18:23 -07:00
yyj-xydt
9c6c8446a7 fix(zalo): harden hosted media token checks (#108512) 2026-07-15 18:10:55 -07:00
Peter Steinberger
17831685f8 docs(changelog): credit Tlon SSE timeout fix 2026-07-16 02:09:01 +01:00
Eden
bc93fe9f25 fix(line): honor channelData.line.mediaKind on the reply-token path (#106515)
* fix(line): honor channelData.line.mediaKind on the reply-token path

The reply-token delivery built every media message with createImageMessage,
ignoring channelData.line.mediaKind (and previewImageUrl/durationMs/trackingId),
so a video/audio reply was silently downgraded to a broken image. The push path
already honored mediaKind via resolveLineOutboundMedia + buildLineMediaMessageObject.

Route reply-token media through those same helpers (relocated to outbound-media.ts
and reused by both paths) via an injected buildMediaMessage dep wired in monitor.ts,
preserving the delivery file's dependency-injection boundary. Generic media without
LINE-specific options keeps the image route; a media that cannot be built surfaces
as a visible partial delivery so the text still reaches the user.

* refactor(line): unify reply media delivery

* fix(line): normalize media delivery failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 18:06:26 -07:00
NIO
f66786f0cb fix(mattermost): bound websocket handshake waits at 30s (#105553)
* fix(mattermost): bound websocket handshake waits at 30s

* refactor(mattermost): prove handshake timeout wiring

* chore: refresh Mattermost CI cohort

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 18:01:40 -07:00
Peter Steinberger
ab3f057cfd refactor: split plugin loader by responsibility (#108513)
* refactor(plugins): split plugin loader

* refactor(plugins): keep loader helpers internal

* refactor(plugins): remove unused loader type import

* test(plugins): cover split runtime registry boundary
2026-07-15 17:51:13 -07:00
Peter Steinberger
3768ad4d08 improve: speed up Control UI browser tests (#108504)
* test(ui): accelerate browser timing coverage

* test(ui): stabilize Mantis elapsed-time proof

* test(ui): keep Claude viewport proof isolated
2026-07-15 17:48:32 -07:00
Peter Steinberger
9317aadaa2 feat(slack): add opt-in scoped presence events (#108510)
* feat(slack): add opt-in presence events

* style(slack): satisfy presence lint rules

* chore: keep release changelog centralized

* fix(slack): satisfy presence integration gates

* fix(slack): preserve eligible presence targets
2026-07-15 17:43:26 -07:00
Peter Steinberger
d3dcb36895 refactor(deadcode): tighten Google and xAI extension roots (#108523) 2026-07-15 17:34:53 -07:00
Peter Steinberger
990fe2f3a8 test(providers): satisfy promise executor lint (#108521) 2026-07-15 17:33:38 -07:00
xingzhou
3b1f26bb0e fix(control-ui): keep Workspace UI on the newest version after overlapping reloads (#108204)
* fix(control-ui): keep Workspace reloads on newest version

* test(control-ui): cover workspace loading ownership

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(control-ui): preserve workspace navigation intent

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(control-ui): settle superseded load state

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(control-ui): cancel removed workspace deep links

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(control-ui): prefer newer workspace documents

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* refactor(control-ui): finalize workspace load ownership

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

* fix(control-ui): invalidate consumed workspace intent

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:30:26 -07:00
Peter Steinberger
b6077738b3 test: fix realtime transcription lint (#108516)
* test: fix realtime transcription lint

* test: bound realtime transcription test payloads
2026-07-15 17:29:07 -07:00
Dallin Romney
87079d025e improve(qa): consolidate live transport selector contracts (#108465)
* refactor(qa): consolidate live transport selectors

* refactor(qa): remove live transport indirection
2026-07-15 17:20:07 -07:00
NIO
ed16970fc6 fix(feishu): pass timeoutMs through app-registration guarded fetch (#105549)
* fix(feishu): pass timeoutMs through app-registration guarded fetch

* refactor(feishu): keep registration timeout internal

* docs(changelog): credit Feishu timeout fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:18:54 -07:00
Eden
75234c68b3 fix(line): use precise control-command check for group mention bypass (#107230)
* fix(line): use precise control-command check for group mention bypass

Group requireMention bypass is gated on `command.hasControlCommand`, but LINE
fed it the broad `shouldComputeCommandAuthorized` detector, which is true for
any inline "/x"/"!x" token. An allowlisted member's plain message like
"cd /home" would satisfy the bypass and reach the agent even though the bot
was never mentioned.

Groups now use the precise `hasControlCommand` (message starts with a real
command); DMs keep the broad detector since they have no mention gate. This
mirrors googlechat's monitor-access wiring. The group/DM split lives in a
small `resolveLineControlCommand` helper in group-policy.ts, next to
resolveLineGroupRequireMention, so bot-handlers.ts stays within its size cap.

* test(line): assert group mention-bypass with a registered control command

The positive regression case sent `!status`, which the mocked
command-auth module treated as a control command via a naive
`startsWith("!")`. Production `hasControlCommand` matches the message
body against registered command aliases (e.g. `/status`), so `!status`
is only an inline token, not a real control command. The test could
therefore pass without proving that a genuine control command still
bypasses requireMention.

Use the registered `/status` alias for the bypass cases and make the
mock reflect the real split: `hasControlCommand` = starts with a
registered alias (precise); `shouldComputeCommandAuthorized` =
`hasInlineCommandTokens` regex over `/x`/`!x` (broad). The two
detectors are now distinguishable, so the group precise-detector path
is actually exercised.

* refactor(line): centralize command detection

* test(line): complete direct message fixture

* docs(changelog): credit LINE command fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:12:49 -07:00
Peter Steinberger
9bee0d4cb8 refactor(deadcode): tighten more provider extension roots (#108515) 2026-07-15 17:05:21 -07:00
morluto
16801bf4f0 fix(agents): prevent subagent registry resurrection (#105793)
* fix(agents): retire legacy subagent registry JSON

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* fix(agents): keep migration decision internal

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* style(agents): format migration decision type

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:01:42 -07:00
qingminlong
4a1eedba54 fix(usage): count instant sessions in hourly metrics (#108160)
* fix(usage): count instant sessions in hourly metrics

* chore: rerun usage metrics CI

* refactor(usage): simplify positive-duration slicing

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 16:57:46 -07:00
Peter Steinberger
9c065c895e refactor(cli): split capability commands by domain (#108419)
* refactor(cli): split capability commands by domain

* fix(cli): keep capability metadata type private
2026-07-15 16:57:21 -07:00
Dallin Romney
2d9b78fff7 refactor(qa): canonicalize live scenario coverage (#108464) 2026-07-15 16:50:41 -07:00
Peter Steinberger
18cff45db9 refactor(vllm): remove unused runtime bridge (#108503) 2026-07-15 16:41:44 -07:00
Peter Steinberger
0763a40bea refactor(vllm): remove unused registration shim (#108500) 2026-07-15 16:36:30 -07:00
NIO
b18f1a8ecd fix(tlon): clear SSE connect timeout after failed openStream (#104585)
* fix(tlon): clear SSE connect timeout after failed openStream

* refactor(tlon): scope SSE connect timeout

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 16:32:54 -07:00
Josh Avant
8e6f966482 fix(codex): continue turns after progress replies (#108487)
* fix(codex): defer omitted source reply finality

* test(codex): refresh source reply prompt snapshots
2026-07-15 16:27:28 -07:00
Peter Steinberger
4d4b1762fc fix(docs-i18n): stabilize split validation 2026-07-15 19:24:41 -04:00
Peter Steinberger
370b80b74d refactor(deadcode): tighten provider extension roots (#108497) 2026-07-15 16:23:47 -07:00
Peter Steinberger
9e64fbb257 style(infra): format file read helper (#108493) 2026-07-15 16:19:35 -07:00
Peter Steinberger
1643f1fd9f refactor(ui): isolate sidebar session presentation (#108492) 2026-07-15 16:17:39 -07:00
Peter Steinberger
ff8d4a3f9c style: format file-read 2026-07-16 00:16:27 +01:00
sunlit-deng
55a822dc68 fix(sessions): keep tail follow cursor aligned with bytes actually read (#108127)
* fix(sessions): keep tail follow cursor aligned with bytes actually read

* refactor(infra): share synchronous file window reads

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 16:00:50 -07:00
xingzhou
3b51889c3b fix(extensions): prevent corrupted UTF-8 in api.exec output (#108365)
* fix(extensions): preserve split UTF-8 in api.exec

* test(agents): cover incomplete exec UTF-8 at EOF

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 15:59:59 -07:00
Peter Steinberger
94b2774098 test(agents): stabilize stale lock retry timing (#108483) 2026-07-15 15:54:28 -07:00
Peter Steinberger
4b286de845 fix(release): repair validation correlations (#108480) 2026-07-15 15:53:17 -07:00