From 22bd525ee0cff73a21edf60e6da3f63de6cca964 Mon Sep 17 00:00:00 2001
From: jackeyunjie <1300893414@qq.com>
Date: Thu, 15 Oct 2026 20:48:55 +0800
Subject: [PATCH] feat(macos): add built-in share entry for Qoder CN
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增内置分享入口「发给 Qoder CN」(目标应用 com.qodercn.app),
与 Codex、Claude 等入口一样走「激活 + 自动粘贴」路径:
- ShareAction 新增 qoderCN case,补齐 targetBundleIdentifier /
needsIntent / targetDisplayName / entryTitle / bundleIdentifierSuffix
- share-slots.sh 新增一行,入口数 12 → 13
- 图标 08-qodercn.png 提取自本地 Qoder CN.app
- zh-Hans / en 双语 InfoPlist.strings 与 Localizable.strings
- ShareEntryList、ForwardTargets、ActionRunner、AppModel、BatchState
的穷尽 switch 全部补 case
- ShareActionTests 补 bundle id / needsIntent / Codable round-trip 断言
- README、USAGE、PRODUCT_CAPABILITIES 文档同步为十三个入口
验证:check-localizations.swift 与 check-release-config.sh 通过;
CONFIG=release make-app.sh 构建成功(13 个 appex,签名验证通过);
已实机验收——微信转发到「发给 Qoder CN」后归档与场景提示词正常
粘贴进 Qoder CN。本机 Command Line Tools 不含 XCTest.framework,
swift test 未能运行,请 CI 跑测试套件。
---
PRODUCT_CAPABILITIES.zh-CN.md | 8 ++++----
README.md | 7 ++++---
README_EN.md | 7 ++++---
USAGE.zh-CN.md | 4 ++--
USAGE_EN.md | 4 ++--
.../Localizations/en.lproj/Localizable.strings | 2 ++
.../zh-Hans.lproj/Localizable.strings | 2 ++
.../QoderCN/en.lproj/InfoPlist.strings | 1 +
.../QoderCN/zh-Hans.lproj/InfoPlist.strings | 1 +
macos/Scripts/check-release-config.sh | 4 ++--
macos/Scripts/share-slots.sh | 4 +++-
.../Sources/WeChatBridgeApp/ActionRunner.swift | 2 +-
macos/Sources/WeChatBridgeApp/AppModel.swift | 2 +-
.../WeChatBridgeApp/ForwardTargets.swift | 1 +
.../WeChatBridgeApp/ShareEntryProbe.swift | 2 +-
.../Views/Settings/ShareEntryList.swift | 8 +++++---
.../Sources/WeChatBridgeCore/BatchState.swift | 2 +-
.../Sources/WeChatBridgeCore/ShareAction.swift | 8 +++++++-
.../WeChatBridgeCore/ShareFailure.swift | 2 +-
.../ShareActionTests.swift | 17 +++++++++++++++--
shared/AppLogos/08-qodercn.png | Bin 0 -> 156662 bytes
shared/AppLogos/README.md | 1 +
22 files changed, 61 insertions(+), 28 deletions(-)
create mode 100644 macos/Resources/ShareLocalizations/QoderCN/en.lproj/InfoPlist.strings
create mode 100644 macos/Resources/ShareLocalizations/QoderCN/zh-Hans.lproj/InfoPlist.strings
create mode 100644 shared/AppLogos/08-qodercn.png
diff --git a/PRODUCT_CAPABILITIES.zh-CN.md b/PRODUCT_CAPABILITIES.zh-CN.md
index 9535e22..f0b80cf 100644
--- a/PRODUCT_CAPABILITIES.zh-CN.md
+++ b/PRODUCT_CAPABILITIES.zh-CN.md
@@ -28,10 +28,10 @@
| 能力域 | 能力 | 用户结果 | 当前状态 |
|---|---|---|---|
-| 分享入口 | 在微信转发菜单增加十二个入口 | 无需打开微信流主窗口即可发起场景 | 稳定 |
+| 分享入口 | 在微信转发菜单增加十三个入口 | 无需打开微信流主窗口即可发起场景 | 稳定 |
| 分批收集 | 连续接收多批原始 ZIP,最后统一选择目标和场景 | 浮条首尾参考、记录页恢复、冻结交付和失败重试 | 开发版已实现,微信宿主分享链路待实测 |
| 文件接入 | 接收微信导出的 ZIP 和文件型附件 | 原始文件和文件名进入本地批次 | 稳定 |
-| 目标转发 | 发给 Codex、Claude、豆包、千问办公、WorkBuddy、WeSight 或自定义应用 | 激活目标 App 并自动粘贴 | 稳定,依赖辅助功能权限 |
+| 目标转发 | 发给 Codex、Claude、豆包、千问办公、WorkBuddy、WeSight、DeepSeek Harness、Qoder CN 或自定义应用 | 激活目标 App 并自动粘贴 | 稳定,依赖辅助功能权限 |
| Obsidian | 生成 Markdown 笔记并保存原始归档 | 聊天记录进入本地知识库 | 稳定 |
| 剪贴板 | 文件写入剪贴板 | 用户自行在目标位置粘贴 | 稳定 |
| 记录 | 历史批次、状态、重新发送和清理 | 可以确认文件是否送达 | 稳定 |
@@ -178,7 +178,7 @@
### 8.2 网络
- 除软件更新外不联网。
-- 十二个 Share Extension 均在沙盒中运行。
+- 十三个 Share Extension 均在沙盒中运行。
- 扩展没有网络权限。
### 8.3 系统权限
@@ -219,7 +219,7 @@
| 能力 | 主要实现 |
|---|---|
-| 十二个分享入口 | `macos/Scripts/share-slots.sh` |
+| 十三个分享入口 | `macos/Scripts/share-slots.sh` |
| Share Extension 接入 | `macos/Sources/WeChatBridgeShare/ShareViewController.swift` |
| 附件复制与命名 | `macos/Sources/WeChatBridgeShare/AttachmentImporter.swift` |
| 目标应用定义 | `macos/Sources/WeChatBridgeCore/ShareAction.swift` |
diff --git a/README.md b/README.md
index 857093c..304f107 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ flowchart LR
| 能力 | 使用体验 |
| --- | --- |
-| 十二个原生入口 | 在微信转发菜单直接选择目标,无需打开微信流主窗口 |
+| 十三个原生入口 | 在微信转发菜单直接选择目标,无需打开微信流主窗口 |
| AI Agent 转发 | 激活目标 App,附加场景指令并自动粘贴聊天归档 |
| Obsidian 沉淀 | 生成 Markdown 笔记,保存原始 ZIP,并按聊天名组织内容 |
| 自定义目标 | 添加任意 macOS 应用,终端类应用可只接收文件路径 |
@@ -59,6 +59,7 @@ flowchart LR
| 发给 WorkBuddy | 激活 WorkBuddy 并粘贴聊天归档 |
| 发给 WeSight | 激活 WeSight 并粘贴聊天归档 |
| 发给 DeepSeek Harness | 激活 DeepSeek Harness 并粘贴聊天归档 |
+| 发给 Qoder CN | 激活 Qoder CN 并粘贴聊天归档 |
| 沉淀到 Obsidian | 创建 Markdown 笔记并保存原始附件,通知可打开笔记 |
| 沉淀到文件夹 | 写入选定目录中的 Markdown 与附件,通知可在访达中定位 |
| 分批收集到微信流 | 连续分享多批原始 ZIP,收齐后一次选择目标和场景 |
@@ -85,7 +86,7 @@ flowchart LR
 |
