Commit Graph

1943 Commits

Author SHA1 Message Date
zhb 7d13cc6d3c fix(model): preserve provider capabilities across context markers
Use the shared model identity rules for capability matching and cache keys.
Preserve Fable overrides and explicit capability opt-outs across 1M aliases.
2026-09-08 15:32:36 +08:00
程序员阿江(Relakkes) 3b8531bba6 fix(api): preserve explicit context betas for Anthropic relays 2026-09-08 15:08:12 +08:00
程序员阿江(Relakkes) 59c7857beb feat(im): resume project session history (#1286)
Add shared project and session selection across IM adapters, preserve bindings on
failed restoration, and synchronize permissions with desktop clients.

Fixes #1286
2026-09-08 15:08:12 +08:00
程序员阿江(Relakkes) 82447fcf23 fix(proxy): preserve DeepSeek vision images in OpenAI chat (#1304) 2026-09-08 15:08:12 +08:00
程序员阿江(Relakkes) 5c48991967 fix(openai): stop policy rejection retries and support Astra context
Adapt structured policy-error handling and Astra model metadata from sub2api's recent compatibility updates. Preserve rejection codes through HTTP and SSE, stop retry and non-streaming replay, and add Astra's effective context to the official runtime.

Reference: https://github.com/Wei-Shaw/sub2api/pull/6636 and https://github.com/Wei-Shaw/sub2api/pull/6572. Implementation uses the existing TypeScript runtime and local regression harnesses.
2026-09-08 15:08:12 +08:00
程序员阿江(Relakkes) 6c6c4d08a2 fix(openai): use desktop OAuth credentials for model discovery 2026-09-08 15:08:12 +08:00
程序员阿江-Relakkes 19991d8b01 fix(chat): preserve history while tasks are running (#1296)
Preserve durable history during live updates and rebase stream retry cleanup after hydration.

Fixes #1284
2026-09-08 13:46:26 +08:00
程序员阿江(Relakkes) 405b3d6276 fix(chat): preserve hydrated history during stream retry cleanup 2026-09-08 13:32:43 +08:00
程序员阿江(Relakkes) 1aa4d3ef9c merge: integrate main into history race fix 2026-09-08 13:28:19 +08:00
Relakkes Yang 951cd0be3f fix(desktop): preserve history after runtime config errors (#1303)
Treat rejected runtime selections as non-terminal errors and restore the full transcript when only configuration errors are present. Cover errors before, during, and after history loading, plus active streaming and permission states.
2026-09-08 13:10:48 +08:00
程序员阿江-Relakkes 95834e156e Merge pull request #1301 from vzionv/fix/tool-result-media-preservation
fix(core): preserve tool result media across provider and MCP paths
2026-09-07 23:46:57 +08:00
程序员阿江(Relakkes) cfc15ecbf6 Merge remote-tracking branch 'origin/main' into fix/pr-1301-maintainer 2026-09-07 23:39:51 +08:00
程序员阿江-Relakkes 5a7ad2d309 Merge pull request #1299 from vzionv/fix/mcp-connection-races
fix: prevent MCP reconnects from restoring disabled servers
2026-09-07 23:39:37 +08:00
程序员阿江(Relakkes) a981779996 test(server): synchronize inspection and cancellation regressions 2026-09-07 23:35:01 +08:00
程序员阿江(Relakkes) 5f7c719c96 fix(ci): preserve coverage logs across reporter cleanup 2026-09-07 23:30:57 +08:00
程序员阿江(Relakkes) 4eb7ca42ac fix(ci): install native sidecar workspace dependencies 2026-09-07 23:27:37 +08:00
程序员阿江(Relakkes) bd5689dfad fix(ci): run macOS Swift checks on a required macOS lane 2026-09-07 23:23:32 +08:00
程序员阿江(Relakkes) c6146501cc fix(ci): capture coverage reports through regular file descriptors 2026-09-07 23:20:34 +08:00
程序员阿江(Relakkes) 6cc9fd5f49 test(desktop): await checkpoint reload after conversation rewind 2026-09-07 23:19:16 +08:00
程序员阿江(Relakkes) 2d2fc1b432 test(history): wait for complete records after append rollback 2026-09-07 23:10:14 +08:00
程序员阿江(Relakkes) 8e6664f7e9 test(proxy): cover Anthropic upstream failure traces 2026-09-07 23:09:52 +08:00
程序员阿江(Relakkes) eb5726297c fix(media): harden proxy forwarding and packaged image loading 2026-09-07 23:02:13 +08:00
程序员阿江(Relakkes) 2845d29873 test(mcp): restore mocked modules between regression suites 2026-09-07 22:56:52 +08:00
程序员阿江(Relakkes) 01c0dfc585 fix(mcp): preserve newer connections during stale cleanup 2026-09-07 22:53:10 +08:00
程序员阿江(Relakkes) f0ebaf8b64 Merge remote-tracking branch 'origin/main' into fix/pr-1301-maintainer 2026-09-07 22:47:14 +08:00
程序员阿江(Relakkes) ff7b7812ac Merge remote-tracking branch 'origin/main' into fix/pr-1299-maintainer 2026-09-07 22:47:09 +08:00
程序员阿江(Relakkes) 570652b82c docs: refresh bilingual README covers 2026-09-07 22:14:13 +08:00
程序员阿江-Relakkes 471473664e Merge pull request #1294 from li-new123/feat/add-fable-5-1
feat(models): support Fable 5.1 with runtime compatibility
2026-09-07 22:06:22 +08:00
程序员阿江(Relakkes) 8a4be0dee7 fix(ci): make runtime validation portable to Linux 2026-09-07 21:56:11 +08:00
程序员阿江(Relakkes) 9e4f83bbe3 test: stabilize PR validation and install server adapter dependencies 2026-09-07 21:41:31 +08:00
程序员阿江(Relakkes) 9c081af746 fix(models): complete Fable 5.1 runtime compatibility 2026-09-07 21:41:31 +08:00
程序员阿江(Relakkes) 823f95fad6 Merge remote-tracking branch 'origin/main' into fix/fable-5-1-runtime 2026-09-07 21:26:23 +08:00
vzionv 0bb641ecc6 test: verify tool result media across API boundaries 2026-09-06 23:53:32 +08:00
vzionv 4b181facc4 fix: preserve tool result media across provider and MCP paths 2026-09-06 22:33:53 +08:00
程序员阿江(Relakkes) b1b5a6d678 docs: switch community to WeCom and make Chinese README default
- Add 新功能支持 issue template, refine bug/question templates with a
  pointer to the user group
- Replace the Feishu user group QR with the WeChat Work group QR in both
  READMEs, include contact info for enterprise/Agent customization
- Make the Chinese README the default README.md, keep the English one as
  README.en.md, update language badges on both
- Update PR change policy, pr-triage docs set and site docs check for the
  renamed README files

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-06 15:57:41 +08:00
程序员阿江(Relakkes) c91f844712 docs: streamline agent guidance for GPT-6 Astra 2026-09-06 14:37:38 +08:00
程序员阿江(Relakkes) 633320e9f2 fix(release): allow explicitly skipping Windows signing v0.6.0 2026-09-06 11:46:22 +08:00
vzionv 001a62efe4 test: add MCP reconnect race coverage
Cover MCP connection-close lifecycle, automatic retry outcomes, headless reconnect and toggle flows, stale OAuth results, and MCP state replacement with deterministic mocks. Configure the headless tests with an isolated placeholder credential so they exercise no live provider.
2026-09-06 09:30:35 +08:00
vzionv 51d4a52832 fix: close stale reconnect results without racing re-enable
Stale connections closed by the disabled-state guard now go through
client.cleanup() so their caches are cleared by the close handler at
close time, never by a post-close invalidation that could hit a
connection created by a concurrent re-enable. The post-OAuth reconnect
gets the same disabled check, with the config check and disabled state
write kept synchronous (no await in between) so a later enable cannot
be overwritten by the stale OAuth result.
2026-09-06 08:59:21 +08:00
vzionv 65a9fedcfe fix: keep disabled state across in-flight reconnect results
A reconnect request that completes after the server was disabled no
longer overwrites the disabled state. Connection attempts fold into
disabled when the config no longer allows the server, closing any
fresh connection and clearing its caches; the mcp_toggle enable and
mcp_reconnect handlers apply the same check before writing their
results, and the reconnect failure path keeps disabled when the server
was disabled mid-flight.
2026-09-06 08:59:21 +08:00
vzionv b6fced9af5 refactor: unify MCP connection close handling and disable paths
A single onclose registered at connection creation now clears caches
and notifies a session-registered handler that updates AppState and
decides whether to reconnect; it is unregistered on unmount so shutdown
closes never reconnect. Disabling a connected server clears its caches
and updates AppState directly, so the disabled state never depends on
the close handler firing (headless sessions and cleanup failures
included). Queued disabled updates are dropped when the server was
re-enabled before the batch flush.
2026-09-06 08:59:20 +08:00
程序员阿江(Relakkes) 783eed6be6 fix(release): reuse the prepared macOS signing keychain 2026-09-06 04:17:06 +08:00
程序员阿江(Relakkes) a3b5f603af release: v0.6.0 2026-09-06 04:10:35 +08:00
程序员阿江(Relakkes) 817ced2061 test(skills): cover Computer Use settings transitions in slash commands 2026-09-06 04:10:29 +08:00
程序员阿江(Relakkes) 7af6c53ff8 fix(desktop): restore macOS background computer use and app shutdown
Keep occluded renderers live with display-filtered window streams, refresh
capture regions after geometry changes, and preserve the paste read window.
Allow application shutdown to finish even when resource cleanup throws.

Validated with check:native and an isolated desktop MCP workflow covering
background search, playback, lyrics, and repeated text entry.
2026-09-06 03:50:49 +08:00
程序员阿江(Relakkes) fe7ea03b86 chore(sponsors): retire expired placements while preserving saved providers 2026-09-06 00:10:51 +08:00
程序员阿江(Relakkes) 814c02a786 feat(im): add scan-to-create Feishu bots plus WeCom, QQ and Slack adapters
Connecting Feishu meant creating a bot by hand on the open platform and
pasting an App ID and App Secret back. Feishu also exposes an RFC 8628
device-authorization flow, so the desktop can now render a QR code, and
confirming it in the app creates the bot and stores its credentials
directly. `adapters/feishu/registration.ts` implements that protocol
rather than importing `registerApp` from `@larksuiteoapi/node-sdk@1.73`:
the repository pins 1.60 for the chat client, and the SDK runs the whole
poll inside one un-cancellable promise where the desktop needs the
stateless begin/poll pair the DingTalk registration already uses. The
scan is create-only, so it can never rewrite the configuration of a bot
the user already runs, and it pre-fills exactly the scopes, events and
callbacks this adapter calls. International tenants finish on Lark's
domain, which is now persisted and honoured by the client.

WeCom, QQ and Slack join the same session model. WeCom and QQ bind by
scanning; Slack has no scan flow, so it uses an app manifest that
pre-fills the scopes and Socket Mode. All three run over long
connections, so no public callback URL is needed, and all three accept
private chats only — pairing authorizes one person, and answering in a
group would extend that authorization to everyone else in the room.

They are built on a new `adapters/common/chat-runtime.ts` instead of a
fourth copy of the loop the five existing adapters each carry. A platform
supplies a `ChatPort` — how to say something, how to open a streaming
reply, optionally how to send an image — and the runtime owns pairing,
command routing, session restore, permission bookkeeping and the
translation of the server's stream. The existing five are deliberately
left on their own copies; migrating them is a separate change with its
own regression surface.

Attachments are downloaded through a deferred loader that runs after the
pairing gate and inside the per-chat queue. Resolving them eagerly would
let an unpaired stranger make the adapter fetch bytes and write them
under ~/.claude/im-downloads — on Slack with the bot token attached —
and would let a slow attachment overtake a text message sent after it.

The sidecar launcher's per-adapter branches become one table. It is
declared above the mode dispatch on purpose: `runAdapters` is hoisted and
runs at module top level, so a table declared below it is still in its
temporal dead zone when the adapters mode reads it — which type checks,
lints and unit tests all miss, and only the compiled binary reveals.

Verified with the checks `check:impact` selects: adapters, server,
desktop, electron, policy, chat-contract, agent-flow, docs, native
(sidecar compile, packaging and an adapters-mode smoke against the real
binary) and coverage. The scan flows themselves are not verified against
live platforms — that needs real WeCom, QQ and Slack accounts and would
create real bots.

Claude-Session: https://claude.ai/code/session_01CCGoP316AK7wdQG3Ms6Uwq
2026-09-05 23:46:50 +08:00
Relakkes Yang 90a4a11d28 fix(computer-use): remove per-app approval prompts 2026-09-05 03:09:15 +08:00
toBerlinWay a82cedbba3 fix(chat): preserve history during live updates 2026-09-05 00:23:25 +08:00
Relakkes Yang d93d8248c9 fix(computer-use): align Windows virtual cursor with macOS 2026-09-04 23:35:10 +08:00