cc-viewer 1.6.322 → 1.6.324

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.
Files changed (93) hide show
  1. package/cli.js +38 -0
  2. package/dist/assets/App-DxhvxOv5.js +2 -0
  3. package/dist/assets/{MdxEditorPanel-CZz9w38A.js → MdxEditorPanel-Cvce-OZ1.js} +1 -1
  4. package/dist/assets/Mobile-eQkx6wDh.js +1 -0
  5. package/dist/assets/{_baseUniq-CKn860hN.js → _baseUniq-Bd-sKzQW.js} +1 -1
  6. package/dist/assets/{arc-C4-SwDEU.js → arc-D_6rT0rI.js} +1 -1
  7. package/dist/assets/{architectureDiagram-Q4EWVU46-zNU8vGgf.js → architectureDiagram-Q4EWVU46-ClH0N8bK.js} +1 -1
  8. package/dist/assets/{blockDiagram-DXYQGD6D-Blq7VyAY.js → blockDiagram-DXYQGD6D-VBVbHV93.js} +1 -1
  9. package/dist/assets/{c4Diagram-AHTNJAMY-CilEO7Pu.js → c4Diagram-AHTNJAMY-CHd3FVhr.js} +1 -1
  10. package/dist/assets/{channel-K9LDJtR8.js → channel-DtAIDDMS.js} +1 -1
  11. package/dist/assets/{chunk-4BX2VUAB-DB6nsrqZ.js → chunk-4BX2VUAB-ldBMt7Zz.js} +1 -1
  12. package/dist/assets/{chunk-4TB4RGXK-O_q60rT5.js → chunk-4TB4RGXK-BpaavRFi.js} +1 -1
  13. package/dist/assets/{chunk-55IACEB6-D4PJNgqD.js → chunk-55IACEB6-CCQR_GqB.js} +1 -1
  14. package/dist/assets/{chunk-EDXVE4YY-T78XNZnN.js → chunk-EDXVE4YY-B94gGHJo.js} +1 -1
  15. package/dist/assets/{chunk-FMBD7UC4-BMajr_WJ.js → chunk-FMBD7UC4-D2pvMCHW.js} +1 -1
  16. package/dist/assets/{chunk-OYMX7WX6-BLXJEzI0.js → chunk-OYMX7WX6-BC1K8PFw.js} +1 -1
  17. package/dist/assets/{chunk-QZHKN3VN-C4ozCDaC.js → chunk-QZHKN3VN-BlKIHWPg.js} +1 -1
  18. package/dist/assets/{chunk-YZCP3GAM-xsMRpY5W.js → chunk-YZCP3GAM-CO46Dpuq.js} +1 -1
  19. package/dist/assets/classDiagram-6PBFFD2Q-BVr-1vS2.js +1 -0
  20. package/dist/assets/classDiagram-v2-HSJHXN6E-BVr-1vS2.js +1 -0
  21. package/dist/assets/clone-BLbDEtop.js +1 -0
  22. package/dist/assets/{cose-bilkent-S5V4N54A-BRm6sjuX.js → cose-bilkent-S5V4N54A-UW2sc3aR.js} +1 -1
  23. package/dist/assets/{dagre-KV5264BT-CapXy71H.js → dagre-KV5264BT-nawhI5CM.js} +1 -1
  24. package/dist/assets/{diagram-5BDNPKRD-CHaUXNHL.js → diagram-5BDNPKRD-BrLDz-85.js} +1 -1
  25. package/dist/assets/{diagram-G4DWMVQ6-YInXouX7.js → diagram-G4DWMVQ6-DDT86i03.js} +1 -1
  26. package/dist/assets/{diagram-MMDJMWI5-Bb9563xL.js → diagram-MMDJMWI5-BQMzmHLU.js} +1 -1
  27. package/dist/assets/{diagram-TYMM5635-BRYSGtnv.js → diagram-TYMM5635-BX7-PwHQ.js} +1 -1
  28. package/dist/assets/{erDiagram-SMLLAGMA-DiYsrHLg.js → erDiagram-SMLLAGMA-IwLVLNv0.js} +1 -1
  29. package/dist/assets/{flowDiagram-DWJPFMVM-CNZRDRgn.js → flowDiagram-DWJPFMVM-B8_X77WK.js} +1 -1
  30. package/dist/assets/{ganttDiagram-T4ZO3ILL-D9QY8NPb.js → ganttDiagram-T4ZO3ILL-DgeHpfKD.js} +1 -1
  31. package/dist/assets/{gitGraphDiagram-UUTBAWPF-R_yUkND4.js → gitGraphDiagram-UUTBAWPF-GImqd44T.js} +1 -1
  32. package/dist/assets/{graph-Bp7rzoPN.js → graph-BFNvFrIw.js} +1 -1
  33. package/dist/assets/{index-C2X1QxuP.js → index-CG43hSOO.js} +1 -1
  34. package/dist/assets/{index-skAVyRFx.js → index-CL43Q_T6.js} +1 -1
  35. package/dist/assets/index-Cw_igOCh.js +2 -0
  36. package/dist/assets/{index-5ATcFzQK.js → index-DH6neeAn.js} +1 -1
  37. package/dist/assets/{index-FjGT9Yrp.js → index-DYZfyIFS.js} +1 -1
  38. package/dist/assets/{index-CQm1mKh-.js → index-DqxWEMZG.js} +1 -1
  39. package/dist/assets/{index-B6uEt4Lm.js → index-SMWE-umF.js} +1 -1
  40. package/dist/assets/{index-D7TrcLgR.js → index-Zcwywgin.js} +1 -1
  41. package/dist/assets/{infoDiagram-42DDH7IO-D7SIo5T_.js → infoDiagram-42DDH7IO-DafQ4Zwr.js} +1 -1
  42. package/dist/assets/{ishikawaDiagram-UXIWVN3A-D1w7_hBw.js → ishikawaDiagram-UXIWVN3A-CsS59UI8.js} +1 -1
  43. package/dist/assets/{journeyDiagram-VCZTEJTY-D2ZcdIwf.js → journeyDiagram-VCZTEJTY-C8OZZC2d.js} +1 -1
  44. package/dist/assets/{jszip.min-BhyPZTcl.js → jszip.min-DWTs-GDW.js} +1 -1
  45. package/dist/assets/{kanban-definition-6JOO6SKY-BtXrBplk.js → kanban-definition-6JOO6SKY-BThryIIr.js} +1 -1
  46. package/dist/assets/{layout-l4xJ0EnV.js → layout-B2c4ocGM.js} +1 -1
  47. package/dist/assets/{linear-BFgL1PM1.js → linear-whLrOj6w.js} +1 -1
  48. package/dist/assets/{mermaid.core-CBJGZX-R.js → mermaid.core-CVxcxPSX.js} +2 -2
  49. package/dist/assets/{min-D7RE9cIU.js → min-DcYONCON.js} +1 -1
  50. package/dist/assets/{mindmap-definition-QFDTVHPH-B2jur7ry.js → mindmap-definition-QFDTVHPH-B7cxL7F7.js} +1 -1
  51. package/dist/assets/{pieDiagram-DEJITSTG-B249cLkg.js → pieDiagram-DEJITSTG-C5W3T882.js} +1 -1
  52. package/dist/assets/{quadrantDiagram-34T5L4WZ-CdZHycc8.js → quadrantDiagram-34T5L4WZ-DOZS2aRU.js} +1 -1
  53. package/dist/assets/{requirementDiagram-MS252O5E-BezSNLdn.js → requirementDiagram-MS252O5E-C_ZtyqTm.js} +1 -1
  54. package/dist/assets/{sankeyDiagram-XADWPNL6-C-RZnw4b.js → sankeyDiagram-XADWPNL6-DImjFcUx.js} +1 -1
  55. package/dist/assets/{seqResourceLoaders-R12WGANd.css → seqResourceLoaders-D6YenrBg.css} +1 -1
  56. package/dist/assets/seqResourceLoaders-sKqNZgOI.js +2 -0
  57. package/dist/assets/{sequenceDiagram-FGHM5R23-Fs0rcjkY.js → sequenceDiagram-FGHM5R23-BQwGiH06.js} +1 -1
  58. package/dist/assets/{stateDiagram-FHFEXIEX-CIcdyOPX.js → stateDiagram-FHFEXIEX-D8zGNMAW.js} +1 -1
  59. package/dist/assets/{stateDiagram-v2-QKLJ7IA2-BK2tAdaI.js → stateDiagram-v2-QKLJ7IA2-DY86eLVa.js} +1 -1
  60. package/dist/assets/{timeline-definition-GMOUNBTQ-BXg7hZyc.js → timeline-definition-GMOUNBTQ-LfDkNw95.js} +1 -1
  61. package/dist/assets/{vendor-antd-BSgMQtAG.js → vendor-antd-x2KtHa4R.js} +1 -1
  62. package/dist/assets/{vendor-codemirror-rm3PGybQ.js → vendor-codemirror-z6VSi4ab.js} +1 -1
  63. package/dist/assets/{vendor-mdxeditor-UIfRXbTk.js → vendor-mdxeditor-Zi3mchEB.js} +2 -2
  64. package/dist/assets/{vendor-qrcode-BiBG2gg5.js → vendor-qrcode-Dtu30dr9.js} +1 -1
  65. package/dist/assets/{vendor-virtuoso-DNNzcVZ0.js → vendor-virtuoso-BhHaLmft.js} +1 -1
  66. package/dist/assets/{vennDiagram-DHZGUBPP-IyEu5-2i.js → vennDiagram-DHZGUBPP-DRRBdcoR.js} +1 -1
  67. package/dist/assets/{wardley-RL74JXVD-BEUuSlqC.js → wardley-RL74JXVD-DtWPL3Ou.js} +1 -1
  68. package/dist/assets/{wardleyDiagram-NUSXRM2D-Cv-nt0oQ.js → wardleyDiagram-NUSXRM2D-CDGkjbzC.js} +1 -1
  69. package/dist/assets/{xychartDiagram-5P7HB3ND-B4QuJzX1.js → xychartDiagram-5P7HB3ND-drrUfgKK.js} +1 -1
  70. package/dist/index.html +4 -4
  71. package/package.json +4 -4
  72. package/server/i18n.js +62 -2
  73. package/server/interceptor.js +32 -9
  74. package/server/lib/auth.js +20 -5
  75. package/server/lib/instance-registry.js +57 -0
  76. package/server/lib/interceptor-core.js +53 -5
  77. package/server/lib/log-management.js +57 -25
  78. package/server/lib/prefs-store.js +83 -0
  79. package/server/lib/project-prefs.js +94 -0
  80. package/server/lib/session-pin-store.js +67 -0
  81. package/server/routes/logs.js +5 -2
  82. package/server/routes/preferences.js +62 -27
  83. package/server/routes/project-meta.js +3 -2
  84. package/server/routes/project-prefs.js +132 -0
  85. package/server/routes/session-pin.js +41 -0
  86. package/server/server.js +21 -0
  87. package/dist/assets/App-CafPuJo7.js +0 -2
  88. package/dist/assets/Mobile-CA6pLj7l.js +0 -1
  89. package/dist/assets/classDiagram-6PBFFD2Q-BHoVlsUt.js +0 -1
  90. package/dist/assets/classDiagram-v2-HSJHXN6E-BHoVlsUt.js +0 -1
  91. package/dist/assets/clone-BdK-5KXX.js +0 -1
  92. package/dist/assets/index-BPWe3-MC.js +0 -2
  93. package/dist/assets/seqResourceLoaders-BZN9aWp8.js +0 -2
