chainlesschain 0.162.174 → 0.162.175
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/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-Dcl-X1Hw.js → AIOps-DherW0Rh.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-ClMh9HzT.js → ActionButton-CDGfqt2Y.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DPj0rSQ5.js → Analytics-BYhkzdgD.js} +3 -3
- package/src/assets/web-panel/assets/AppLayout-cEKk1cpb.js +9 -0
- package/src/assets/web-panel/assets/{Artifacts-L8781rE8.js → Artifacts-_aXR3WWc.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CffB6WIP.js → Audit-CYAf-gY7.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BkLhayyY.js → BackgroundAgents-D4Q20phR.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BQnwFI78.js → Backup-Cq0Tyk58.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xuUGHQch.js → BaseInput-CPj_CdAv.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-feQXwWrg.js → Chat-BQ-Qq0es.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Ci97vNTs.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DVaIiUGW.js → Checkbox-rke6l3yg.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D2kEnzeU.js → Codegen-DiacrIPq.js} +1 -1
- package/src/assets/web-panel/assets/{Col-azDoyusS.js → Col-Cx3BY-Up.js} +1 -1
- package/src/assets/web-panel/assets/{Community-OZdnPWM5.js → Community-DfmWiQy8.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-VDMvBN-C.js → Compact-DdQnpxy5.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CPJ_zgQ1.js → Compliance-lzliOH_r.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-iRBwcsOA.js → Cowork-CYx4Un5k.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DrxrspUz.js → Cron-BGDcPFlo.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D-rkAZXF.js → Crosschain-0_X5g2ri.js} +1 -1
- package/src/assets/web-panel/assets/{DID-5Pp1Xnmr.js → DID-C0PEf3Eu.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-DULQjQ58.js +3 -0
- package/src/assets/web-panel/assets/{Dropdown-BWj_E0Ie.js → Dropdown-DGRHRbW6.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BT-wgSEh.js → EmailListRenderer-ChX8XPwB.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-1PzH23pa.js → FamilyGuardDashboard-Dyq6IBNu.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BxMIXGC6.js → Federation-DH1NfAL2.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CyJobBln.js → FormItemContext-BN1I_uNi.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-YkjFuQTN.js → GenericCardRenderer-Dq_2UYpe.js} +1 -1
- package/src/assets/web-panel/assets/{Git-C2a98Wp_.js → Git-BAy1yvI2.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DKL3Fl84.js → Governance-Db6Q2iSy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BJ2cQC_3.js → Inference-0ub6yHcr.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DBAsOngt.js → KnowledgeGraph-DtLetM36.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-COt8g9LO.js → Logs-Bcoy7CUd.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-3Lfht1Fd.js → MarkdownRenderer-BfEMFAXf.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-C9Zk9Pb2.js → Marketplace-tt2rzwRR.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DDWDFWPO.js → McpTools-BhOgX-MU.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BRmVye_o.js → Memory-BJUxeWBL.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CppBbWpD.js → MobileBridge-BwUY2G9w.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-C4GKn1dH.js → MobileProjects-BLRfHhqi.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CcWpeGa6.js → Mtc-B2WMboOm.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BcllEq0K.js → MtcAudit-8pNEXO63.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BFD1CarL.js → Multisig-C1wm5a_1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-QNXXYvjz.js → NLProgramming-C1QpKF7g.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-07YwgQVy.js → Notes-CiQUcxFu.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-bOccEInE.js → NotificationSettings-BblDPJ_x.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DlRi29WL.js → OrderTableRenderer-DRjYcPtb.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CBaezzEr.js → Organization-Dp3VKB0X.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Bl5NohFO.js → Overflow-Czx161m9.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CLMal9Aw.js → P2P-ClFi6wOs.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CGO0NITk.js → PdhVaultBrowser-CRweW0lz.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CPSw48E2.js → Permissions-BzcRoqTn.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CDM5n134.js → PersonalDataHub-ChGTpNMd.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BdsqG7WV.js → Pipeline-BMOOpKWA.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B6L4E-M7.js → Privacy-D0AZHObH.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DXPyZKRs.js → ProjectInit-yYFlZ6Ja.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BrCC3xYT.js → ProjectSettings-DJNVuMQs.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BYmuHC2q.js → Projects-Br0rBWH1.js} +1 -1
- package/src/assets/web-panel/assets/Providers-zZRhNtSu.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-DkukgCrR.js → QrScannerModal-81NZOitV.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D-htOrV8.js → QuickAsk-Dic2lCbJ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bm7SIfzu.js → Recommend-Dh9iwViE.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C9rP-iMc.js → RemoteSession-Bq9VYEFy.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-kGlUgbsl.js → Reputation-CxFZ-NbJ.js} +1 -1
- package/src/assets/web-panel/assets/{Row-PBupbbUA.js → Row-BVSLcaX2.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-njlwKUGK.js → RssFeed-BbC-5DOH.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DLdEmgBw.js → Search-BfjZ1GCr.js} +1 -1
- package/src/assets/web-panel/assets/{Security-SXGPSHdu.js → Security-CVjhOV5r.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CuFGnNsb.js → Services-D45u-Aqe.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CtUC0mDa.js → Skeleton-WkGoK4he.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-P1qgOVFn.js → Skills-D_jvQZcj.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CsppE8YV.js → Sla-Bf4QTF3E.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Cq1oG56m.js → SpeechSettings-DVpZdbMN.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DdKW6V-C.js → SyncSettings-DEEojoMS.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BCc9san5.js → Tasks-DFwxpLIk.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CcHC1dMA.js → Templates-Bzl-9wY5.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CA4PqU22.js → Tenant-0khxUOB8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Fj7ea0In.js → Terminal-DWGYhAYU.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DHWTSvOy.js → TimelineRenderer-B0Y4LONc.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Ddz-P_yh.js → Tokens-DEE07SFh.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ePmrmLZ1.js → Trigger-BM7xvA5z.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DmuK1CCE.js → Trust-Dv3ijvvZ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CqqBuRrT.js → UkeySign-B1-enmMt.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BGlR3uWM.js → VideoEditing-DYiIPByd.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Ba_Qx6Ga.js → Wallet-D-y374BQ.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-29neXKt2.js → WebAuthn-HBDjcUhi.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-lD0lR0UQ.js → WorkflowEditor-sKn4qTID.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B3stH01u.js → chat-TVYhaBXj.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Czly56MN.js → colors-DMADxY9v.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C0TkbkAJ.js → compact-item-OftcHpO_.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BJmpSlf1.js → createContext-DW1zVUSN.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CLOk6rdE.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D1q-zw7u.js → hasIn-CaUathNp.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7sFKQ53.js → index--5UvwqH_.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dpz_7sf-.js → index-77kgkUgY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlvsSuBC.js → index-8YelceUU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpMIdPJ0.js → index-B-19mFhn.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEt2-3x5.js → index-B52Ztt8Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQftlZn-.js → index-BBNg08cD.js} +3 -3
- package/src/assets/web-panel/assets/{index-upY9rkGZ.js → index-BEzLLVYd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDHXx65P.js → index-BFVbDpqg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmUta2lw.js → index-BJ1PjRY3.js} +1 -1
- package/src/assets/web-panel/assets/{index-z8ATo2aQ.js → index-BSp1Ofvx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO8xOwxi.js → index-Bg-7FpaL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpGs96FC.js → index-BupSWDcl.js} +1 -1
- package/src/assets/web-panel/assets/{index-K4YaPDOn.js → index-BvRw4Fna.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8KqsomG.js → index-C9JoaYSs.js} +1 -1
- package/src/assets/web-panel/assets/{index-8GKykbS4.js → index-CK-p7Hji.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dw3L_smW.js → index-CKNdnJRo.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAhrn9EJ.js → index-CM8W07sc.js} +1 -1
- package/src/assets/web-panel/assets/index-CSgUfMTM.js +1 -0
- package/src/assets/web-panel/assets/{index-C1pOqU7D.js → index-CZXYI5LU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV-twjNO.js → index-CeCIYYG7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIF6XHIi.js → index-Cmdv6Dev.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cu_4HaUS.js → index-CpDtN0dl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRcQsPez.js → index-D63QVAiJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-kTvMq7.js → index-DAfT3EMd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHvPlzWJ.js → index-DHi634g9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgS8XUBU.js → index-DKjqFpYa.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZDUhX41Z.js → index-DWVZ3T0t.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVwJ3jht.js → index-DXcqvWBp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbvNJUwu.js → index-DYwwUKDg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaqEHaCg.js → index-DZdT8nio.js} +1 -1
- package/src/assets/web-panel/assets/index-DliSZvAP.js +1 -0
- package/src/assets/web-panel/assets/{index-DBqAm8es.js → index-GUKz4Pv9.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChESIe5r.js → index-Lr0MO-GU.js} +1 -1
- package/src/assets/web-panel/assets/{index-C27TnOoT.js → index-hXq7QRA_.js} +1 -1
- package/src/assets/web-panel/assets/{index-cPjWjvmW.js → index-iDmgT2Dg.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf7Gr3NG.js → index-kdMl_0zL.js} +1 -1
- package/src/assets/web-panel/assets/{index-XWV8JWMc.js → index-pSVCBsG4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZeoKL6t.js → index-s-EnkUCn.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bm_-RKal.js → index-sm1sGIxW.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-QWEXi6-t.js → initDefaultProps-DdcKTlQR.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BfrQwvV1.js → motion-CL-hTBQj.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dn7x0H9t.js → move-qYSAkxNG.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-F61D_TgE.js → mtc-parser-ZwRSZtRP.js} +1 -1
- package/src/assets/web-panel/assets/{omit-4SQZ39PF.js → omit-Bld-8ftI.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-C7DTe126.js → pickAttrs-DGHs-a9Z.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-40NeyzDK.js → placementArrow-DRQPMyI5.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BiUJ6qWs.js → responsiveObserve-C5MJG_Yo.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CacJTM3f.js → slide-VZ-fpZCD.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-K812HB-k.js → statusUtils-9ocfCyHk.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CKeHA2eM.js → styleChecker-B6QAwAN5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CKl4FqXF.js → useFlexGapSupport-Bq1twor3.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DPoiJjSZ.js → useFs-DKZq96tz.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-aHwBspmt.js → usePersonalDataHub-D0RmRVXf.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DrA-GuCT.js → vnode-D6kEj_tt.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-G3LMswgy.js → zoom-2yfasoQf.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +6 -2
- package/src/commands/background-session.js +103 -0
- package/src/esm-bridge.js +3 -0
- package/src/gateways/ws/ws-server.js +18 -2
- package/src/index.js +123 -55
- package/src/lazy-dispatch.js +86 -85
- package/src/lib/async-hook-supervisor.cjs +14 -2
- package/src/lib/background-interaction-resolver.js +71 -0
- package/src/lib/background-session-transport.js +59 -1
- package/src/lib/crash-reporter.js +6 -0
- package/src/lib/hook-manager.js +32 -4
- package/src/lib/ipc-attach-protocol.js +98 -0
- package/src/lib/process-execution-broker/credential-agent.js +275 -0
- package/src/lib/process-execution-broker/index.js +155 -6
- package/src/lib/process-execution-broker/platform-sandbox.js +351 -0
- package/src/lib/provenance-api.js +6 -0
- package/src/lib/proxy-bootstrap.js +19 -0
- package/src/lib/repl-rewind.js +9 -4
- package/src/lib/session-hooks.js +328 -473
- package/src/lib/session-telemetry-middleware.js +6 -0
- package/src/lib/trace-api.js +6 -0
- package/src/lib/update-notice.js +3 -43
- package/src/repl/agent-repl.js +39 -13
- package/src/workers/background-agent-worker.js +80 -1
- package/src/assets/web-panel/assets/AppLayout-7iSKDmlI.js +0 -9
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DcbUHeGW.js +0 -1
- package/src/assets/web-panel/assets/Dashboard-BAKYNavw.js +0 -3
- package/src/assets/web-panel/assets/Providers-CbCe2eUl.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CDI8Sbaj.js +0 -1
- package/src/assets/web-panel/assets/index-96LBR96V.js +0 -1
- package/src/assets/web-panel/assets/index-DyQkiW24.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as f}from"./index-
|
|
1
|
+
import{u as f}from"./index-BBNg08cD.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D 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-BBNg08cD.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-BBNg08cD.js";import{i as f}from"./motion-CL-hTBQj.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-BBNg08cD.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/commands/agent.js
CHANGED
|
@@ -517,7 +517,11 @@ export function registerAgentCommand(program) {
|
|
|
517
517
|
const { setupAgentWorktree, finishAgentWorktree } =
|
|
518
518
|
await import("../lib/agent-worktree.js");
|
|
519
519
|
_finishAgentWorktreeFn = finishAgentWorktree;
|
|
520
|
-
|
|
520
|
+
const worktreeCwd =
|
|
521
|
+
process.platform === "darwin"
|
|
522
|
+
? process.cwd().replace(/^\/private\//, "/")
|
|
523
|
+
: process.cwd();
|
|
524
|
+
_worktree = setupAgentWorktree({ cwd: worktreeCwd });
|
|
521
525
|
process.chdir(_worktree.path);
|
|
522
526
|
process.stderr.write(
|
|
523
527
|
`worktree: ${_worktree.path} (branch ${_worktree.branch})\n`,
|
|
@@ -1079,7 +1083,7 @@ export function registerAgentCommand(program) {
|
|
|
1079
1083
|
if (promptWasPiped) childArgv.push(prompt);
|
|
1080
1084
|
const state = launchBackgroundAgent({
|
|
1081
1085
|
argv: childArgv,
|
|
1082
|
-
cwd: process.cwd(),
|
|
1086
|
+
cwd: _worktree ? _worktree.path : process.cwd(),
|
|
1083
1087
|
sessionId,
|
|
1084
1088
|
title: prompt.slice(0, 100),
|
|
1085
1089
|
followUpArgv,
|
|
@@ -151,6 +151,7 @@ async function followBackgroundAgent(id, options = {}) {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
logger.log(chalk.gray(`Attached to ${id}. Streaming logs; Ctrl-C detaches.`));
|
|
154
|
+
// eslint-disable-next-line no-constant-condition
|
|
154
155
|
while (true) {
|
|
155
156
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
156
157
|
const next = readLogFromOffset(logFile, offset);
|
|
@@ -224,6 +225,84 @@ export async function interactiveAttach(id, state, options = {}) {
|
|
|
224
225
|
case "error":
|
|
225
226
|
logger.log(chalk.yellow(`— ${message.message}`));
|
|
226
227
|
return;
|
|
228
|
+
case "interaction_request": {
|
|
229
|
+
// P0-2: Human-in-the-loop interaction request from the agent
|
|
230
|
+
const {
|
|
231
|
+
intId,
|
|
232
|
+
prompt,
|
|
233
|
+
hint,
|
|
234
|
+
options: opts,
|
|
235
|
+
multiSelect,
|
|
236
|
+
timeoutMs,
|
|
237
|
+
} = message;
|
|
238
|
+
logger.log("");
|
|
239
|
+
logger.log(chalk.cyan.bold("? Agent asks for your input:"));
|
|
240
|
+
logger.log(chalk.white(` ${prompt}`));
|
|
241
|
+
if (hint) logger.log(chalk.gray(` (${hint})`));
|
|
242
|
+
if (timeoutMs)
|
|
243
|
+
logger.log(
|
|
244
|
+
chalk.gray(` (timeout: ${Math.round(timeoutMs / 1000)}s)`),
|
|
245
|
+
);
|
|
246
|
+
let promptText = " Your answer";
|
|
247
|
+
if (opts && Array.isArray(opts) && opts.length > 0) {
|
|
248
|
+
logger.log("");
|
|
249
|
+
opts.forEach((opt, idx) => {
|
|
250
|
+
const label =
|
|
251
|
+
typeof opt === "string" ? opt : opt.label || String(opt);
|
|
252
|
+
const desc =
|
|
253
|
+
typeof opt === "object" && opt.description
|
|
254
|
+
? ` - ${opt.description}`
|
|
255
|
+
: "";
|
|
256
|
+
logger.log(chalk.white(` ${idx + 1}) ${label}${desc}`));
|
|
257
|
+
});
|
|
258
|
+
promptText = multiSelect
|
|
259
|
+
? " Enter number(s) (comma-separated)"
|
|
260
|
+
: " Enter a number";
|
|
261
|
+
}
|
|
262
|
+
if (multiSelect)
|
|
263
|
+
logger.log(chalk.gray(" (multiple selections allowed)"));
|
|
264
|
+
// Pause the log stream and prompt the user via readline
|
|
265
|
+
rl.question(chalk.cyan(`${promptText}: `), (raw) => {
|
|
266
|
+
const answer = raw.trim();
|
|
267
|
+
let resolved = answer;
|
|
268
|
+
if (opts && Array.isArray(opts) && opts.length > 0) {
|
|
269
|
+
// Parse numeric selection
|
|
270
|
+
const nums = answer
|
|
271
|
+
.split(",")
|
|
272
|
+
.map((s) => parseInt(s.trim(), 10))
|
|
273
|
+
.filter((n) => n >= 1 && n <= opts.length);
|
|
274
|
+
if (nums.length === 0) {
|
|
275
|
+
logger.log(
|
|
276
|
+
chalk.yellow(" Invalid selection, sending raw text"),
|
|
277
|
+
);
|
|
278
|
+
} else if (multiSelect) {
|
|
279
|
+
resolved = nums.map((n) => opts[n - 1]);
|
|
280
|
+
} else {
|
|
281
|
+
resolved = opts[nums[0] - 1];
|
|
282
|
+
}
|
|
283
|
+
// Normalize to value if object option
|
|
284
|
+
if (multiSelect) {
|
|
285
|
+
resolved = resolved.map((o) =>
|
|
286
|
+
typeof o === "object" && o.value !== undefined
|
|
287
|
+
? o.value
|
|
288
|
+
: o,
|
|
289
|
+
);
|
|
290
|
+
} else if (
|
|
291
|
+
typeof resolved === "object" &&
|
|
292
|
+
resolved.value !== undefined
|
|
293
|
+
) {
|
|
294
|
+
resolved = resolved.value;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
conn.send({
|
|
298
|
+
type: "interaction_response",
|
|
299
|
+
intId,
|
|
300
|
+
answer: resolved,
|
|
301
|
+
});
|
|
302
|
+
logger.log(chalk.gray("— response sent to agent"));
|
|
303
|
+
});
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
227
306
|
default:
|
|
228
307
|
return;
|
|
229
308
|
}
|
|
@@ -248,6 +327,14 @@ export async function interactiveAttach(id, state, options = {}) {
|
|
|
248
327
|
),
|
|
249
328
|
);
|
|
250
329
|
|
|
330
|
+
// P0-2: If the agent is already waiting for human input (e.g. the question
|
|
331
|
+
// was issued before this client attached, or a previous client detached
|
|
332
|
+
// without answering), re-prompt immediately.
|
|
333
|
+
const preExistingQuestion =
|
|
334
|
+
state.status === "awaiting-input" && state.pendingQuestion
|
|
335
|
+
? { ...state.pendingQuestion }
|
|
336
|
+
: null;
|
|
337
|
+
|
|
251
338
|
const readline = await import("node:readline");
|
|
252
339
|
const rl = readline.createInterface({
|
|
253
340
|
input: process.stdin,
|
|
@@ -273,6 +360,21 @@ export async function interactiveAttach(id, state, options = {}) {
|
|
|
273
360
|
const detach = () => rl.close();
|
|
274
361
|
rl.on("SIGINT", detach);
|
|
275
362
|
|
|
363
|
+
if (preExistingQuestion) {
|
|
364
|
+
setImmediate(() => {
|
|
365
|
+
conn.onEvent?.({
|
|
366
|
+
type: "interaction_request",
|
|
367
|
+
intId: preExistingQuestion.intId,
|
|
368
|
+
prompt: preExistingQuestion.prompt,
|
|
369
|
+
hint: preExistingQuestion.hint,
|
|
370
|
+
options: preExistingQuestion.options,
|
|
371
|
+
multiSelect: preExistingQuestion.multiSelect,
|
|
372
|
+
timeoutMs: preExistingQuestion.timeoutMs,
|
|
373
|
+
_deferred: true,
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
|
|
276
378
|
await new Promise((resolve) => {
|
|
277
379
|
rl.on("close", resolve);
|
|
278
380
|
const poll = setInterval(() => {
|
|
@@ -692,3 +794,4 @@ export function registerBackgroundSessionCommands(program) {
|
|
|
692
794
|
}
|
|
693
795
|
});
|
|
694
796
|
}
|
|
797
|
+
|
|
@@ -859,6 +859,7 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
859
859
|
...process.env,
|
|
860
860
|
FORCE_COLOR: "0",
|
|
861
861
|
NO_SPINNER: "1",
|
|
862
|
+
NODE_NO_WARNINGS: "1",
|
|
862
863
|
// When this server runs inside Electron (e.g. desktop web-shell)
|
|
863
864
|
// process.execPath points at the Electron binary, not node. Setting
|
|
864
865
|
// ELECTRON_RUN_AS_NODE=1 makes Electron behave as a plain Node
|
|
@@ -894,27 +895,42 @@ export class ChainlessChainWSServer extends EventEmitter {
|
|
|
894
895
|
|
|
895
896
|
if (stream) {
|
|
896
897
|
// Stream mode: send chunks as they arrive
|
|
898
|
+
// stdout is the primary command result. Node can deliver a startup
|
|
899
|
+
// warning on stderr before the first stdout chunk (especially on the
|
|
900
|
+
// `--version` fast path), which otherwise makes consumers mistake the
|
|
901
|
+
// warning for the command output. Hold early stderr until stdout has
|
|
902
|
+
// been announced; if there is no stdout, flush it before stream-end.
|
|
903
|
+
let stdoutSeen = false;
|
|
904
|
+
const pendingStderr = [];
|
|
905
|
+
|
|
897
906
|
child.stdout.on("data", (data) => {
|
|
907
|
+
stdoutSeen = true;
|
|
898
908
|
this._send(ws, {
|
|
899
909
|
id,
|
|
900
910
|
type: "stream-data",
|
|
901
911
|
channel: "stdout",
|
|
902
912
|
data: data.toString("utf8"),
|
|
903
913
|
});
|
|
914
|
+
while (pendingStderr.length > 0) {
|
|
915
|
+
this._send(ws, pendingStderr.shift());
|
|
916
|
+
}
|
|
904
917
|
});
|
|
905
918
|
|
|
906
919
|
child.stderr.on("data", (data) => {
|
|
907
|
-
|
|
920
|
+
const message = {
|
|
908
921
|
id,
|
|
909
922
|
type: "stream-data",
|
|
910
923
|
channel: "stderr",
|
|
911
924
|
data: data.toString("utf8"),
|
|
912
|
-
}
|
|
925
|
+
};
|
|
926
|
+
if (stdoutSeen) this._send(ws, message);
|
|
927
|
+
else pendingStderr.push(message);
|
|
913
928
|
});
|
|
914
929
|
|
|
915
930
|
child.on("close", (exitCode) => {
|
|
916
931
|
clearTimeout(timer);
|
|
917
932
|
this.processes.delete(id);
|
|
933
|
+
for (const message of pendingStderr) this._send(ws, message);
|
|
918
934
|
this._send(ws, {
|
|
919
935
|
id,
|
|
920
936
|
type: "stream-end",
|
package/src/index.js
CHANGED
|
@@ -1,75 +1,143 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* ChainlessChain CLI - Unified Entry Point
|
|
4
|
-
*
|
|
5
|
-
* 架构分层严格遵守:可观测层/审计层/执行层/扩展层完全分离,无跨层调用,无超级函数
|
|
4
|
+
* Uses top-level await to preload all commands synchronously for tests.
|
|
6
5
|
*/
|
|
7
6
|
import { createBaseProgram } from "./program-base.js";
|
|
8
|
-
import
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { pathToFileURL } from "node:url";
|
|
9
|
+
import { dirname, join } from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import manifest from "./command-manifest.json" with { type: "json" };
|
|
9
12
|
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
import
|
|
13
|
-
import processExecutionBroker from "./lib/process-execution-broker/index.js"; // 执行层:仅负责JSII运行时进程调度
|
|
14
|
-
import hooksV2Runtime from "./lib/hooks-v2-runtime.js"; // 扩展层:仅负责命令生命周期钩子
|
|
15
|
-
import { initOTLPExporter } from "./lib/otlp-exporter.js"; // 可观测层扩展:OTLP遥测导出,仅在可观测层内运行
|
|
13
|
+
// The manifest entry is the canonical registration point for learning. Keep
|
|
14
|
+
// these names visible here for tooling that audits the CLI's command surface:
|
|
15
|
+
// import { registerLearningCommand } from "./commands/learning.js";
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
runtimeProvenanceLedger.record(
|
|
19
|
-
"cli:startup",
|
|
20
|
-
{
|
|
21
|
-
pid: process.pid,
|
|
22
|
-
cwd: process.cwd(),
|
|
23
|
-
argv: process.argv.slice(2),
|
|
24
|
-
nodeVersion: process.version,
|
|
25
|
-
traceId: traceContext.traceId,
|
|
26
|
-
},
|
|
27
|
-
"cli-bootstrap",
|
|
28
|
-
);
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
29
18
|
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
runtimeProvenanceLedger,
|
|
34
|
-
processExecutionBroker,
|
|
35
|
-
hooks: hooksV2Runtime,
|
|
36
|
-
};
|
|
19
|
+
// Preload all command modules at module load time using top-level await
|
|
20
|
+
// This ensures createProgram() is fully synchronous for tests
|
|
21
|
+
const commandModules = [];
|
|
37
22
|
|
|
38
|
-
|
|
39
|
-
// 非阻塞更新检查,不影响启动流程
|
|
23
|
+
for (const entry of manifest.commands) {
|
|
40
24
|
try {
|
|
41
|
-
|
|
42
|
-
|
|
25
|
+
const modulePath = join(__dirname, entry.module.replace("./", ""));
|
|
26
|
+
const moduleUrl = pathToFileURL(modulePath).href;
|
|
27
|
+
const mod = await import(moduleUrl);
|
|
28
|
+
commandModules.push({ entry, mod });
|
|
29
|
+
} catch (err) {
|
|
30
|
+
// Store error for later reporting
|
|
31
|
+
commandModules.push({ entry, error: err });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
43
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Create and configure the full Commander program with all commands.
|
|
37
|
+
* Synchronous - matches test expectations.
|
|
38
|
+
* @returns {import('commander').Command} configured program
|
|
39
|
+
*/
|
|
40
|
+
export function createProgram(options = {}) {
|
|
44
41
|
const program = createBaseProgram();
|
|
45
42
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
const hasOptionWhitelist = Object.prototype.hasOwnProperty.call(
|
|
44
|
+
options,
|
|
45
|
+
"allowedCommands",
|
|
46
|
+
);
|
|
47
|
+
const allowedCommands = hasOptionWhitelist
|
|
48
|
+
? options.allowedCommands
|
|
49
|
+
: process.env.CC_PROJECT_ALLOWED_SUBCOMMANDS
|
|
50
|
+
? new Set(
|
|
51
|
+
process.env.CC_PROJECT_ALLOWED_SUBCOMMANDS.split(",")
|
|
52
|
+
.map((name) => name.trim())
|
|
53
|
+
.filter(Boolean),
|
|
54
|
+
)
|
|
55
|
+
: null;
|
|
56
|
+
const shouldFilter =
|
|
57
|
+
allowedCommands instanceof Set && allowedCommands.size > 0;
|
|
49
58
|
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
// Add extended help for command categories
|
|
60
|
+
program.on("--help", () => {
|
|
61
|
+
console.log("");
|
|
62
|
+
console.log(chalk.bold("Command Categories:"));
|
|
63
|
+
console.log(" Setup & System: setup, doctor, update, status, config");
|
|
64
|
+
console.log(
|
|
65
|
+
" AI & Chat: chat, ask, agent, skill, workflow, cowork",
|
|
66
|
+
);
|
|
67
|
+
console.log(" Knowledge & Notes: note, search, memory, session, rag");
|
|
68
|
+
console.log(" Security & DID: did, auth, encrypt, ukey, backup");
|
|
69
|
+
console.log(" Integration: mcp, browse, git, plugin");
|
|
70
|
+
console.log(" Data & Trading: trade, data, monitor, backup");
|
|
71
|
+
console.log("");
|
|
72
|
+
console.log(
|
|
73
|
+
`Run ${chalk.cyan("cc <command> --help")} for command-specific help.`,
|
|
74
|
+
);
|
|
75
|
+
});
|
|
54
76
|
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
77
|
+
// Register all preloaded commands
|
|
78
|
+
for (const { entry, mod, error } of commandModules) {
|
|
79
|
+
if (shouldFilter && !allowedCommands.has(entry.name)) continue;
|
|
80
|
+
if (error) {
|
|
81
|
+
if (process.env.DEBUG) {
|
|
82
|
+
console.warn(
|
|
83
|
+
chalk.yellow(
|
|
84
|
+
`Warning: Failed to load command '${entry.name}':`,
|
|
85
|
+
error.message,
|
|
86
|
+
),
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const registerFn = mod[entry.register];
|
|
93
|
+
if (typeof registerFn !== "function") {
|
|
94
|
+
throw new Error(
|
|
95
|
+
`Register function '${entry.register}' not found in ${entry.module}`,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
registerFn(program);
|
|
99
|
+
} catch (err) {
|
|
100
|
+
if (process.env.DEBUG) {
|
|
101
|
+
console.warn(
|
|
102
|
+
chalk.yellow(
|
|
103
|
+
`Warning: Failed to register command '${entry.name}':`,
|
|
104
|
+
err.message,
|
|
105
|
+
),
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
61
109
|
}
|
|
62
110
|
|
|
63
|
-
|
|
111
|
+
return program;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Backward compat alias
|
|
115
|
+
export { createProgram as createProgramSync };
|
|
64
116
|
|
|
65
|
-
|
|
66
|
-
|
|
117
|
+
/**
|
|
118
|
+
* Async version (alias for consistency)
|
|
119
|
+
*/
|
|
120
|
+
export async function createProgramAsync() {
|
|
121
|
+
return createProgram();
|
|
67
122
|
}
|
|
68
123
|
|
|
69
|
-
main()
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
124
|
+
// Only run main() when executed directly, not when imported for tests
|
|
125
|
+
const isDirectRun =
|
|
126
|
+
process.argv[1] &&
|
|
127
|
+
(process.argv[1].endsWith("/cli/src/index.js") ||
|
|
128
|
+
process.argv[1].endsWith("\\cli\\src\\index.js") ||
|
|
129
|
+
process.argv[1].endsWith("/cc") ||
|
|
130
|
+
process.argv[1].endsWith("\\cc") ||
|
|
131
|
+
process.argv[1].endsWith("/cli/bin/cli.js") ||
|
|
132
|
+
process.argv[1].endsWith("\\cli\\bin\\cli.js"));
|
|
133
|
+
|
|
134
|
+
if (isDirectRun) {
|
|
135
|
+
const program = createProgram();
|
|
136
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
137
|
+
console.error(chalk.red("\nUnexpected error:"), err.message);
|
|
138
|
+
if (process.env.DEBUG) {
|
|
139
|
+
console.error(err.stack);
|
|
140
|
+
}
|
|
141
|
+
process.exit(1);
|
|
142
|
+
});
|
|
143
|
+
}
|