cc-viewer 1.9.9 → 1.9.11

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 (140) hide show
  1. package/README.md +1 -1
  2. package/cli.js +4 -3
  3. package/dist/assets/App-D3swMyLc.js +2 -0
  4. package/dist/assets/{App-D06hBGII.css → App-DU5jmGrx.css} +1 -1
  5. package/dist/assets/{MdxEditorPanel-BJVD_bcU.js → MdxEditorPanel-DeyoQsxw.js} +1 -1
  6. package/dist/assets/Mobile-DvI_Kby2.js +1 -0
  7. package/dist/assets/ProxyStatsModal-CoI275by.js +1 -0
  8. package/dist/assets/{_baseUniq-CwQykUuc.js → _baseUniq-BvPjRimO.js} +1 -1
  9. package/dist/assets/{arc-EdUdBxtG.js → arc-BzZyqc6p.js} +1 -1
  10. package/dist/assets/{architectureDiagram-Q4EWVU46-DtBIdElY.js → architectureDiagram-Q4EWVU46-B1oszHzA.js} +1 -1
  11. package/dist/assets/{blockDiagram-DXYQGD6D-guNZIKkZ.js → blockDiagram-DXYQGD6D-Ndp4o_QB.js} +1 -1
  12. package/dist/assets/{c4Diagram-AHTNJAMY-xV5vB-Z9.js → c4Diagram-AHTNJAMY-DlDE-ALt.js} +1 -1
  13. package/dist/assets/{channel-DYEktNap.js → channel-BhXx9y6q.js} +1 -1
  14. package/dist/assets/{chunk-4BX2VUAB-ZTkItpvj.js → chunk-4BX2VUAB-CM-2e6q_.js} +1 -1
  15. package/dist/assets/{chunk-4TB4RGXK-dYIewyyR.js → chunk-4TB4RGXK-GWLkQKRO.js} +1 -1
  16. package/dist/assets/{chunk-55IACEB6-CSsPNgPX.js → chunk-55IACEB6-B6LOFqRZ.js} +1 -1
  17. package/dist/assets/{chunk-EDXVE4YY-CnMiuqzQ.js → chunk-EDXVE4YY-Ct3e09Ku.js} +1 -1
  18. package/dist/assets/{chunk-FMBD7UC4-CVpATPZ3.js → chunk-FMBD7UC4-DK-vXpZP.js} +1 -1
  19. package/dist/assets/{chunk-OYMX7WX6-Dpq4s8dW.js → chunk-OYMX7WX6-CWxZc_DU.js} +1 -1
  20. package/dist/assets/{chunk-QZHKN3VN-Bnojh6X6.js → chunk-QZHKN3VN-jp8ISHue.js} +1 -1
  21. package/dist/assets/{chunk-YZCP3GAM-BYqK4Dsa.js → chunk-YZCP3GAM-DtYet6WV.js} +1 -1
  22. package/dist/assets/classDiagram-6PBFFD2Q-C0dwAyuU.js +1 -0
  23. package/dist/assets/classDiagram-v2-HSJHXN6E-C0dwAyuU.js +1 -0
  24. package/dist/assets/clone-fiofFlrV.js +1 -0
  25. package/dist/assets/{cose-bilkent-S5V4N54A-OJ7mmWyV.js → cose-bilkent-S5V4N54A-lNC-slVX.js} +1 -1
  26. package/dist/assets/{dagre-KV5264BT-B1Kwd_Rk.js → dagre-KV5264BT-vm6U82qq.js} +1 -1
  27. package/dist/assets/{diagram-5BDNPKRD-D8qrw8sp.js → diagram-5BDNPKRD-Dq3FXh-U.js} +1 -1
  28. package/dist/assets/{diagram-G4DWMVQ6-ip-N4ho8.js → diagram-G4DWMVQ6-BxF85wcF.js} +1 -1
  29. package/dist/assets/{diagram-MMDJMWI5-2PZaskUF.js → diagram-MMDJMWI5-CFCTeMz0.js} +1 -1
  30. package/dist/assets/{diagram-TYMM5635-CeAOQUZP.js → diagram-TYMM5635-Bui5Azdg.js} +1 -1
  31. package/dist/assets/{erDiagram-SMLLAGMA-BCBaEYEb.js → erDiagram-SMLLAGMA-DrpUO1Kb.js} +1 -1
  32. package/dist/assets/{flowDiagram-DWJPFMVM-CsGyIqcX.js → flowDiagram-DWJPFMVM-Bb3amxiK.js} +1 -1
  33. package/dist/assets/{ganttDiagram-T4ZO3ILL-COsj3FZ-.js → ganttDiagram-T4ZO3ILL-BRwCFM3C.js} +1 -1
  34. package/dist/assets/{gitGraphDiagram-UUTBAWPF-DvQVQGJG.js → gitGraphDiagram-UUTBAWPF-DVXbBwhs.js} +1 -1
  35. package/dist/assets/{graph-BSB9fDSP.js → graph-Dh22wYWs.js} +1 -1
  36. package/dist/assets/index-BRW8dfBU.js +2 -0
  37. package/dist/assets/{index-BRw4Iz2O.js → index-BwZB7UwN.js} +1 -1
  38. package/dist/assets/{index-eM2ih5n7.js → index-CQ1Nswa3.js} +1 -1
  39. package/dist/assets/{index-BuVComcY.js → index-CfFFgxxf.js} +1 -1
  40. package/dist/assets/{index-DKufsAzx.js → index-Cfm4N4ao.js} +1 -1
  41. package/dist/assets/{index-CNNAYjkF.js → index-UlO7Q5dX.js} +1 -1
  42. package/dist/assets/{index-DXBfwPYD.js → index-e8wejtj_.js} +1 -1
  43. package/dist/assets/{index-Bo-12bug.js → index-xZXOwglE.js} +1 -1
  44. package/dist/assets/{infoDiagram-42DDH7IO-eNucS4iW.js → infoDiagram-42DDH7IO-cQPbF7Q6.js} +1 -1
  45. package/dist/assets/{ishikawaDiagram-UXIWVN3A-Dxxj-gUX.js → ishikawaDiagram-UXIWVN3A-cp-ir90Y.js} +1 -1
  46. package/dist/assets/{journeyDiagram-VCZTEJTY-yJJzVEBb.js → journeyDiagram-VCZTEJTY-aoMcyNLC.js} +1 -1
  47. package/dist/assets/{jszip.min-ByI0ds5u.js → jszip.min-C7BBsGL5.js} +1 -1
  48. package/dist/assets/{kanban-definition-6JOO6SKY-2rfTi2zw.js → kanban-definition-6JOO6SKY-Cugr0o0f.js} +1 -1
  49. package/dist/assets/{layout-DTmHj0Wm.js → layout-CL0eiocE.js} +1 -1
  50. package/dist/assets/{linear-BOA3a9FE.js → linear-D6EJvwNs.js} +1 -1
  51. package/dist/assets/{mermaid.core-5H-NR79H.js → mermaid.core-CNYcCP19.js} +2 -2
  52. package/dist/assets/{min-CpjFTEec.js → min-dFBWKmZ_.js} +1 -1
  53. package/dist/assets/{mindmap-definition-QFDTVHPH-B8KCjFgB.js → mindmap-definition-QFDTVHPH-4fbr7E2n.js} +1 -1
  54. package/dist/assets/{pieDiagram-DEJITSTG-BARy96g5.js → pieDiagram-DEJITSTG-UHWzU_JW.js} +1 -1
  55. package/dist/assets/{quadrantDiagram-34T5L4WZ-DYoTapuI.js → quadrantDiagram-34T5L4WZ-e87bZkAb.js} +1 -1
  56. package/dist/assets/{requirementDiagram-MS252O5E-EeANLLK2.js → requirementDiagram-MS252O5E-l_97YNSi.js} +1 -1
  57. package/dist/assets/{sankeyDiagram-XADWPNL6-DmQ-YVPj.js → sankeyDiagram-XADWPNL6-D3JFnltO.js} +1 -1
  58. package/dist/assets/seqResourceLoaders-8kfGbCYo.js +2 -0
  59. package/dist/assets/seqResourceLoaders-C2YGihCH.css +41 -0
  60. package/dist/assets/{sequenceDiagram-FGHM5R23-SZtW0rYC.js → sequenceDiagram-FGHM5R23-5jDKcsRZ.js} +1 -1
  61. package/dist/assets/{stateDiagram-FHFEXIEX-CEygsIld.js → stateDiagram-FHFEXIEX-D5_gBKn8.js} +1 -1
  62. package/dist/assets/{stateDiagram-v2-QKLJ7IA2-BU1XPhBe.js → stateDiagram-v2-QKLJ7IA2-BP5uQ5EH.js} +1 -1
  63. package/dist/assets/{timeline-definition-GMOUNBTQ-DhPBaQBt.js → timeline-definition-GMOUNBTQ-7IVQRwK1.js} +1 -1
  64. package/dist/assets/vendor-antd-CfuxfYfy.js +17 -0
  65. package/dist/assets/vendor-codemirror-C4Jn4TTc.js +1 -0
  66. package/dist/assets/{vendor-mdxeditor-Cz09a1_I.js → vendor-mdxeditor-BreKt5Hd.js} +2 -2
  67. package/dist/assets/{vendor-qrcode-qbbntD6-.js → vendor-qrcode-CutTqXgh.js} +1 -1
  68. package/dist/assets/{vendor-virtuoso-Sk8fQ4Hx.js → vendor-virtuoso-Cc9ovCDf.js} +1 -1
  69. package/dist/assets/{vennDiagram-DHZGUBPP-NniTHxDw.js → vennDiagram-DHZGUBPP-D6qzGquN.js} +1 -1
  70. package/dist/assets/{wardley-RL74JXVD-D9SNOrDw.js → wardley-RL74JXVD-DzAFqZmY.js} +1 -1
  71. package/dist/assets/{wardleyDiagram-NUSXRM2D-DvHXKNza.js → wardleyDiagram-NUSXRM2D-CImP9kv8.js} +1 -1
  72. package/dist/assets/{xychartDiagram-5P7HB3ND-CaiwPTQB.js → xychartDiagram-5P7HB3ND-Co45rRaM.js} +1 -1
  73. package/dist/index.html +4 -4
  74. package/package.json +1 -1
  75. package/plugins/README.md +9 -1
  76. package/server/interceptor.js +1 -1
  77. package/server/lib/builtin-model-prompts.js +1 -1
  78. package/server/lib/chat-queue.js +1 -1
  79. package/server/lib/credential-access.js +1 -1
  80. package/server/lib/credential-migrate.js +1 -1
  81. package/server/lib/error-report.js +26 -0
  82. package/server/lib/json-store.js +1 -1
  83. package/server/lib/launch-config.js +1 -1
  84. package/server/lib/log-watcher.js +1 -1
  85. package/server/lib/plugin-host.mjs +198 -0
  86. package/server/lib/plugin-loader.js +346 -90
  87. package/server/lib/plugin-manager.js +46 -2
  88. package/server/lib/plugin-manifest.js +329 -0
  89. package/server/lib/plugin-panels.js +183 -0
  90. package/server/lib/plugin-proxy.js +408 -0
  91. package/server/lib/plugin-runtime.js +775 -0
  92. package/server/lib/plugin-service-manager.js +463 -0
  93. package/server/lib/proxy/proxy-retry.js +1 -1
  94. package/server/lib/proxy/proxy-stats.js +1 -1
  95. package/server/lib/resume-watchdog.js +1 -1
  96. package/server/lib/same-origin.js +13 -3
  97. package/server/lib/sdk-manager.js +16 -9
  98. package/server/lib/sdk-session-index.js +1 -1
  99. package/server/lib/stats-worker.js +1 -1
  100. package/server/lib/system-prompt-files.js +1 -1
  101. package/server/lib/system-prompt-live.js +1 -1
  102. package/server/lib/system-prompt-snapshots.js +1 -1
  103. package/server/lib/v2/adapter.js +1 -1
  104. package/server/lib/v2/convert.js +1 -1
  105. package/server/lib/v2/jsonl-read.js +1 -1
  106. package/server/lib/v2/live-feed.js +1 -1
  107. package/server/lib/v2/meta-rows.js +1 -1
  108. package/server/lib/v2/resume-list.js +1 -1
  109. package/server/lib/v2/session-list.js +1 -1
  110. package/server/lib/v2/session-owner.js +1 -1
  111. package/server/lib/v2/v2-writer.js +1 -1
  112. package/server/lib/wire-compress.js +1 -1
  113. package/server/lib/ws-mux.js +1 -1
  114. package/server/proxy.js +1 -1
  115. package/server/pty-manager.js +1 -1
  116. package/server/routes/ask-perm.js +1 -1
  117. package/server/routes/events.js +1 -1
  118. package/server/routes/expert.js +1 -1
  119. package/server/routes/files-content.js +1 -1
  120. package/server/routes/files-fs.js +4 -2
  121. package/server/routes/misc.js +11 -0
  122. package/server/routes/plugin-services.js +104 -0
  123. package/server/routes/plugins.js +145 -17
  124. package/server/routes/preferences.js +1 -1
  125. package/server/routes/resume.js +1 -1
  126. package/server/routes/sdk-context.js +1 -1
  127. package/server/routes/sdk-mcp-status.js +1 -1
  128. package/server/routes/workspaces.js +1 -1
  129. package/server/server.js +328 -171
  130. package/dist/assets/App-CLteNB83.js +0 -2
  131. package/dist/assets/Mobile-CJCQf3MQ.js +0 -1
  132. package/dist/assets/ProxyStatsModal-B5ccoOPy.js +0 -1
  133. package/dist/assets/classDiagram-6PBFFD2Q-ClGF33bF.js +0 -1
  134. package/dist/assets/classDiagram-v2-HSJHXN6E-ClGF33bF.js +0 -1
  135. package/dist/assets/clone-CFj55h49.js +0 -1
  136. package/dist/assets/index-CqX5TkEL.js +0 -2
  137. package/dist/assets/seqResourceLoaders-7lsgbvGa.js +0 -2
  138. package/dist/assets/seqResourceLoaders-C0cU2e1o.css +0 -41
  139. package/dist/assets/vendor-antd-CS_S2mBN.js +0 -17
  140. package/dist/assets/vendor-codemirror-B5l-VbBO.js +0 -1
