chainlesschain 0.157.3 → 0.157.5

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 (138) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/AIOps-Bfzpnnlg.css +1 -0
  4. package/src/assets/web-panel/assets/AIOps-CDadp-Le.js +1 -0
  5. package/src/assets/web-panel/assets/{ActionButton-mV_H2ZBW.js → ActionButton-DiRyhKar.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-GW0Daj2c.js → Analytics-C-wKOKnM.js} +1 -1
  7. package/src/assets/web-panel/assets/AppLayout-Byg_RLDB.js +1 -0
  8. package/src/assets/web-panel/assets/AppLayout-Gkhl4thM.css +1 -0
  9. package/src/assets/web-panel/assets/Backup-Bk1_Tsej.js +1 -0
  10. package/src/assets/web-panel/assets/{BaseInput-BAFrPrGk.js → BaseInput-BZ74CVZs.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-D6KtPMGk.js → Chat-DZ__6l_m.js} +2 -2
  12. package/src/assets/web-panel/assets/{Checkbox-xnGUwzCJ.js → Checkbox-CZEC61kY.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-BVK4mypO.js → Col-CNBJWyWl.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-CreqDQST.js → Community-DGQcJUCL.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-HV2KpdeM.js → Compact-C8l08DTy.js} +1 -1
  16. package/src/assets/web-panel/assets/Compliance-CKxw6vIq.css +1 -0
  17. package/src/assets/web-panel/assets/Compliance-DYB_MbmT.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-BIhVZQdQ.js → Cowork-DV3JWBAJ.js} +3 -3
  19. package/src/assets/web-panel/assets/{Cron-ZYoqq3dP.js → Cron-DGQz9J9u.js} +1 -1
  20. package/src/assets/web-panel/assets/Crosschain-CIWQ4dI-.js +1 -0
  21. package/src/assets/web-panel/assets/Crosschain-DThGgQk8.css +1 -0
  22. package/src/assets/web-panel/assets/{DID-Dzs7_3Ix.js → DID-CKd_c4PX.js} +1 -1
  23. package/src/assets/web-panel/assets/{Dashboard-DpWD0jBe.js → Dashboard-CtHAdcCn.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-BhJQ7ase.js → Dropdown-a19vPJmP.js} +1 -1
  25. package/src/assets/web-panel/assets/{FormItemContext-D0BWmaoR.js → FormItemContext-B5ayZ9zK.js} +1 -1
  26. package/src/assets/web-panel/assets/{Git-bXqWPH2a.js → Git-CMTjLD8-.js} +1 -1
  27. package/src/assets/web-panel/assets/{KnowledgeGraph-CHwQzfXh.js → KnowledgeGraph-CO-ivdDK.js} +1 -1
  28. package/src/assets/web-panel/assets/{Logs-pjiNzTno.js → Logs-sCDOUYuS.js} +1 -1
  29. package/src/assets/web-panel/assets/{Marketplace-Dyfg9_ug.js → Marketplace-Ch5Xd0CC.js} +1 -1
  30. package/src/assets/web-panel/assets/{McpTools-Bltof0JN.js → McpTools-CqnNMG6W.js} +2 -2
  31. package/src/assets/web-panel/assets/{Memory-ClxOtILG.js → Memory-D_O87sbR.js} +2 -2
  32. package/src/assets/web-panel/assets/{Notes-DkAhw9_e.js → Notes-Bh7KP6cl.js} +2 -2
  33. package/src/assets/web-panel/assets/{Organization-DddzeMd6.js → Organization-CoonBV6s.js} +4 -4
  34. package/src/assets/web-panel/assets/{Overflow-CZY_3usr.js → Overflow-_g4V_Ju_.js} +1 -1
  35. package/src/assets/web-panel/assets/{OverrideContext-D01nzvZl.js → OverrideContext-DEW2m7K6.js} +1 -1
  36. package/src/assets/web-panel/assets/{P2P-Buux_Lgw.js → P2P-DypZ1ege.js} +2 -2
  37. package/src/assets/web-panel/assets/{Permissions-Cqn9Jeuf.js → Permissions-BgZSIvcr.js} +3 -3
  38. package/src/assets/web-panel/assets/{Portal-CARXcQZJ.js → Portal-CHsntPCQ.js} +1 -1
  39. package/src/assets/web-panel/assets/{ProjectSettings-BQPrAum5.js → ProjectSettings-juTiV4PS.js} +1 -1
  40. package/src/assets/web-panel/assets/{Projects-BEbAmoTM.js → Projects-DmPNnqOJ.js} +2 -2
  41. package/src/assets/web-panel/assets/{Providers-CYeQV4vn.js → Providers-BJsAfkjy.js} +1 -1
  42. package/src/assets/web-panel/assets/{Row-DfL3PHtV.js → Row-DrdDP98g.js} +1 -1
  43. package/src/assets/web-panel/assets/RssFeed-dYFn7J6x.js +3 -0
  44. package/src/assets/web-panel/assets/{Security-Dvn_envm.js → Security-kxRpCiKJ.js} +2 -2
  45. package/src/assets/web-panel/assets/Services-BP4AjEx_.js +2 -0
  46. package/src/assets/web-panel/assets/{Skeleton-DZIDyklE.js → Skeleton-Cpa-ty0l.js} +1 -1
  47. package/src/assets/web-panel/assets/{Skills-BkPNofwG.js → Skills-CE8wG-A0.js} +1 -1
  48. package/src/assets/web-panel/assets/{Tasks-h03UxSCR.js → Tasks-DzX0K-kB.js} +1 -1
  49. package/src/assets/web-panel/assets/Templates-Bku01czW.js +1 -0
  50. package/src/assets/web-panel/assets/{Trigger-CyX3zvNU.js → Trigger-CoAAYYBt.js} +1 -1
  51. package/src/assets/web-panel/assets/{VideoEditing-CJHLV59r.js → VideoEditing-CkgIUHZZ.js} +1 -1
  52. package/src/assets/web-panel/assets/{Wallet-GwRmIUiB.js → Wallet-CgA-lpLW.js} +4 -4
  53. package/src/assets/web-panel/assets/{WebAuthn-CZ_q_1nf.js → WebAuthn-CY41bHIQ.js} +2 -2
  54. package/src/assets/web-panel/assets/WorkflowEditor-CE7u19Od.js +1 -0
  55. package/src/assets/web-panel/assets/{chat-DK35BNpC.js → chat-CVn-r3oV.js} +1 -1
  56. package/src/assets/web-panel/assets/{collapseMotion-D_K_bBA2.js → collapseMotion-D3P4mRvK.js} +1 -1
  57. package/src/assets/web-panel/assets/{colors-ZsSPXEpx.js → colors-CIKN8L8n.js} +1 -1
  58. package/src/assets/web-panel/assets/{compact-item-CwFgypMe.js → compact-item-CrBQCz3V.js} +1 -1
  59. package/src/assets/web-panel/assets/{createContext-CXDfCmTY.js → createContext-D1QXMs7U.js} +1 -1
  60. package/src/assets/web-panel/assets/{hasIn-CuA5Qv5d.js → hasIn-tTUZknBU.js} +1 -1
  61. package/src/assets/web-panel/assets/icons-Jk30QO6-.js +57 -0
  62. package/src/assets/web-panel/assets/{index-nOYPI6Gi.js → index-8nKSWBcm.js} +2 -2
  63. package/src/assets/web-panel/assets/index-B0z2XooE.js +1 -0
  64. package/src/assets/web-panel/assets/{index-GHDuYmBz.js → index-BDjky3rX.js} +2 -2
  65. package/src/assets/web-panel/assets/{index-BZeiwAUS.js → index-BIPWZw8B.js} +1 -1
  66. package/src/assets/web-panel/assets/{index-D_3tdh8I.js → index-BKHWN2tE.js} +2 -2
  67. package/src/assets/web-panel/assets/{index-Dj1YuMWN.js → index-BX3rXaHn.js} +1 -1
  68. package/src/assets/web-panel/assets/{index-Bf6QSnBq.js → index-Bi_6FYU5.js} +1 -1
  69. package/src/assets/web-panel/assets/{index-wnbQQPT7.js → index-BqDn_7rp.js} +3 -3
  70. package/src/assets/web-panel/assets/index-BwiOpWc5.js +1 -0
  71. package/src/assets/web-panel/assets/index-BzqrE9NR.js +3 -0
  72. package/src/assets/web-panel/assets/{index-ZeKq1gO8.js → index-CNlblI8D.js} +2 -2
  73. package/src/assets/web-panel/assets/{index-nGWg45HB.js → index-COySbArp.js} +1 -1
  74. package/src/assets/web-panel/assets/{index-DaMGhrmy.js → index-CP2liZYV.js} +3 -3
  75. package/src/assets/web-panel/assets/{index-0BsRZQ70.js → index-CROBuVak.js} +2 -2
  76. package/src/assets/web-panel/assets/{index-CU5HVlet.js → index-CYAkBhrQ.js} +1 -1
  77. package/src/assets/web-panel/assets/{index-Bi6eldWX.js → index-CclY9-28.js} +1 -1
  78. package/src/assets/web-panel/assets/{index-Bdz6ZN2n.js → index-ClrnG3mQ.js} +2 -2
  79. package/src/assets/web-panel/assets/{index-Bzai2qqL.js → index-CqCf9te0.js} +3 -3
  80. package/src/assets/web-panel/assets/index-CwdYxBVA.js +1 -0
  81. package/src/assets/web-panel/assets/{index-DOlW8HfH.js → index-D06WGcI3.js} +1 -1
  82. package/src/assets/web-panel/assets/{index-mzATEmde.js → index-D7l8Uzgm.js} +2 -2
  83. package/src/assets/web-panel/assets/{index-CiyAMvep.js → index-DVLZZQ5c.js} +2 -2
  84. package/src/assets/web-panel/assets/{index-DnoDj1K9.js → index-DVRzAjWk.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-CotI08pv.js → index-DZkS3V1X.js} +1 -1
  86. package/src/assets/web-panel/assets/index-DhUBtkRD.js +1 -0
  87. package/src/assets/web-panel/assets/{index-CW0BgiQ7.js → index-DtayEBt0.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-DGV4y7Ok.js → index-DvmvdIT_.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CyZXgmzB.js → index-Dz_iVHtC.js} +2 -2
  90. package/src/assets/web-panel/assets/index-MzZGrA5i.js +36 -0
  91. package/src/assets/web-panel/assets/index-V6QCm9nt.js +1 -0
  92. package/src/assets/web-panel/assets/{index-Ck5LhFMy.js → index-X4HbBQbI.js} +3 -3
  93. package/src/assets/web-panel/assets/{index-BrBmPm9P.js → index-_3pzrgIO.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DI6cGrS9.js → index-cfS19Vfx.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BTmBSfDP.js → index-d8uIZmCQ.js} +2 -2
  96. package/src/assets/web-panel/assets/index-hU5rQLDQ.js +1 -0
  97. package/src/assets/web-panel/assets/{index-DPLo4dr_.js → index-p1nJ70IV.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-7fYLkWFb.js → index-vkHwRzrk.js} +3 -3
  99. package/src/assets/web-panel/assets/{index-BoAaMGTC.js → index-zKNadN9-.js} +4 -4
  100. package/src/assets/web-panel/assets/{initDefaultProps-DFvrAEOp.js → initDefaultProps-Dl1s0-DH.js} +1 -1
  101. package/src/assets/web-panel/assets/{motion-Cfd1jQ_B.js → motion-Bo_wsn2G.js} +1 -1
  102. package/src/assets/web-panel/assets/{move-CtwIMT78.js → move-DkSBFThb.js} +1 -1
  103. package/src/assets/web-panel/assets/{omit-DsID1k1x.js → omit-D_kxdSL6.js} +1 -1
  104. package/src/assets/web-panel/assets/{pickAttrs-hmUpaGeX.js → pickAttrs-B4jAAmTy.js} +1 -1
  105. package/src/assets/web-panel/assets/{placementArrow-Mcm6Nlo6.js → placementArrow-BQfy7E_I.js} +1 -1
  106. package/src/assets/web-panel/assets/{responsiveObserve-CARlpUva.js → responsiveObserve-DBrNeOOt.js} +1 -1
  107. package/src/assets/web-panel/assets/{slide-CoE_bmVd.js → slide-DSKBMx3Q.js} +1 -1
  108. package/src/assets/web-panel/assets/{statusUtils-DXv0eID1.js → statusUtils-BdGzd5fx.js} +1 -1
  109. package/src/assets/web-panel/assets/{styleChecker-KAcyElmo.js → styleChecker-Ckbe4as7.js} +1 -1
  110. package/src/assets/web-panel/assets/{transition-CzoVM28y.js → transition-6LOZvE9a.js} +1 -1
  111. package/src/assets/web-panel/assets/{useConfigInject-D5hyBDTd.js → useConfigInject-BfCzqqat.js} +2 -2
  112. package/src/assets/web-panel/assets/useFlexGapSupport-C8nzL1g7.js +1 -0
  113. package/src/assets/web-panel/assets/{useMergedState-BUoJnBiL.js → useMergedState-DbHXwBgv.js} +1 -1
  114. package/src/assets/web-panel/assets/{useRefs-XiBYSxE0.js → useRefs-DRyTVik7.js} +1 -1
  115. package/src/assets/web-panel/assets/{useState-E1W-GoWe.js → useState-DoAhV80c.js} +1 -1
  116. package/src/assets/web-panel/assets/{vendor-xFZ6Jlpw.js → vendor-BVetwVfk.js} +1 -1
  117. package/src/assets/web-panel/assets/{vnode-DUk2z77k.js → vnode-kNIbBJfF.js} +1 -1
  118. package/src/assets/web-panel/assets/{ws-Dg01CdRG.js → ws-Bv7YH0VB.js} +1 -1
  119. package/src/assets/web-panel/assets/{zoom-BTYQHwzp.js → zoom-DafJyqPh.js} +1 -1
  120. package/src/assets/web-panel/index.html +3 -3
  121. package/src/commands/db.js +306 -150
  122. package/src/assets/web-panel/assets/AppLayout-CILzvZ4I.css +0 -1
  123. package/src/assets/web-panel/assets/AppLayout-DznHOSmD.js +0 -1
  124. package/src/assets/web-panel/assets/Backup-BP13XrWC.js +0 -1
  125. package/src/assets/web-panel/assets/RssFeed-DI5F5RaQ.js +0 -3
  126. package/src/assets/web-panel/assets/Services-CuaENMDT.js +0 -2
  127. package/src/assets/web-panel/assets/Templates-B1OanGmU.js +0 -1
  128. package/src/assets/web-panel/assets/WorkflowEditor--0SM6yv0.js +0 -1
  129. package/src/assets/web-panel/assets/icons-DuLXY5ve.js +0 -57
  130. package/src/assets/web-panel/assets/index--02skmxm.js +0 -1
  131. package/src/assets/web-panel/assets/index-B1aCZ8tU.js +0 -1
  132. package/src/assets/web-panel/assets/index-BYpWUsV7.js +0 -1
  133. package/src/assets/web-panel/assets/index-CP6IHxV9.js +0 -1
  134. package/src/assets/web-panel/assets/index-CzEyEx5i.js +0 -1
  135. package/src/assets/web-panel/assets/index-D8XA7siu.js +0 -36
  136. package/src/assets/web-panel/assets/index-DILaZYt9.js +0 -3
  137. package/src/assets/web-panel/assets/index-psUMSTuC.js +0 -1
  138. package/src/assets/web-panel/assets/useFlexGapSupport-P_d7Gj-x.js +0 -1