package/cli.js CHANGED
@@ -301,6 +301,19 @@ async function runProxyCommand(args) {
301
301
 
302
302
  // ensureHooks() extracted to server/lib/ensure-hooks.js (shared with electron/tab-worker.js)
303
303
 
304
+ // Print the `--pid` instance id + this project's previously-used ids in the startup banner,
305
+ // so the user can recall which id to reuse (with `-c`) next time. No-op without `--pid`.
306
+ function printInstanceBanner(serverMod) {
307
+ try {
308
+ const id = serverMod.getInstanceId && serverMod.getInstanceId();
309
+ if (!id) return;
310
+ console.log(` ${t('cli.instanceId', { id })}`);
311
+ const known = (serverMod.getKnownInstances && serverMod.getKnownInstances()) || [];
312
+ const others = known.filter((x) => x !== id);
313
+ if (others.length) console.log(` ${t('cli.instanceHistory', { ids: others.join(', ') })}`);
314
+ } catch { /* banner is best-effort */ }
315
+ }
316
+
304
317
  async function runCliMode(extraClaudeArgs = [], cwd, noOpen = false) {
305
318
  // 首先尝试 npm 版本(包括 nvm 安装),找不到再尝试 native 版本
306
319
  let claudePath = resolveNpmClaudePath();
@@ -422,6 +435,7 @@ async function runCliMode(extraClaudeArgs = [], cwd, noOpen = false) {
422
435
  if (_auth.password === '') console.error(` ${t('server.passwordEmptyWarn')}`);
423
436
  else console.log(` ${t('server.passwordActive', { password: _auth.password })}`);
424
437
  }
438
+ printInstanceBanner(serverMod);
425
439
 
426
440
  // 5. 注册退出处理(hardened:watchdog 5s 强退 + 连按 Ctrl+C 立退,
427
441
  // 防 Windows 上 ConPTY kill / IM teardown 挂住导致"Ctrl+C 完全无反应")
@@ -597,6 +611,7 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
597
611
  if (_auth.password === '') console.error(` ${t('server.passwordEmptyWarn')}`);
598
612
  else console.log(` ${t('server.passwordActive', { password: _auth.password })}`);
599
613
  }
614
+ printInstanceBanner(serverMod);
600
615
 
601
616
  // 注册退出处理(hardened,与 PTY 模式同款三层防御)
602
617
  const cleanup = createHardenedCleanup({
@@ -689,6 +704,29 @@ if (usePwdIdx !== -1) {
689
704
  args.splice(usePwdIdx, 1);
690
705
  }
691
706
 
707
+ // Extract --pid[=<name>] / --pid <name> — instance id for per-instance session-pin isolation.
708
+ // NB: "pid" here is an instance *id* LABEL (user-chosen, e.g. alpha/beta), NOT an OS process id —
709
+ // it only keys the session-pin file `.session-pin.<id>.json`; unrelated to process.pid.
710
+ // ccv-owned (NEVER forwarded to claude — an unknown --pid would otherwise crash claude): sets
711
+ // CCV_INSTANCE_ID and splices out. Sanitized to a filesystem-safe token (it becomes part of a
712
+ // `.session-pin.<id>.json` filename → guard against path traversal / invalid names).
713
+ const pidIdx = args.findIndex((a) => a === '--pid' || a.startsWith('--pid='));
714
+ if (pidIdx !== -1) {
715
+ const arg = args[pidIdx];
716
+ let rawVal;
717
+ if (arg.startsWith('--pid=')) {
718
+ rawVal = arg.slice('--pid='.length);
719
+ args.splice(pidIdx, 1);
720
+ } else {
721
+ rawVal = args[pidIdx + 1];
722
+ if (rawVal && !rawVal.startsWith('-')) args.splice(pidIdx, 2);
723
+ else { console.error(t('cli.pidInvalid')); process.exit(1); }
724
+ }
725
+ const sanitized = (rawVal || '').replace(/[^a-zA-Z0-9_\-.]/g, '_');
726
+ if (!sanitized) { console.error(t('cli.pidInvalid')); process.exit(1); }
727
+ process.env.CCV_INSTANCE_ID = sanitized;
728
+ }
729
+
692
730
  // Extract --im <platformId> — 启动一个独立常驻 IM worker:工作目录 IM_<id>/、绑 127.0.0.1、
693
731
  // skip-permissions、全局唯一锁。必须在动态 import 之前提取(runImMode 会在 import server.js 前设 env)。
694
732
  let imPlatform = null;