Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## v1.0.5-beta.2 (2026-05-21)
- Added provider configuration import with preview, validation, conflict handling, and localized settings UI
- Added CC Switch configuration import and broader provider import path discovery for smoother migration from external tools
- Added a hero transition for the chat input on new threads and refined chat overlay/sidebar styling for a cleaner first-run flow
- Improved session list behavior with stable alphabetical ordering and more predictable pinning
- Added Feishu thing reactions and tightened Feishu remote-control runtime handling
- 新增 Provider 配置导入,支持预览、校验、冲突处理和本地化设置界面
- 新增 CC Switch 配置导入,并扩展 Provider 导入路径发现,方便从外部工具迁移
- 新增新会话聊天输入框的 hero 过渡,并优化聊天浮层与侧边栏样式,让首次使用流程更清爽
- 优化会话列表行为,保持稳定的字母排序和更可预期的置顶表现
- 新增飞书 thing 表情互动,并加强飞书远程控制运行时处理

## v1.0.5-beta.1 (2026-05-19)
- Added an agent progress todo tool with floating progress UI and plan message rendering so long-running agent work is easier to track
- Added OpenAI-compatible video generation with model settings, generated video message rendering, and provider runtime support
Expand Down
61 changes: 0 additions & 61 deletions brand-config.example-banana.json

This file was deleted.

85 changes: 0 additions & 85 deletions brand-config.template.json

This file was deleted.

20 changes: 20 additions & 0 deletions docs/architecture/remove-rebrand-tool/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Remove Rebrand Tool Plan

## Approach

- Keep this SDD folder as the decision record for removing the deprecated tooling.
- Delete the orphaned rebrand script, brand config template, example brand config, and brand asset
placeholder.
- Leave `package.json`, Electron builder configuration, runtime resources, and application metadata
untouched because no package script currently exposes the rebrand path.

## Compatibility

- The only removed interface is direct ad hoc execution of `node scripts/rebrand.js`.
- No stored user data, app configuration, IPC contract, or build artifact schema changes.

## Validation

- Verify no references remain outside this SDD record with a repository search for `rebrand`,
`brand-assets`, and `brand-config`.
- Run `pnpm run format`, `pnpm run i18n`, and `pnpm run lint`.
27 changes: 27 additions & 0 deletions docs/architecture/remove-rebrand-tool/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Remove Rebrand Tool

## Goal

Remove the deprecated repository-local rebrand tooling so the project no longer carries an
unmaintained brand replacement path.

## Acceptance Criteria

- `scripts/rebrand.js` is removed.
- `brand-config.template.json` and `brand-config.example-banana.json` are removed.
- `scripts/brand-assets/` no longer has a tracked placeholder file.
- No code, build, package script, or documentation outside this SDD record references the removed
rebrand assets.
- Runtime app behavior, branding, build configuration, IPC, config storage, and i18n output remain
unchanged.

## Non-Goals

- Do not replace the rebrand tool with a new white-labeling mechanism.
- Do not alter current DeepChat product metadata, icons, logos, updater settings, or application
resources.
- Do not add migrations or compatibility shims for direct `node scripts/rebrand.js` use.

## Open Questions

None.
7 changes: 7 additions & 0 deletions docs/architecture/remove-rebrand-tool/tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Remove Rebrand Tool Tasks

- [x] Confirm current references are limited to the rebrand assets.
- [x] Add minimal SDD documentation for the removal.
- [x] Remove the rebrand script, brand configs, and brand asset placeholder.
- [x] Verify no non-SDD references remain.
- [x] Run required formatting, i18n, and lint checks.
27 changes: 27 additions & 0 deletions docs/features/cc-switch-provider-import/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# CC Switch Provider Import Plan

## Implementation

- Extend `ProviderImportService` with a `cc-switch` source that reads `~/.cc-switch/cc-switch.db` in readonly mode and uses the Windows HOME fallback only when the default profile path is missing.
- Put CC Switch first in the shared provider import source order.
- Keep scan results complete, but filter the first renderer source list to detected sources so missing apps are not shown.
- Query the `providers` table for supported CC Switch app types except `codex`.
- Parse app-specific JSON settings:
- Claude and Claude Desktop: `env.ANTHROPIC_AUTH_TOKEN` or `env.ANTHROPIC_API_KEY`, `env.ANTHROPIC_BASE_URL`, model env values, and desktop route metadata.
- Gemini: `env.GEMINI_API_KEY`, `env.GOOGLE_GEMINI_BASE_URL`, `env.GEMINI_MODEL`.
- OpenCode: `options.apiKey`, `options.baseURL`, AI SDK package name, and model keys.
- OpenClaw: `apiKey`, `baseUrl`, `api`, and `models`.
- Hermes: `api_key`, `base_url`, `api_mode`, and `models`.
- Filter all import sources after raw read so blank/template API keys never reach the public preview list.
- Add mapping metadata for credential-only imports so built-in providers keep their configured endpoint and runtime when CC Switch exposes a different wire protocol.

## Compatibility

- Existing import sessions remain in-memory and short-lived.
- Existing Alma, Cherry Studio, Hermes, and OpenClaw parsing keeps the same file formats but now hides empty provider configs.
- Custom provider API type override remains available for custom rows.

## Risks

- CC Switch may add new app types or settings shapes. Unknown rows should fail closed by hiding unsupported rows rather than guessing.
- Some translated descriptions may not mention CC Switch yet, but the source row itself is localized by provider name.
30 changes: 30 additions & 0 deletions docs/features/cc-switch-provider-import/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# CC Switch Provider Import