@@ -1 +1 @@
1
- import{k as U,r as b,j as B}from"./vendor-xFZ6Jlpw.js";let F=0;const m=()=>`wp-${++F}`,O=new Set;function y(e,n={},r={}){return{type:e,kind:r.kind||"server",sessionId:r.sessionId||n.sessionId||null,timestamp:r.timestamp||Date.now(),payload:n}}function Q(e){const n=e?.type,r=e?.payload||{};switch(n){case"task:notification":return y("task:notification",{task:e.task||r.task},{kind:"server"});case"session-created":case"session.started":return y("session:start",{sessionId:e.sessionId||r.sessionId,sessionType:e.sessionType||r.sessionType||null,record:e.record||r.record||{id:e.sessionId||r.sessionId,type:e.sessionType||r.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||r.sessionId});case"session-resumed":case"session.resumed":{const c=e.sessionId||r.sessionId,i=e.history||r.history||[];return y("session:resume",{sessionId:c,history:i,historyCount:Array.isArray(i)?i.length:0,record:e.record||r.record||{id:c,type:null,status:"resumed",history:i,messageCount:Array.isArray(i)?i.length:0}},{kind:"server",sessionId:c})}case"worktree-diff":case"worktree.diff":return y("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||r.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return y("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,conflicts:e.conflicts||r.conflicts||[],previewEntrypoints:e.previewEntrypoints||r.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return y("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||r.summary||{}},{kind:"server"});default:return null}}function W(e,n=null){O.forEach(r=>r(e,n||e))}function K(e){if(!e)return null;const n=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||n.id,type:e.type||n.type,provider:e.provider||n.provider,model:e.model||n.model,projectRoot:e.projectRoot||n.projectRoot,messageCount:e.messageCount??n.messageCount??0,status:e.status||n.status||null,record:n}}const V=U("ws",()=>{const e=b(null),n=b("disconnected"),r=b(null),c=new Map,i=new Map;let l=null,h=1e3,k=!1;const f=window.__CC_CONFIG__||{},P=B(()=>`ws://${f.wsHost||"127.0.0.1"}:${f.wsPort||18800}`);function S(){if(!(e.value?.readyState===WebSocket.OPEN||e.value?.readyState===WebSocket.CONNECTING)){clearTimeout(l),l=null,k=!1,n.value="connecting",r.value=null;try{const t=new WebSocket(P.value);e.value=t,t.onopen=()=>{h=1e3,f.wsToken?d({type:"auth",id:m(),token:f.wsToken}).then(()=>{n.value="connected"}).catch(()=>{n.value="connected"}):n.value="connected"},t.onmessage=s=>{let o;try{o=JSON.parse(s.data)}catch{return}q(o)},t.onerror=()=>{r.value="WebSocket error",n.value="error"},t.onclose=()=>{if(n.value="disconnected",e.value=null,c.forEach(({reject:s})=>s(new Error("WebSocket closed"))),c.clear(),k){k=!1,l=null;return}l=setTimeout(()=>{h=Math.min(h*2,3e4),l=null,S()},h)}}catch(t){n.value="error",r.value=t.message}}}function x(){clearTimeout(l),l=null,k=!0,e.value?.close(),e.value=null,n.value="disconnected"}function N(t){if(!t.version&&!t.payload)return t;const s=t.payload||{};return{...t,...s,type:t.type,sessionId:t.sessionId||s.sessionId||null}}function q(t){const{type:s}=t,o=t.requestId||t.id;let u=!1;if(o&&c.has(o)){const{resolve:w,reject:R,timeout:I}=c.get(o);clearTimeout(I),c.delete(o),u=!0;const C=N(t);C.id=o,s==="error"?R(new Error(C.message||"Unknown error")):w(C)}const a=t.sessionId||t.payload&&t.payload.sessionId||null;if(a&&i.has(a)){const w=N(t);i.get(a).forEach(I=>I(w))}E.forEach(w=>w(t));const v=Q(t);return v&&W(v,t),u}const E=new Set;function J(t){return E.add(t),()=>E.delete(t)}function j(t){return O.add(t),()=>O.delete(t)}function A(t,s){return i.has(t)||i.set(t,new Set),i.get(t).add(s),()=>{i.get(t)?.delete(s),i.get(t)?.size===0&&i.delete(t)}}function d(t,s=15e3){return new Promise((o,u)=>{if(e.value?.readyState!==WebSocket.OPEN){u(new Error("WebSocket not connected"));return}const a=t.id||m(),v=setTimeout(()=>{c.delete(a),u(new Error("Request timeout"))},s);c.set(a,{resolve:o,reject:u,timeout:v}),e.value.send(JSON.stringify({...t,id:a}))})}function p(t=8e3){return n.value==="connected"?Promise.resolve():new Promise((s,o)=>{const u=Date.now()+t,a=()=>{if(n.value==="connected")return s();if(n.value==="error"||Date.now()>=u)return o(new Error(`WS not ready: ${n.value}`));setTimeout(a,150)};n.value==="disconnected"&&S(),a()})}async function T(t,s=3e4){await p(8e3);const o=await d({type:"execute",command:t},s),u=o.output??o.stdout??"",a=o.stderr??"";return{output:u||a,exitCode:o.exitCode??0}}async function M(t,s=3e4){const{output:o,exitCode:u}=await T(t,s);if(u!==0)throw new Error(`Command failed: ${o}`);try{return JSON.parse(o.trim())}catch{const a=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(a)return JSON.parse(a[0]);throw new Error(`Invalid JSON output: ${o.slice(0,200)}`)}}async function _(t="chat",s=null,o={}){await p(8e3);const a={type:"session-create",id:m(),sessionType:t,projectRoot:s||f.projectRoot||null};return o.systemPromptExtension&&(a.systemPromptExtension=o.systemPromptExtension),Array.isArray(o.shellPolicyOverrides)&&o.shellPolicyOverrides.length&&(a.shellPolicyOverrides=o.shellPolicyOverrides),(await d(a)).sessionId}function $(t,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:m(),sessionId:t,content:s}))}function D(t,s,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:m(),sessionId:t,requestId:s,answer:o}))}async function H(){return await p(8e3),((await d({type:"session-list"},1e4)).sessions||[]).map(K).filter(Boolean)}async function z(t){try{await d({type:"session-close",sessionId:t},5e3),W(y("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function G(t){return await p(8e3),await d({type:"session-resume",sessionId:t},1e4)}return{status:n,error:r,wsUrl:P,connect:S,disconnect:x,waitConnected:p,onMessage:J,onRuntimeEvent:j,onSession:A,sendRaw:d,execute:T,executeJson:M,createSession:_,resumeSession:G,sendSessionMessage:$,answerQuestion:D,listSessions:H,closeSession:z}});export{V as u};
1
+ import{k as U,r as b,j as B}from"./vendor-BVetwVfk.js";let F=0;const m=()=>`wp-${++F}`,O=new Set;function y(e,n={},r={}){return{type:e,kind:r.kind||"server",sessionId:r.sessionId||n.sessionId||null,timestamp:r.timestamp||Date.now(),payload:n}}function Q(e){const n=e?.type,r=e?.payload||{};switch(n){case"task:notification":return y("task:notification",{task:e.task||r.task},{kind:"server"});case"session-created":case"session.started":return y("session:start",{sessionId:e.sessionId||r.sessionId,sessionType:e.sessionType||r.sessionType||null,record:e.record||r.record||{id:e.sessionId||r.sessionId,type:e.sessionType||r.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||r.sessionId});case"session-resumed":case"session.resumed":{const c=e.sessionId||r.sessionId,i=e.history||r.history||[];return y("session:resume",{sessionId:c,history:i,historyCount:Array.isArray(i)?i.length:0,record:e.record||r.record||{id:c,type:null,status:"resumed",history:i,messageCount:Array.isArray(i)?i.length:0}},{kind:"server",sessionId:c})}case"worktree-diff":case"worktree.diff":return y("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||r.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return y("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,conflicts:e.conflicts||r.conflicts||[],previewEntrypoints:e.previewEntrypoints||r.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return y("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||r.summary||{}},{kind:"server"});default:return null}}function W(e,n=null){O.forEach(r=>r(e,n||e))}function K(e){if(!e)return null;const n=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||n.id,type:e.type||n.type,provider:e.provider||n.provider,model:e.model||n.model,projectRoot:e.projectRoot||n.projectRoot,messageCount:e.messageCount??n.messageCount??0,status:e.status||n.status||null,record:n}}const V=U("ws",()=>{const e=b(null),n=b("disconnected"),r=b(null),c=new Map,i=new Map;let l=null,h=1e3,k=!1;const f=window.__CC_CONFIG__||{},P=B(()=>`ws://${f.wsHost||"127.0.0.1"}:${f.wsPort||18800}`);function S(){if(!(e.value?.readyState===WebSocket.OPEN||e.value?.readyState===WebSocket.CONNECTING)){clearTimeout(l),l=null,k=!1,n.value="connecting",r.value=null;try{const t=new WebSocket(P.value);e.value=t,t.onopen=()=>{h=1e3,f.wsToken?d({type:"auth",id:m(),token:f.wsToken}).then(()=>{n.value="connected"}).catch(()=>{n.value="connected"}):n.value="connected"},t.onmessage=s=>{let o;try{o=JSON.parse(s.data)}catch{return}q(o)},t.onerror=()=>{r.value="WebSocket error",n.value="error"},t.onclose=()=>{if(n.value="disconnected",e.value=null,c.forEach(({reject:s})=>s(new Error("WebSocket closed"))),c.clear(),k){k=!1,l=null;return}l=setTimeout(()=>{h=Math.min(h*2,3e4),l=null,S()},h)}}catch(t){n.value="error",r.value=t.message}}}function x(){clearTimeout(l),l=null,k=!0,e.value?.close(),e.value=null,n.value="disconnected"}function N(t){if(!t.version&&!t.payload)return t;const s=t.payload||{};return{...t,...s,type:t.type,sessionId:t.sessionId||s.sessionId||null}}function q(t){const{type:s}=t,o=t.requestId||t.id;let u=!1;if(o&&c.has(o)){const{resolve:w,reject:R,timeout:I}=c.get(o);clearTimeout(I),c.delete(o),u=!0;const C=N(t);C.id=o,s==="error"?R(new Error(C.message||"Unknown error")):w(C)}const a=t.sessionId||t.payload&&t.payload.sessionId||null;if(a&&i.has(a)){const w=N(t);i.get(a).forEach(I=>I(w))}E.forEach(w=>w(t));const v=Q(t);return v&&W(v,t),u}const E=new Set;function J(t){return E.add(t),()=>E.delete(t)}function j(t){return O.add(t),()=>O.delete(t)}function A(t,s){return i.has(t)||i.set(t,new Set),i.get(t).add(s),()=>{i.get(t)?.delete(s),i.get(t)?.size===0&&i.delete(t)}}function d(t,s=15e3){return new Promise((o,u)=>{if(e.value?.readyState!==WebSocket.OPEN){u(new Error("WebSocket not connected"));return}const a=t.id||m(),v=setTimeout(()=>{c.delete(a),u(new Error("Request timeout"))},s);c.set(a,{resolve:o,reject:u,timeout:v}),e.value.send(JSON.stringify({...t,id:a}))})}function p(t=8e3){return n.value==="connected"?Promise.resolve():new Promise((s,o)=>{const u=Date.now()+t,a=()=>{if(n.value==="connected")return s();if(n.value==="error"||Date.now()>=u)return o(new Error(`WS not ready: ${n.value}`));setTimeout(a,150)};n.value==="disconnected"&&S(),a()})}async function T(t,s=3e4){await p(8e3);const o=await d({type:"execute",command:t},s),u=o.output??o.stdout??"",a=o.stderr??"";return{output:u||a,exitCode:o.exitCode??0}}async function M(t,s=3e4){const{output:o,exitCode:u}=await T(t,s);if(u!==0)throw new Error(`Command failed: ${o}`);try{return JSON.parse(o.trim())}catch{const a=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(a)return JSON.parse(a[0]);throw new Error(`Invalid JSON output: ${o.slice(0,200)}`)}}async function _(t="chat",s=null,o={}){await p(8e3);const a={type:"session-create",id:m(),sessionType:t,projectRoot:s||f.projectRoot||null};return o.systemPromptExtension&&(a.systemPromptExtension=o.systemPromptExtension),Array.isArray(o.shellPolicyOverrides)&&o.shellPolicyOverrides.length&&(a.shellPolicyOverrides=o.shellPolicyOverrides),(await d(a)).sessionId}function $(t,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:m(),sessionId:t,content:s}))}function D(t,s,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:m(),sessionId:t,requestId:s,answer:o}))}async function H(){return await p(8e3),((await d({type:"session-list"},1e4)).sessions||[]).map(K).filter(Boolean)}async function z(t){try{await d({type:"session-close",sessionId:t},5e3),W(y("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function G(t){return await p(8e3),await d({type:"session-resume",sessionId:t},1e4)}return{status:n,error:r,wsUrl:P,connect:S,disconnect:x,waitConnected:p,onMessage:J,onRuntimeEvent:j,onSession:A,sendRaw:d,execute:T,executeJson:M,createSession:_,resumeSession:G,sendSessionMessage:$,answerQuestion:D,listSessions:H,closeSession:z}});export{V as u};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./Keyframes-C7fCrnlS.js";import{i as f}from"./motion-Cfd1jQ_B.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./Keyframes-C7fCrnlS.js";import{i as f}from"./motion-Bo_wsn2G.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,9 +8,9 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-D8XA7siu.js"></script>
12
- <link rel="modulepreload" crossorigin href="./assets/vendor-xFZ6Jlpw.js">
13
- <link rel="modulepreload" crossorigin href="./assets/icons-DuLXY5ve.js">
11
+ <script type="module" crossorigin src="./assets/index-MzZGrA5i.js"></script>
12
+ <link rel="modulepreload" crossorigin href="./assets/vendor-BVetwVfk.js">
13
+ <link rel="modulepreload" crossorigin href="./assets/icons-Jk30QO6-.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CyGyEIVX.css">
15
15
  </head>
16
16
  <body>
@@ -12,22 +12,277 @@ import { bootstrap, shutdown } from "../runtime/bootstrap.js";
12
12
  const requireCjs = createRequire(import.meta.url);
13
13
  const quoteIdent = (name) => `"${String(name).replace(/"/g, '""')}"`;
14
14
 
15
- // Local SQLite driver loader for db check/repair. Inlined rather than imported
16
- // from core-db because @chainlesschain/core-db@0.1.0 on npm only exports
17
- // {DatabaseManager, getDatabaseManager}; loadSQLiteDriver was added later
18
- // without a version bump.
19
- function loadNativeSQLiteDriver() {
15
+ // SQLite driver loader for db check/repair. Cascades: native wasm.
16
+ // Native (better-sqlite3) is fast but needs prebuilt binaries — fails on
17
+ // Apple Silicon w/o prebuilds, musl Linux, and some Node-version drift.
18
+ // WASM (sql.js) is pure JS+WASM, slower but always loadable.
19
+ // Inlined here rather than imported from core-db because the published
20
+ // @chainlesschain/core-db@0.1.0 doesn't export its loader; bumping core-db
21
+ // would have wider ripple, so we duplicate the cascade locally.
22
+ async function loadAnyDriver() {
20
23
  for (const pkg of ["better-sqlite3-multiple-ciphers", "better-sqlite3"]) {
21
24
  try {
22
25
  const Database = requireCjs(pkg);
23
26
  const probe = new Database(":memory:");
24
27
  probe.close();
25
- return { name: pkg, Database };
28
+ return { kind: "native", name: pkg, Database };
26
29
  } catch (_e) {
27
30
  /* try next */
28
31
  }
29
32
  }
30
- return null;
33
+ try {
34
+ const initSqlJs = requireCjs("sql.js");
35
+ const SQL = await initSqlJs();
36
+ return { kind: "wasm", name: "sql.js", SQL };
37
+ } catch (_e) {
38
+ return null;
39
+ }
40
+ }
41
+
42
+ // Run integrity check. Normalizes both driver shapes to { ok, diagnostics }.
43
+ // native: db.pragma("integrity_check") → [{integrity_check: "ok"}] or [{integrity_check: "*** in db ***\n..."}]
44
+ // wasm: db.exec("PRAGMA integrity_check") → [{columns: [...], values: [["ok"]]}]
45
+ async function runIntegrityCheck(driver, dbPath, checkName) {
46
+ const fs = requireCjs("fs");
47
+ if (driver.kind === "native") {
48
+ const conn = new driver.Database(dbPath, {
49
+ readonly: true,
50
+ fileMustExist: true,
51
+ });
52
+ const rows = conn.pragma(checkName);
53
+ conn.close();
54
+ const lines = rows.map((r) => (r && r[checkName]) || JSON.stringify(r));
55
+ return {
56
+ ok: lines.length === 1 && lines[0] === "ok",
57
+ diagnostics: lines,
58
+ };
59
+ }
60
+ const buf = fs.readFileSync(dbPath);
61
+ const conn = new driver.SQL.Database(buf);
62
+ let res;
63
+ try {
64
+ res = conn.exec(`PRAGMA ${checkName}`);
65
+ } finally {
66
+ conn.close();
67
+ }
68
+ const lines = (res[0]?.values || []).map((v) => String(v[0]));
69
+ return {
70
+ ok: lines.length === 1 && lines[0] === "ok",
71
+ diagnostics: lines,
72
+ };
73
+ }
74
+
75
+ // Best-effort row salvage. Handles both native and wasm drivers.
76
+ // onTable(name, copied, lost, err?) is called for each table for live progress.
77
+ // Returns { stats: {tables, rowsCopied, rowsLost, schemasFailed} }.
78
+ async function salvageDatabase(driver, srcPath, dstPath, onTable) {
79
+ const fs = requireCjs("fs");
80
+ const stats = { tables: 0, rowsCopied: 0, rowsLost: 0, schemasFailed: 0 };
81
+
82
+ if (driver.kind === "native") {
83
+ const src = new driver.Database(srcPath, {
84
+ readonly: true,
85
+ fileMustExist: true,
86
+ });
87
+ const dst = new driver.Database(dstPath);
88
+ dst.pragma("journal_mode = WAL");
89
+ try {
90
+ const schemaRows = src
91
+ .prepare(
92
+ "SELECT type, name, sql FROM sqlite_master WHERE type IN ('table','index','view') AND sql IS NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY (type='table') DESC, name",
93
+ )
94
+ .all();
95
+ for (const r of schemaRows) {
96
+ try {
97
+ dst.exec(r.sql);
98
+ } catch (e) {
99
+ stats.schemasFailed++;
100
+ }
101
+ }
102
+ const tables = src
103
+ .prepare(
104
+ "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",
105
+ )
106
+ .all()
107
+ .map((t) => t.name);
108
+ for (const t of tables) {
109
+ let copied = 0;
110
+ let lost = 0;
111
+ let err = null;
112
+ try {
113
+ const cols = src
114
+ .prepare(`PRAGMA table_info(${quoteIdent(t)})`)
115
+ .all()
116
+ .map((c) => c.name);
117
+ if (cols.length === 0) {
118
+ stats.tables++;
119
+ onTable(t, 0, 0, "no columns");
120
+ continue;
121
+ }
122
+ const colList = cols.map(quoteIdent).join(",");
123
+ const placeholders = cols.map(() => "?").join(",");
124
+ const insert = dst.prepare(
125
+ `INSERT OR IGNORE INTO ${quoteIdent(t)} (${colList}) VALUES (${placeholders})`,
126
+ );
127
+ const iter = src
128
+ .prepare(`SELECT ${colList} FROM ${quoteIdent(t)}`)
129
+ .iterate();
130
+ while (true) {
131
+ let next;
132
+ try {
133
+ next = iter.next();
134
+ } catch (_e) {
135
+ lost++;
136
+ break;
137
+ }
138
+ if (next.done) break;
139
+ try {
140
+ insert.run(...cols.map((c) => next.value[c]));
141
+ copied++;
142
+ } catch (_e) {
143
+ lost++;
144
+ }
145
+ }
146
+ try {
147
+ iter.return && iter.return();
148
+ } catch (_e) {
149
+ /* swallow */
150
+ }
151
+ } catch (e) {
152
+ err = e.message;
153
+ }
154
+ stats.tables++;
155
+ stats.rowsCopied += copied;
156
+ stats.rowsLost += lost;
157
+ onTable(t, copied, lost, err);
158
+ }
159
+ } finally {
160
+ try {
161
+ src.close();
162
+ } catch (_e) {
163
+ /* swallow */
164
+ }
165
+ try {
166
+ dst.close();
167
+ } catch (_e) {
168
+ /* swallow */
169
+ }
170
+ }
171
+ return { stats };
172
+ }
173
+
174
+ // wasm path
175
+ const buf = fs.readFileSync(srcPath);
176
+ const src = new driver.SQL.Database(buf);
177
+ const dst = new driver.SQL.Database();
178
+ try {
179
+ let schemaRows = [];
180
+ try {
181
+ const r = src.exec(
182
+ "SELECT type, name, sql FROM sqlite_master WHERE type IN ('table','index','view') AND sql IS NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY (type='table') DESC, name",
183
+ );
184
+ schemaRows = (r[0]?.values || []).map((v) => ({
185
+ type: v[0],
186
+ name: v[1],
187
+ sql: v[2],
188
+ }));
189
+ } catch (_e) {
190
+ /* sqlite_master unreadable */
191
+ }
192
+ for (const r of schemaRows) {
193
+ try {
194
+ dst.exec(r.sql);
195
+ } catch (_e) {
196
+ stats.schemasFailed++;
197
+ }
198
+ }
199
+ let tables = [];
200
+ try {
201
+ const r = src.exec(
202
+ "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",
203
+ );
204
+ tables = (r[0]?.values || []).map((v) => v[0]);
205
+ } catch (_e) {
206
+ /* tables unreadable */
207
+ }
208
+ for (const t of tables) {
209
+ let copied = 0;
210
+ let lost = 0;
211
+ let err = null;
212
+ try {
213
+ const ti = src.exec(`PRAGMA table_info(${quoteIdent(t)})`);
214
+ const cols = (ti[0]?.values || []).map((v) => v[1]);
215
+ if (cols.length === 0) {
216
+ stats.tables++;
217
+ onTable(t, 0, 0, "no columns");
218
+ continue;
219
+ }
220
+ const colList = cols.map(quoteIdent).join(",");
221
+ const placeholders = cols.map(() => "?").join(",");
222
+ const insertSql = `INSERT OR IGNORE INTO ${quoteIdent(t)} (${colList}) VALUES (${placeholders})`;
223
+ const insertStmt = dst.prepare(insertSql);
224
+ const selectStmt = src.prepare(
225
+ `SELECT ${colList} FROM ${quoteIdent(t)}`,
226
+ );
227
+ try {
228
+ while (true) {
229
+ let stepped;
230
+ try {
231
+ stepped = selectStmt.step();
232
+ } catch (_e) {
233
+ lost++;
234
+ break;
235
+ }
236
+ if (!stepped) break;
237
+ let row;
238
+ try {
239
+ row = selectStmt.get();
240
+ } catch (_e) {
241
+ lost++;
242
+ continue;
243
+ }
244
+ try {
245
+ insertStmt.run(row);
246
+ } catch (_e) {
247
+ lost++;
248
+ }
249
+ }
250
+ } finally {
251
+ try {
252
+ selectStmt.free();
253
+ } catch (_e) {
254
+ /* swallow */
255
+ }
256
+ try {
257
+ insertStmt.free();
258
+ } catch (_e) {
259
+ /* swallow */
260
+ }
261
+ }
262
+ } catch (e) {
263
+ err = e.message;
264
+ }
265
+ stats.tables++;
266
+ stats.rowsCopied += copied;
267
+ stats.rowsLost += lost;
268
+ onTable(t, copied, lost, err);
269
+ }
270
+ // Persist wasm in-memory DB to disk.
271
+ const outBuf = dst.export();
272
+ fs.writeFileSync(dstPath, Buffer.from(outBuf));
273
+ } finally {
274
+ try {
275
+ src.close();
276
+ } catch (_e) {
277
+ /* swallow */
278
+ }
279
+ try {
280
+ dst.close();
281
+ } catch (_e) {
282
+ /* swallow */
283
+ }
284
+ }
285
+ return { stats };
31
286
  }
32
287
 
33
288
  export function registerDbCommand(program) {
@@ -191,41 +446,51 @@ export function registerDbCommand(program) {
191
446
  await shutdown();
192
447
  process.exit(1);
193
448
  }
194
- const driver = loadNativeSQLiteDriver();
449
+ const driver = await loadAnyDriver();
195
450
  if (!driver) {
196
451
  logger.error(
197
- "integrity check requires a native SQLite driver (better-sqlite3)",
452
+ "No SQLite driver available. Install better-sqlite3 or sql.js.",
198
453
  );
199
454
  await shutdown();
200
455
  process.exit(1);
201
456
  }
202
- const conn = new driver.Database(dbPath, {
203
- readonly: true,
204
- fileMustExist: true,
205
- });
206
457
  const checkName = options.quick ? "quick_check" : "integrity_check";
207
- const rows = conn.pragma(checkName);
208
- conn.close();
209
- const ok =
210
- rows.length === 1 && rows[0] && rows[0][checkName] === "ok";
458
+ const { ok, diagnostics } = await runIntegrityCheck(
459
+ driver,
460
+ dbPath,
461
+ checkName,
462
+ );
211
463
  if (options.json) {
212
464
  console.log(
213
- JSON.stringify({ ok, check: checkName, path: dbPath, result: rows }, null, 2),
465
+ JSON.stringify(
466
+ {
467
+ ok,
468
+ check: checkName,
469
+ path: dbPath,
470
+ driver: driver.name,
471
+ diagnostics,
472
+ },
473
+ null,
474
+ 2,
475
+ ),
214
476
  );
215
477
  } else if (ok) {
216
478
  logger.success(
217
- `Database integrity OK (${checkName}): ${chalk.cyan(dbPath)}`,
479
+ `Database integrity OK (${checkName} via ${driver.name}): ${chalk.cyan(dbPath)}`,
218
480
  );
219
481
  } else {
220
- logger.error(`Database is CORRUPT: ${chalk.cyan(dbPath)}`);
221
- for (const r of rows) {
222
- const msg = (r && r[checkName]) || JSON.stringify(r);
482
+ logger.error(
483
+ `Database is CORRUPT (${checkName} via ${driver.name}): ${chalk.cyan(dbPath)}`,
484
+ );
485
+ for (const msg of diagnostics) {
223
486
  const lines = String(msg).split("\n").slice(0, 20);
224
487
  for (const line of lines) console.log(" " + line);
225
488
  }
226
489
  console.log("");
227
490
  logger.warn("Recovery options:");
228
- console.log(" cc db repair – best-effort row salvage into a new file");
491
+ console.log(
492
+ " cc db repair – best-effort row salvage into a new file",
493
+ );
229
494
  console.log(" cc db reset – back up corrupt DB and start fresh");
230
495
  }
231
496
  exitCode = ok ? 0 : 2;
@@ -311,10 +576,10 @@ export function registerDbCommand(program) {
311
576
  await shutdown();
312
577
  process.exit(1);
313
578
  }
314
- const driver = loadNativeSQLiteDriver();
579
+ const driver = await loadAnyDriver();
315
580
  if (!driver) {
316
581
  logger.error(
317
- "repair requires a native SQLite driver (better-sqlite3)",
582
+ "No SQLite driver available. Install better-sqlite3 or sql.js.",
318
583
  );
319
584
  await shutdown();
320
585
  process.exit(1);
@@ -327,133 +592,24 @@ export function registerDbCommand(program) {
327
592
  process.exit(1);
328
593
  }
329
594
  logger.info(
330
- `Salvaging ${chalk.cyan(dbPath)} → ${chalk.cyan(outPath)}`,
595
+ `Salvaging ${chalk.cyan(dbPath)} → ${chalk.cyan(outPath)} (driver: ${driver.name})`,
331
596
  );
332
597
 
333
- const src = new driver.Database(dbPath, {
334
- readonly: true,
335
- fileMustExist: true,
336
- });
337
- const dst = new driver.Database(outPath);
338
- dst.pragma("journal_mode = WAL");
339
-
340
- // Replay schema (tables first, then indexes/views).
341
- let schemaRows = [];
342
- try {
343
- schemaRows = src
344
- .prepare(
345
- "SELECT type, name, sql FROM sqlite_master WHERE type IN ('table','index','view') AND sql IS NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY (type='table') DESC, name",
346
- )
347
- .all();
348
- } catch (e) {
349
- logger.error(`Cannot read sqlite_master: ${e.message}`);
350
- src.close();
351
- dst.close();
352
- await shutdown();
353
- process.exit(1);
354
- }
355
- const stats = {
356
- tables: 0,
357
- rowsCopied: 0,
358
- rowsLost: 0,
359
- schemasFailed: 0,
360
- };
361
- for (const r of schemaRows) {
362
- try {
363
- dst.exec(r.sql);
364
- } catch (e) {
365
- stats.schemasFailed++;
366
- logger.warn(`schema replay failed for ${r.name}: ${e.message}`);
367
- }
368
- }
369
-
370
- const tableRows = src
371
- .prepare(
372
- "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",
373
- )
374
- .all();
375
- const tables = tableRows.map((t) => t.name);
376
- for (const t of tables) {
377
- let copied = 0;
378
- let lost = 0;
379
- let cols = [];
380
- try {
381
- cols = src
382
- .prepare(`PRAGMA table_info(${quoteIdent(t)})`)
383
- .all()
384
- .map((c) => c.name);
385
- } catch (e) {
386
- console.log(
387
- ` ${t.padEnd(28)} ${chalk.red("schema unreadable")}`,
388
- );
389
- stats.tables++;
390
- continue;
391
- }
392
- if (cols.length === 0) {
393
- console.log(` ${t.padEnd(28)} ${chalk.gray("no columns")}`);
394
- stats.tables++;
395
- continue;
396
- }
397
- const colList = cols.map(quoteIdent).join(",");
398
- const placeholders = cols.map(() => "?").join(",");
399
- let insert;
400
- try {
401
- insert = dst.prepare(
402
- `INSERT OR IGNORE INTO ${quoteIdent(t)} (${colList}) VALUES (${placeholders})`,
403
- );
404
- } catch (e) {
405
- console.log(
406
- ` ${t.padEnd(28)} ${chalk.red("dest insert prep failed")}`,
407
- );
408
- stats.tables++;
409
- continue;
410
- }
411
- let iter;
412
- try {
413
- iter = src
414
- .prepare(`SELECT ${colList} FROM ${quoteIdent(t)}`)
415
- .iterate();
416
- } catch (e) {
417
- console.log(
418
- ` ${t.padEnd(28)} ${chalk.red("table read aborted: " + e.message.slice(0, 40))}`,
419
- );
420
- stats.tables++;
421
- continue;
422
- }
423
- while (true) {
424
- let next;
425
- try {
426
- next = iter.next();
427
- } catch (e) {
428
- lost++;
429
- break;
430
- }
431
- if (next.done) break;
432
- try {
433
- insert.run(...cols.map((c) => next.value[c]));
434
- copied++;
435
- } catch (e) {
436
- lost++;
437
- }
438
- }
439
- try {
440
- iter.return && iter.return();
441
- } catch (_e) {
442
- /* swallow */
443
- }
444
- stats.tables++;
445
- stats.rowsCopied += copied;
446
- stats.rowsLost += lost;
447
- const status =
448
- lost > 0
449
- ? chalk.yellow(`${copied} copied, ${lost} lost`)
450
- : copied === 0
451
- ? chalk.gray(`${copied} copied`)
452
- : chalk.green(`${copied} copied`);
453
- console.log(` ${t.padEnd(28)} ${status}`);
454
- }
455
- src.close();
456
- dst.close();
598
+ const { stats } = await salvageDatabase(
599
+ driver,
600
+ dbPath,
601
+ outPath,
602
+ (name, copied, lost, err) => {
603
+ const tag = err
604
+ ? chalk.red(err)
605
+ : lost > 0
606
+ ? chalk.yellow(`${copied} copied, ${lost} lost`)
607
+ : copied === 0
608
+ ? chalk.gray(`${copied} copied`)
609
+ : chalk.green(`${copied} copied`);
610
+ console.log(` ${name.padEnd(28)} ${tag}`);
611
+ },
612
+ );
457
613
 
458
614
  logger.log("");
459
615
  logger.success(`Recovered DB written to ${chalk.cyan(outPath)}`);
@@ -1 +0,0 @@
1
- .app-root[data-v-1a3da385]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-1a3da385]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}[data-v-1a3da385] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden}.main-area[data-v-1a3da385]{background:var(--bg-base)}.logo[data-v-1a3da385]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-1a3da385]{padding:0;justify-content:center}.logo-icon[data-v-1a3da385]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-1a3da385]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-1a3da385]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-1a3da385]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-1a3da385]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-1a3da385]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-1a3da385]{color:#722ed1}.banner-info[data-v-1a3da385]{flex:1;min-width:0}.banner-name[data-v-1a3da385]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-1a3da385]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-1a3da385]{color:#c084fc}.mode-icon-sm[data-v-1a3da385]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-1a3da385]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-1a3da385]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-1a3da385] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-1a3da385] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-1a3da385]{margin:4px 0!important}.sidebar-footer[data-v-1a3da385]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-1a3da385]{justify-content:center;padding:8px 0}.footer-text[data-v-1a3da385]{color:var(--text-secondary);font-size:11px}.app-header[data-v-1a3da385]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-1a3da385],.header-right[data-v-1a3da385]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-1a3da385]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-1a3da385]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-1a3da385]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-1a3da385]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-1a3da385]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-1a3da385]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-1a3da385]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-1a3da385]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-1a3da385]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-1a3da385]{margin:0!important;font-size:11px}.page-content[data-v-1a3da385]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
@@ -1 +0,0 @@
1
- import{l as je,m as v,x as t,q as d,B as Se,C as Te,v as i,c as e,D as a,E as j,u as s,F as r,G as B,H as S,I as g,J as l,K as Be,L as Re,r as Le,j as y}from"./vendor-xFZ6Jlpw.js";import{u as xe}from"./ws-Dg01CdRG.js";import{u as Ae,T as De}from"./index-D8XA7siu.js";import{_ as Ie}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as b,G as R,D,M as I,R as N,C as U,a as P,A as K,b as M,c as V,B as F,d as E,S as G,e as W,f as z,h as q,i as H,j as $,I as J,L as Y,W as Q,k as X,l as Z,P as h,m as ee,n as te,o as oe,p as se,U as ne,V as Ne,q as le,K as ae,r as Ue}from"./icons-DuLXY5ve.js";const Pe=["src"],Ke={key:0,class:"logo-text"},Me={key:0,class:"mode-banner project"},Ve={class:"banner-info"},Fe={class:"banner-name"},Ee={key:1,class:"mode-banner global"},Ge=["title"],We={key:0,class:"footer-text"},ze={class:"header-left"},qe={class:"header-right"},He={class:"theme-switcher"},$e=["data-theme-key","onClick"],Je={class:"version-tag"},Ye={__name:"AppLayout",setup(Qe){const ie=Se(),de=Te(),O=xe(),T=Ae(),u=Le(!1),k=window.__CC_CONFIG__||{},m=y(()=>k.mode==="project"),ue="v5.0.3.1",re=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,pe=y(()=>T.current),ce=y(()=>T.config.vars["--menu-mode"]),L=y(()=>{const p=de.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[p]||p]}),C=y(()=>O.status),me=y(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[O.status]||"default"),ye=y(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[O.status]||"未知");function ke(p){T.setTheme(p)}function fe({key:p}){ie.push({mcp:"/mcp"}[p]||`/${p}`)}return je(()=>O.connect()),(p,o)=>{const n=d("a-menu-item"),c=d("a-menu-item-group"),f=d("a-menu-divider"),_e=d("a-menu"),ve=d("a-badge"),ge=d("a-layout-sider"),x=d("a-tooltip"),be=d("a-tag"),Oe=d("a-layout-header"),Ce=d("router-view"),we=d("a-layout-content"),A=d("a-layout");return i(),v(A,{class:"app-root"},{default:t(()=>[e(ge,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=_=>u.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:j(["logo",{collapsed:u.value}])},[a("img",{src:s(re),alt:"ChainlessChain",class:"logo-icon"},null,8,Pe),u.value?B("",!0):(i(),r("span",Ke,"ChainlessChain"))],2),u.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:m.value?s(k).projectName:"全局模式"},[m.value?(i(),v(s(b),{key:0,style:{color:"#1677ff"}})):(i(),v(s(R),{key:1,style:{color:"#722ed1"}}))],8,Ge)):(i(),r(S,{key:0},[m.value?(i(),r("div",Me,[e(s(b),{class:"banner-icon"}),a("div",Ve,[a("div",Fe,g(s(k).projectName||"项目"),1),o[2]||(o[2]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Ee,[e(s(R),{class:"banner-icon"}),o[3]||(o[3]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(_e,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:ce.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:fe},{default:t(()=>[u.value?(i(),r(S,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(N))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(P))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(K))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"project-settings"},{icon:t(()=>[e(s(b))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),_:1}),e(n,{key:"knowledge"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"marketplace"},{icon:t(()=>[e(s(W))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(H))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"did"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(Q))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Z))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(h))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(ee))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(te))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(oe))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(se))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"community"},{icon:t(()=>[e(s(ne))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(le))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(ae))]),_:1})],64)):(i(),r(S,{key:0},[e(c,null,{title:t(()=>[...o[4]||(o[4]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[5]||(o[5]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[6]||(o[6]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(N))]),default:t(()=>[o[7]||(o[7]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[8]||(o[8]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[9]||(o[9]=l("日志查看",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[10]||(o[10]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[11]||(o[11]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[12]||(o[12]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[13]||(o[13]=l("MCP 工具",-1))]),_:1}),e(n,{key:"project-settings"},{icon:t(()=>[e(s(b))]),default:t(()=>[o[14]||(o[14]=l("项目存储",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[15]||(o[15]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[16]||(o[16]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[17]||(o[17]=l("记忆文件",-1))]),_:1}),e(n,{key:"knowledge"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[18]||(o[18]=l("知识图谱",-1))]),_:1}),e(n,{key:"marketplace"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[19]||(o[19]=l("技能市场",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[20]||(o[20]=l("定时任务",-1))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[21]||(o[21]=l("工作流编辑",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[22]||(o[22]=l("后台任务",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[23]||(o[23]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s($))]),default:t(()=>[o[24]||(o[24]=l("安全中心",-1))]),_:1}),e(n,{key:"did"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[25]||(o[25]=l("DID 身份",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[26]||(o[26]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[27]||(o[27]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[28]||(o[28]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[29]||(o[29]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[30]||(o[30]=l("项目管理",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[31]||(o[31]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[32]||(o[32]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[33]||(o[33]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(oe))]),default:t(()=>[o[34]||(o[34]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(se))]),default:t(()=>[o[35]||(o[35]=l("模板中心",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[36]||(o[36]=[a("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(n,{key:"community"},{icon:t(()=>[e(s(ne))]),default:t(()=>[o[37]||(o[37]=l("社区",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[38]||(o[38]=[a("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(n,{key:"video"},{icon:t(()=>[e(s(Ne))]),default:t(()=>[o[39]||(o[39]=l("视频剪辑",-1))]),_:1})]),_:1}),e(c,null,{title:t(()=>[...o[40]||(o[40]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(le))]),default:t(()=>[o[41]||(o[41]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(ae))]),default:t(()=>[o[42]||(o[42]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:j(["sidebar-footer",{collapsed:u.value}])},[e(ve,{status:me.value},null,8,["status"]),u.value?B("",!0):(i(),r("span",We,g(ye.value),1))],2)]),_:1},8,["collapsed"]),e(A,{class:"main-area"},{default:t(()=>[e(Oe,{class:"app-header"},{default:t(()=>[a("div",ze,[a("div",{class:j(["scope-tag",m.value?"project":"global"])},[(i(),v(Be(m.value?s(b):s(R)))),a("span",null,g(m.value?s(k).projectName||"项目":"全局模式"),1),m.value&&s(k).projectRoot?(i(),v(x,{key:0,title:s(k).projectRoot},{default:t(()=>[e(s(Ue),{class:"info-icon"})]),_:1},8,["title"])):B("",!0)],2)]),a("div",qe,[a("div",He,[(i(!0),r(S,null,Re(s(De),(_,w)=>(i(),v(x,{key:w,title:_.label},{default:t(()=>[a("button",{class:j(["theme-btn",{active:pe.value===w}]),"data-theme-key":w,onClick:Xe=>ke(w)},g(_.icon),11,$e)]),_:2},1032,["title"]))),128))]),a("span",Je,g(s(ue)),1),e(be,{color:C.value==="connected"?"green":C.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(g(C.value==="connected"?"已连接":C.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(we,{class:"page-content"},{default:t(()=>[e(Ce)]),_:1})]),_:1})]),_:1})}}},st=Ie(Ye,[["__scopeId","data-v-1a3da385"]]);export{st as default};