- | 十二个入口随时开关,未安装的应用直接标注 |
+ 十三个入口随时开关,未安装的应用直接标注 |
场景保存提示词与适用 Agent,转发时挑一个 |
@@ -179,7 +180,7 @@ shared/ # 两端共用的资产与契约
site/ # Sparkle 更新源与版本说明
```
-项目使用 Swift Package Manager 管理 macOS 源码和 Sparkle 依赖。`macos/Scripts/make-app.sh` 会把主程序与十二个 Share Extension 组装成完整的 `.app`。Windows 侧见 `windows/AGENTS.md` 与 `windows/docs/README.zh-CN.md`。
+项目使用 Swift Package Manager 管理 macOS 源码和 Sparkle 依赖。`macos/Scripts/make-app.sh` 会把主程序与十三个 Share Extension 组装成完整的 `.app`。Windows 侧见 `windows/AGENTS.md` 与 `windows/docs/README.zh-CN.md`。
## 开发与验证
diff --git a/README_EN.md b/README_EN.md
index 7854dba..a0aace6 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -39,7 +39,7 @@ flowchart LR
| Capability | Experience |
| --- | --- |
-| Twelve native entries | Pick a destination in WeChat without opening the main app |
+| Thirteen native entries | Pick a destination in WeChat without opening the main app |
| AI agent hand-off | Activate the target app, attach a scene prompt, and paste the archive |
| Obsidian archiving | Create a Markdown note, retain the original ZIP, and organize it by chat name |
| Custom destinations | Add any macOS app; terminal-style apps can receive file paths only |
@@ -59,6 +59,7 @@ flowchart LR
| Send to WorkBuddy | Activate WorkBuddy and paste the conversation archive |
| Send to WeSight | Activate WeSight and paste the conversation archive |
| Send to DeepSeek Harness | Activate DeepSeek Harness and paste the conversation archive |
+| Send to Qoder CN | Activate Qoder CN and paste the conversation archive |
| Save to Obsidian | Create a Markdown note and preserve the original attachment |
| Save to folder | Write Markdown and attachments to the selected folder; reveal files from the notification |
| Collect in WeChatBridge | Receive multiple original ZIPs, then choose a target and scene once |
@@ -83,7 +84,7 @@ Pick a destination straight from WeChat's “Forward to other apps” menu, with
 |
- | Toggle any of the twelve entries; missing apps are flagged |
+ Toggle any of the thirteen entries; missing apps are flagged |
Scenes store prompts and their agents, chosen at forward time |
@@ -156,7 +157,7 @@ shared/ # Agent logos, design assets, screenshots, and skills
site/ # Sparkle update feed and release notes
```
-Swift Package Manager owns the source layout and the Sparkle dependency. `macos/Scripts/make-app.sh` assembles the host executable and twelve Share Extensions into a complete `.app` bundle.
+Swift Package Manager owns the source layout and the Sparkle dependency. `macos/Scripts/make-app.sh` assembles the host executable and thirteen Share Extensions into a complete `.app` bundle.
## Development checks
diff --git a/USAGE.zh-CN.md b/USAGE.zh-CN.md
index dc7219a..1f5d014 100644
--- a/USAGE.zh-CN.md
+++ b/USAGE.zh-CN.md
@@ -19,7 +19,7 @@
## 转发入口
-十二个入口覆盖主流 Agent、笔记软件和剪贴板,随时可以用开关收窄或放开。
+十三个入口覆盖主流 Agent、笔记软件和剪贴板,随时可以用开关收窄或放开。

