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.
- package/cli.js +38 -0
- package/dist/assets/App-DxhvxOv5.js +2 -0
- package/dist/assets/{MdxEditorPanel-CZz9w38A.js → MdxEditorPanel-Cvce-OZ1.js} +1 -1
- package/dist/assets/Mobile-eQkx6wDh.js +1 -0
- package/dist/assets/{_baseUniq-CKn860hN.js → _baseUniq-Bd-sKzQW.js} +1 -1
- package/dist/assets/{arc-C4-SwDEU.js → arc-D_6rT0rI.js} +1 -1
- package/dist/assets/{architectureDiagram-Q4EWVU46-zNU8vGgf.js → architectureDiagram-Q4EWVU46-ClH0N8bK.js} +1 -1
- package/dist/assets/{blockDiagram-DXYQGD6D-Blq7VyAY.js → blockDiagram-DXYQGD6D-VBVbHV93.js} +1 -1
- package/dist/assets/{c4Diagram-AHTNJAMY-CilEO7Pu.js → c4Diagram-AHTNJAMY-CHd3FVhr.js} +1 -1
- package/dist/assets/{channel-K9LDJtR8.js → channel-DtAIDDMS.js} +1 -1
- package/dist/assets/{chunk-4BX2VUAB-DB6nsrqZ.js → chunk-4BX2VUAB-ldBMt7Zz.js} +1 -1
- package/dist/assets/{chunk-4TB4RGXK-O_q60rT5.js → chunk-4TB4RGXK-BpaavRFi.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-D4PJNgqD.js → chunk-55IACEB6-CCQR_GqB.js} +1 -1
- package/dist/assets/{chunk-EDXVE4YY-T78XNZnN.js → chunk-EDXVE4YY-B94gGHJo.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-BMajr_WJ.js → chunk-FMBD7UC4-D2pvMCHW.js} +1 -1
- package/dist/assets/{chunk-OYMX7WX6-BLXJEzI0.js → chunk-OYMX7WX6-BC1K8PFw.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-C4ozCDaC.js → chunk-QZHKN3VN-BlKIHWPg.js} +1 -1
- package/dist/assets/{chunk-YZCP3GAM-xsMRpY5W.js → chunk-YZCP3GAM-CO46Dpuq.js} +1 -1
- package/dist/assets/classDiagram-6PBFFD2Q-BVr-1vS2.js +1 -0
- package/dist/assets/classDiagram-v2-HSJHXN6E-BVr-1vS2.js +1 -0
- package/dist/assets/clone-BLbDEtop.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BRm6sjuX.js → cose-bilkent-S5V4N54A-UW2sc3aR.js} +1 -1
- package/dist/assets/{dagre-KV5264BT-CapXy71H.js → dagre-KV5264BT-nawhI5CM.js} +1 -1
- package/dist/assets/{diagram-5BDNPKRD-CHaUXNHL.js → diagram-5BDNPKRD-BrLDz-85.js} +1 -1
- package/dist/assets/{diagram-G4DWMVQ6-YInXouX7.js → diagram-G4DWMVQ6-DDT86i03.js} +1 -1
- package/dist/assets/{diagram-MMDJMWI5-Bb9563xL.js → diagram-MMDJMWI5-BQMzmHLU.js} +1 -1
- package/dist/assets/{diagram-TYMM5635-BRYSGtnv.js → diagram-TYMM5635-BX7-PwHQ.js} +1 -1
- package/dist/assets/{erDiagram-SMLLAGMA-DiYsrHLg.js → erDiagram-SMLLAGMA-IwLVLNv0.js} +1 -1
- package/dist/assets/{flowDiagram-DWJPFMVM-CNZRDRgn.js → flowDiagram-DWJPFMVM-B8_X77WK.js} +1 -1
- package/dist/assets/{ganttDiagram-T4ZO3ILL-D9QY8NPb.js → ganttDiagram-T4ZO3ILL-DgeHpfKD.js} +1 -1
- package/dist/assets/{gitGraphDiagram-UUTBAWPF-R_yUkND4.js → gitGraphDiagram-UUTBAWPF-GImqd44T.js} +1 -1
- package/dist/assets/{graph-Bp7rzoPN.js → graph-BFNvFrIw.js} +1 -1
- package/dist/assets/{index-C2X1QxuP.js → index-CG43hSOO.js} +1 -1
- package/dist/assets/{index-skAVyRFx.js → index-CL43Q_T6.js} +1 -1
- package/dist/assets/index-Cw_igOCh.js +2 -0
- package/dist/assets/{index-5ATcFzQK.js → index-DH6neeAn.js} +1 -1
- package/dist/assets/{index-FjGT9Yrp.js → index-DYZfyIFS.js} +1 -1
- package/dist/assets/{index-CQm1mKh-.js → index-DqxWEMZG.js} +1 -1
- package/dist/assets/{index-B6uEt4Lm.js → index-SMWE-umF.js} +1 -1
- package/dist/assets/{index-D7TrcLgR.js → index-Zcwywgin.js} +1 -1
- package/dist/assets/{infoDiagram-42DDH7IO-D7SIo5T_.js → infoDiagram-42DDH7IO-DafQ4Zwr.js} +1 -1
- package/dist/assets/{ishikawaDiagram-UXIWVN3A-D1w7_hBw.js → ishikawaDiagram-UXIWVN3A-CsS59UI8.js} +1 -1
- package/dist/assets/{journeyDiagram-VCZTEJTY-D2ZcdIwf.js → journeyDiagram-VCZTEJTY-C8OZZC2d.js} +1 -1
- package/dist/assets/{jszip.min-BhyPZTcl.js → jszip.min-DWTs-GDW.js} +1 -1
- package/dist/assets/{kanban-definition-6JOO6SKY-BtXrBplk.js → kanban-definition-6JOO6SKY-BThryIIr.js} +1 -1
- package/dist/assets/{layout-l4xJ0EnV.js → layout-B2c4ocGM.js} +1 -1
- package/dist/assets/{linear-BFgL1PM1.js → linear-whLrOj6w.js} +1 -1
- package/dist/assets/{mermaid.core-CBJGZX-R.js → mermaid.core-CVxcxPSX.js} +2 -2
- package/dist/assets/{min-D7RE9cIU.js → min-DcYONCON.js} +1 -1
- package/dist/assets/{mindmap-definition-QFDTVHPH-B2jur7ry.js → mindmap-definition-QFDTVHPH-B7cxL7F7.js} +1 -1
- package/dist/assets/{pieDiagram-DEJITSTG-B249cLkg.js → pieDiagram-DEJITSTG-C5W3T882.js} +1 -1
- package/dist/assets/{quadrantDiagram-34T5L4WZ-CdZHycc8.js → quadrantDiagram-34T5L4WZ-DOZS2aRU.js} +1 -1
- package/dist/assets/{requirementDiagram-MS252O5E-BezSNLdn.js → requirementDiagram-MS252O5E-C_ZtyqTm.js} +1 -1
- package/dist/assets/{sankeyDiagram-XADWPNL6-C-RZnw4b.js → sankeyDiagram-XADWPNL6-DImjFcUx.js} +1 -1
- package/dist/assets/{seqResourceLoaders-R12WGANd.css → seqResourceLoaders-D6YenrBg.css} +1 -1
- package/dist/assets/seqResourceLoaders-sKqNZgOI.js +2 -0
- package/dist/assets/{sequenceDiagram-FGHM5R23-Fs0rcjkY.js → sequenceDiagram-FGHM5R23-BQwGiH06.js} +1 -1
- package/dist/assets/{stateDiagram-FHFEXIEX-CIcdyOPX.js → stateDiagram-FHFEXIEX-D8zGNMAW.js} +1 -1
- package/dist/assets/{stateDiagram-v2-QKLJ7IA2-BK2tAdaI.js → stateDiagram-v2-QKLJ7IA2-DY86eLVa.js} +1 -1
- package/dist/assets/{timeline-definition-GMOUNBTQ-BXg7hZyc.js → timeline-definition-GMOUNBTQ-LfDkNw95.js} +1 -1
- package/dist/assets/{vendor-antd-BSgMQtAG.js → vendor-antd-x2KtHa4R.js} +1 -1
- package/dist/assets/{vendor-codemirror-rm3PGybQ.js → vendor-codemirror-z6VSi4ab.js} +1 -1
- package/dist/assets/{vendor-mdxeditor-UIfRXbTk.js → vendor-mdxeditor-Zi3mchEB.js} +2 -2
- package/dist/assets/{vendor-qrcode-BiBG2gg5.js → vendor-qrcode-Dtu30dr9.js} +1 -1
- package/dist/assets/{vendor-virtuoso-DNNzcVZ0.js → vendor-virtuoso-BhHaLmft.js} +1 -1
- package/dist/assets/{vennDiagram-DHZGUBPP-IyEu5-2i.js → vennDiagram-DHZGUBPP-DRRBdcoR.js} +1 -1
- package/dist/assets/{wardley-RL74JXVD-BEUuSlqC.js → wardley-RL74JXVD-DtWPL3Ou.js} +1 -1
- package/dist/assets/{wardleyDiagram-NUSXRM2D-Cv-nt0oQ.js → wardleyDiagram-NUSXRM2D-CDGkjbzC.js} +1 -1
- package/dist/assets/{xychartDiagram-5P7HB3ND-B4QuJzX1.js → xychartDiagram-5P7HB3ND-drrUfgKK.js} +1 -1
- package/dist/index.html +4 -4
- package/package.json +4 -4
- package/server/i18n.js +62 -2
- package/server/interceptor.js +32 -9
- package/server/lib/auth.js +20 -5
- package/server/lib/instance-registry.js +57 -0
- package/server/lib/interceptor-core.js +53 -5
- package/server/lib/log-management.js +57 -25
- package/server/lib/prefs-store.js +83 -0
- package/server/lib/project-prefs.js +94 -0
- package/server/lib/session-pin-store.js +67 -0
- package/server/routes/logs.js +5 -2
- package/server/routes/preferences.js +62 -27
- package/server/routes/project-meta.js +3 -2
- package/server/routes/project-prefs.js +132 -0
- package/server/routes/session-pin.js +41 -0
- package/server/server.js +21 -0
- package/dist/assets/App-CafPuJo7.js +0 -2
- package/dist/assets/Mobile-CA6pLj7l.js +0 -1
- package/dist/assets/classDiagram-6PBFFD2Q-BHoVlsUt.js +0 -1
- package/dist/assets/classDiagram-v2-HSJHXN6E-BHoVlsUt.js +0 -1
- package/dist/assets/clone-BdK-5KXX.js +0 -1
- package/dist/assets/index-BPWe3-MC.js +0 -2
- 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;
|