## Goal

Allow users to import configured provider credentials from CC Switch through the existing provider import dialog, without copying API keys by hand.

## User Stories

- As a DeepChat user, I can see CC Switch as a detected provider import source when `~/.cc-switch/cc-switch.db` exists.
- As a user with CC Switch providers, I only see rows that contain a real API key.
- As a user importing Claude-compatible CC Switch providers, I do not accidentally switch DeepChat built-in providers to the wrong runtime.

## Acceptance Criteria

- CC Switch appears first in the provider import source order.
- The first import page only lists detected sources, hiding sources whose config files are missing.
- The scan reads CC Switch provider rows for `claude`, `claude-desktop`, `gemini`, `opencode`, `openclaw`, and `hermes`.
- CC Switch `codex` rows are intentionally ignored; DeepChat does not parse TOML from CC Switch.
- Rows with blank API keys or placeholder/template API keys are not shown in scan results.
- DeepSeek rows exposed as Anthropic-compatible endpoints import only the API key into DeepChat's built-in `deepseek` provider, preserving its existing runtime and base URL.
- MiniMax rows map to DeepChat's built-in `minimax` provider and keep Anthropic runtime behavior.
- Unknown importable rows with an API key and HTTP endpoint import as custom providers with the safest inferred API type.
- Raw API keys stay in the main process scan session and are never returned to the renderer during preview.

## Non-Goals

- Importing CC Switch Codex providers.
- Reading CC Switch custom data directories.
- Importing CC Switch conversations, prompts, MCP servers, skills, usage data, or failover settings.
- Network validation of imported credentials.
11 changes: 11 additions & 0 deletions docs/features/cc-switch-provider-import/tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# CC Switch Provider Import Tasks

- [x] Add `cc-switch` to shared provider import source ids and route schemas.
- [x] Move CC Switch to the front of the import source order.
- [x] Hide missing import sources from the first renderer selection page.
- [x] Add credential-only import mode and warning text.
- [x] Implement CC Switch SQLite scan support for non-Codex app types.
- [x] Filter blank/template API keys across all provider import sources.
- [x] Preserve built-in provider runtime/base URL for credential-only imports.
- [x] Add provider import unit tests for CC Switch and updated empty-key behavior.
- [x] Run format, i18n, lint, focused provider import tests, and full typecheck.
32 changes: 32 additions & 0 deletions docs/features/chat-input-hero-transition/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Chat Input Hero Transition Plan

## Approach

- Add a small renderer utility that captures the source `ChatInputBox` DOM node from `NewThreadPage.vue`, clones it into a fixed overlay, and stores a pending flight in module state.
- Consume that pending flight from `ChatPage.vue` after mount by animating the overlay clone to the destination `ChatInputBox` bounds with the Web Animations API.
- Fade the destination composer in during the last part of the flight to avoid duplicate visible inputs.

## Affected Files

- `src/renderer/src/lib/chatInputHero.ts`
- `src/renderer/src/pages/NewThreadPage.vue`
- `src/renderer/src/pages/ChatPage.vue`

## Data Flow

- `NewThreadPage.vue` resolves the local `ChatInputBox` element and calls `prepareChatInputHeroFlight()` before triggering session navigation.
- The helper stores an in-memory pending flight plus an overlay clone attached to `document.body`.
- `ChatPage.vue` resolves its composer element on mount and calls `playChatInputHeroFlight()`.
- The helper animates overlay position, scale, and border radius, then removes the overlay and restores the destination element.

## Compatibility And Risk

- Reduced-motion users bypass the animation.
- Failed navigation or failed session creation explicitly cancel the pending overlay.
- Because the state is module-local and one-shot, unrelated route changes remain unaffected.

## Validation

- Run `pnpm run format`
- Run `pnpm run i18n`
- Run `pnpm run lint`
28 changes: 28 additions & 0 deletions docs/features/chat-input-hero-transition/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Chat Input Hero Transition

## Goal

When the user sends the first message from the new thread page, the `ChatInputBox` should animate into the chat page instead of disappearing and reappearing abruptly.

## User Need

- As a user, when I move from the centered composer on `NewThreadPage.vue` to the sticky composer on `ChatPage.vue`, I want the transition to feel continuous.

## Acceptance Criteria

- Submitting from `NewThreadPage.vue` prepares a one-shot hero transition for the current `ChatInputBox`.
- When `ChatPage.vue` mounts for that navigation, the hero transition animates from the previous composer bounds to the new composer bounds.
- If reduced motion is enabled, the transition is skipped.
- If session creation or route activation fails, any temporary hero overlay is cleaned up.
- The transition only applies to the new-thread to chat handoff and does not affect normal chat-to-chat session switching.

## Constraints

- Reuse the existing `ChatInputBox` DOM structure instead of introducing a separate fake design.
- Keep implementation renderer-local; no new IPC or persisted state.
- Avoid changing user-facing copy.

## Non-Goals

- Animating the entire page layout.
- Introducing a generic shared-element framework for unrelated components.
7 changes: 7 additions & 0 deletions docs/features/chat-input-hero-transition/tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Chat Input Hero Transition Tasks

1. Add SDD docs for the composer hero transition.
2. Implement a renderer helper for preparing, playing, and cancelling a one-shot composer flight.
3. Hook `NewThreadPage.vue` into flight preparation and failure cleanup.
4. Hook `ChatPage.vue` into flight playback after mount.
5. Run formatting and lint validation.
Loading
Loading