@@ -29,7 +29,7 @@

-- 发给 Codex / Claude / 豆包 / 千问办公 / WorkBuddy / WeSight:激活目标应用并粘贴聊天归档。
+- 发给 Codex / Claude / 豆包 / 千问办公 / WorkBuddy / WeSight / DeepSeek Harness / Qoder CN:激活目标应用并粘贴聊天归档。
- 沉淀到 Obsidian:生成 Markdown 笔记,同时保存微信导出的原始压缩包;通过通知打开笔记。
- 沉淀到文件夹:将 Markdown、原始 ZIP 和附件保存到选定目录,默认位置为下载目录下的「微信流」文件夹。
- 复制到剪贴板:只写文件,不自动粘贴,由你自己决定贴到哪里。
diff --git a/USAGE_EN.md b/USAGE_EN.md
index c75cac7..d776ae5 100644
--- a/USAGE_EN.md
+++ b/USAGE_EN.md
@@ -19,7 +19,7 @@ These entries come from WeChatBridge and sit in the same menu as AirDrop, Messag
## Destinations
-Twelve entries cover mainstream agents, note-taking apps, and the clipboard. You can narrow or widen the list at any time.
+Thirteen entries cover mainstream agents, note-taking apps, and the clipboard. You can narrow or widen the list at any time.

@@ -29,7 +29,7 @@ Supported agents:

