Conversation
Subagents can list multiple fallback models, but one thinking setting cannot express the right request for each alternative. Keep the existing flat pin format and clamp each request to the target model.
|
补充 CI 排查:#1013 的两项失败均可在当前上游
这两处均不属于本 PR 的备用模型功能,故未混入无关修改。Rust 检查和最新基线检查已经通过。 |
Reuse the upstream token-only fix in ui-kit.css; preserve the existing 4px checkbox radius while satisfying the style-token check.
Integrate upstream main at 35d6903 into the existing subagent fallback thinking feature branch. Preserve PR history and incorporate upstream style-token, documentation-locale, and architecture fixes.
Use the existing unit line-height token and move the light model menu's three shadow layers into the shared theme tokens. Add regressions for the unchanged line height and shadow values.
…ettings (vastsa#1029) * feat(shell): Mid-Autumn easter egg on first launch The app now opens with a short Moon Festival animation once per profile, after the startup splash has finished, and the Info page in Settings gained an Easter eggs card that replays it on demand. The egg must never compete with the boot surface, so the launch gate waits for the shell to be ready and for the splash to be gone before it records the profile as seen and opens the overlay. The animation is the verified single-file prototype ported into typed modules, so it follows the renderer's existing store, i18n and stylesheet conventions and needs no new IPC channel, no main-process work and no persisted host schema. Its two textures ship as alpha WebP at the resolution the renderer actually draws, replacing the prototype's inline base64 pair (~640 KB) with about 106 KB of assets. * fix(shell): add null guard for canvas 2d context in mid-autumn scene TypeScript does not narrow outer-scope null guards into nested closures. Assign getContext result to a temporary, guard it, then rebind to a const typed as CanvasRenderingContext2D so all inner functions see a non-null type. * fix(shell): use ReactNode return type for MidAutumnEggOverlay portalOverlay returns ReactNode, not ReactElement. Aligning the component signature fixes the TS2322 typecheck error. --------- Co-authored-by: v_wyxgwang <v_wyxgwang@tencent.com> Co-authored-by: vastsa <hhxk666@gmail.com>
… band (vastsa#1015) * fix(composer): fade the transcript instead of painting an opaque dock band `.composer-dock-docked` painted `--ds-bg-primary` across its full width to hide transcript rows that had scrolled below the floating shell (issue vastsa#728, D603). That band is a fixed built-in colour no theme region can reach: a theme that fills `.main-pane` or `.thread-scroll` got a hard-edged rectangle of the workspace colour across the bottom of the chat, and the only lever was `--ds-bg-primary` itself, which every other primary surface follows. The dock now paints nothing and `.thread-scroll` masks its own content out across the composer reserve, so a themed conversation surface stays visible behind the shell. The mask sits on the scroller rather than on `.thread-wrap` because the minimap rail, the jump-to-latest button, the settle veil and the navigation status are `.thread-wrap` children that must stay fully painted. Its stops are anchored to the same `dock-height + 16px` trailing reserve `.thread-content` already holds, so a transcript pinned to its end keeps its last row fully opaque and only rows crossing the boundary fade. The dock's own plates (ask-tool card, plan approval bar, queued prompts, shell) are opaque siblings of `.thread-wrap`, so they are unaffected. The theme surface regression now pins the dock to fully transparent and asserts the mask tracks `--composer-dock-height`; both assertions fail against the previous implementation. Renderer CSS, the regression probe and the matching spec/decisions entries only: no scroll state, protocol, persistence, theme schema, or permission change. refs vastsa#728 * fix(styles): tokenize composer model menu metrics Keep the model picker light-mode shadow unchanged while routing it through the design-token guard, and express its unit line height with the existing leading scale so the current main lint gate passes. * fix(styles): replace hard-coded 76px with calc expression in subagent-transcript-jump The traffic-light-reserve test asserts that work-panel.css must not restate the traffic-light footprint literal. Use a calc expression based on --st-composer-dock-height instead. --------- Co-authored-by: v_wyxgwang <v_wyxgwang@tencent.com> Co-authored-by: vastsa <hhxk666@gmail.com>
The transcript chip for typed slash invocations kept single-line truncation. Skill invocations store the full typed body, collapsing long messages to one ellipsized line. Drop the truncation and let the chip follow the wrapping model of .message-user-text. Also restores baseline CI contracts for shared SegmentedControl and awaits keyboard focus in theme sampling E2E. Fixes vastsa#1019
Track the queued turn awaiting its prompt acknowledgement so early runtime notifications cannot adopt the next waiting entry and make it uncancelable. Keep the alias stable across subsequent events and release startup tracking on both success and failure. Document the queue identity invariant and the desktop cancellation scenario. Fixes vastsa#1032
models.dev indexes a gateway's copy of a model under the vendor that owns the weights, not under the gateway. findModel scoped the lookup to the row's own catalog provider, so every such model missed and fell back to the generic 128k text-only shape. Add cross-provider exact-id borrowing: when the row's own provider publishes nothing for the id, borrow a unanimous record from other publishers. Tool support must be unanimous; reasoning, vision and attachment are intersections; limits are medians. 14 of 31 ModelScope text models now resolve. Fixes vastsa#938
Show a black circle + white digit overlay on the Windows taskbar icon for unread durable task notifications (task.completed + task.failed). Clear on mark-read / mark-all-read / clear. Counts >= 100 display as 99+. macOS/Linux use best-effort setBadgeCount. D295 bell inbox remains failures-only; both toolbar actions remain available so taskbar badge can be cleared from the popover even when only successes are unread. Canvas-rendered at 64px with Segoe UI font for smooth glyph rendering. Deferred window readiness replays the badge after the BrowserWindow is ready. Closes vastsa#1024
Show a selected image beside batch thumbnails and keep its download target in sync. Decode viewer targets before selection so fitted images remain steady, even during rapid navigation. Full-window viewer supports thumbnails, arrow keys, zoom, fit-to-window, Escape close and focus restore. Download preserves original image bytes with a safe filename. Related to vastsa#790
The c807dfe refactor condensed the runtime system prompt, replacing verbose Collaboration/Searching/multi_tool_use/BrowserPreview paragraphs with compact operational rules. Five tests still asserted the old wording. Update assertions to match the current prompt content. - runtime.test.ts: 4 tests updated for compact operational rules - browser-preview-tool.test.mjs: 1 test trimmed to match tool description
- Mooncakes and moon rise start simultaneously (rainStart = 0) - Each mooncake flies directly to its text target on spawn via bezier arc, no gravity or ground landing phase - Text targets pre-computed once, assigned per cake at spawn time - Total animation compressed to ~2.5s (duration 2.5, spawn 0.8s, fly 0.6s) - Sky gradient drawn over opaque base to prevent compositing seams - Overlay background hardcoded to #02040f to match canvas base color - Close button moved to bottom-center, fades in at 1.8s - Close button gets -webkit-app-region: no-drag for macOS clickability - Updated timeline tests to match new values
The style-surface-tokens guard forbids raw hex on .overlay selectors. Wrap the night-sky base colour in a scoped custom property.
Add electron-builder portable target alongside existing NSIS and ZIP targets for Windows. The build script now runs three sequential steps with distinct piDistribution metadata (installed, zip, portable). Produces: Setup .exe, Portable .zip, and Portable single-file .exe.
The first open rendered incomplete text because sampleTextPoints ran before the Chinese font (PingFang SC, etc.) finished loading. The browser fell back to a generic sans-serif whose glyph metrics produced too few sample points. Now start() waits for both image assets and the text font via the Font Loading API before beginning the animation. The storage key is bumped to v2 so users who saw the broken version get to see it again.
Voice settings are now marked developerOnly with an Experimental badge, matching the pattern used by Cloud Sync and Remote Hosts. The nav entry, page content, and settings search are all hidden when developer mode is off. Added voiceExperimental i18n key to all 9 locales and updated the developer-only destinations contract test.
The portable build target was added to the Windows configuration but the auto-update contract test still expected only nsis and zip. Update the assertion to include portable in the expected target list, verify the portable artifact name, and assert the build script produces the portable step with its piDistribution metadata.
Npm can leave hidden staging directories under scoped packages such as @img. The discovery scan treated them as package candidates and surfaced ENOENT in the Skills page. Skip dot-prefixed scoped children while preserving normal and valid scoped packages. Add regression coverage for hidden Sharp-style directories so healthy candidates remain discoverable without diagnostics. fixes vastsa#1040
Keep the upstream model-menu shadow token when merging the per-fallback thinking feature. Limit the import-page contract test to its module so unrelated settings cards cannot make the JS gate fail.
GitHub's pull-request webhook base SHA can lag behind the synthetic merge checkout when main advances. Compare newly added source files with the merge candidate's first parent instead, so upstream files cannot block an unrelated PR.
muzimu217
left a comment
There was a problem hiding this comment.
核心功能(每个备用模型独立思考强度档位、默认 inherit、切换时按目标模型能力调整)本身清晰有用,验证段也扎实(e2e 23/23、针对性测试+构建+typecheck、Windows 隔离说明如实)。一个主要意见:
PR 范围与正文严重不符,疑似分支叠加。 正文只描述"备用模型思考强度"一件事,但文件清单里有大量与本功能无关的内容:mid-autumn-egg 整个特性(assets 资源、scene/timeline/sampling、preferences、overlay、store)、taskbar-unread-badge/overlay、generated-images 一族、notification-inbox、ci.yml 改动,以及多份无关 spec(21-image-generation、NAV、ui-design-system 等),合计 +5561/−310。如果这些是其它在飞工作叠进来的:按本仓库"一个 PR 只交一件事"的强惯例(维护者此前对多个关注点的 PR 一律要求拆分),建议把本特性 rebase 到干净 main 上单独出——功能本身不大(SubagentFallbackModels/SubagentEditorSheet + model_fallbacks.rs + ADR 0307 + 23 号 spec),拆出来过审会快很多,叠加的部分各自走各自的 PR。
拆分时记得 spec 只保留真正属于本特性的部分(03-runtime/23 与相关 en/zh 成对项),e2e-plan 条目同步核对。
背景
子智能体可以配置多个备用模型,但目前只能为子智能体整体设置思考强度。
改动
inherit或标准思考强度档位;默认显示inherit。验证
ee31195f0;Base main:21dcd3ddb。test:e2e:subagent-models和完整test:e2e通过(23/23;无密钥的实时模型用例跳过);test:e2e:subagents因 Windows 隔离限制未运行。