chainlesschain 0.166.79 → 0.166.80

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 (161) hide show
  1. package/README.md +7 -7
  2. package/package.json +1 -1
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-CwD6Pm_Y.js → AIOps-C5NtVVBN.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-Du5Rp-O6.js → ActionButton-CE9-HsoR.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-DY9l72ma.js → Analytics-DRO6sI0Z.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-7t1WIaCJ.js → AppLayout-CuVJiyC_.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-BLIA5yny.js → Artifacts-GNahHsyZ.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-BC_N0QTg.js → Audit-DWvTomfm.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-CA7SxDtg.js → BackgroundAgents-k4TuA3ec.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-BZ4AzS1_.js → Backup-BxqN-65D.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-BhiggGaH.js → BaseInput-CYYLvwwD.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-CDdBoIBI.js → Chat-CoDmZ9yb.js} +5 -5
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-hsBsrl31.js → ChatBubbleRenderer-ChTIMWch.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-asoMKSEK.js → Checkbox-CRVlfbkN.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-B0gElLdm.js → Codegen-BttMy7rW.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-DrNzLpF6.js → Col-DsdlE4QC.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-DCzB5qkI.js → Community-BulheyO-.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-Db-Eua_j.js → Compact-BC_7wMxW.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-B76NByjl.js → Compliance-BA3PDNLK.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-C-nK6Qpk.js → Cowork-B6Y3L-GP.js} +4 -4
  23. package/src/assets/web-panel/assets/{Cron-C-GlQO19.js → Cron-DLk_CG77.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-Cuuz9IIh.js → Crosschain-CvsKV-90.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-gwFaT973.js → DID-CD8K9G3F.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-DHDt5jEf.js → Dashboard-CXNE434f.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-CJ9kog-Y.js → Dropdown-C_P5mttB.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-DOSXFRiQ.js → EmailListRenderer-MxZvItNA.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-CHYMP7rR.js → EvolutionSettings-DRoJQrDb.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-C1gzG5EK.js → FamilyGuardDashboard-CBrz9T6T.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-CEdNVWUw.js → Federation-DKlGgjNs.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-CwVOWPX8.js → FormItemContext-CteicPS5.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-CgNUs3kT.js → GenericCardRenderer-Bs10mDna.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-DM4MNnQo.js → Git-CXwzFBIh.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-DdOtjkvd.js → Governance-CYzcwfwf.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-28PidFfr.js → Inference-pYpCF1ws.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-Bpj_qNUK.js → KnowledgeGraph-B0YJnOpj.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-C6Ix19Ay.js → Logs-D-hJWfq-.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-Bj6mtPbf.js → MarkdownRenderer-BPQlDtB7.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-DqkhRSMP.js → Marketplace-D5ZmI-si.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-1WQ2SjaE.js → McpTools-DByD6jY1.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-BWTi7v6R.js → Memory--lsjJd7Y.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DB4wu3UE.js → MobileBridge-GQ3vGZO9.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-Bh9pWx2f.js → MobileProjects-Dh2wq-NU.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-BVF1Wrno.js → Mtc-uQFoRe_Z.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-DtNfslPf.js → MtcAudit-BUBYbvuz.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-4qcXP0bf.js → Multisig-D790SLqM.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-BRJl5Ehw.js → NLProgramming-DcV9gSqn.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-BRY_bgMk.js → Notes-sVl7Y_vt.js} +4 -4
  50. package/src/assets/web-panel/assets/{NotificationSettings-DirXMFz4.js → NotificationSettings-BHRPqBZ3.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-BlrY8lwu.js → OrderTableRenderer-B029pIMF.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-CVzQ1vO-.js → Organization-BKrF-dtp.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-A3rXTPG4.js → Overflow-DOAGxhhi.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-Db9ABWz0.js → P2P-7uQ4F7lh.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-CPv0H2OZ.js → PdhVaultBrowser-BegpATva.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-COnW4sIR.js → Permissions-C0qK0tAi.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-C1hG7rp7.js → PersonalDataHub-DCnfXKyb.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline---GLRDEe.js → Pipeline-D8wdVvao.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-aaN9R3Lu.js → Privacy-C-dGmb9y.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-C-kw49hE.js → ProjectInit-ChKvrsfc.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-y5tTkBTC.js → ProjectSettings-CaWnzNBi.js} +2 -2
  62. package/src/assets/web-panel/assets/Projects-2uNBqS05.js +1 -0
  63. package/src/assets/web-panel/assets/{Providers-LqxnV72o.js → Providers-DTufbN-S.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-D_q-Y5F0.js → QrScannerModal-CGv6QJMC.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-_E_KB5o8.js → QuickAsk-BfNcUCfG.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-BN8S5WJA.js → Recommend-B0s5YT2K.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-BFzrY_aW.js → RemoteSession-YCs5wa8P.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-C1HCLaTV.js → Reputation-DBC__Ylq.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-B8T2-Qv7.js → Row-D_NT1ROe.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-CNQLk8v1.js → RssFeed-Dd9ktNRw.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-BOx720Kc.js → Search-BsmlT4PY.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-Ds8z6PF6.js → Security-DN-_e3oM.js} +3 -3
  73. package/src/assets/web-panel/assets/{Services-C0-YkRSF.js → Services-Bm_KqSDz.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DUHlSySD.js → Skeleton-BYldeYI0.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C8CBbbh0.js → Skills-h7XAXSls.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-lQltyYfB.js → Sla-4ArxAaMJ.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-B5vyOma-.js → SpeechSettings-B639ejZr.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BKDPu_y-.js → SyncSettings-DR6RRo1O.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-Bgvf7LTx.js → Tasks-DysrrJVE.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-BMZyYYS7.js → Templates-DyyB9L9f.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-7PYTig8f.js → Tenant-XbmWbUl1.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-C2W0LMdR.js → Terminal-C5GeciJG.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-CqREew_l.js → TimelineRenderer-Db-NjeVy.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-BhTyxTuD.js → Tokens-Btm9pYvJ.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-DxNSSZy_.js → Trigger-BhJ35b0V.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-Dy_wfbIh.js → Trust-C5T4GJky.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-DJC5ANqx.js → UkeySign-CqWxh5U0.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-CNFevrO4.js → VideoEditing-DKyI9zg1.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-CXzuS1YK.js → Wallet-kgvyQOtT.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-BWS6HP8c.js → WebAuthn-1wWucdJt.js} +4 -4
  91. package/src/assets/web-panel/assets/{WorkflowEditor-swiN_7Vj.js → WorkflowEditor-rHVIbLME.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-NwH7qlBs.js → chat-DV8ZtfWQ.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-h6nRhBTw.js → colors-zznFfEpj.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-BQ6B6rP2.js → compact-item-CWk10Qsu.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-CQkJuRcG.js → createContext-CtoMW-kY.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-_Wlo1cZJ.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-Diwl1WyI.js → hasIn-ieyHKAZZ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CqH-oOR3.js → index--6zQrvYc.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BcjlIMP9.js → index-0GSB8LOT.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BjcARUtr.js → index-14ADEHo7.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-GTefQSbY.js → index-2TTLREp7.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DjB8IC9D.js → index-9fgmdiB_.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-mxxZtsHp.js → index-B2WI4Jse.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-AzeSQJDK.js → index-B9w6Zr_O.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DKaB4xTf.js → index-BG9KlVJl.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D5P498Rk.js → index-BGYCtfL-.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CyBtEVLM.js → index-Bf9069uM.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-pYwYBVeQ.js → index-BrpyZMUe.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BYYb8oeV.js → index-CBS8OtL2.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BI3ALCgN.js → index-CGZGQTF5.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DQYZa1Ci.js → index-CLeX8Qp7.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-iHNOr_wL.js → index-CdSnkhrR.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BcKDUGYf.js → index-CewbVIM8.js} +1 -1
  114. package/src/assets/web-panel/assets/index-Cj8Mcdok.js +1 -0
  115. package/src/assets/web-panel/assets/{index-Dwpthe2b.js → index-CjkiJdIX.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C3Ye1ISy.js → index-Cn71LASJ.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bs6HyCfP.js → index-Cqpfzkch.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-D_HY0nyN.js → index-CrBful_u.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-OEWSrqit.js → index-CxSgg3Xc.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-B3QgcUBV.js → index-D7yq9nAq.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CatBQDSQ.js → index-D9jmNLfO.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DZAsByy4.js → index-DNlvUg0O.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DZ9CNcbJ.js → index-DPwOEcUt.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BvPz6vZ8.js → index-DR1Uw5as.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-B5gj_uCC.js → index-DRuSuXJh.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CwsoVDi-.js → index-DSnQWQ4L.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BnQUin2K.js → index-DdMho2Wr.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-C7-T-u0L.js → index-DjNjO-VL.js} +3 -3
  129. package/src/assets/web-panel/assets/{index-Da8frO_A.js → index-DmtyRKy8.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BRl3KUj0.js → index-Dz1TqS34.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BheCvudN.js → index-G9bqTRu6.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-0ZztPzIm.js → index-McW2cdbg.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-TYMmUsxZ.js → index-esCpkxIZ.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Fm95dO4u.js → index-fmwnODwg.js} +1 -1
  135. package/src/assets/web-panel/assets/index-vira2aS_.js +1 -0
  136. package/src/assets/web-panel/assets/{index-CRWpixu2.js → index-zY56IXHj.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-BeUrpC_H.js → initDefaultProps-CVk4LKJK.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-CHW5EXt1.js → motion-IAABGXc_.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-CWaoWJvF.js → move-B9HSYeZc.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-CEC6Us1u.js → mtc-parser-CJfDtM89.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-1D-kP_Qj.js → omit-D5dYnom7.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-CsS0myLl.js → pickAttrs-xbUkaZdY.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-bMThOvkI.js → placementArrow-CIUU5NKN.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-B72knbW8.js → responsiveObserve-BZpgHE8P.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-C3bI_2yy.js → slide-x_8rsSKk.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-0-FmcCAS.js → statusUtils-BZyDnVJs.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-DXUyqoWY.js → styleChecker-DusfWp6J.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-BSSnL3f1.js → useFlexGapSupport-022JzYAL.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-B0Cvvl0S.js → useFs-DRDxX7-3.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-6D-d4WU5.js → usePersonalDataHub-DFrCp7m_.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-zjIrlxT_.js → vnode-bCuSFOmr.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-Hw7NEisu.js → zoom-sCpZ0sw7.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/data/changelog.json +14 -1
  155. package/src/lib/agent-sandbox.js +18 -1
  156. package/src/lib/sandbox-egress-authority-monitor.js +137 -0
  157. package/src/runtime/agent-core.js +88 -22
  158. package/src/assets/web-panel/assets/Projects-DZHlhyPB.js +0 -1
  159. package/src/assets/web-panel/assets/devWarning-Bz6vqBGV.js +0 -1
  160. package/src/assets/web-panel/assets/index-1b7DEw-w.js +0 -1
  161. package/src/assets/web-panel/assets/index-CfD4tMuW.js +0 -1
@@ -1 +1 @@
1
- import{u as v}from"./index-C7-T-u0L.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
1
+ import{u as v}from"./index-DjNjO-VL.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
@@ -1 +1 @@
1
- import{N as i,h as a,w as l}from"./index-C7-T-u0L.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
1
+ import{N as i,h as a,w as l}from"./index-DjNjO-VL.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-C7-T-u0L.js";import{i as f}from"./motion-CHW5EXt1.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"./index-DjNjO-VL.js";import{i as f}from"./motion-IAABGXc_.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,7 +8,7 @@
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-C7-T-u0L.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-DjNjO-VL.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.80",
7
+ "cliVersions": ["0.166.80"],
8
+ "date": null,
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.80: revoke active Docker egress shells",
13
+ "body": "- Revalidate live shell and sandbox authority while a Docker egress command is\n running. A failed or timed-out check locks revocation, cuts the policy broker,\n closes the target container, and prevents a successful execution receipt.\n- Check authority again immediately before target start and receipt issuance;\n reject sessions delivered after revocation. A real Linux Docker probe checks\n tunnel closure, target termination, container cleanup, and rejected outcome.\n- This bounded poll does not provide a lossless policy revision subscription;\n a policy change reverted between checks remains outside its detection scope."
14
+ }
15
+ ]
16
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.166.79",
@@ -10,7 +23,7 @@
10
23
  "sections": [
11
24
  {
12
25
  "heading": "Added - cc CLI 0.166.79: opt-in Docker domain egress",
13
- "body": "- Add an explicit Linux Docker egress engine for `run_shell`, with pinned target\n and relay images, a Unix-socket policy broker, target isolation verification,\n and a real product-path Docker probe.\n- Report an unknown execution outcome after target start or cleanup uncertainty\n without suggesting a safe automatic retry. Runtime policy-revision revocation\n remains under development."
26
+ "body": "- Add an explicit Linux Docker egress engine for `run_shell`, with pinned target\n and relay images, a Unix-socket policy broker, target isolation verification,\n and a real product-path Docker probe.\n- Report an unknown execution outcome after target start or cleanup uncertainty\n without suggesting a safe automatic retry. Lossless policy-revision\n subscription remains under development."
14
27
  }
15
28
  ]
