@kaitranntt/ccs 2.4.2 → 2.4.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 2.4.2
1
+ 2.4.3
package/bin/ccs.js CHANGED
@@ -19,10 +19,22 @@ function getSpawnOptions(claudePath) {
19
19
 
20
20
  return {
21
21
  stdio: 'inherit',
22
- shell: needsShell // Required for .cmd files on Windows
22
+ shell: needsShell,
23
+ windowsHide: true // Hide the console window on Windows
23
24
  };
24
25
  }
25
26
 
27
+ // Helper: Escape arguments for shell execution to prevent security vulnerabilities
28
+ function escapeShellArg(arg) {
29
+ if (process.platform !== 'win32') {
30
+ // Unix-like systems: escape single quotes and wrap in single quotes
31
+ return "'" + arg.replace(/'/g, "'\"'\"'") + "'";
32
+ } else {
33
+ // Windows: escape double quotes and wrap in double quotes
34
+ return '"' + arg.replace(/"/g, '""') + '"';
35
+ }
36
+ }
37
+
26
38
  // Special command handlers
27
39
  function handleVersionCommand() {
28
40
  console.log(`CCS (Claude Code Switch) version ${CCS_VERSION}`);
@@ -48,7 +60,17 @@ function handleHelpCommand(remainingArgs) {
48
60
 
49
61
  // Execute claude --help
50
62
  const spawnOpts = getSpawnOptions(claudeCli);
51
- const child = spawn(claudeCli, ['--help', ...remainingArgs], spawnOpts);
63
+ let claudeArgs, child;
64
+
65
+ if (spawnOpts.shell) {
66
+ // When shell is required, escape arguments properly
67
+ claudeArgs = [claudeCli, '--help', ...remainingArgs].map(escapeShellArg).join(' ');
68
+ child = spawn(claudeArgs, spawnOpts);
69
+ } else {
70
+ // When no shell needed, use arguments array directly
71
+ claudeArgs = ['--help', ...remainingArgs];
72
+ child = spawn(claudeCli, claudeArgs, spawnOpts);
73
+ }
52
74
 
53
75
  child.on('exit', (code, signal) => {
54
76
  if (signal) {
@@ -138,7 +160,17 @@ function main() {
138
160
 
139
161
  // Execute claude with args
140
162
  const spawnOpts = getSpawnOptions(claudeCli);
141
- const child = spawn(claudeCli, remainingArgs, spawnOpts);
163
+ let claudeArgs, child;
164
+
165
+ if (spawnOpts.shell) {
166
+ // When shell is required, escape arguments properly
167
+ claudeArgs = [claudeCli, ...remainingArgs].map(escapeShellArg).join(' ');
168
+ child = spawn(claudeArgs, spawnOpts);
169
+ } else {
170
+ // When no shell needed, use arguments array directly
171
+ claudeArgs = remainingArgs;
172
+ child = spawn(claudeCli, claudeArgs, spawnOpts);
173
+ }
142
174
 
143
175
  child.on('exit', (code, signal) => {
144
176
  if (signal) {
@@ -169,9 +201,19 @@ function main() {
169
201
  }
170
202
 
171
203
  // Execute claude with --settings
172
- const claudeArgs = ['--settings', settingsPath, ...remainingArgs];
204
+ const claudeArgsList = ['--settings', settingsPath, ...remainingArgs];
173
205
  const spawnOpts = getSpawnOptions(claudeCli);
174
- const child = spawn(claudeCli, claudeArgs, spawnOpts);
206
+ let claudeArgs, child;
207
+
208
+ if (spawnOpts.shell) {
209
+ // When shell is required, escape arguments properly
210
+ claudeArgs = [claudeCli, ...claudeArgsList].map(escapeShellArg).join(' ');
211
+ child = spawn(claudeArgs, spawnOpts);
212
+ } else {
213
+ // When no shell needed, use arguments array directly
214
+ claudeArgs = claudeArgsList;
215
+ child = spawn(claudeCli, claudeArgs, spawnOpts);
216
+ }
175
217
 
176
218
  child.on('exit', (code, signal) => {
177
219
  if (signal) {
package/lib/ccs CHANGED
@@ -2,7 +2,7 @@
2
2
  set -euo pipefail
3
3
 
4
4
  # Version (updated by scripts/bump-version.sh)
5
- CCS_VERSION="2.4.1"
5
+ CCS_VERSION="2.4.3"
6
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
7
 
8
8
  # --- Color/Format Functions ---
package/lib/ccs.ps1 CHANGED
@@ -72,7 +72,7 @@ Restart your terminal after installation.
72
72
  }
73
73
 
74
74
  # Version (updated by scripts/bump-version.sh)
75
- $CcsVersion = "2.4.1"
75
+ $CcsVersion = "2.4.3"
76
76
  $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
77
77
 
78
78
  # Installation function for commands and skills
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "2.4.2",
3
+ "version": "2.4.3",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6",
5
5
  "keywords": [
6
6
  "cli",