multi-ccp 0.1.1 → 0.1.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/CHANGELOG.md CHANGED
@@ -9,3 +9,4 @@
9
9
  - Added CCR base commands for `status`, `install`, `start`, `stop`, `restart`, `ui`, and `model`.
10
10
  - Added CCR preset-bound profile creation with `add-ccr`.
11
11
  - Added CCR profile gateway preparation before `ccp start`.
12
+ - Added session synchronization with `sync-session`.
package/README.md CHANGED
@@ -1,16 +1,21 @@
1
1
  # multi-ccp
2
2
 
3
- Cross-platform Claude Code profile manager for multiple API profiles, separate Claude login accounts, and future Claude Code Router workflows.
3
+ English | [简体中文](README.zh-CN.md)
4
4
 
5
- The command name is `ccp`.
5
+ `multi-ccp` is a profile and session manager for Claude Code. It installs the `ccp` command and helps you run multiple Claude Code windows with fully isolated configuration directories, model providers, login state, and history.
6
6
 
7
- ## Goals
7
+ Use it when you want separate Claude Code sessions for work, personal projects, different API providers, or different model routes without manually switching environment variables or editing config files.
8
8
 
9
- - Manage multiple Claude Code config directories through `CLAUDE_CONFIG_DIR`.
10
- - Support API profiles with `ANTHROPIC_BASE_URL`, `ANTHROPIC_AUTH_TOKEN`, and model env.
11
- - Support login profiles that keep separate Claude Code account login state without storing account passwords.
12
- - Run on Windows, macOS, and Linux from one npm package.
13
- - Keep the core profile logic reusable for a future framework-free local Web UI.
9
+ ## Features
10
+
11
+ - Run multiple Claude Code windows with independent profiles.
12
+ - Keep each profile's Claude Code config, login state, environment variables, and project history isolated.
13
+ - Create Anthropic-compatible API profiles with custom `ANTHROPIC_BASE_URL`, token, and model settings.
14
+ - Create Claude login profiles that use Claude Code's normal account login flow without storing account passwords.
15
+ - Create [Claude Code Router](https://github.com/musistudio/claude-code-router) preset profiles for multiple model providers and routes.
16
+ - Manage [Claude Code Router](https://github.com/musistudio/claude-code-router) from the same CLI.
17
+ - Sync historical Claude Code sessions between profiles or between `main` and a profile.
18
+ - Open and inspect profile settings quickly from the terminal.
14
19
 
15
20
  ## Install
16
21
 
@@ -18,14 +23,169 @@ The command name is `ccp`.
18
23
  npm install -g multi-ccp
19
24
  ```
20
25
 
21
- For local development:
26
+ Verify the install:
22
27
 
23
28
  ```bash
24
- npm install
25
- npm run build
26
- npm run dev -- help
29
+ ccp --version
30
+ ccp help
31
+ ```
32
+
33
+ ## Quick Start
34
+
35
+ Want the shortest path? Ask your AI assistant how to use `multi-ccp`. Copy this prompt:
36
+
37
+ ```text
38
+ How do I use multi-ccp to manage multiple Claude Code profiles?
39
+ ```
40
+
41
+ Then continue with the examples below when you want the full command reference.
42
+
43
+ Create a profile for an Anthropic-compatible API provider:
44
+
45
+ ```bash
46
+ ccp add provider-a
47
+ ccp start provider-a
48
+ ```
49
+
50
+ Create another isolated profile for a different provider, account, or project context:
51
+
52
+ ```bash
53
+ ccp add provider-b
54
+ ccp start provider-b
55
+ ```
56
+
57
+ Create a profile that uses Claude Code's normal account login flow:
58
+
59
+ ```bash
60
+ ccp add-login work
61
+ ccp start work
62
+ ```
63
+
64
+ List and inspect profiles:
65
+
66
+ ```bash
67
+ ccp list
68
+ ccp status work
69
+ ccp path work
27
70
  ```
28
71
 
72
+ ## Profile Types
73
+
74
+ ### API Profiles
75
+
76
+ API profiles are for Anthropic-compatible providers. They store API environment variables in the profile's `settings.json`.
77
+
78
+ ```bash
79
+ ccp add provider-a
80
+ ccp start provider-a
81
+ ```
82
+
83
+ The command prompts for:
84
+
85
+ - `ANTHROPIC_BASE_URL`
86
+ - `ANTHROPIC_AUTH_TOKEN`
87
+ - Model name
88
+
89
+ #### Customizing Provider Models
90
+
91
+ `ccp add` keeps provider setup simple by applying the model you enter to all default Claude Code model slots. For example, a DeepSeek profile may initially look like this:
92
+
93
+ ```json
94
+ {
95
+ "env": {
96
+ "ANTHROPIC_AUTH_TOKEN": "sk-",
97
+ "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
98
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-pro",
99
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro",
100
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro",
101
+ "ANTHROPIC_MODEL": "deepseek-v4-pro"
102
+ }
103
+ }
104
+ ```
105
+
106
+ If your provider offers different models for fast tasks, subagents, or long-context work, edit the profile manually:
107
+
108
+ ```bash
109
+ ccp edit deepseek
110
+ ```
111
+
112
+ For example, you can assign a flash model to lightweight work and a 1M context model to the main model slots:
113
+
114
+ ```json
115
+ {
116
+ "env": {
117
+ "ANTHROPIC_AUTH_TOKEN": "sk-",
118
+ "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
119
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
120
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1M]",
121
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1M]",
122
+ "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-flash",
123
+ "ANTHROPIC_MODEL": "deepseek-v4-pro[1M]"
124
+ }
125
+ }
126
+ ```
127
+
128
+ See the [DeepSeek API documentation](https://api-docs.deepseek.com/) for provider-specific model names and endpoint details.
129
+
130
+ ### Login Profiles
131
+
132
+ Login profiles are for Claude Code account-based authentication. They do not set `ANTHROPIC_BASE_URL` or `ANTHROPIC_AUTH_TOKEN`.
133
+
134
+ ```bash
135
+ ccp add-login work
136
+ ccp start work
137
+ ```
138
+
139
+ When Claude Code asks you to sign in, the login state is stored under that profile's config directory. Another profile can use a different account or login state:
140
+
141
+ ```bash
142
+ ccp add-login personal
143
+ ccp start personal
144
+ ```
145
+
146
+ ### Claude Code Router Profiles
147
+
148
+ CCR profiles are bound to [Claude Code Router](https://github.com/musistudio/claude-code-router) presets. Claude Code Router is a separate open source project that can route Claude Code requests to different model providers. `multi-ccp` integrates with its config and preset system so each profile can use its own provider route.
149
+
150
+ ```bash
151
+ ccp ccr status
152
+ ccp ccr model
153
+ ccp add-ccr gpt-route
154
+ ccp start gpt-route
155
+ ```
156
+
157
+ A CCR profile stores its route in `.ccp.json` and points Claude Code at a preset endpoint such as:
158
+
159
+ ```text
160
+ http://127.0.0.1:3456/preset/gpt-route
161
+ ```
162
+
163
+ ## Session Sync
164
+
165
+ `sync-session` copies Claude Code history for the current project between profiles. It can sync selected sessions interactively or all sessions at once.
166
+
167
+ Sync from `main` to a profile:
168
+
169
+ ```bash
170
+ ccp sync-session work
171
+ ccp sync-session work --all
172
+ ```
173
+
174
+ Sync between two named profiles:
175
+
176
+ ```bash
177
+ ccp sync-session work to personal
178
+ ccp sync-session work to personal --all
179
+ ```
180
+
181
+ Sync from a profile back to `main`:
182
+
183
+ ```bash
184
+ ccp sync-session work to main
185
+ ```
186
+
187
+ The sync command tracks hashes in `.ccp-sync`, copies session assets, and prompts before overwriting conflicting target sessions.
188
+
29
189
  ## Commands
30
190
 
31
191
  ```bash
