cc-linker 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +157 -117
- package/dist/cli.js +565 -427
- package/dist/cli.js.map +34 -33
- package/package.json +10 -8
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 yujuntea
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,17 +1,89 @@
|
|
|
1
|
-
# cc-
|
|
1
|
+
# cc-linker
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 让手机聊天应用和终端(Claude Code CLI)之间的对话切换,像切换设备一样无缝。
|
|
4
|
+
>
|
|
5
|
+
> **目前已接入飞书**,更多聊天平台持续扩展中。
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/cc-linker)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
**语言:** 中文 | [English](README_en.md)
|
|
11
|
+
|
|
12
|
+
## 💡 为什么需要 cc-linker?
|
|
13
|
+
|
|
14
|
+
你是否遇到过这样的场景:
|
|
15
|
+
|
|
16
|
+
- **通勤路上用手机聊,到公司终端继续** — 地铁上用手机飞书给 Bot 发消息讨论技术方案,到公司打开终端 `cc-linker list` 找到会话,`resume` 一键恢复上下文
|
|
17
|
+
- **飞书快速提问,终端深度调试** — 在飞书里快速问了个 API 用法,发现需要本地调试,终端 `cc-linker resume` 切换到同一会话继续让 Claude 帮你写代码
|
|
18
|
+
- **多项目并行,会话不乱** — 同时在 `project-a` 和 `project-b` 两个目录与 Claude 对话,`/list` 清晰展示每个会话的目录和状态,卡片按钮一键切换不混淆
|
|
19
|
+
|
|
20
|
+
**cc-linker 就是解决这些痛点的桥接工具。** 它在你电脑上维护一个统一的会话注册表,让手机聊天应用和 Claude Code CLI 共享同一套会话状态——无论你在哪个端发起对话,都能无缝切换到另一端继续。
|
|
21
|
+
|
|
22
|
+
> **当前已接入飞书**,更多聊天平台持续扩展中。
|
|
23
|
+
|
|
24
|
+
## ✨ 核心特性
|
|
25
|
+
|
|
26
|
+
| 特性 | 说明 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| 🔄 **跨端无缝切换** | 聊天应用发起的对话,终端一键恢复(含上下文和目录);终端创建的会话,聊天应用随时查看 |
|
|
29
|
+
| 💬 **流式卡片交互** | 聊天应用中实时看到 Claude 的 thinking 和回复,不再是"转圈等待" |
|
|
30
|
+
| 📋 **统一会话管理** | 自动扫描、增量同步,无需手动维护会话列表 |
|
|
31
|
+
| 🎛 **多模型切换** | 在卡片中一键切换模型,无需改配置 |
|
|
32
|
+
| 🛡 **持久化不丢消息** | 文件级消息队列,进程崩溃、重启后消息不丢失 |
|
|
33
|
+
| 🚀 **3 步上手** | `install → setup → start`,5 分钟完成配置 |
|
|
34
|
+
|
|
35
|
+
## 📸 效果展示
|
|
36
|
+
|
|
37
|
+
### 聊天应用端体验(飞书)
|
|
38
|
+
|
|
39
|
+
> 当前已支持飞书,更多平台开发中。
|
|
40
|
+
|
|
41
|
+
<table>
|
|
42
|
+
<tr>
|
|
43
|
+
<td align="center"><b>会话列表</b><br><code>/list</code> 查看所有会话</td>
|
|
44
|
+
<td align="center"><b>开始处理</b><br>消息发出后即时反馈</td>
|
|
45
|
+
<td align="center"><b>流式实时反馈</b><br>实时看到 thinking 过程</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td align="center"><img src="docs/images/feishu-list.png" alt="飞书会话列表" width="280"></td>
|
|
49
|
+
<td align="center"><img src="docs/images/feishu-start-processing.png" alt="开始处理" width="280"></td>
|
|
50
|
+
<td align="center"><img src="docs/images/feishu-streaming-thinking.png" alt="流式 thinking" width="280"></td>
|
|
51
|
+
</tr>
|
|
52
|
+
</table>
|
|
53
|
+
|
|
54
|
+
<table>
|
|
55
|
+
<tr>
|
|
56
|
+
<td align="center"><b>处理完成</b><br>token / 耗时 / 轮数统计</td>
|
|
57
|
+
<td align="center"><b>处理完成(长回复)</b><br>长文本同样展示</td>
|
|
58
|
+
<td align="center"><b>模型切换</b><br>卡片按钮一键切换</td>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<td align="center"><img src="docs/images/feishu-complete.png" alt="处理完成" width="280"></td>
|
|
62
|
+
<td align="center"><img src="docs/images/feishu-complete-long.png" alt="处理完成-长回复" width="280"></td>
|
|
63
|
+
<td align="center"><img src="docs/images/feishu-model.png" alt="模型选择" width="280"></td>
|
|
64
|
+
</tr>
|
|
65
|
+
</table>
|
|
66
|
+
|
|
67
|
+
### 终端端体验
|
|
68
|
+
|
|
69
|
+
**查看所有会话** — 清晰的表格展示,状态一目了然:
|
|
70
|
+
|
|
71
|
+
<img src="docs/images/cli-list.png" alt="终端会话列表" width="700">
|
|
72
|
+
|
|
73
|
+
**一键恢复会话** — 支持前缀匹配,自动切换目录并恢复上下文:
|
|
74
|
+
|
|
75
|
+
<img src="docs/images/cli-resume.png" alt="终端恢复会话" width="700">
|
|
76
|
+
|
|
77
|
+
## 🚀 快速开始
|
|
6
78
|
|
|
7
79
|
### 1. 安装
|
|
8
80
|
|
|
9
81
|
```bash
|
|
10
82
|
# npm 全局安装
|
|
11
|
-
npm install -g cc-
|
|
83
|
+
npm install -g cc-linker
|
|
12
84
|
|
|
13
85
|
# 或 bun 全局安装
|
|
14
|
-
bun add -g cc-
|
|
86
|
+
bun add -g cc-linker
|
|
15
87
|
|
|
16
88
|
# 需要 Bun 运行时。安装 Bun:
|
|
17
89
|
# curl -fsSL https://bun.sh/install | bash
|
|
@@ -20,29 +92,71 @@ bun add -g cc-link
|
|
|
20
92
|
### 2. 一键配置
|
|
21
93
|
|
|
22
94
|
```bash
|
|
23
|
-
cc-
|
|
95
|
+
cc-linker setup
|
|
24
96
|
```
|
|
25
97
|
|
|
26
|
-
|
|
98
|
+
交互式向导会引导你完成:
|
|
27
99
|
- 初始化会话注册表
|
|
28
100
|
- 安装 Claude Code 自动注册钩子
|
|
29
|
-
-
|
|
101
|
+
- 配置聊天应用 Bot(当前仅飞书:App ID + App Secret + 开机自启)
|
|
30
102
|
|
|
31
|
-
> **仅需终端侧功能?** 运行 `cc-
|
|
103
|
+
> **仅需终端侧功能?** 运行 `cc-linker setup --skip-feishu` 跳过聊天应用配置。
|
|
32
104
|
|
|
33
105
|
### 3. 开始使用
|
|
34
106
|
|
|
35
107
|
| 场景 | 操作 |
|
|
36
108
|
|------|------|
|
|
37
|
-
|
|
|
38
|
-
| 终端查看所有会话 | `cc-
|
|
39
|
-
| 终端恢复某个会话 | `cc-
|
|
40
|
-
|
|
|
41
|
-
|
|
|
109
|
+
| 聊天应用中给 Bot 发消息(飞书) | 直接对话,流式卡片实时更新 |
|
|
110
|
+
| 终端查看所有会话 | `cc-linker list` |
|
|
111
|
+
| 终端恢复某个会话 | `cc-linker resume <UUID>` |
|
|
112
|
+
| 聊天应用切换会话(飞书) | `/switch <序号>` |
|
|
113
|
+
| 聊天应用创建新会话(飞书) | `/new <路径> -- <提示词>` |
|
|
114
|
+
|
|
115
|
+
## 📋 命令参考
|
|
116
|
+
|
|
117
|
+
### CLI 命令
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
cc-linker list # 列出所有会话
|
|
121
|
+
cc-linker resume <UUID> # 恢复指定会话到终端(支持前缀匹配)
|
|
122
|
+
cc-linker show <UUID> # 查看会话详情
|
|
123
|
+
cc-linker sync # 手动同步两端会话
|
|
124
|
+
cc-linker search <关键词> # 搜索会话
|
|
125
|
+
cc-linker export <UUID> # 导出会话为 Markdown/JSON/Text
|
|
126
|
+
cc-linker clean # 清理无效记录
|
|
127
|
+
cc-linker status # 查看桥接状态
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 聊天应用 Bot 命令(飞书)
|
|
131
|
+
|
|
132
|
+
在飞书私聊中给 Bot 发送:
|
|
133
|
+
|
|
134
|
+
| 命令 | 说明 |
|
|
135
|
+
|------|------|
|
|
136
|
+
| `/help` | 显示帮助 |
|
|
137
|
+
| `/list` | 列出会话(带切换/恢复按钮卡片) |
|
|
138
|
+
| `/new [路径] [-- 提示词]` | 创建新会话 |
|
|
139
|
+
| `/switch <序号\|UUID>` | 切换会话 |
|
|
140
|
+
| `/resume <序号\|UUID>` | 获取终端恢复命令 |
|
|
141
|
+
| `/model` | 查看/设置默认模型 |
|
|
142
|
+
| `/status` | 查看状态 |
|
|
143
|
+
| `/whoami` | 获取你的 open_id |
|
|
42
144
|
|
|
43
|
-
|
|
145
|
+
### Bot 运行管理
|
|
44
146
|
|
|
45
|
-
|
|
147
|
+
| 命令 | 说明 |
|
|
148
|
+
|------|------|
|
|
149
|
+
| `cc-linker start` | 前台启动(阻塞终端) |
|
|
150
|
+
| `cc-linker start --daemon` | 后台守护进程模式 |
|
|
151
|
+
| `cc-linker stop` | 停止后台 Bot |
|
|
152
|
+
| `cc-linker restart` | 重启 Bot 服务 |
|
|
153
|
+
| `cc-linker daemon install` | 配置开机自动启动 |
|
|
154
|
+
| `cc-linker daemon uninstall` | 移除开机自启 |
|
|
155
|
+
| `cc-linker daemon status` | 查看后台服务状态 |
|
|
156
|
+
|
|
157
|
+
## 🔧 接入飞书(第一个支持的聊天平台)
|
|
158
|
+
|
|
159
|
+
cc-linker 的架构设计支持接入多种聊天应用,**飞书是第一个已实现的平台**。后续可扩展支持其他 IM 平台。
|
|
46
160
|
|
|
47
161
|
在配置飞书 Bot 前,需要在 [飞书开放平台](https://open.feishu.cn/app) 创建应用并配置权限。
|
|
48
162
|
|
|
@@ -62,7 +176,7 @@ cc-bridge setup
|
|
|
62
176
|
| `im:message:send_as_bot` | 以应用身份发送消息 |
|
|
63
177
|
| `im:message:readonly` | 获取消息详情 |
|
|
64
178
|
| `im:chat:readonly` | 获取群组信息 |
|
|
65
|
-
| `contact:user.base:readonly` |
|
|
179
|
+
| `contact:user.base:readonly` | 获取用户基本信息 |
|
|
66
180
|
|
|
67
181
|
### 必需事件订阅
|
|
68
182
|
|
|
@@ -79,81 +193,9 @@ cc-bridge setup
|
|
|
79
193
|
|
|
80
194
|
配置完权限后,进入「版本管理与发布」→ 创建版本 → 发布。**只有发布后的权限才会生效。**
|
|
81
195
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
## 详细使用
|
|
85
|
-
|
|
86
|
-
### 常用命令
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
cc-bridge list # 列出所有会话
|
|
90
|
-
cc-bridge resume <UUID> # 恢复指定会话到终端(支持前缀匹配)
|
|
91
|
-
cc-bridge show <UUID> # 查看会话详情
|
|
92
|
-
cc-bridge sync # 手动同步两端会话
|
|
93
|
-
cc-bridge search <关键词> # 搜索会话
|
|
94
|
-
cc-bridge export <UUID> # 导出会话为 Markdown/JSON/Text
|
|
95
|
-
cc-bridge clean # 清理无效记录
|
|
96
|
-
cc-bridge status # 查看桥接状态
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 飞书 Bot 命令
|
|
196
|
+
## 📖 配置说明
|
|
100
197
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
| 命令 | 说明 |
|
|
104
|
-
|------|------|
|
|
105
|
-
| `/bridge help` | 显示帮助 |
|
|
106
|
-
| `/bridge list` | 列出会话(带切换/恢复按钮卡片) |
|
|
107
|
-
| `/bridge new [路径] [-- 提示词]` | 创建新会话 |
|
|
108
|
-
| `/bridge switch <序号\|UUID>` | 切换会话 |
|
|
109
|
-
| `/bridge resume <序号\|UUID>` | 获取终端恢复命令 |
|
|
110
|
-
| `/bridge model` | 查看/设置默认模型 |
|
|
111
|
-
| `/bridge status` | 查看状态 |
|
|
112
|
-
| `/bridge whoami` | 获取你的 open_id |
|
|
113
|
-
|
|
114
|
-
### 流式响应体验
|
|
115
|
-
|
|
116
|
-
当 `stream.enabled = true`(默认开启)时,飞书消息会触发流式卡片:
|
|
117
|
-
|
|
118
|
-
1. **⏳ 正在处理...** — Claude 进程启动后立即出现
|
|
119
|
-
2. **💭 处理中** — 实时展示 thinking 和回复内容,底部显示已用时间
|
|
120
|
-
3. **✅ 处理完成** — 展示最终回复 + 费用/耗时/轮数统计
|
|
121
|
-
|
|
122
|
-
### Bot 运行管理
|
|
123
|
-
|
|
124
|
-
| 命令 | 说明 |
|
|
125
|
-
|------|------|
|
|
126
|
-
| `cc-bridge start` | 前台启动(阻塞终端) |
|
|
127
|
-
| `cc-bridge start --daemon` | 后台守护进程模式 |
|
|
128
|
-
| `cc-bridge stop` | 停止后台 Bot |
|
|
129
|
-
| `cc-bridge daemon install` | 配置开机自动启动 |
|
|
130
|
-
| `cc-bridge daemon uninstall` | 移除开机自启 |
|
|
131
|
-
| `cc-bridge daemon status` | 查看后台服务状态 |
|
|
132
|
-
|
|
133
|
-
### 分步配置(替代 setup 向导)
|
|
134
|
-
|
|
135
|
-
如果不想使用一键配置,也可以分步执行:
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
# 1. 初始化注册表
|
|
139
|
-
cc-bridge init
|
|
140
|
-
|
|
141
|
-
# 2. 安装 Claude Code 钩子(可选但推荐)
|
|
142
|
-
cc-bridge hook install
|
|
143
|
-
|
|
144
|
-
# 3. 配置飞书 Bot
|
|
145
|
-
cc-bridge init-feishu
|
|
146
|
-
|
|
147
|
-
# 4. 启动 Bot
|
|
148
|
-
cc-bridge start --daemon
|
|
149
|
-
|
|
150
|
-
# 5. 配置开机自启
|
|
151
|
-
cc-bridge daemon install
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 配置说明
|
|
155
|
-
|
|
156
|
-
配置文件:`~/.cc-bridge/config.toml`(可选,不创建则使用默认值)
|
|
198
|
+
配置文件:`~/.cc-linker/config.toml`(可选,不创建则使用默认值)
|
|
157
199
|
|
|
158
200
|
```toml
|
|
159
201
|
[general]
|
|
@@ -171,27 +213,25 @@ fallback_to_text = true
|
|
|
171
213
|
|
|
172
214
|
| 环境变量 | 说明 |
|
|
173
215
|
|---------|------|
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
|
|
180
|
-
---
|
|
216
|
+
| `CC_LINKER_FEISHU_APP_ID` | 飞书 App ID |
|
|
217
|
+
| `CC_LINKER_FEISHU_APP_SECRET` | 飞书 App Secret |
|
|
218
|
+
| `CC_LINKER_FEISHU_OWNER_OPEN_ID` | 限制仅指定用户使用 |
|
|
219
|
+
| `CC_LINKER_STREAM_ENABLED` | 流式响应开关 |
|
|
220
|
+
| `CC_LINKER_LOG_LEVEL` | 日志级别 |
|
|
181
221
|
|
|
182
|
-
## 架构概览
|
|
222
|
+
## 🏗 架构概览
|
|
183
223
|
|
|
184
224
|
```
|
|
185
225
|
┌──────────────────────────────────────────────────────┐
|
|
186
|
-
│ Claude Code CLI ←→ Registry ←→
|
|
187
|
-
│ (session JSONL) (registry.json) (
|
|
226
|
+
│ Claude Code CLI ←→ Registry ←→ 聊天应用 Bot │
|
|
227
|
+
│ (session JSONL) (registry.json) (当前: 飞书) │
|
|
188
228
|
│ ↑ │
|
|
189
229
|
│ SessionStart hook │
|
|
190
230
|
└──────────────────────────────────────────────────────┘
|
|
191
231
|
```
|
|
192
232
|
|
|
193
|
-
- **Registry** (`~/.cc-
|
|
194
|
-
- **Scanner**: 增量扫描 Claude Code JSONL
|
|
233
|
+
- **Registry** (`~/.cc-linker/registry.json`): 统一会话索引,带文件锁和自动备份
|
|
234
|
+
- **Scanner**: 增量扫描 Claude Code JSONL 文件,保持注册表最新
|
|
195
235
|
- **Hook**: Claude Code 启动时自动注册新会话
|
|
196
236
|
- **Spool Queue**: 持久化消息队列,崩溃后可恢复
|
|
197
237
|
- **Stream Parser**: 解析 Claude `stream-json` 输出
|
|
@@ -199,21 +239,11 @@ fallback_to_text = true
|
|
|
199
239
|
|
|
200
240
|
详细架构见 [docs/产品设计文档-自建方案.md](docs/产品设计文档-自建方案.md)。
|
|
201
241
|
|
|
202
|
-
##
|
|
203
|
-
|
|
204
|
-
| 文档 | 说明 |
|
|
205
|
-
|------|------|
|
|
206
|
-
| [docs/产品设计文档-自建方案.md](docs/产品设计文档-自建方案.md) | 产品设计文档 |
|
|
207
|
-
| [docs/验收指南.md](docs/验收指南.md) | 功能验收指南 |
|
|
208
|
-
| [docs/验收测试报告.md](docs/验收测试报告.md) | 验收测试结果 |
|
|
209
|
-
| [docs/Product.md](docs/Product.md) | 产品需求文档 |
|
|
210
|
-
| [docs/model-switch-design.md](docs/model-switch-design.md) | 模型切换设计 |
|
|
211
|
-
|
|
212
|
-
## 开发者指南
|
|
242
|
+
## 💻 开发者指南
|
|
213
243
|
|
|
214
244
|
```bash
|
|
215
|
-
git clone https://github.com/yujuntea/cc-
|
|
216
|
-
cd cc-
|
|
245
|
+
git clone https://github.com/yujuntea/cc-linker.git
|
|
246
|
+
cd cc-linker
|
|
217
247
|
bun install
|
|
218
248
|
bun run dev <命令> # 开发模式
|
|
219
249
|
bun run typecheck # 类型检查
|
|
@@ -226,7 +256,7 @@ bun run build # 编译为独立二进制文件
|
|
|
226
256
|
|
|
227
257
|
```bash
|
|
228
258
|
# 独立二进制(本地分发)
|
|
229
|
-
bun run build # → dist/cc-
|
|
259
|
+
bun run build # → dist/cc-linker
|
|
230
260
|
|
|
231
261
|
# npm 发布
|
|
232
262
|
npm version minor
|
|
@@ -234,6 +264,16 @@ npm publish # prepublishOnly 自动触发 build:npm
|
|
|
234
264
|
git push --tags
|
|
235
265
|
```
|
|
236
266
|
|
|
267
|
+
## 📚 详细文档
|
|
268
|
+
|
|
269
|
+
| 文档 | 说明 |
|
|
270
|
+
|------|------|
|
|
271
|
+
| [docs/产品设计文档-自建方案.md](docs/产品设计文档-自建方案.md) | 产品设计文档 |
|
|
272
|
+
| [docs/验收指南.md](docs/验收指南.md) | 功能验收指南 |
|
|
273
|
+
| [docs/验收测试报告.md](docs/验收测试报告.md) | 验收测试结果 |
|
|
274
|
+
| [docs/Product.md](docs/Product.md) | 产品需求文档 |
|
|
275
|
+
| [docs/model-switch-design.md](docs/model-switch-design.md) | 模型切换设计 |
|
|
276
|
+
|
|
237
277
|
## License
|
|
238
278
|
|
|
239
279
|
MIT
|