package/README.md CHANGED
@@ -202,7 +202,7 @@ cc-viewer works in a single container or on a cloud host where you reach the UI
202
202
  * **Plaintext secrets stay on the host.** The IM/DingTalk status endpoint tells a remote admin the process/connection state (so the UI can show "connected"), but plaintext app secrets are only ever returned to a loopback (`127.0.0.1`) client.
203
203
  * **Internal machine bridges stay loopback-locked.** The hook/notify channels the local `claude` process uses (turn-end, session-start, task-event, stream chunks) still require a loopback peer plus the per-boot internal token — remote admins cannot reach them.
204
204
  * **IM workers stay on `127.0.0.1`.** Each DingTalk/IM worker binds loopback inside the container; the main process probes it over `127.0.0.1`. In a single container this needs no extra setup.
205
- * **Security recommendations for a public/cloud deployment:** enable password login (or keep the random `?token=` URL secret), and put the instance behind a reverse proxy that terminates HTTPS. Persist the log/settings directory by mounting a volume at the path pointed to by `CCV_LOG_DIR` (default `~/.claude/cc-viewer`) so your preferences, auth password, and IM credentials survive container restarts.
205
+ * **Security recommendations for a public/cloud deployment:** enable password login (or keep the random `?token=` URL secret), and put the instance behind a reverse proxy that terminates HTTPS. The proxy must preserve the original `Host` header (and should set `X-Forwarded-Proto`): WebSocket upgrades and management write endpoints validate the browser `Origin` against `Host`, so a proxy that rewrites either header will get those requests rejected. Persist the log/settings directory by mounting a volume at the path pointed to by `CCV_LOG_DIR` (default `~/.claude/cc-viewer`) so your preferences, auth password, and IM credentials survive container restarts.
206
206
  * **Reverse-proxy note:** access control is based on the socket peer address (`X-Forwarded-For` is deliberately not trusted, to prevent spoofing). This does not affect remote admins — they authenticate by token/password, not by IP. It only means "same-container" detection relies on a real loopback connection.