@@ -39,6 +199,11 @@ ccp status <profile|main>
39
199
  ccp start <profile> [claude args...]
40
200
  ccp path <profile|main>
41
201
  ccp edit <profile>
202
+ ```
203
+
204
+ [Claude Code Router](https://github.com/musistudio/claude-code-router) commands:
205
+
206
+ ```bash
42
207
  ccp ccr status
43
208
  ccp ccr install
44
209
  ccp ccr start
@@ -48,67 +213,65 @@ ccp ccr ui
48
213
  ccp ccr model
49
214
  ```
50
215
 
51
- ## Profile Types
52
-
53
- ### API profile
216
+ Session sync commands:
54
217
 
55
218
  ```bash
56
- ccp add deepseek
57
- ccp start deepseek
219
+ ccp sync-session <target-profile> [--all]
220
+ ccp sync-session <source-profile|main> to <target-profile|main> [--all]
58
221
  ```
59
222
 
60
- Creates `~/.claude-profiles/deepseek/settings.json` with Anthropic-compatible API environment variables.
223
+ ## Configuration Layout
61
224
 
62
- ### Login profile
225
+ Profiles are stored under:
63
226
 
64
- ```bash
65
- ccp add-login work
66
- ccp start work
227
+ ```text
228
+ ~/.claude-profiles/<profile>
67
229
  ```
68
230
 
69
- Creates a profile without `ANTHROPIC_BASE_URL` or `ANTHROPIC_AUTH_TOKEN`. Claude Code stores that account's login state under the profile config directory when you complete the normal Claude Code login flow.
70
-
71
- Create another login account with:
231
+ Claude Code's default config directory is still available as:
72
232
 
73
- ```bash
74
- ccp add-login personal
75
- ccp start personal
233
+ ```text
234
+ main
76
235
  ```
77
236
 
78
- Each profile gets its own `CLAUDE_CONFIG_DIR`.
237
+ For example:
79
238
 
80
- ## Current Scope
81
-
82
- This TypeScript npm version currently implements the cross-platform profile manager MVP:
83
-
84
- - `list`
85
- - `add`
86
- - `add-login`
87
- - `remove`
88
- - `status`
89
- - `path`
90
- - `edit`
91
- - `start`
92
- - `add-ccr`
93
- - CCR preset generation and CCR profile auto-start integration
94
- - `ccp ccr status|install|start|stop|restart|ui|model`
95
-
96
- Planned migrations from the legacy PowerShell tool:
239
+ ```bash
240
+ ccp status main
241
+ ccp sync-session main to work
242
+ ccp sync-session work to main
243
+ ```
97
244
 
98
- - `sync-session`
99
- - `ccp ui`
245
+ ## Safety Notes
100
246
 
101
- The future Web UI should use vanilla browser APIs or Web Components. Vue and React are intentionally out of scope for the runtime UI. Icon libraries such as Lucide are acceptable.
247
+ - `ccp remove <profile>` asks you to type the profile name before deleting it.
248
+ - `ccp add`, `ccp add-login`, and `ccp add-ccr` refuse to overwrite existing profiles.
249
+ - `sync-session` detects conflicts with SHA-256 hashes and asks before overwriting target files.
250
+ - Login profiles do not store Claude account passwords.
102
251
 
103
252
  ## Development
104
253
 
105
254
  ```bash
255
+ git clone <repository-url>
256
+ cd multi-ccp
106
257
  npm install
107
258
  npm run typecheck
108
259
  npm test
109
260
  npm run build