16
29
  },
@@ -1130,6 +1130,14 @@ export async function executeDockerEgressShell(command, sandbox, options = {}) {
1130
1130
  });
1131
1131
  observedResult = result;
1132
1132
  await session.close();
1133
+ try {
1134
+ // The final live-authority fence must run after cleanup and immediately
1135
+ // before the execution receipt is issued.
1136
+ await options.beforeReceipt?.();
1137
+ } catch (error) {
1138
+ authorityError = error;
1139
+ throw error;
1140
+ }
1133
1141
  if (
1134
1142
  !startAuthorized ||
1135
1143
  !Number.isInteger(result?.exitCode) ||
@@ -1158,7 +1166,16 @@ export async function executeDockerEgressShell(command, sandbox, options = {}) {
1158
1166
  error.cleanupError = cleanupError;
1159
1167
  }
1160
1168
  }
1161
- if (authorityError) throw authorityError;
1169
+ if (authorityError) {
1170
+ if (startAuthorized)
1171
+ return {
1172
+ ...failure(),
1173
+ authorityFailure: {
1174
+ code: authorityError.code || "CC_DOCKER_EGRESS_AUTHORITY_CHANGED",
1175
+ },
1176
+ };
1177
+ throw authorityError;
1178
+ }
1162
1179
  return failure();
