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.
- package/README.md +7 -7
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-CwD6Pm_Y.js → AIOps-C5NtVVBN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Du5Rp-O6.js → ActionButton-CE9-HsoR.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DY9l72ma.js → Analytics-DRO6sI0Z.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-7t1WIaCJ.js → AppLayout-CuVJiyC_.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BLIA5yny.js → Artifacts-GNahHsyZ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BC_N0QTg.js → Audit-DWvTomfm.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA7SxDtg.js → BackgroundAgents-k4TuA3ec.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BZ4AzS1_.js → Backup-BxqN-65D.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BhiggGaH.js → BaseInput-CYYLvwwD.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CDdBoIBI.js → Chat-CoDmZ9yb.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-hsBsrl31.js → ChatBubbleRenderer-ChTIMWch.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-asoMKSEK.js → Checkbox-CRVlfbkN.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B0gElLdm.js → Codegen-BttMy7rW.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DrNzLpF6.js → Col-DsdlE4QC.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DCzB5qkI.js → Community-BulheyO-.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Db-Eua_j.js → Compact-BC_7wMxW.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-B76NByjl.js → Compliance-BA3PDNLK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C-nK6Qpk.js → Cowork-B6Y3L-GP.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-C-GlQO19.js → Cron-DLk_CG77.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Cuuz9IIh.js → Crosschain-CvsKV-90.js} +1 -1
- package/src/assets/web-panel/assets/{DID-gwFaT973.js → DID-CD8K9G3F.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DHDt5jEf.js → Dashboard-CXNE434f.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CJ9kog-Y.js → Dropdown-C_P5mttB.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DOSXFRiQ.js → EmailListRenderer-MxZvItNA.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-CHYMP7rR.js → EvolutionSettings-DRoJQrDb.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-C1gzG5EK.js → FamilyGuardDashboard-CBrz9T6T.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CEdNVWUw.js → Federation-DKlGgjNs.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CwVOWPX8.js → FormItemContext-CteicPS5.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CgNUs3kT.js → GenericCardRenderer-Bs10mDna.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DM4MNnQo.js → Git-CXwzFBIh.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DdOtjkvd.js → Governance-CYzcwfwf.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-28PidFfr.js → Inference-pYpCF1ws.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bpj_qNUK.js → KnowledgeGraph-B0YJnOpj.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C6Ix19Ay.js → Logs-D-hJWfq-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-Bj6mtPbf.js → MarkdownRenderer-BPQlDtB7.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DqkhRSMP.js → Marketplace-D5ZmI-si.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-1WQ2SjaE.js → McpTools-DByD6jY1.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BWTi7v6R.js → Memory--lsjJd7Y.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DB4wu3UE.js → MobileBridge-GQ3vGZO9.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bh9pWx2f.js → MobileProjects-Dh2wq-NU.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BVF1Wrno.js → Mtc-uQFoRe_Z.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-DtNfslPf.js → MtcAudit-BUBYbvuz.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-4qcXP0bf.js → Multisig-D790SLqM.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BRJl5Ehw.js → NLProgramming-DcV9gSqn.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BRY_bgMk.js → Notes-sVl7Y_vt.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-DirXMFz4.js → NotificationSettings-BHRPqBZ3.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BlrY8lwu.js → OrderTableRenderer-B029pIMF.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CVzQ1vO-.js → Organization-BKrF-dtp.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-A3rXTPG4.js → Overflow-DOAGxhhi.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Db9ABWz0.js → P2P-7uQ4F7lh.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CPv0H2OZ.js → PdhVaultBrowser-BegpATva.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-COnW4sIR.js → Permissions-C0qK0tAi.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C1hG7rp7.js → PersonalDataHub-DCnfXKyb.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline---GLRDEe.js → Pipeline-D8wdVvao.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-aaN9R3Lu.js → Privacy-C-dGmb9y.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C-kw49hE.js → ProjectInit-ChKvrsfc.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-y5tTkBTC.js → ProjectSettings-CaWnzNBi.js} +2 -2
- package/src/assets/web-panel/assets/Projects-2uNBqS05.js +1 -0
- package/src/assets/web-panel/assets/{Providers-LqxnV72o.js → Providers-DTufbN-S.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-D_q-Y5F0.js → QrScannerModal-CGv6QJMC.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-_E_KB5o8.js → QuickAsk-BfNcUCfG.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BN8S5WJA.js → Recommend-B0s5YT2K.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BFzrY_aW.js → RemoteSession-YCs5wa8P.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-C1HCLaTV.js → Reputation-DBC__Ylq.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B8T2-Qv7.js → Row-D_NT1ROe.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CNQLk8v1.js → RssFeed-Dd9ktNRw.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BOx720Kc.js → Search-BsmlT4PY.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Ds8z6PF6.js → Security-DN-_e3oM.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C0-YkRSF.js → Services-Bm_KqSDz.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DUHlSySD.js → Skeleton-BYldeYI0.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C8CBbbh0.js → Skills-h7XAXSls.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-lQltyYfB.js → Sla-4ArxAaMJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B5vyOma-.js → SpeechSettings-B639ejZr.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BKDPu_y-.js → SyncSettings-DR6RRo1O.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Bgvf7LTx.js → Tasks-DysrrJVE.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BMZyYYS7.js → Templates-DyyB9L9f.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-7PYTig8f.js → Tenant-XbmWbUl1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-C2W0LMdR.js → Terminal-C5GeciJG.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CqREew_l.js → TimelineRenderer-Db-NjeVy.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BhTyxTuD.js → Tokens-Btm9pYvJ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DxNSSZy_.js → Trigger-BhJ35b0V.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Dy_wfbIh.js → Trust-C5T4GJky.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DJC5ANqx.js → UkeySign-CqWxh5U0.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CNFevrO4.js → VideoEditing-DKyI9zg1.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CXzuS1YK.js → Wallet-kgvyQOtT.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BWS6HP8c.js → WebAuthn-1wWucdJt.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-swiN_7Vj.js → WorkflowEditor-rHVIbLME.js} +1 -1
- package/src/assets/web-panel/assets/{chat-NwH7qlBs.js → chat-DV8ZtfWQ.js} +1 -1
- package/src/assets/web-panel/assets/{colors-h6nRhBTw.js → colors-zznFfEpj.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BQ6B6rP2.js → compact-item-CWk10Qsu.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CQkJuRcG.js → createContext-CtoMW-kY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-_Wlo1cZJ.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Diwl1WyI.js → hasIn-ieyHKAZZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqH-oOR3.js → index--6zQrvYc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcjlIMP9.js → index-0GSB8LOT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjcARUtr.js → index-14ADEHo7.js} +1 -1
- package/src/assets/web-panel/assets/{index-GTefQSbY.js → index-2TTLREp7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjB8IC9D.js → index-9fgmdiB_.js} +1 -1
- package/src/assets/web-panel/assets/{index-mxxZtsHp.js → index-B2WI4Jse.js} +1 -1
- package/src/assets/web-panel/assets/{index-AzeSQJDK.js → index-B9w6Zr_O.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKaB4xTf.js → index-BG9KlVJl.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5P498Rk.js → index-BGYCtfL-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyBtEVLM.js → index-Bf9069uM.js} +1 -1
- package/src/assets/web-panel/assets/{index-pYwYBVeQ.js → index-BrpyZMUe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYYb8oeV.js → index-CBS8OtL2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI3ALCgN.js → index-CGZGQTF5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQYZa1Ci.js → index-CLeX8Qp7.js} +1 -1
- package/src/assets/web-panel/assets/{index-iHNOr_wL.js → index-CdSnkhrR.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcKDUGYf.js → index-CewbVIM8.js} +1 -1
- package/src/assets/web-panel/assets/index-Cj8Mcdok.js +1 -0
- package/src/assets/web-panel/assets/{index-Dwpthe2b.js → index-CjkiJdIX.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3Ye1ISy.js → index-Cn71LASJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bs6HyCfP.js → index-Cqpfzkch.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_HY0nyN.js → index-CrBful_u.js} +1 -1
- package/src/assets/web-panel/assets/{index-OEWSrqit.js → index-CxSgg3Xc.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3QgcUBV.js → index-D7yq9nAq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CatBQDSQ.js → index-D9jmNLfO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZAsByy4.js → index-DNlvUg0O.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZ9CNcbJ.js → index-DPwOEcUt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvPz6vZ8.js → index-DR1Uw5as.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5gj_uCC.js → index-DRuSuXJh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwsoVDi-.js → index-DSnQWQ4L.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnQUin2K.js → index-DdMho2Wr.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7-T-u0L.js → index-DjNjO-VL.js} +3 -3
- package/src/assets/web-panel/assets/{index-Da8frO_A.js → index-DmtyRKy8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRl3KUj0.js → index-Dz1TqS34.js} +1 -1
- package/src/assets/web-panel/assets/{index-BheCvudN.js → index-G9bqTRu6.js} +1 -1
- package/src/assets/web-panel/assets/{index-0ZztPzIm.js → index-McW2cdbg.js} +1 -1
- package/src/assets/web-panel/assets/{index-TYMmUsxZ.js → index-esCpkxIZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Fm95dO4u.js → index-fmwnODwg.js} +1 -1
- package/src/assets/web-panel/assets/index-vira2aS_.js +1 -0
- package/src/assets/web-panel/assets/{index-CRWpixu2.js → index-zY56IXHj.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BeUrpC_H.js → initDefaultProps-CVk4LKJK.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CHW5EXt1.js → motion-IAABGXc_.js} +1 -1
- package/src/assets/web-panel/assets/{move-CWaoWJvF.js → move-B9HSYeZc.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CEC6Us1u.js → mtc-parser-CJfDtM89.js} +1 -1
- package/src/assets/web-panel/assets/{omit-1D-kP_Qj.js → omit-D5dYnom7.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CsS0myLl.js → pickAttrs-xbUkaZdY.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-bMThOvkI.js → placementArrow-CIUU5NKN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B72knbW8.js → responsiveObserve-BZpgHE8P.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C3bI_2yy.js → slide-x_8rsSKk.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-0-FmcCAS.js → statusUtils-BZyDnVJs.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DXUyqoWY.js → styleChecker-DusfWp6J.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BSSnL3f1.js → useFlexGapSupport-022JzYAL.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B0Cvvl0S.js → useFs-DRDxX7-3.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-6D-d4WU5.js → usePersonalDataHub-DFrCp7m_.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-zjIrlxT_.js → vnode-bCuSFOmr.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Hw7NEisu.js → zoom-sCpZ0sw7.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +14 -1
- package/src/lib/agent-sandbox.js +18 -1
- package/src/lib/sandbox-egress-authority-monitor.js +137 -0
- package/src/runtime/agent-core.js +88 -22
- package/src/assets/web-panel/assets/Projects-DZHlhyPB.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Bz6vqBGV.js +0 -1
- package/src/assets/web-panel/assets/index-1b7DEw-w.js +0 -1
- package/src/assets/web-panel/assets/index-CfD4tMuW.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
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-
|
|
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-
|
|
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-
|
|
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">
|
package/src/data/changelog.json
CHANGED
|
@@ -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.
|
|
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
|
},
|
package/src/lib/agent-sandbox.js
CHANGED
|
@@ -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)
|
|
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
|
|
6647
|
-
//
|
|
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
|
-
|
|
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
|
|
6700
|
-
|
|
6701
|
-
|
|
6702
|
-
|
|
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
|
-
|
|
6788
|
+
authorityMonitor.attachSession(session);
|
|
6741
6789
|
},
|
|
6742
6790
|
async beforeStart() {
|
|
6743
|
-
await
|
|
6744
|
-
|
|
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};
|