110
261
  ```
111
262
 
263
+ Run the CLI from source:
264
+
265
+ ```bash
266
+ npm run dev -- help
267
+ ```
268
+
269
+ Preview the npm package:
270
+
271
+ ```bash
272
+ npm pack --dry-run
273
+ ```
274
+
112
275
  ## License
113
276
 
114
277
  MIT
@@ -0,0 +1,277 @@
1
+ # multi-ccp
2
+
3
+ [English](README.md) | 简体中文
4
+
5
+ `multi-ccp` 是一个 Claude Code profile 和历史会话管理工具。它会安装 `ccp` 命令,帮助你运行多个 Claude Code 会话窗口,并让每个窗口拥有独立隔离的配置目录、模型 provider、登录状态和历史记录。
6
+
7
+ 当你希望为工作、个人项目、不同 API provider、不同模型路由分别使用独立 Claude Code 会话时,可以使用 `multi-ccp`,无需手动切换环境变量或反复编辑配置文件。
8
+
9
+ ## 功能特性
10
+
11
+ - 使用独立 profile 运行多个 Claude Code 会话窗口。
12
+ - 每个 profile 的 Claude Code 配置、登录状态、环境变量和项目历史记录互相隔离。
13
+ - 创建兼容 Anthropic API 的 profile,自定义 `ANTHROPIC_BASE_URL`、token 和模型配置。
14
+ - 创建 Claude 登录 profile,使用 Claude Code 正常账号登录流程,不保存账号密码。
15
+ - 创建 [Claude Code Router](https://github.com/musistudio/claude-code-router) preset profile,支持多个模型 provider 和 route。
16
+ - 通过同一个 CLI 管理 [Claude Code Router](https://github.com/musistudio/claude-code-router)。
17
+ - 在不同 profile 之间,或在 `main` 与 profile 之间同步 Claude Code 历史会话。
18
+ - 快速查看、打开和编辑 profile 配置。
19
+
20
+ ## 安装
21
+
22
+ ```bash
23
+ npm install -g multi-ccp
24
+ ```
25
+
26
+ 验证安装:
27
+
28
+ ```bash
29
+ ccp --version
30
+ ccp help
31
+ ```
32
+
33
+ ## 快速开始
34
+
35
+ 想走最短路径?可以先问 AI 如何使用 `multi-ccp`。复制这句提示词:
36
+
37
+ ```text
38
+ How do I use multi-ccp to manage multiple Claude Code profiles?
39
+ ```
40
+
41
+ 如果你想查看完整命令说明,可以继续阅读下面的示例。
42
+
43
+ 创建一个兼容 Anthropic API 的 provider profile:
44
+
45
+ ```bash
46
+ ccp add provider-a
47
+ ccp start provider-a
48
+ ```
49
+
50
+ 为另一个 provider、账号或项目上下文创建独立 profile:
51
+
52
+ ```bash
53
+ ccp add provider-b
54
+ ccp start provider-b
55
+ ```
56
+
57
+ 创建一个使用 Claude Code 正常账号登录流程的 profile:
58
+
59
+ ```bash
60
+ ccp add-login work
61
+ ccp start work
62
+ ```
63
+
64
+ 列出和查看 profile:
65
+
66
+ ```bash
67
+ ccp list
68
+ ccp status work
69
+ ccp path work
70
+ ```
71
+
72
+ ## Profile 类型
73
+
74
+ ### API Profiles
75
+
76
+ API profile 用于兼容 Anthropic API 的 provider。它会将 API 环境变量写入该 profile 的 `settings.json`。
77
+
78
+ ```bash
79
+ ccp add provider-a
80
+ ccp start provider-a
81
+ ```
82
+
83
+ 命令会提示你输入:
84
+
85
+ - `ANTHROPIC_BASE_URL`
86
+ - `ANTHROPIC_AUTH_TOKEN`
87
+ - 模型名称
88
+
89
+ #### 自定义 provider 模型
90
+
91
+ 为了简化 provider 配置,`ccp add` 会把你输入的模型名称默认写入所有 Claude Code 默认模型槽位。以 DeepSeek profile 为例,初始配置可能类似:
92
+
93
+ ```json
94
+ {
95
+ "env": {
96
+ "ANTHROPIC_AUTH_TOKEN": "sk-",
97
+ "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
98
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-pro",
99
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro",
100
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro",
101
+ "ANTHROPIC_MODEL": "deepseek-v4-pro"
102
+ }
103
+ }
104
+ ```
105
+
106
+ 如果你的 provider 为快速任务、子代理或长上下文任务提供了不同模型,可以手动编辑 profile:
107
+
108
+ ```bash
109
+ ccp edit deepseek
110
+ ```
111
+
112
+ 例如,把轻量模型分配给快速任务,把支持 1M 上下文的模型分配给主模型槽位:
113
+
114
+ ```json
115
+ {
116
+ "env": {
117
+ "ANTHROPIC_AUTH_TOKEN": "sk-",
118
+ "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
119
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
120
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1M]",
121
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1M]",
122
+ "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-flash",
123
+ "ANTHROPIC_MODEL": "deepseek-v4-pro[1M]"
124
+ }
125
+ }
126
+ ```
127
+
128
+ 具体模型名称和 endpoint 请参考 [DeepSeek API 文档](https://api-docs.deepseek.com/)。
129
+
130
+ ### Login Profiles
131
+
132
+ Login profile 用于 Claude Code 的账号登录模式。它不会设置 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AUTH_TOKEN`。
133
+
134
+ ```bash
135
+ ccp add-login work
136
+ ccp start work
137
+ ```
138
+
139
+ 当 Claude Code 要求你登录时,登录状态会保存在这个 profile 的配置目录下。另一个 profile 可以使用不同账号或不同登录状态:
140
+
141
+ ```bash
142
+ ccp add-login personal
143
+ ccp start personal
144
+ ```
145
+
146
+ ### Claude Code Router Profiles
147
+
148
+ CCR profile 绑定到 [Claude Code Router](https://github.com/musistudio/claude-code-router) preset。Claude Code Router 是一个独立的开源项目,可以将 Claude Code 请求路由到不同模型 provider。`multi-ccp` 会集成它的 config 和 preset system,让每个 profile 可以使用自己的 provider route。
149
+
150
+ ```bash
151
+ ccp ccr status
152
+ ccp ccr model
153
+ ccp add-ccr gpt-route
154
+ ccp start gpt-route
155
+ ```
156
+
157
+ CCR profile 会把 route 写入 `.ccp.json`,并让 Claude Code 指向类似这样的 preset endpoint:
158
+
159
+ ```text
160
+ http://127.0.0.1:3456/preset/gpt-route
161
+ ```
162
+
163
+ ## 历史会话同步
164
+
165
+ `sync-session` 会同步当前项目的 Claude Code 历史会话。你可以交互式选择要同步的会话,也可以一次同步全部会话。
166
+
167
+ 从 `main` 同步到某个 profile:
168
+
169
+ ```bash
170
+ ccp sync-session work
171
+ ccp sync-session work --all
172
+ ```
173
+
174
+ 在两个命名 profile 之间同步:
175
+
176
+ ```bash
177
+ ccp sync-session work to personal
178
+ ccp sync-session work to personal --all
179
+ ```
180
+
181
+ 从 profile 同步回 `main`:
182
+
183
+ ```bash
184
+ ccp sync-session work to main
185
+ ```
186
+
187
+ 同步命令会在 `.ccp-sync` 中记录 hash,复制 session assets,并在目标文件存在冲突时提示是否覆盖。
188
+
189
+ ## 命令
190
+
191
+ ```bash
192
+ ccp help
193
+ ccp list
194
+ ccp add <profile>
195
+ ccp add-login <profile>
196
+ ccp add-ccr <profile>
197
+ ccp remove <profile>
198
+ ccp status <profile|main>
199
+ ccp start <profile> [claude args...]
200
+ ccp path <profile|main>
201
+ ccp edit <profile>
202
+ ```
203
+
204
+ [Claude Code Router](https://github.com/musistudio/claude-code-router) 相关命令:
205
+
206
+ ```bash
207
+ ccp ccr status
208
+ ccp ccr install
209
+ ccp ccr start
210
+ ccp ccr stop
211
+ ccp ccr restart
212
+ ccp ccr ui
213
+ ccp ccr model
214
+ ```
215
+
216
+ 历史会话同步命令:
217
+
218
+ ```bash
219
+ ccp sync-session <target-profile> [--all]
220
+ ccp sync-session <source-profile|main> to <target-profile|main> [--all]
221
+ ```
222
+
223
+ ## 配置目录
224
+
225
+ Profiles 默认存放在:
226
+
227
+ ```text
228
+ ~/.claude-profiles/<profile>
229
+ ```
230
+
231
+ Claude Code 默认配置目录仍然可以通过 `main` 访问:
232
+
233
+ ```text
234
+ main
235
+ ```
236
+
237
+ 例如:
238
+
239
+ ```bash
240
+ ccp status main
241
+ ccp sync-session main to work
242
+ ccp sync-session work to main
243
+ ```
244
+
245
+ ## 安全说明
246
+
247
+ - `ccp remove <profile>` 删除前会要求你输入 profile 名称确认。
248
+ - `ccp add`、`ccp add-login` 和 `ccp add-ccr` 不会覆盖已经存在的 profile。
249
+ - `sync-session` 使用 SHA-256 hash 检测冲突,并在覆盖目标文件前询问确认。
250
+ - Login profile 不保存 Claude 账号密码。
251
+
252
+ ## 开发
253
+
254
+ ```bash
255
+ git clone <repository-url>
256
+ cd multi-ccp
257
+ npm install
258
+ npm run typecheck
259
+ npm test
260
+ npm run build
261
+ ```
262
+
263
+ 从源码运行 CLI:
264
+
265
+ ```bash
266
+ npm run dev -- help
267
+ ```
268
+
269
+ 预览 npm 包内容:
270
+
271
+ ```bash
272
+ npm pack --dry-run
273
+ ```
274
+
275
+ ## License
276
+
277
+ MIT
@@ -1,12 +1,35 @@
1
1
  import { confirm, input, password, select } from "@inquirer/prompts";
2
+ import { readFileSync } from "node:fs";
2
3
  import { Command } from "commander";
3
4
  import { CcpError } from "../core/errors.js";
4
5
  import { launchClaude } from "../core/launcher.js";
5
6
  import { resolveConfigDir } from "../core/profiles.js";
6
- import { createApiProfile, createCcrProfile, createLoginProfile, listProfiles, removeProfile, summarizeProfile } from "../core/profiles.js";
7
+ import { createApiProfile, createCcrProfile, createLoginProfile, listProfiles, profileExists, removeProfile, summarizeProfile } from "../core/profiles.js";
7
8
  import { getSettingsPath } from "../core/settings.js";
8
9
  import { getCcrRouteChoices, getCcrStatus, installCcr, readCcrConfig, invokeCcrCli, printCcrStatus, restartCcrService, startCcrService, stopCcrService } from "../core/ccr.js";
9
10
  import { openEditor } from "../platform/editor.js";
11
+ import { parseSelectionText, syncSessions } from "../core/sessions.js";
12
+ function getPackageVersion() {
13
+ try {
14
+ const packageJsonUrl = new URL("../../package.json", import.meta.url);
15
+ const packageJson = JSON.parse(readFileSync(packageJsonUrl, "utf8"));
16
+ return packageJson.version ?? "0.0.0";
17
+ }
18
+ catch {
19
+ return "0.0.0";
20
+ }
21
+ }
22
+ async function ensureProfileCanBeCreated(name) {
23
+ if (!(await profileExists(name))) {
24
+ return true;
25
+ }
26
+ const config = await resolveConfigDir(name, { allowMain: false });
27
+ console.log(`Profile '${name}' already exists:`);
28
+ console.log(config.dir);
29
+ console.log("Use a different profile name, or remove the existing profile first with:");
30
+ console.log(` ccp remove ${name}`);
31
+ return false;
32
+ }
10
33
  function printProfile(profile) {
11
34
  if (profile.model) {
12
35
  console.log(`${profile.name}\t${profile.model}\t${profile.baseUrl}`);
@@ -15,6 +38,37 @@ function printProfile(profile) {
15
38
  console.log(`${profile.name}\t${profile.baseUrl}`);
16
39
  }
17
40
  }
41
+ async function selectSessionFiles(sessions) {
42
+ if (sessions.length === 0)
43
+ return [];
44
+ console.log("Select sessions to sync:");
45
+ sessions.forEach((item, index) => {
46
+ const when = item.lastWriteTime.toISOString().slice(0, 16).replace("T", " ");
47
+ const shortId = item.sessionId.length > 8 ? item.sessionId.slice(0, 8) : item.sessionId;
48
+ console.log("[" + (index + 1) + "] " + when + " " + item.relativeTime + " " + shortId + " " + item.title + " " + item.sizeKb + "KB");
49
+ });
50
+ const answer = await input({ message: "Choose numbers/ranges, 'a' for all, or 'q' to cancel" });
51
+ if (!answer.trim() || answer.trim().toLowerCase() === "q")
52
+ return [];
53
+ if (["a", "all"].includes(answer.trim().toLowerCase()))
54
+ return sessions;
55
+ return parseSelectionText(answer, sessions.length).map((index) => sessions[index]);
56
+ }
57
+ async function confirmSessionConflict(details) {
58
+ console.log("");
59
+ console.log("Conflict detected:");
60
+ console.log(" " + details.sourceFile);
61
+ console.log("Target: " + details.targetFile);
62
+ return select({
63
+ message: "Overwrite target with source?",
64
+ choices: [
65
+ { name: "No", value: "no" },
66
+ { name: "Yes", value: "yes" },
67
+ { name: "All", value: "all" },
68
+ { name: "Quit", value: "quit" }
69
+ ]
70
+ });
71
+ }
18
72
  async function showStatus(name) {
19
73
  const config = await resolveConfigDir(name, { allowMain: true });
20
74
  const profile = await summarizeProfile(config.name, config.dir);
@@ -58,7 +112,7 @@ export function createProgram() {
58
112
  program
59
113
  .name("ccp")
60
114
  .description("Claude Code profile manager")
61
- .version("0.1.0");
115
+ .version(getPackageVersion());
62
116
  program
63
117
  .command("list")
64
118
  .description("List Claude Code profiles")
@@ -75,6 +129,8 @@ export function createProgram() {
75
129
  .argument("<profile>")
76
130
  .description("Create an API profile with base URL, token, and model")
77
131
  .action(async (profile) => {
132
+ if (!(await ensureProfileCanBeCreated(profile)))
133
+ return;
78
134
  console.log(`Create Claude API profile: ${profile}`);
79
135
  const baseUrl = await input({ message: "ANTHROPIC_BASE_URL", required: true });
80
136
  const token = await password({ message: "ANTHROPIC_AUTH_TOKEN (hidden, Enter to leave placeholder)", mask: "*" });
@@ -93,6 +149,8 @@ export function createProgram() {
93
149
  .argument("<profile>")
94
150
  .description("Create a login profile that stores a separate Claude Code account login state")
95
151
  .action(async (profile) => {
152
+ if (!(await ensureProfileCanBeCreated(profile)))
153
+ return;
96
154
  console.log(`Create Claude login profile: ${profile}`);
97
155
  console.log("This profile will not set ANTHROPIC_BASE_URL or ANTHROPIC_AUTH_TOKEN.");
98
156
  const ok = await confirm({ message: "Create this login profile?", default: true });
@@ -110,6 +168,8 @@ export function createProgram() {
110
168
  .argument("<profile>")
111
169
  .description("Create a CCR preset-bound profile")
112
170
  .action(async (profile) => {
171
+ if (!(await ensureProfileCanBeCreated(profile)))
172
+ return;
113
173
  const config = await readCcrConfig();
114
174
  const routes = getCcrRouteChoices(config);
115
175
  if (routes.length === 0) {
@@ -249,10 +309,29 @@ export function createProgram() {
249
309
  });
250
310
  program
251
311
  .command("sync-session")
312
+ .argument("<first>")
252
313
  .allowUnknownOption(true)
314
+ .argument("[syncArgs...]", "Use '<source> to <target>' and optional --all")
253
315
  .description("Sync Claude Code sessions between profiles")
254
- .action(() => {
255
- throw new CcpError("sync-session is planned for a later TypeScript CLI release. Use the legacy PowerShell ccp for now.");
316
+ .action(async (first, syncArgs) => {
317
+ const result = await syncSessions({
318
+ first,
319
+ args: syncArgs,
320
+ selectSessions: selectSessionFiles,
321
+ confirmOverwrite: confirmSessionConflict
322
+ });
323
+ if (!result)
324
+ return;
325
+ console.log("Synced current project sessions.");
326
+ console.log("Project: " + result.projectKey);
327
+ console.log("From: " + result.sourceName + " -> " + result.sourceProjectDir);
328
+ console.log("To: " + result.targetName + " -> " + result.targetProjectDir);
329
+ console.log("Selected: " + result.selected);
330
+ console.log("copied=" + result.counts.copied + ", updated=" + result.counts.updated + ", unchanged=" + result.counts.unchanged + ", overwritten=" + result.counts.overwritten + ", conflict=" + result.counts.conflict);
331
+ if (result.conflicts.length > 0) {
332
+ console.log("Conflicts skipped:");
333
+ result.conflicts.forEach((name) => console.log(" " + name));
334
+ }
256
335
  });
257
336
  program
258
337
  .command("ui")
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type PathContext } from "./paths.js";
2
2
  import type { ClaudeSettings, CreateApiProfileInput, CreateLoginProfileInput, CreateCcrProfileInput, ProfileMeta, ProfileSummary, ProfileType } from "./types.js";
3
3
  export declare function getProfileDir(name: string, context?: PathContext): string;
4
+ export declare function profileExists(name: string, context?: PathContext): Promise<boolean>;
4
5
  export declare function resolveConfigDir(name: string, options?: {
5
6
  allowMain?: boolean;
6
7
  context?: PathContext;
@@ -16,6 +16,10 @@ async function exists(target) {
16
16
  export function getProfileDir(name, context = {}) {
17
17
  return path.join(getProfilesRoot(context), name);
18
18
  }
19
+ export async function profileExists(name, context = {}) {
20
+ assertProfileName(name);
21
+ return exists(getProfileDir(name, context));
22
+ }
19
23
  export async function resolveConfigDir(name, options = {}) {
20
24
  const allowMain = options.allowMain ?? true;
21
25
  const context = options.context ?? {};
@@ -114,9 +118,7 @@ export async function createApiProfile(input, context = {}) {
114
118
  ANTHROPIC_BASE_URL: input.baseUrl.trim(),
115
119
  ANTHROPIC_DEFAULT_HAIKU_MODEL: input.model.trim(),
116
120
  ANTHROPIC_DEFAULT_OPUS_MODEL: input.model.trim(),
117
- ANTHROPIC_DEFAULT_OPUS_MODEL_NAME: input.model.trim(),
118
121
  ANTHROPIC_DEFAULT_SONNET_MODEL: input.model.trim(),
119
- ANTHROPIC_DEFAULT_SONNET_MODEL_NAME: input.model.trim(),
120
122
  ANTHROPIC_MODEL: input.model.trim()
121
123
  }
122
124
  });
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { type PathContext } from "./paths.js";
2
+ export type SyncStatus = "copied" | "updated" | "unchanged" | "overwritten" | "conflict";
3
+ export interface SessionDisplayInfo {
4
+ filePath: string;
5
+ name: string;
6
+ sessionId: string;
7
+ title: string;
8
+ lastWriteTime: Date;
9
+ relativeTime: string;
10
+ sizeKb: number;
11
+ }
12
+ export interface SyncMetaRecord {
13
+ source: string;
14
+ file: string;
15
+ lastSyncedHash: string;
16
+ syncedAt: string;
17
+ }
18
+ export interface SyncMeta {
19
+ version: number;
20
+ projectKey: string;
21
+ updatedAt?: string;
22
+ records: Record<string, SyncMetaRecord>;
23
+ }
24
+ export interface SyncCounts {
25
+ copied: number;
26
+ updated: number;
27
+ unchanged: number;
28
+ overwritten: number;
29
+ conflict: number;
30
+ }
31
+ export interface SyncSessionPlan {
32
+ source: {
33
+ name: string;
34
+ dir: string;
35
+ isMain: boolean;
36
+ };
37
+ target: {
38
+ name: string;
39
+ dir: string;
40
+ isMain: boolean;
41
+ };
42
+ projectKey: string;
43
+ sourceProjectDir: string;
44
+ targetProjectDir: string;
45
+ sessionFiles: SessionDisplayInfo[];
46
+ }
47
+ export interface SyncSessionOptions {
48
+ first: string;
49
+ args: string[];
50
+ cwd?: string;
51
+ context?: PathContext;
52
+ selectSessions?: (sessions: SessionDisplayInfo[]) => Promise<SessionDisplayInfo[]>;
53
+ confirmOverwrite?: (details: {
54
+ sourceFile: string;
55
+ targetFile: string;
56
+ }) => Promise<"yes" | "no" | "all" | "quit">;
57
+ }
58
+ export interface SyncSessionResult {
59
+ projectKey: string;
60
+ sourceName: string;
61
+ targetName: string;
62
+ sourceProjectDir: string;
63
+ targetProjectDir: string;
64
+ selected: number;
65
+ counts: SyncCounts;
66
+ conflicts: string[];
67
+ }
68
+ export declare function parseSelectionText(text: string, max: number): number[];
69
+ export declare function planSyncSession(options: SyncSessionOptions): Promise<SyncSessionPlan & {
70
+ syncAll: boolean;
71
+ }>;
72
+ export declare function syncSessions(options: SyncSessionOptions): Promise<SyncSessionResult | undefined>;
@@ -0,0 +1,324 @@
1
+ import { cp, mkdir, readdir, readFile, stat, writeFile, copyFile } from "node:fs/promises";
2
+ import crypto from "node:crypto";
3
+ import path from "node:path";
4
+ import { CcpError } from "./errors.js";
5
+ import { getProjectDir, getProjectKey } from "./paths.js";
6
+ import { resolveConfigDir } from "./profiles.js";
7
+ function parseSyncArgs(first, args) {
8
+ if (!first?.trim()) {
9
+ throw new CcpError("Missing sync target. Use 'ccp sync-session <target-profile>' or 'ccp sync-session <source> to <target>'.");
10
+ }
11
+ const syncArgs = [];
12
+ let syncAll = false;
13
+ for (const arg of args) {
14
+ if (arg === "--all") {
15
+ syncAll = true;
16
+ }
17
+ else {
18
+ syncArgs.push(arg);
19
+ }
20
+ }
21
+ if (syncArgs.length === 0) {
22
+ return { sourceName: "main", targetName: first, syncAll };
23
+ }
24
+ if (syncArgs.length === 2 && syncArgs[0].toLowerCase() === "to") {
25
+ return { sourceName: first, targetName: syncArgs[1], syncAll };
26
+ }
27
+ throw new CcpError("Invalid sync syntax. Use 'ccp sync-session <target-profile>' or 'ccp sync-session <source> to <target>'.");
28
+ }
29
+ async function exists(target) {
30
+ try {
31
+ await stat(target);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ async function fileSha256(filePath) {
39
+ const hash = crypto.createHash("sha256");
40
+ hash.update(await readFile(filePath));
41
+ return hash.digest("hex");
42
+ }
43
+ function syncMetaPath(targetConfigDir, projectKey) {
44
+ return path.join(targetConfigDir, ".ccp-sync", `${projectKey}.json`);
45
+ }
46
+ async function readSyncMeta(metaPath, projectKey) {
47
+ if (!(await exists(metaPath))) {
48
+ return { version: 1, projectKey, records: {} };
49
+ }
50
+ const raw = JSON.parse((await readFile(metaPath, "utf8")).replace(/^/, ""));
51
+ return {
52
+ version: 1,
53
+ projectKey,
54
+ updatedAt: raw.updatedAt,
55
+ records: raw.records ?? {}
56
+ };
57
+ }
58
+ async function writeSyncMeta(metaPath, meta) {
59
+ const records = Object.fromEntries(Object.entries(meta.records).sort(([a], [b]) => a.localeCompare(b)));
60
+ const data = {
61
+ version: 1,
62
+ projectKey: meta.projectKey,
63
+ updatedAt: new Date().toISOString(),
64
+ records
65
+ };
66
+ await mkdir(path.dirname(metaPath), { recursive: true });
67
+ await writeFile(metaPath, `${JSON.stringify(data, null, 2)}\n`, "utf8");
68
+ }
69
+ async function copySessionAssetsMissingOnly(sourceProjectDir, targetProjectDir, sessionName) {
70
+ const sourceAssetDir = path.join(sourceProjectDir, sessionName);
71
+ if (!(await exists(sourceAssetDir))) {
72
+ return;
73
+ }
74
+ const targetAssetDir = path.join(targetProjectDir, sessionName);
75
+ await cp(sourceAssetDir, targetAssetDir, {
76
+ recursive: true,
77
+ force: false,
78
+ errorOnExist: false
79
+ });
80
+ }
81
+ async function syncSessionFile(sourceFile, targetFile, meta, metaKey, sourceName, forceOverwrite = false) {
82
+ const sourceHash = await fileSha256(sourceFile);
83
+ const sourceNameOnly = path.basename(sourceFile);
84
+ const record = () => {
85
+ meta.records[metaKey] = {
86
+ source: sourceName,
87
+ file: sourceNameOnly,
88
+ lastSyncedHash: sourceHash,
89
+ syncedAt: new Date().toISOString()
90
+ };
91
+ };
92
+ if (!(await exists(targetFile))) {
93
+ await copyFile(sourceFile, targetFile);
94
+ record();
95
+ return "copied";
96
+ }
97
+ const targetHash = await fileSha256(targetFile);
98
+ const existingRecord = meta.records[metaKey];
99
+ if (sourceHash === targetHash) {
100
+ record();
101
+ return "unchanged";
102
+ }
103
+ if (forceOverwrite) {
104
+ await copyFile(sourceFile, targetFile);
105
+ record();
106
+ return "overwritten";
107
+ }
108
+ if (!existingRecord?.lastSyncedHash) {
109
+ return "conflict";
110
+ }
111
+ if (targetHash === existingRecord.lastSyncedHash) {
112
+ await copyFile(sourceFile, targetFile);
113
+ record();
114
+ return "updated";
115
+ }
116
+ return "conflict";
117
+ }
118
+ function getPlainSessionText(text) {
119
+ return text.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim();
120
+ }
121
+ function getSessionUserTitleCandidate(content) {
122
+ if (typeof content !== "string") {
123
+ return "";
124
+ }
125
+ if (content.includes("<local-command-caveat>") || content.includes("<local-command-stdout>")) {
126
+ return "";
127
+ }
128
+ const commandName = content.match(/<command-name>\s*([\s\S]*?)\s*<\/command-name>/);
129
+ if (commandName) {
130
+ return getPlainSessionText(commandName[1]);
131
+ }
132
+ return getPlainSessionText(content);
133
+ }
134
+ function limitSessionTitle(title) {
135
+ const plain = getPlainSessionText(title);
136
+ if (!plain)
137
+ return "";
138
+ return plain.length <= 120 ? plain : `${plain.slice(0, 120)}...`;
139
+ }
140
+ function relativeTime(time) {
141
+ const seconds = Math.max(0, Math.floor((Date.now() - time.getTime()) / 1000));
142
+ if (seconds < 60)
143
+ return "just now";
144
+ const minutes = Math.floor(seconds / 60);
145
+ if (minutes < 60)
146
+ return minutes === 1 ? "1 minute ago" : `${minutes} minutes ago`;
147
+ const hours = Math.floor(minutes / 60);
148
+ if (hours < 24)
149
+ return hours === 1 ? "1 hour ago" : `${hours} hours ago`;
150
+ const days = Math.floor(hours / 24);
151
+ if (days < 30)
152
+ return days === 1 ? "1 day ago" : `${days} days ago`;
153
+ const months = Math.floor(days / 30);
154
+ return months === 1 ? "1 month ago" : `${months} months ago`;
155
+ }
156
+ async function getSessionDisplayInfo(filePath) {
157
+ const fileStat = await stat(filePath);
158
+ let aiTitle = "";
159
+ let lastPrompt = "";
160
+ let firstUserTitle = "";
161
+ try {
162
+ const lines = (await readFile(filePath, "utf8")).split(/\r?\n/);
163
+ for (const line of lines) {
164
+ if (!line.trim())
165
+ continue;
166
+ try {
167
+ const obj = JSON.parse(line);
168
+ if (obj.type === "ai-title" && obj.aiTitle) {
169
+ aiTitle = limitSessionTitle(obj.aiTitle);
170
+ }
171
+ else if (obj.type === "last-prompt" && obj.lastPrompt) {
172
+ lastPrompt = limitSessionTitle(obj.lastPrompt);
173
+ }
174
+ else if (obj.type === "user" && obj.message?.content && !firstUserTitle) {
175
+ firstUserTitle = limitSessionTitle(getSessionUserTitleCandidate(obj.message.content));
176
+ }
177
+ }
178
+ catch {
179
+ // Ignore malformed lines in session logs.
180
+ }
181
+ }
182
+ }
183
+ catch {
184
+ // Fall back to generic title if the log cannot be read.
185
+ }
186
+ const title = aiTitle || lastPrompt || firstUserTitle || "(session)";
187
+ const name = path.basename(filePath);
188
+ const sessionId = path.basename(filePath, path.extname(filePath));
189
+ return {
190
+ filePath,
191
+ name,
192
+ sessionId,
193
+ title,
194
+ lastWriteTime: fileStat.mtime,
195
+ relativeTime: relativeTime(fileStat.mtime),
196
+ sizeKb: Math.round((fileStat.size / 1024) * 10) / 10
197
+ };
198
+ }
199
+ export function parseSelectionText(text, max) {
200
+ const indexes = [];
201
+ const tokens = text.split(/[,\s]+/).filter(Boolean);
202
+ for (const token of tokens) {
203
+ const range = token.match(/^(\d+)-(\d+)$/);
204
+ if (range) {
205
+ const start = Number(range[1]);
206
+ const end = Number(range[2]);
207
+ if (start > end)
208
+ throw new CcpError(`Invalid range '${token}'.`);
209
+ for (let i = start; i <= end; i++) {
210
+ if (i < 1 || i > max)
211
+ throw new CcpError(`Selection '${i}' is out of range.`);
212
+ if (!indexes.includes(i - 1))
213
+ indexes.push(i - 1);
214
+ }
215
+ continue;
216
+ }
217
+ if (!/^\d+$/.test(token)) {
218
+ throw new CcpError(`Invalid selection token '${token}'.`);
219
+ }
220
+ const index = Number(token);
221
+ if (index < 1 || index > max)
222
+ throw new CcpError(`Selection '${index}' is out of range.`);
223
+ if (!indexes.includes(index - 1))
224
+ indexes.push(index - 1);
225
+ }
226
+ return indexes;
227
+ }
228
+ export async function planSyncSession(options) {
229
+ const parsed = parseSyncArgs(options.first, options.args);
230
+ const source = await resolveConfigDir(parsed.sourceName, { allowMain: true, context: options.context });
231
+ const target = await resolveConfigDir(parsed.targetName, { allowMain: true, context: options.context });
232
+ if (source.dir.toLowerCase() === target.dir.toLowerCase()) {
233
+ return {
234
+ source,
235
+ target,
236
+ projectKey: getProjectKey(options.cwd ?? options.context?.cwd ?? process.cwd()),
237
+ sourceProjectDir: "",
238
+ targetProjectDir: "",
239
+ sessionFiles: [],
240
+ syncAll: parsed.syncAll
241
+ };
242
+ }
243
+ const projectKey = getProjectKey(options.cwd ?? options.context?.cwd ?? process.cwd());
244
+ const sourceProjectDir = getProjectDir(source.dir, projectKey);
245
+ const targetProjectDir = getProjectDir(target.dir, projectKey);
246
+ if (!(await exists(sourceProjectDir))) {
247
+ return { source, target, projectKey, sourceProjectDir, targetProjectDir, sessionFiles: [], syncAll: parsed.syncAll };
248
+ }
249
+ const entries = await readdir(sourceProjectDir, { withFileTypes: true });
250
+ const jsonlFiles = entries
251
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl"))
252
+ .map((entry) => path.join(sourceProjectDir, entry.name))
253
+ .sort((a, b) => a.localeCompare(b));
254
+ const sessionFiles = await Promise.all(jsonlFiles.map(getSessionDisplayInfo));
255
+ sessionFiles.sort((a, b) => b.lastWriteTime.getTime() - a.lastWriteTime.getTime());
256
+ return { source, target, projectKey, sourceProjectDir, targetProjectDir, sessionFiles, syncAll: parsed.syncAll };
257
+ }
258
+ export async function syncSessions(options) {
259
+ const plan = await planSyncSession(options);
260
+ if (plan.source.dir.toLowerCase() === plan.target.dir.toLowerCase()) {
261
+ console.log(`Source and target are the same config: ${plan.source.name}. Nothing to sync.`);
262
+ return undefined;
263
+ }
264
+ if (!plan.sourceProjectDir || plan.sessionFiles.length === 0) {
265
+ console.log("No source session logs for current project.");
266
+ console.log(`Project: ${plan.projectKey}`);
267
+ console.log(`Source: ${plan.sourceProjectDir}`);
268
+ return undefined;
269
+ }
270
+ const selectedFiles = plan.syncAll
271
+ ? plan.sessionFiles
272
+ : await options.selectSessions?.(plan.sessionFiles) ?? [];
273
+ if (selectedFiles.length === 0) {
274
+ console.log("Sync cancelled.");
275
+ return undefined;
276
+ }
277
+ await mkdir(plan.targetProjectDir, { recursive: true });
278
+ const metaPath = syncMetaPath(plan.target.dir, plan.projectKey);
279
+ const meta = await readSyncMeta(metaPath, plan.projectKey);
280
+ const counts = { copied: 0, updated: 0, unchanged: 0, overwritten: 0, conflict: 0 };
281
+ const conflicts = [];
282
+ let overwriteAll = false;
283
+ for (const session of [...selectedFiles].sort((a, b) => a.name.localeCompare(b.name))) {
284
+ const targetFile = path.join(plan.targetProjectDir, session.name);
285
+ const metaKey = `${plan.source.name}|${session.name}`;
286
+ let status = await syncSessionFile(session.filePath, targetFile, meta, metaKey, plan.source.name);
287
+ if (status === "conflict") {
288
+ if (!overwriteAll) {
289
+ const answer = await options.confirmOverwrite?.({ sourceFile: session.filePath, targetFile }) ?? "no";
290
+ if (answer === "quit") {
291
+ throw new CcpError("Sync cancelled by user.");
292
+ }
293
+ if (answer === "all") {
294
+ overwriteAll = true;
295
+ }
296
+ if (answer === "yes" || answer === "all") {
297
+ status = await syncSessionFile(session.filePath, targetFile, meta, metaKey, plan.source.name, true);
298
+ }
299
+ }
300
+ else {
301
+ status = await syncSessionFile(session.filePath, targetFile, meta, metaKey, plan.source.name, true);
302
+ }
303
+ }
304
+ counts[status]++;
305
+ if (status !== "conflict") {
306
+ await copySessionAssetsMissingOnly(plan.sourceProjectDir, plan.targetProjectDir, session.sessionId);
307
+ }
308
+ else {
309
+ conflicts.push(session.name);
310
+ }
311
+ }
312
+ await writeSyncMeta(metaPath, meta);
313
+ return {
314
+ projectKey: plan.projectKey,
315
+ sourceName: plan.source.name,
316
+ targetName: plan.target.name,
317
+ sourceProjectDir: plan.sourceProjectDir,
318
+ targetProjectDir: plan.targetProjectDir,
319
+ selected: selectedFiles.length,
320
+ counts,
321
+ conflicts
322
+ };
323
+ }
324
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/core/sessions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multi-ccp",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Cross-platform Claude Code profile manager for API, login, and router workflows.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,6 +9,7 @@
9
9
  "files": [
10
10
  "dist",
11
11
  "README.md",
12
+ "README.zh-CN.md",
12
13
  "LICENSE",
13
14
  "CHANGELOG.md"
14
15
  ],