207
207
 
208
208
  * **Design doc:** how local config maps to a cloud database and the cloud-sync model (cloud-authoritative, local read-only fallback) is described in [Config Convergence & Cloud-Sync Advisory](./docs/config-cloud-sync.md) ([中文](./docs/config-cloud-sync.zh.md)). This is a proposal, not yet implemented.
package/cli.js CHANGED
@@ -868,9 +868,10 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
868
868
  try { serverMod.broadcastTurnEnd(sessionId, ts, null, cwd); }
869
869
  catch (err) { console.warn('[sdk] broadcastTurnEnd threw:', err?.message); }
870
870
  },
871
- // query 级失败(spawn/protocol/iterator)推到 Web UI toast —— 此前只有 console.error,
872
- // 死掉的 query 在 UI 上看与挂起无异。
873
- onQueryError: (message) => serverMod.broadcastWsMessage({ type: 'sdk-error', message }),
871
+ // Query-level failure (spawn/protocol/iterator) → Web UI. The frame feeds a
872
+ // persistent dialogue row plus a toast; meta (cwd/sessionId/instanceKey, filled by
873
+ // the sdk-manager session closure) routes it to the owning workspace's viewers.
874
+ onQueryError: (message, meta) => serverMod.broadcastWsMessage({ type: 'sdk-error', message, ...(meta || {}) }),
874
875
  });
875
876
 
876
877
  // Per-cwd multi-session (2026-10-12): hand the boot launch config (proxy env, model,