-- Send to Codex / Claude / Doubao / QwenWork / WorkBuddy / WeSight: activate the target app and paste the archive.
+- Send to Codex / Claude / Doubao / QwenWork / WorkBuddy / WeSight / DeepSeek Harness / Qoder CN: activate the target app and paste the archive.
- Save to Obsidian: create a Markdown note and keep the original WeChat export.
- Copy to Clipboard: write the files without pasting, so you decide where they land.
- Send to Custom: add any macOS app; terminal-style apps can receive file paths only.
diff --git a/macos/Resources/Localizations/en.lproj/Localizable.strings b/macos/Resources/Localizations/en.lproj/Localizable.strings
index 02b1b15..21e47a6 100644
--- a/macos/Resources/Localizations/en.lproj/Localizable.strings
+++ b/macos/Resources/Localizations/en.lproj/Localizable.strings
@@ -32,6 +32,7 @@
"发给豆包" = "Send to Doubao";
"发给 WeSight" = "Send to WeSight";
"发给 DeepSeek Harness" = "Send to DeepSeek Harness";
+"发给 Qoder CN" = "Send to Qoder CN";
"沉淀到 Obsidian" = "Save to Obsidian";
"沉淀到文件夹" = "Save to Folder";
"添加应用…" = "Add an App…";
@@ -131,6 +132,7 @@
"激活豆包并直接粘贴到输入框。" = "Brings Doubao forward and pastes straight into its input.";
"激活 WeSight 并直接粘贴到输入框。" = "Brings WeSight forward and pastes straight into its input.";
"激活 DeepSeek Harness 并直接粘贴到输入框。" = "Brings DeepSeek Harness forward and pastes straight into its input.";
+"激活 Qoder CN 并直接粘贴到输入框。" = "Brings Qoder CN forward and pastes straight into its input.";
"把聊天记录转成 Markdown,写入选定的 Obsidian 知识库。" = "Turns the chat archive into Markdown and writes it into the selected Obsidian vault.";
"把聊天记录转成 Markdown 和附件,写入选定的文件夹。" = "Turns the chat into Markdown and attachments in the folder you choose.";
"只放进剪贴板,去哪儿按 ⌘V 由你决定。" = "Puts them on the clipboard and leaves the ⌘V to you.";
diff --git a/macos/Resources/Localizations/zh-Hans.lproj/Localizable.strings b/macos/Resources/Localizations/zh-Hans.lproj/Localizable.strings
index c05c775..81e3356 100644
--- a/macos/Resources/Localizations/zh-Hans.lproj/Localizable.strings
+++ b/macos/Resources/Localizations/zh-Hans.lproj/Localizable.strings
@@ -32,6 +32,7 @@
"发给豆包" = "发给豆包";
"发给 WeSight" = "发给 WeSight";
"发给 DeepSeek Harness" = "发给 DeepSeek Harness";
+"发给 Qoder CN" = "发给 Qoder CN";
"沉淀到 Obsidian" = "沉淀到 Obsidian";
"沉淀到文件夹" = "沉淀到文件夹";
"添加应用…" = "添加应用…";
@@ -131,6 +132,7 @@
"激活豆包并直接粘贴到输入框。" = "激活豆包并直接粘贴到输入框。";
"激活 WeSight 并直接粘贴到输入框。" = "激活 WeSight 并直接粘贴到输入框。";
"激活 DeepSeek Harness 并直接粘贴到输入框。" = "激活 DeepSeek Harness 并直接粘贴到输入框。";
+"激活 Qoder CN 并直接粘贴到输入框。" = "激活 Qoder CN 并直接粘贴到输入框。";
"把聊天记录转成 Markdown,写入选定的 Obsidian 知识库。" = "把聊天记录转成 Markdown,写入选定的 Obsidian 知识库。";
"把聊天记录转成 Markdown 和附件,写入选定的文件夹。" = "把聊天记录转成 Markdown 和附件,写入选定的文件夹。";
"只放进剪贴板,去哪儿按 ⌘V 由你决定。" = "只放进剪贴板,去哪儿按 ⌘V 由你决定。";
diff --git a/macos/Resources/ShareLocalizations/QoderCN/en.lproj/InfoPlist.strings b/macos/Resources/ShareLocalizations/QoderCN/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..424ab0f
--- /dev/null
+++ b/macos/Resources/ShareLocalizations/QoderCN/en.lproj/InfoPlist.strings
@@ -0,0 +1 @@
+"CFBundleDisplayName" = "Send to Qoder CN";
diff --git a/macos/Resources/ShareLocalizations/QoderCN/zh-Hans.lproj/InfoPlist.strings b/macos/Resources/ShareLocalizations/QoderCN/zh-Hans.lproj/InfoPlist.strings
new file mode 100644
index 0000000..b6c0ab9
--- /dev/null
+++ b/macos/Resources/ShareLocalizations/QoderCN/zh-Hans.lproj/InfoPlist.strings
@@ -0,0 +1 @@
+"CFBundleDisplayName" = "发给 Qoder CN";
diff --git a/macos/Scripts/check-release-config.sh b/macos/Scripts/check-release-config.sh
index 9bd49e6..62d32f4 100755
--- a/macos/Scripts/check-release-config.sh
+++ b/macos/Scripts/check-release-config.sh
@@ -23,8 +23,8 @@ plutil -lint "$APP_INFO" "$SHARE_INFO" "$APP_ENTITLEMENTS" "$SHARE_ENTITLEMENTS"
plutil -lint "$ROOT"/Resources/Localizations/*/*.strings "$ROOT"/Resources/ShareLocalizations/*/*/*.strings >/dev/null
python3 -m json.tool "$SHARED/Skills/catalog.json" >/dev/null
-if [ "${#SHARE_SLOTS[@]}" -ne 12 ]; then
- echo "expected 12 Share-menu entries, found ${#SHARE_SLOTS[@]}" >&2
+if [ "${#SHARE_SLOTS[@]}" -ne 13 ]; then
+ echo "expected 13 Share-menu entries, found ${#SHARE_SLOTS[@]}" >&2
exit 1
fi
diff --git a/macos/Scripts/share-slots.sh b/macos/Scripts/share-slots.sh
index ead305f..35c5381 100644
--- a/macos/Scripts/share-slots.sh
+++ b/macos/Scripts/share-slots.sh
@@ -6,7 +6,7 @@
# same pkd election System Settings → General → Login Items & Extensions →
# Sharing does.
#
-# All twelve run the same executable and tell themselves apart by DKShareAction,
+# All of them run the same executable and tell themselves apart by DKShareAction,
# so adding an entry costs a row here and a pair of InfoPlist.strings — not a
# second copy of the import code.
#
@@ -25,6 +25,7 @@ SHARE_SLOTS=(
"WorkBuddy|WeChatBridgeShareWorkBuddy|ShareWorkBuddy|workBuddy|发给 WorkBuddy"
"WeSight|WeChatBridgeShareWeSight|ShareWeSight|weSight|发给 WeSight"
"DeepSeekHarness|WeChatBridgeShareDeepSeekHarness|ShareDeepSeekHarness|deepSeekHarness|发给 DeepSeek Harness"
+ "QoderCN|WeChatBridgeShareQoderCN|ShareQoderCN|qoderCN|发给 Qoder CN"
"Obsidian|WeChatBridgeShareObsidian|ShareObsidian|obsidian|沉淀到 Obsidian"
"Collection|WeChatBridgeShareCollection|ShareCollection|collect|分批收集到微信流"
"Folder|WeChatBridgeShareFolder|ShareFolder|folder|沉淀到文件夹"
@@ -42,6 +43,7 @@ share_logo_name() {
QwenWork) printf '%s' "02-qwen.png" ;;
WorkBuddy) printf '%s' "06-workbuddy.png" ;;
WeSight) printf '%s' "07-wesight.png" ;;
+ QoderCN) printf '%s' "08-qodercn.png" ;;
Obsidian) printf '%s' "05-obsidian.png" ;;
esac
}
diff --git a/macos/Sources/WeChatBridgeApp/ActionRunner.swift b/macos/Sources/WeChatBridgeApp/ActionRunner.swift
index 525bdb2..0a59c33 100644
--- a/macos/Sources/WeChatBridgeApp/ActionRunner.swift
+++ b/macos/Sources/WeChatBridgeApp/ActionRunner.swift
@@ -95,7 +95,7 @@ final class ActionRunner {
// Nothing is shown: the share sheet said 「已复制到剪贴板」 a moment
// ago and is still on screen. A second capsule saying it again is
// WeChatBridge talking over the system.
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .obsidian, .folder, .custom:
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN, .obsidian, .folder, .custom:
// Shares and WeChat captures share the same clipboard queue.
//
// Read here rather than where the panel opens. This forward may wait
diff --git a/macos/Sources/WeChatBridgeApp/AppModel.swift b/macos/Sources/WeChatBridgeApp/AppModel.swift
index c981d16..a03d22a 100644
--- a/macos/Sources/WeChatBridgeApp/AppModel.swift
+++ b/macos/Sources/WeChatBridgeApp/AppModel.swift
@@ -220,7 +220,7 @@ final class AppModel: ObservableObject {
// Already copied, by the extension, and already recorded as
// such by `BatchState.initial`. Nothing left to do.
return false
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .obsidian, .folder, .custom:
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN, .obsidian, .folder, .custom:
// A forward whose one-shot request is already gone: the file was
// consumed by a run that then died before it could act, or the
// extension never managed to write it. Either way nothing can be
diff --git a/macos/Sources/WeChatBridgeApp/ForwardTargets.swift b/macos/Sources/WeChatBridgeApp/ForwardTargets.swift
index 8c1a9a4..51f29bd 100644
--- a/macos/Sources/WeChatBridgeApp/ForwardTargets.swift
+++ b/macos/Sources/WeChatBridgeApp/ForwardTargets.swift
@@ -158,6 +158,7 @@ final class ForwardTargets: ObservableObject {
ForwardDestination(action: .workBuddy, target: nil),
ForwardDestination(action: .weSight, target: nil),
ForwardDestination(action: .deepSeekHarness, target: nil),
+ ForwardDestination(action: .qoderCN, target: nil),
ForwardDestination(action: .obsidian, target: nil),
] + targets.map { ForwardDestination(action: .custom, target: $0) }
}
diff --git a/macos/Sources/WeChatBridgeApp/ShareEntryProbe.swift b/macos/Sources/WeChatBridgeApp/ShareEntryProbe.swift
index f1f47b5..f269b54 100644
--- a/macos/Sources/WeChatBridgeApp/ShareEntryProbe.swift
+++ b/macos/Sources/WeChatBridgeApp/ShareEntryProbe.swift
@@ -142,7 +142,7 @@ final class ShareEntryProbe: ObservableObject {
///
/// `run` blocks on a `DispatchSemaphore`, and a blocked cooperative thread
/// is gone until it unblocks — the runtime cannot reclaim it. `refresh`
- /// probes nine entries in a row, so one cold `pkd` could park a pool thread
+ /// probes every entry in a row, so one cold `pkd` could park a pool thread
/// for 15 s, and flipping several switches quickly parks more. On a
/// four-core Mac that is most of the pool, and the `Task.sleep` loop
/// `AutoPaste` uses to wait for the target app to come frontmost has a
diff --git a/macos/Sources/WeChatBridgeApp/Views/Settings/ShareEntryList.swift b/macos/Sources/WeChatBridgeApp/Views/Settings/ShareEntryList.swift
index 129a097..94f0a92 100644
--- a/macos/Sources/WeChatBridgeApp/Views/Settings/ShareEntryList.swift
+++ b/macos/Sources/WeChatBridgeApp/Views/Settings/ShareEntryList.swift
@@ -172,6 +172,7 @@ struct ShareEntryList: View {
case .qwen: file = "02-qwen.png"
case .workBuddy: file = "06-workbuddy.png"
case .weSight: file = "07-wesight.png"
+ case .qoderCN: file = "08-qodercn.png"
case .obsidian: file = "05-obsidian.png"
case .deepSeekHarness, .collect, .folder, .clipboard, .custom: return nil
}
@@ -187,7 +188,7 @@ struct ShareEntryList: View {
/// table of symbols would be a second answer to "which icon is this entry".
static func symbol(for action: ShareAction) -> String {
switch action {
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness: "paperplane"
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN: "paperplane"
case .obsidian: "book.closed"
case .collect: "tray.and.arrow.down"
case .folder: "folder"
@@ -199,7 +200,7 @@ struct ShareEntryList: View {
private func detail(for action: ShareAction) -> String {
if compactDetails {
switch action {
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness:
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN:
guard let bundleIdentifier = action.targetBundleIdentifier else {
return L10n.text("未安装")
}
@@ -231,6 +232,7 @@ struct ShareEntryList: View {
case .workBuddy: return L10n.text("激活 WorkBuddy 并直接粘贴到输入框。")
case .weSight: return L10n.text("激活 WeSight 并直接粘贴到输入框。")
case .deepSeekHarness: return L10n.text("激活 DeepSeek Harness 并直接粘贴到输入框。")
+ case .qoderCN: return L10n.text("激活 Qoder CN 并直接粘贴到输入框。")
case .obsidian: return L10n.text("把聊天记录转成 Markdown,写入选定的 Obsidian 知识库。")
case .collect: return L10n.text("多次分享,收齐后一起发送")
case .folder: return L10n.text("把聊天记录转成 Markdown 和附件,写入选定的文件夹。")
@@ -242,7 +244,7 @@ struct ShareEntryList: View {
private func detailIsWarning(for action: ShareAction) -> Bool {
guard compactDetails else { return false }
switch action {
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness:
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN:
return action.targetBundleIdentifier.map {
!InstalledApp.lookup($0).isInstalled
} ?? true
diff --git a/macos/Sources/WeChatBridgeCore/BatchState.swift b/macos/Sources/WeChatBridgeCore/BatchState.swift
index 08d5057..22709aa 100644
--- a/macos/Sources/WeChatBridgeCore/BatchState.swift
+++ b/macos/Sources/WeChatBridgeCore/BatchState.swift
@@ -134,7 +134,7 @@ public struct BatchState: Codable, Sendable, Hashable {
action: action,
targetName: targetName
)
- case .collect, .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .obsidian, .folder, .custom:
+ case .collect, .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN, .obsidian, .folder, .custom:
return BatchState(outcome: nil, action: action, targetName: targetName)
}
}
diff --git a/macos/Sources/WeChatBridgeCore/ShareAction.swift b/macos/Sources/WeChatBridgeCore/ShareAction.swift
index 98fc009..f058e7a 100644
--- a/macos/Sources/WeChatBridgeCore/ShareAction.swift
+++ b/macos/Sources/WeChatBridgeCore/ShareAction.swift
@@ -23,6 +23,8 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
case weSight
/// Paste into DeepSeek Harness.
case deepSeekHarness
+ /// Paste into Qoder CN.
+ case qoderCN
/// Write a Markdown note and its source archive into the configured vault.
case obsidian
/// Write a Markdown note and its attachments into the configured folder,
@@ -83,6 +85,7 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
case .workBuddy: return "com.tencent.workbuddy.mac"
case .weSight: return "ai.wesight.app"
case .deepSeekHarness: return "com.deepseek.dsh"
+ case .qoderCN: return "com.qodercn.app"
case .obsidian: return "md.obsidian"
// `.custom` has no fixed destination and no destination in its intent
// either. `ActionRunner` resolves one from the user's own list, or takes
@@ -102,7 +105,7 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
public var needsIntent: Bool {
switch self {
case .collect, .clipboard: return false
- case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .obsidian, .folder, .custom: return true
+ case .codex, .claude, .doubao, .qwen, .workBuddy, .weSight, .deepSeekHarness, .qoderCN, .obsidian, .folder, .custom: return true
}
}
@@ -118,6 +121,7 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
case .workBuddy: return "WorkBuddy"
case .weSight: return L10n.text("WeSight")
case .deepSeekHarness: return "DeepSeek Harness"
+ case .qoderCN: return "Qoder CN"
case .obsidian: return L10n.text("Obsidian")
case .collect: return L10n.text("分批收集")
case .folder: return L10n.text("文件夹")
@@ -141,6 +145,7 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
case .workBuddy: return L10n.text("发给 WorkBuddy")
case .weSight: return L10n.text("发给 WeSight")
case .deepSeekHarness: return L10n.text("发给 DeepSeek Harness")
+ case .qoderCN: return L10n.text("发给 Qoder CN")
case .obsidian: return L10n.text("沉淀到 Obsidian")
case .collect: return L10n.text("分批收集到微信流")
case .folder: return L10n.text("沉淀到文件夹")
@@ -162,6 +167,7 @@ public enum ShareAction: String, Codable, Sendable, CaseIterable {
case .workBuddy: return "ShareWorkBuddy"
case .weSight: return "ShareWeSight"
case .deepSeekHarness: return "ShareDeepSeekHarness"
+ case .qoderCN: return "ShareQoderCN"
case .obsidian: return "ShareObsidian"
case .collect: return "ShareCollection"
case .folder: return "ShareFolder"
diff --git a/macos/Sources/WeChatBridgeCore/ShareFailure.swift b/macos/Sources/WeChatBridgeCore/ShareFailure.swift
index fad1892..8d1359e 100644
--- a/macos/Sources/WeChatBridgeCore/ShareFailure.swift
+++ b/macos/Sources/WeChatBridgeCore/ShareFailure.swift
@@ -17,7 +17,7 @@ public struct ShareFailure: Codable, Sendable, Hashable {
public let at: Date
/// Which Share-menu entry the user picked. Not shown anywhere yet — the
/// message already names what went wrong — but a field report is worth
- /// little without knowing which of the nine entries produced it.
+ /// little without knowing which entry produced it.
public let action: ShareAction
public let message: String
diff --git a/macos/Tests/WeChatBridgeCoreTests/ShareActionTests.swift b/macos/Tests/WeChatBridgeCoreTests/ShareActionTests.swift
index 7d23f4d..39f161e 100644
--- a/macos/Tests/WeChatBridgeCoreTests/ShareActionTests.swift
+++ b/macos/Tests/WeChatBridgeCoreTests/ShareActionTests.swift
@@ -16,7 +16,7 @@ final class ShareActionTests: XCTestCase {
}
func testOnlyForwardingActionsNameATargetApp() {
- XCTAssertEqual(ShareAction.allCases.count, 12)
+ XCTAssertEqual(ShareAction.allCases.count, 13)
XCTAssertEqual(ShareAction.codex.targetBundleIdentifier, "com.openai.codex")
XCTAssertEqual(ShareAction.claude.targetBundleIdentifier, "com.anthropic.claudefordesktop")
XCTAssertEqual(ShareAction.doubao.targetBundleIdentifier, "com.bot.pc.doubao")
@@ -24,6 +24,7 @@ final class ShareActionTests: XCTestCase {
XCTAssertEqual(ShareAction.workBuddy.targetBundleIdentifier, "com.tencent.workbuddy.mac")
XCTAssertEqual(ShareAction.weSight.targetBundleIdentifier, "ai.wesight.app")
XCTAssertEqual(ShareAction.deepSeekHarness.targetBundleIdentifier, "com.deepseek.dsh")
+ XCTAssertEqual(ShareAction.qoderCN.targetBundleIdentifier, "com.qodercn.app")
XCTAssertEqual(ShareAction.obsidian.targetBundleIdentifier, "md.obsidian")
XCTAssertNil(ShareAction.clipboard.targetBundleIdentifier)
// 「沉淀到文件夹」 delivers to a path, not an app.
@@ -51,6 +52,18 @@ final class ShareActionTests: XCTestCase {
XCTAssertEqual(try BatchManifest.decoder().decode(BatchManifest.self, from: manifestData).action, .folder)
}
+ /// The raw value is the wire contract: `Scripts/share-slots.sh` stamps it
+ /// into the appex's `DKShareAction`, and `ShareAction.declared` reads it
+ /// back. Renaming the case without the slot row breaks the entry silently,
+ /// so both halves are pinned together here.
+ func testQoderCNActionRoundTripsThroughCodable() throws {
+ let data = try JSONEncoder().encode(ShareAction.qoderCN)
+ XCTAssertEqual(String(data: data, encoding: .utf8), "\"qoderCN\"")
+ XCTAssertEqual(try JSONDecoder().decode(ShareAction.self, from: data), .qoderCN)
+ XCTAssertEqual(ShareAction.qoderCN.bundleIdentifierSuffix, "ShareQoderCN")
+ XCTAssertTrue(ShareAction.qoderCN.needsIntent)
+ }
+
func testAnIntentIsReadableExactlyOnce() throws {
let batchID = try commitBatch(intent: BatchIntent(action: .codex, requestedAt: Date()))
@@ -84,7 +97,7 @@ final class ShareActionTests: XCTestCase {
XCTAssertFalse(ShareAction.clipboard.needsIntent)
for action in [
ShareAction.codex, .claude, .doubao, .qwen, .workBuddy,
- .weSight, .deepSeekHarness, .obsidian, .folder, .custom,
+ .weSight, .deepSeekHarness, .qoderCN, .obsidian, .folder, .custom,
] {
XCTAssertTrue(action.needsIntent, "\(action)")
}
diff --git a/shared/AppLogos/08-qodercn.png b/shared/AppLogos/08-qodercn.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fbf1efc76d0359f7783590ef9ed8eb10f175291
GIT binary patch
literal 156662
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