1163
1180
  }
1164
1181
  }
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Recheck the live shell authority while a Docker egress session exists. This
3
+ * is a bounded poll, not a lossless revision subscription: changes that are
4
+ * reverted between checks cannot be observed.
5
+ */
6
+ export function createDockerEgressAuthorityMonitor({
7
+ revalidate,
8
+ abortProxy,
9
+ intervalMs = 500,
10
+ checkTimeoutMs = 5_000,
11
+ }) {
12
+ if (typeof revalidate !== "function" || typeof abortProxy !== "function")
13
+ throw new TypeError("Docker egress authority callbacks are required");
14
+ let revoked = null;
15
+ let session = null;
16
+ let timer = null;
17
+ let checking = null;
18
+ let stopped = false;
19
+ const cleanupTasks = new Set();
20
+
21
+ function trackCleanup(operation) {
22
+ try {
23
+ const task = Promise.resolve(operation());
24
+ cleanupTasks.add(task);
25
+ void task.catch((error) => {
26
+ if (revoked && !revoked.cleanupError) revoked.cleanupError = error;
27
+ });
28
+ void task.finally(() => cleanupTasks.delete(task)).catch(() => {});
29
+ } catch (error) {
30
+ if (revoked && !revoked.cleanupError) revoked.cleanupError = error;
31
+ }
32
+ }
33
+
34
+ function revoke(cause) {
35
+ if (revoked) return revoked;
36
+ revoked =
37
+ cause instanceof Error
38
+ ? cause
39
+ : new Error("Docker egress authority was revoked");
40
+ if (!revoked.code) revoked.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
41
+ clearTimeout(timer);
42
+ // Latch first, then cut the broker before closing the target containers.
43
+ trackCleanup(abortProxy);
44
+ if (session) trackCleanup(() => session.close());
45
+ return revoked;
46
+ }
47
+
48
+ function assertAuthorized() {
49
+ if (revoked) throw revoked;
50
+ }
51
+
52
+ function attachSession(value) {
53
+ session = value;
54
+ if (revoked) {
55
+ trackCleanup(() => value.close());
56
+ throw revoked;
57
+ }
58
+ }
59
+
60
+ function checkNow() {
61
+ assertAuthorized();
62
+ if (checking) return checking;
63
+ let timeout;
64
+ const deadline = new Promise((_, reject) => {
65
+ timeout = setTimeout(() => {
66
+ reject(
67
+ Object.assign(new Error("Docker egress authority check timed out"), {
68
+ code: "CC_DOCKER_EGRESS_AUTHORITY_TIMEOUT",
69
+ }),
70
+ );
71
+ }, checkTimeoutMs);
72
+ timeout.unref?.();
73
+ });
74
+ const current = Promise.race([Promise.resolve().then(revalidate), deadline])
75
+ .then((accepted) => {
76
+ if (accepted === false)
77
+ throw new Error("Docker egress authority check rejected execution");
78
+ assertAuthorized();
79
+ })
80
+ .catch((error) => {
81
+ throw revoke(error);
82
+ })
83
+ .finally(() => {
84
+ clearTimeout(timeout);
85
+ if (checking === current) checking = null;
86
+ });
87
+ checking = current;
88
+ return current;
89
+ }
90
+
91
+ async function checkFresh() {
92
+ // A check already in flight may have sampled authority before a dispatch
93
+ // or receipt boundary. Drain it, then make a new observation.
94
+ if (checking) await checking;
95
+ assertAuthorized();
96
+ await checkNow();
97
+ }
98
+
99
+ function schedule() {
100
+ if (stopped || revoked) return;
101
+ timer = setTimeout(async () => {
102
+ if (stopped || revoked) return;
103
+ try {
104
+ await checkNow();
105
+ } catch {
106
+ // revoke() already latched the error and started teardown.
107
+ }
108
+ schedule();
109
+ }, intervalMs);
110
+ timer.unref?.();
111
+ }
112
+
113
+ return {
114
+ get revocationError() {
115
+ return revoked;
116
+ },
117
+ start: schedule,
118
+ checkNow,
119
+ checkFresh,
120
+ assertAuthorized,
121
+ attachSession,
122
+ revoke,
123
+ async finish() {
124
+ stopped = true;
125
+ clearTimeout(timer);
126
+ await checkFresh();
127
+ assertAuthorized();
128
+ },
129
+ stop() {
130
+ stopped = true;
131
+ clearTimeout(timer);
132
+ },
133
+ async awaitCleanup() {
134
+ await Promise.allSettled([...cleanupTasks]);
135
+ },
136
+ };
137
+ }
@@ -3398,8 +3398,23 @@ export async function executeTool(name, args, context = {}) {
3398
3398
  throw error;
3399
3399
  }
