claude-multi 0.5.7 → 0.6.0
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 +40 -14
- package/dist/cli.js +2798 -441
- package/package.json +13 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,19 +5,45 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.6.0] - 2026-05-29
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`doctor fix` auto-installs pinned Claude binary**: when the compatible binary at `~/.claude-multi/bin` is missing or running an incompatible version, `doctor fix` now installs Claude Code v2.1.153 (the last version before 3rd-party API breakage) before fixing wrappers. Works from both CLI and TUI.
|
|
12
|
+
- **Version verification on pinned binary**: `getPinnedBinaryVersion()` reads the installed version and triggers a reinstall if it's v2.1.154+.
|
|
13
|
+
- **`COMPATIBLE_CLAUDE_VERSION` constant** (`src/version.ts`): single source of truth for the pinned version (`2.1.153`).
|
|
14
|
+
- **`PINNED_CLAUDE_BIN` in `src/paths.ts`**: shared path constant (previously duplicated in `wrapper.ts` and `health.ts`).
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- **Global version banner**: now reads "Run 'claude-multi doctor fix' to install a compatible version" instead of the passive "wait for a fix" message.
|
|
18
|
+
- **TUI "Fix wrappers" action**: installs the pinned binary first if missing, then fixes wrappers. Both the menu option and the `f` key in the health screen follow this flow.
|
|
19
|
+
- **Wrapper scripts now use pinned binary by default**: `getClaudePath()` checks `~/.claude-multi/bin` before falling back to global `which claude`, so new instances automatically use the compatible version.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- **Tests**: integration tests updated for current version and help output.
|
|
23
|
+
|
|
24
|
+
## [0.5.8] - 2026-05-28
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **Region selection for MiMo Token Plan** (`--region`): `mimo-token` provider now supports regional endpoints — China (`cn`), Singapore (`sgp`), Europe (`ams`). Users are prompted to pick a region after selecting `mimo-token` in all three entry points (CLI `--region` flag, interactive prompts, Ink TUI wizard). Defaults to `cn` for backward compatibility.
|
|
28
|
+
- **API key prefix mapping** (`API_KEY_PREFIXES`): `mimo-token` shows `tp_...` placeholder in the API key input; all other providers show `sk-...`. Extensible map for future providers with non-standard key formats.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- **`--provider` error message** (`src/cli.ts`): unknown provider error now dynamically lists all available providers instead of hardcoding three names.
|
|
32
|
+
- **Region advisory**: both the interactive prompts and Ink TUI display a highlighted message reminding users to check their Xiaomi account console for the correct region.
|
|
33
|
+
|
|
8
34
|
## [0.5.7] - 2026-05-27
|
|
9
35
|
|
|
10
36
|
### Added
|
|
11
37
|
- **Provider templates** (`src/templates.ts`): five new AI provider templates
|
|
12
|
-
- **Xiaomi MiMo** (`mimo`): MiMo-V2.5-Pro and MiMo-V2.5 via xiaomimimo.com
|
|
38
|
+
- **Xiaomi MiMo** (`mimo`): MiMo-V2.5-Pro and MiMo-V2.5 via xiaomimimo.com, pay-per-token API
|
|
13
39
|
- **Xiaomi MiMo Token Plan** (`mimo-token`): MiMo-V2.5-Pro via xiaomimimo.com subscription; replace base URL with your regional endpoint (CN/SG/EU) from the subscription console
|
|
14
|
-
- **Moonshot Kimi** (`kimi`): Kimi K2.6 (opus) and Kimi K2.5 (sonnet/haiku) via moonshot.ai
|
|
15
|
-
- **Alibaba Qwen** (`qwen`): Qwen3-Coder-Next/Plus/Flash via Alibaba DashScope
|
|
40
|
+
- **Moonshot Kimi** (`kimi`): Kimi K2.6 (opus) and Kimi K2.5 (sonnet/haiku) via moonshot.ai, pay-per-token
|
|
41
|
+
- **Alibaba Qwen** (`qwen`): Qwen3-Coder-Next/Plus/Flash via Alibaba DashScope, pay-per-token API
|
|
16
42
|
- **Alibaba Qwen Coding Plan** (`qwen-coding`): Qwen3-Coder-Next/Plus/Flash via DashScope Coding Plan subscription
|
|
17
43
|
|
|
18
44
|
### Changed
|
|
19
45
|
- **GLM template** (`glm`): display name updated to "GLM Coding Plan"; description now clarifies the Anthropic endpoint is coding-plan-only (standard Z.ai pay-per-token API has no Anthropic-compatible URL)
|
|
20
|
-
- **Kimi template** (`kimi`): sonnet/haiku tiers use `kimi-k2.5` instead of `kimi-k2.6
|
|
46
|
+
- **Kimi template** (`kimi`): sonnet/haiku tiers use `kimi-k2.5` instead of `kimi-k2.6`, same family, ~37% cheaper; legacy K2 series EOL'd May 25 2026
|
|
21
47
|
|
|
22
48
|
## [0.5.6] - 2026-05-23
|
|
23
49
|
|
|
@@ -27,7 +53,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
27
53
|
### Changed
|
|
28
54
|
- **Runtime-agnostic launcher** (`bin/claude-multi.js`): polyglot bin entry is simultaneously valid POSIX sh and ESM JavaScript
|
|
29
55
|
- On Linux/macOS: shell shebang detects bun/node/deno and execs the correct runtime
|
|
30
|
-
- On Windows + bun global install: bun's `.exe` shim reads the `.js` extension and runs directly as ESM
|
|
56
|
+
- On Windows + bun global install: bun's `.exe` shim reads the `.js` extension and runs directly as ESM, no `/bin/sh` lookup required
|
|
31
57
|
- On Windows + npm install: npm's `.cmd` shim calls `node` on the `.js` file
|
|
32
58
|
- Shebang changed to `#!/usr/bin/env bun` so bun's Windows shim can resolve itself in `PATH`
|
|
33
59
|
|
|
@@ -44,10 +70,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
44
70
|
|
|
45
71
|
### Changed
|
|
46
72
|
- **Cross-runtime support**: all package-manager operations (`upgradeClaudeMulti`, `getCurrentVersion`, `updateClaudeCode`) now use the detected package manager instead of hard-coding bun commands
|
|
47
|
-
- `getLatestVersion()` replaced `bun pm npm view` with a direct `fetch()` to the npm registry
|
|
73
|
+
- `getLatestVersion()` replaced `bun pm npm view` with a direct `fetch()` to the npm registry, works in any runtime
|
|
48
74
|
- `getDefaultBinaryPath()` selects the correct global bin directory for the active package manager on Windows (was always `%LOCALAPPDATA%\bun\bin`)
|
|
49
75
|
- Generated wrapper shebang changed from `#!/usr/bin/env bun` to `#!/usr/bin/env node`
|
|
50
|
-
- Default action (no subcommand) always launches the Ink TUI and awaits `waitUntilExit()
|
|
76
|
+
- Default action (no subcommand) always launches the Ink TUI and awaits `waitUntilExit()`, the `CLAUDE_MULTI_INK=false` prompts fallback is removed
|
|
51
77
|
- Update check is now **opt-in**: set `CLAUDE_MULTI_UPDATE_CHECK=true` to enable; it no longer runs on every invocation
|
|
52
78
|
- Removed `interactive` / `i` command alias (default action covers this)
|
|
53
79
|
|
|
@@ -117,11 +143,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
117
143
|
- Verify MCP configuration
|
|
118
144
|
- Copy between instances
|
|
119
145
|
- **CLI Plugin Commands**: 5 new `plugins` sub-commands
|
|
120
|
-
- `plugins install <instance> <ids
|
|
121
|
-
- `plugins remove <instance> <ids
|
|
122
|
-
- `plugins list-defaults
|
|
123
|
-
- `plugins list-installed [instance]
|
|
124
|
-
- `plugins check-collisions <instance> <ids
|
|
146
|
+
- `plugins install <instance> <ids...>`, install plugins with collision detection
|
|
147
|
+
- `plugins remove <instance> <ids...>`, remove plugins with symlink guard
|
|
148
|
+
- `plugins list-defaults`, list all 50 default plugins with category/MCP badges
|
|
149
|
+
- `plugins list-installed [instance]`, list installed plugins per instance
|
|
150
|
+
- `plugins check-collisions <instance> <ids...>`, detect MCP name conflicts
|
|
125
151
|
- **Provider Templates**: DeepSeek provider template added
|
|
126
152
|
- **Instance State**: `initializeInstanceState()` creates `.claude.json` with `hasCompletedOnboarding: true`
|
|
127
153
|
- **Provider Env**: `mergeProviderEnv()` integrates provider template env vars into instance settings
|
|
@@ -131,7 +157,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
131
157
|
- `copyAllFromDefault()` restored `autoSync` parameter for symlink-based plugin sync
|
|
132
158
|
- `syncPluginsAndSkills()` creates actual symlinks instead of copying files
|
|
133
159
|
- Broken symlink detection uses `lstatSync` (works when `existsSync` returns false)
|
|
134
|
-
- `~/.claude` is strictly read-only
|
|
160
|
+
- `~/.claude` is strictly read-only, never modified by any operation
|
|
135
161
|
- Atomic file writes for both config.json and settings.json (temp-file-rename pattern)
|
|
136
162
|
- Lazy path resolution in migration.ts and health.ts for testability
|
|
137
163
|
|
|
@@ -139,7 +165,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
139
165
|
- `syncPluginsAndSkills` was doing recursive copy instead of creating symlinks
|
|
140
166
|
- `copyAllFromDefault` `autoSync` parameter was removed, breaking symlink-based sync
|
|
141
167
|
- Broken symlinks not cleaned before creating new ones (used `lstatSync` instead of `existsSync`)
|
|
142
|
-
- `isClaudeCodeRunning()` blocked tests
|
|
168
|
+
- `isClaudeCodeRunning()` blocked tests, skips in `NODE_ENV=test`
|
|
143
169
|
- `writeFileSync` not imported in config.ts
|
|
144
170
|
- `McpSourceDetails` prop name mismatch in ManageMcp
|
|
145
171
|
- `renameSync` dynamic import in `saveConfigAtomic` replaced with top-level import
|