cc-viewer 1.7.1 → 1.7.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/cli.js CHANGED
@@ -15,6 +15,7 @@ import { INJECT_IMPORT, LEGACY_INJECT_IMPORTS, resolveCliPath, resolveNativePath
15
15
  import { ensureHooks, removeAllManagedHooks } from './server/lib/ensure-hooks.js';
16
16
  import { injectCliJsAt, removeCliJsInjectionAt, INJECT_START as _INJECT_START, INJECT_END as _INJECT_END, buildInjectBlock as _buildInjectBlock } from './server/lib/cli-inject.js';
17
17
  import { normalizeBasePath } from './server/lib/base-path.js';
18
+ import { mergeSettingsIntoArgs } from './server/lib/settings-merge.js';
18
19
  import { createHardenedCleanup, installWinKeypressFallback } from './server/lib/term-signals.js';
19
20
 
20
21
  const __dirname = fileURLToPath(new URL('.', import.meta.url));
@@ -272,17 +273,34 @@ async function runProxyCommand(args) {
272
273
  // 剥离 cc-viewer 的内部短路开关,避免泄漏给 claude 子进程
273
274
  delete env.CCV_SKIP_THINKING_DISPLAY;
274
275
 
275
- const settingsJson = JSON.stringify({
276
+ const settingsObj = {
276
277
  env: {
277
278
  ANTHROPIC_BASE_URL: env.ANTHROPIC_BASE_URL
278
279
  }
279
- });
280
+ };
281
+ let settingsJson = JSON.stringify(settingsObj);
282
+
283
+ const isClaudeCmd = cmd === 'claude' || /[\\/]claude(\.exe)?$/.test(cmd);
284
+
285
+ // Fold a user-supplied --settings into the injected settings and emit a single flag
286
+ // (claude is last-wins for duplicate --settings; two parallel flags let the user's
287
+ // silently clobber the injected ANTHROPIC_BASE_URL and break capture). claude only:
288
+ // another tool's --settings belongs to that tool and must not be touched.
289
+ // Runs on the RAW cmdArgs BEFORE the --thinking-display append below: otherwise a
290
+ // trailing valueless user --settings would consume our appended token as its value.
291
+ if (isClaudeCmd) {
292
+ const settingsMerge = mergeSettingsIntoArgs(cmdArgs, settingsObj, { cwd: process.cwd() });
293
+ if (settingsMerge.warningDetail) {
294
+ console.warn(t('cli.settingsMergeFailed', settingsMerge.warningDetail));
295
+ }
296
+ settingsJson = settingsMerge.settingsJson;
297
+ cmdArgs = settingsMerge.args;
298
+ }
280
299
 
281
300
  // 注入默认 --thinking-display summarized,仅对 claude 二进制(其他命令如 `ccv run -- sometool` 跳过)。
282
301
  // 若 claude 不识别该 flag(老版本/fork)会 unknown option 崩溃——由 pty-manager.js::spawnClaude 的
283
302
  // onExit reactive retry 兜底;cli.js 这条路径是一次性子进程,没有 respawn 机会,用户需手动重试。
284
303
  // 可通过环境变量 CCV_SKIP_THINKING_DISPLAY=1 强制跳过。
285
- const isClaudeCmd = cmd === 'claude' || /[\\/]claude(\.exe)?$/.test(cmd);
286
304
  if (isClaudeCmd && process.env.CCV_SKIP_THINKING_DISPLAY !== '1') {
287
305
  const { withDefaultThinkingDisplay } = await import('./server/pty-manager.js');
288
306
  cmdArgs = withDefaultThinkingDisplay(cmdArgs);