3400
3400
  const initialDigest = digestPolicyAuthority(initialProjection);
3401
+ const dockerSandboxDigest =
3402
+ context.sandbox?.engine === "docker-egress"
3403
+ ? digestPolicyAuthority(context.sandbox)
3404
+ : null;
3401
3405
  shellDispatchPolicyAuthority = Object.freeze({
3402
3406
  policyVersion: `cc-shell-policy-authority/v1:${initialDigest}`,
3407
+ revalidateDockerSandbox() {
3408
+ if (
3409
+ !dockerSandboxDigest ||
3410
+ digestPolicyAuthority(liveExecutionContext.sandbox || null) !==
3411
+ dockerSandboxDigest
3412
+ ) {
3413
+ const error = new Error("Docker egress sandbox authority changed");
3414
+ error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
3415
+ throw error;
3416
+ }
3417
+ },
3403
3418
  async revalidate() {
3404
3419
  try {
3405
3420
  if (
@@ -6643,9 +6658,8 @@ async function executeToolInner(
6643
6658
  executeSandboxedShell,
6644
6659
  sandboxSummary,
6645
6660
  } = await import("../lib/agent-sandbox.js");
6646
- // Keep the proxy on a separate event loop: the legacy sandbox dispatch
6647
- // below is synchronous. The sandbox still refuses domain-restricted
6648
- // execution until a non-bypassable network backend is available.
6661
+ // Keep the proxy on a separate event loop for legacy synchronous
6662
+ // dispatch. The Docker egress route uses an asynchronous session.
6649
6663
  const sboxPolicy = shellSandbox.policy || {};
6650
6664
  const needsEgress =
6651
6665
  shellSandbox.network === true &&
@@ -6658,6 +6672,7 @@ async function executeToolInner(
6658
6672
  let privateSocketDir = null;
6659
6673
  let dockerEgressSession = null;
6660
6674
  let proxyFailed = false;
6675
+ let authorityMonitor = null;
6661
6676
  if (needsEgress) {
6662
6677
  try {
6663
6678
  const { startEgressProxyWorker } =
@@ -6681,7 +6696,11 @@ async function executeToolInner(
6681
6696
  : {}),
6682
6697
  onFailure() {
6683
6698
  proxyFailed = true;
6684
- void dockerEgressSession?.close().catch(() => {});
6699
+ authorityMonitor?.revoke(
6700
+ Object.assign(new Error("Docker egress broker failed"), {
6701
+ code: "CC_DOCKER_EGRESS_BROKER_FAILED",
6702
+ }),
6703
+ );
6685
6704
  },
6686
6705
  },
6687
6706
  );
@@ -6696,10 +6715,39 @@ async function executeToolInner(
6696
6715
  let result;
6697
6716
  try {
6698
6717
  // Proxy startup and dynamic imports are asynchronous. Re-read the
6699
- // live authority once more after they settle and immediately before
6700
- // the synchronous sandbox dispatch.
6701
- await shellDispatchPolicyAuthority?.revalidate?.();
6702
- refreshPluginExecutionAuthority();
6718
+ // live authority after they settle and before sandbox dispatch.
6719
+ if (dockerEgress && proxyHandle?.socketPath) {
6720
+ const { createDockerEgressAuthorityMonitor } =
6721
+ await import("../lib/sandbox-egress-authority-monitor.js");
6722
+ authorityMonitor = createDockerEgressAuthorityMonitor({
6723
+ async revalidate() {
6724
+ await shellDispatchPolicyAuthority?.revalidate?.();
6725
+ shellDispatchPolicyAuthority?.revalidateDockerSandbox?.();
6726
+ refreshPluginExecutionAuthority();
6727
+ if (pluginBinSandboxPolicy) {
6728
+ const error = new Error(
6729
+ "A plugin sandbox authority appeared while Docker egress was running",
6730
+ );
6731
+ error.code = "ERR_PLUGIN_BIN_SANDBOX_ROUTE_CONFLICT";
6732
+ error.pluginBinFailClosed = true;
6733
+ throw error;
6734
+ }
6735
+ if (proxyFailed || proxyHandle.revision !== 0) {
6736
+ const error = new Error(
6737
+ "Docker egress authority changed during execution",
6738
+ );
6739
+ error.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
6740
+ throw error;
6741
+ }
6742
+ },
6743
+ abortProxy: () => proxyHandle.abort(),
6744
+ });
6745
+ authorityMonitor.start();
6746
+ await authorityMonitor.checkNow();
6747
+ } else {
6748
+ await shellDispatchPolicyAuthority?.revalidate?.();
6749
+ refreshPluginExecutionAuthority();
6750
+ }
6703
6751
  if (pluginBinSandboxPolicy) {
6704
6752
  const error = new Error(
6705
6753
  "A plugin sandbox authority appeared while the legacy shell sandbox was starting",
@@ -6737,23 +6785,13 @@ async function executeToolInner(
6737
6785
  auditContext: createShellProcessAuditContext(),
6738
6786
  onSession(session) {
6739
6787
  dockerEgressSession = session;
6740
- if (proxyFailed) void session.close().catch(() => {});
6788
+ authorityMonitor.attachSession(session);
6741
6789
  },
6742
6790
  async beforeStart() {
6743
- await shellDispatchPolicyAuthority?.revalidate?.();
6744
- refreshPluginExecutionAuthority();
6745
- if (
6746
- proxyFailed ||
6747
- proxyHandle.revision !== 0 ||
6748
- pluginBinSandboxPolicy
6749
- ) {
6750
- const error = new Error(
6751
- "Docker egress authority changed before target start",
6752
- );
6753
- error.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
6754
- throw error;
6755
- }
6791
+ await authorityMonitor.checkFresh();
6792
+ authorityMonitor.assertAuthorized();
6756
6793
  },
6794
+ beforeReceipt: () => authorityMonitor.finish(),
6757
6795
  },
6758
6796
  );
6759
6797
  } else {
@@ -6767,6 +6805,8 @@ async function executeToolInner(
6767
6805
  });
6768
6806
  }
6769
6807
  } finally {
6808
+ authorityMonitor?.stop();
6809
+ await authorityMonitor?.awaitCleanup();
6770
6810
  if (dockerEgressSession) {
6771
6811
  try {
6772
6812
  await dockerEgressSession.close();
@@ -6792,6 +6832,29 @@ async function executeToolInner(
6792
6832
  }
6793
6833
  }
6794
6834
  }
6835
+ if (dockerEgress && authorityMonitor?.revocationError) {
6836
+ const revoked = authorityMonitor.revocationError;
6837
+ result.authorityFailure = {
6838
+ code: revoked.code || "CC_DOCKER_EGRESS_AUTHORITY_CHANGED",
6839
+ ...(revoked.cleanupError ? { cleanupFailed: true } : {}),
6840
+ };
6841
+ if (result.exitCode === 0) {
6842
+ result = {
6843
+ ...result,
6844
+ exitCode: 1,
6845
+ stderr:
6846
+ "Docker egress authority was revoked; execution outcome must not be retried automatically.",
6847
+ executionOutcome: "completed-cleanup-unknown",
6848
+ retrySafe: false,
6849
+ sandboxCapabilities: assessAgentSandboxCapabilities(
6850
+ shellSandbox,
6851
+ {
6852
+ execution: { attempted: true, outcomeUnknown: true },
6853
+ },
6854
+ ),
6855
+ };
6856
+ }
6857
+ }
6795
6858
  const common = {
6796
6859
  sandbox: sandboxSummary(shellSandbox),
6797
6860
  sandboxCapabilities: result.sandboxCapabilities || null,
@@ -6801,6 +6864,9 @@ async function executeToolInner(
6801
6864
  retrySafe: result.retrySafe,
6802
6865
  }
6803
6866
  : {}),
6867
+ ...(result.authorityFailure
6868
+ ? { authorityFailure: result.authorityFailure }
6869
+ : {}),
6804
6870
  shellCommandPolicy: shellPolicy,
6805
6871
  approval: approvalOutcome,
6806
6872
  policyTrace: ["shell-policy", "approval", "sandbox"],
@@ -1 +0,0 @@
1
- import{I as i,J as A,U as I,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-C7-T-u0L.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as be,aP as Fe,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:W}=de();async function w(o,f,ye,ae=8e3){if(W){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),U=u([]),k=u(!1),E=u(!1),L=u(!1),b=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),J=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function K(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function Q(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function G(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,U.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);U.value=Array.isArray(f?.files)?f.files:[]}catch{U.value=[]}finally{k.value=!1}}async function H(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){b.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!b.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:b.value.name.trim(),description:b.value.description||null,projectType:b.value.type,rootPath:b.value.rootPath||null},`project init "${b.value.name.trim()}" --type ${b.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const F=u(!1),D=u(!1),j=u({path:"",content:""}),h=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},F.value=!0}function ce(){R.value={path:""},h.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);U.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),F.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),h.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:W,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:U,filesLoading:k,createOpen:E,creating:L,newProject:b,columns:z,countByStatus:V,filteredProjects:J,statusColor:g,syncColor:K,formatTime:Q,loadAll:C,onRowClick:G,openDetail:M,onDelete:H,onShowCreate:X,onCreate:T,createFileOpen:F,creatingFile:D,newFile:j,createFolderOpen:h,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return Fe},get FileAddOutlined(){return be},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={class:"page-title"},Ae={class:"page-sub"},Ie={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},Ue={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,W,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),U=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),b=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),J=i("a-table"),g=i("a-descriptions-item"),K=i("a-descriptions"),Q=i("a-divider"),C=i("a-empty"),G=i("a-list-item"),M=i("a-list"),H=i("a-spin"),X=i("a-drawer"),T=i("a-input"),F=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),h=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),A("div",null,[I("div",ze,[I("div",null,[I("h2",he,s(e.t("projects.title")),1),I("p",Ae,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(U,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),I("div",Ie,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(b,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(J,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),A("code",Ue,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),A(ne,{key:1},[I("strong",null,s(c.name),1),c.description?(p(),A("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),A(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(K,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[I("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),A("code",Re,s(e.detail.root_path),1)):(p(),A("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(Q,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(H,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(G,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),A("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[I("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(h,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(F,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(h,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(h,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(h,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(F,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(F,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(F,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const We=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-hbrRmO/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-C7-T-u0L.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-B8T2-Qv7.js";import{a0 as t}from"./index-C7-T-u0L.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-B72knbW8.js";import"./useFlexGapSupport-BSSnL3f1.js";import"./styleChecker-DXUyqoWY.js";import"./index-B5gj_uCC.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-DrNzLpF6.js";import{a0 as t}from"./index-C7-T-u0L.js";import"./vendor-Bn1JzzAn.js";import"./index-B5gj_uCC.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};