chainlesschain 0.165.2 → 0.165.3
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-lS1R0Cza.js → AIOps-BiHNUlbU.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BmlgBPsj.js → ActionButton-D-UFjDRQ.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CNKczv1S.js → Analytics-DazVsDgW.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BuZGJARQ.js → AppLayout-DXh9UfNJ.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Dm73Sl-O.js → Artifacts-CZ6tsceY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BGMW7A5e.js → Audit-RyxnBr_h.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BQ6M54JR.js → BackgroundAgents-BWS51Q6X.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DBzGP0bR.js → Backup-BRtPcUul.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D1mLCoOV.js → BaseInput-CGd4vZYY.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BUfcN7p8.js → Chat-h8ijVwCg.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CY5m8ZHg.js → ChatBubbleRenderer-D7tcdDS9.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-Du0Yg5Pi.js → Checkbox-NyF6dPl8.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B2RXziHW.js → Codegen-Ci4OOxr5.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DWhekOrR.js → Col-CwTkc9BM.js} +1 -1
- package/src/assets/web-panel/assets/{Community-HQhrkon4.js → Community-DW_tM82m.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-izHNb4uz.js → Compact-DEvHRV4S.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BDwLy41-.js → Compliance-BbjBEEfD.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DFJhLa7K.js → Cowork-10IXBaBa.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DYY9RG7-.js → Cron-BZkbpd5I.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-rr7tJTtv.js → Crosschain-CFQ8L_6v.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D2sfHRLi.js → DID-BDF6AkXe.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-q_eGdhha.js → Dashboard-CoOdWMi4.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Cufrh2Bz.js → Dropdown-DEsGmu8Y.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-B-kdv10f.js → EmailListRenderer-BS89SWlK.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-D21XjgfG.js → FamilyGuardDashboard-C1FpCHiI.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CAwRTLZH.js → Federation-BzvpVmLA.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-vx3daNDF.js → FormItemContext-BeC259PQ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CRWY2wU4.js → GenericCardRenderer-azgG3bmV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Q6SwauyD.js → Git-BmSSowc5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BJ1q4IQZ.js → Governance-CTBCSyQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CSWjROgD.js → Inference-DA5xyk4a.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-fzuQsWuY.js → KnowledgeGraph-D1gPHNig.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DVF8Mnns.js → Logs-BPmLf1AR.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-SVLOg49H.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BQP7LOA4.js → Marketplace-DtUFcR0E.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BNlJCmNc.js → McpTools-DS_kqBv-.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-DLLg5WQ4.js → Memory-Fvh7XL7V.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CR2skNAF.js → MobileBridge-C7itAP45.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DGbP36-3.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-B17pgqMI.js → Mtc-B57MiNLK.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-4UmV5cIL.js → MtcAudit-BXfCUcM7.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-DoMEXEcU.js → Multisig-yaJ-ZcF6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-h9DMXFX4.js → NLProgramming-CoaUCKrO.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Cihn-xX8.js → Notes-BKLM_65R.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BE6ZGa3R.js → NotificationSettings-DoDtK9uZ.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BJ28TGr-.js +1 -0
- package/src/assets/web-panel/assets/{Organization-B2vpwmjb.js → Organization-MuGsdoIb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C4z28R0-.js → Overflow-BLUN9J4R.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BVlFkwhW.js → P2P-DWuoBUPd.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BXbEdL5B.js → PdhVaultBrowser-CUi37YPj.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C28xs4lp.js → Permissions-BYQg2pcr.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dgl_rBjM.js → PersonalDataHub-CAxoV2xu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-3QUIhrKI.js → Pipeline-B33wGvIO.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-8Gh33OZ5.js → Privacy-A8yXTORP.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BNmg4tZi.js → ProjectInit-D49I2I1O.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-vgMfeCf9.js → ProjectSettings-Ci73jJDw.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BhtAVilc.js → Projects-CF-yD6Cn.js} +1 -1
- package/src/assets/web-panel/assets/Providers-D-etEhg5.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-BhfTF0oS.js → QrScannerModal-Brza0ykJ.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C746HEAj.js → QuickAsk-DFydhjxL.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BSej8Eo0.js → Recommend-DLF8_NhA.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-f3gmnlG3.js → RemoteSession-dyuStW3x.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CyvybpkN.js → Reputation-5F3tA6yw.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DwV2PeYn.js → Row-Ca2A57S5.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-11GrzjZy.js → RssFeed-B0bxBkq_.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BjKXkrAY.js → Search-CFNvHalZ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-eWiFb9Yk.js → Security-DSoH3Hav.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CdCsMAtt.js → Services-BHpfEmBQ.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-4Q2UTKQ5.js → Skeleton-Dsh-QNmn.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-v4rtYrRj.js → Skills-BhT1NkSU.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CRhsFvd_.js → Sla-DY9snPeJ.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-CWaX0_Cx.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-D16zonl7.js → SyncSettings-B690y_TC.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Xxozz0i_.js → Tasks-2N-w3zWd.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CXJpPtCT.js → Templates-BjwQOQYC.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-XRV0L1ZF.js → Tenant-CUqHErxY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CYuO1i_w.js → Terminal-C13rXvNy.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BXqitWsu.js → TimelineRenderer-CpbWcya_.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BvPrDHIy.js → Tokens-BXHLGXYC.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DhCrSTf5.js → Trigger-1e5i65o3.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DmsuZD6K.js → Trust-FLGqNHs5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D_yrts5C.js → UkeySign-BbaR_LJB.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B01ihPrm.js → VideoEditing-NOp4RIov.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DpUjKa-N.js → Wallet-B7DW7bG4.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-CL07yON6.js → WebAuthn-BptSUWix.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-CLMflnRr.js → WorkflowEditor-CAJnDOXS.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DtUqe8h_.js → chat-I8LgG1-Z.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DPKrgVfy.js → colors-CWe7SOVD.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTt2GtOm.js → compact-item-Cx3u3CA3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D_VeUc1J.js → createContext-CgD5ArwY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DLv_872g.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-1kndiylj.js → hasIn-BfQWiXN8.js} +1 -1
- package/src/assets/web-panel/assets/{index-brCInrzq.js → index-3iKP9OTJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-l1BETrDb.js → index-87gMxqhN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxdTdBix.js → index-B1cX4Rxu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdkplL9R.js → index-B6yChzt1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHpBMWCh.js → index-BREnPKGo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzjkKUmR.js → index-BUAR7RY-.js} +1 -1
- package/src/assets/web-panel/assets/{index-D95OFht7.js → index-Bi24S7Dw.js} +1 -1
- package/src/assets/web-panel/assets/{index-8nz_fmlj.js → index-BiI-xPRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-2eyAXE3d.js → index-BuEQSorC.js} +1 -1
- package/src/assets/web-panel/assets/{index-GsoUQ2M7.js → index-Bx7BNIRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX81qSM4.js → index-C-rIKccl.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcO04eDn.js → index-C0nDKhWv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bhudc_Ez.js → index-C0ztiqtB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfGl8CqG.js → index-C1UjHdgZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaZAbw9A.js → index-CAUnl4Jv.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9KvcS7R.js → index-CMu16vPC.js} +1 -1
- package/src/assets/web-panel/assets/{index-m31Ka8hZ.js → index-CNYFQxAW.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dwqmtk65.js → index-CQDKYbnv.js} +1 -1
- package/src/assets/web-panel/assets/{index-fk2Rjacw.js → index-CWZ3REg6.js} +3 -3
- package/src/assets/web-panel/assets/{index-DsJCDUJG.js → index-CcX4FSPf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAXfRKfG.js → index-Cd79NQAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlDNVgBt.js → index-CdRkCwm4.js} +1 -1
- package/src/assets/web-panel/assets/index-CdiGCibe.js +1 -0
- package/src/assets/web-panel/assets/{index-4bna2_SR.js → index-Cy_cCJlr.js} +1 -1
- package/src/assets/web-panel/assets/{index-dVc-CXY4.js → index-DAVy98u7.js} +1 -1
- package/src/assets/web-panel/assets/{index-ocf06EVQ.js → index-DCJEY2T0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbbymxpj.js → index-DFb-XIKy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHG-KcS4.js → index-DGMYTN5W.js} +1 -1
- package/src/assets/web-panel/assets/index-D_0z-gyz.js +1 -0
- package/src/assets/web-panel/assets/{index-By5n8up9.js → index-Dcdm_Z2c.js} +1 -1
- package/src/assets/web-panel/assets/{index-FzdwcSy2.js → index-DeizoQVZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFIZ_1Sf.js → index-DlIyt1qF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BepLZwgB.js → index-DmgtY58H.js} +1 -1
- package/src/assets/web-panel/assets/{index-sDoMHTNA.js → index-DmrdUwzU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJ8vXGOa.js → index-Doc0Ftpd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CauoBQkH.js → index-DsQcURkA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtF7EN49.js → index-DslTuqro.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfKBRdSS.js → index-V-kIHzAV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DG2MZQ3f.js → index-e8BM1yY1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CvyYJd7z.js → initDefaultProps-DiBszVdG.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DYZkhUdz.js → motion-BGIFFozv.js} +1 -1
- package/src/assets/web-panel/assets/{move-slnJRVT1.js → move-D5W7mp7B.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DVc0CKmy.js → mtc-parser-JFIlxJ7F.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BCXAtHCq.js → omit-CQ3o6LIU.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DBsemz_K.js → pickAttrs-R8MIlXo3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BRtkJ-nv.js → placementArrow-sW7ylSky.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Cebq7EZn.js → responsiveObserve-Cnl39Vbz.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DT7qvId2.js → slide-sn8tFd14.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-pQiITLkG.js → statusUtils-IKKY_QxZ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-c-19BVKQ.js → styleChecker-BNpV4Nqs.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DsS5-0bE.js → useFlexGapSupport-BWyT_eoU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CxGiMe5n.js → useFs-D09p6_U9.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D9btVID5.js → usePersonalDataHub-CzW3TkJZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CUYFsFEN.js → vnode-3s3WoAKB.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CXmn_35j.js → zoom-Cjy_673s.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +13 -0
- package/src/lib/background-agent-keeper-protocol.js +75 -4
- package/src/lib/background-agent-launch-barrier.js +74 -0
- package/src/lib/background-agent-supervisor.js +149 -5
- package/src/lib/background-turn-bootstrap-protocol.js +4 -0
- package/src/lib/with-file-lock.js +175 -26
- package/src/workers/background-agent-keeper.js +112 -19
- package/src/workers/background-agent-worker.js +383 -134
- package/src/workers/background-turn-bootstrap.js +13 -8
- package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-BxVavObl.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CnwojoSI.js +0 -1
- package/src/assets/web-panel/assets/Providers-CXoOa8eX.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +0 -1
- package/src/assets/web-panel/assets/index-CPcM-eqo.js +0 -1
- package/src/assets/web-panel/assets/index-xeSyVoRe.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as s}from"./index-
|
|
1
|
+
import{t as s}from"./index-CWZ3REg6.js";const i=Object.freeze({ok:!1,config:{enabled:!1,batch_interval_seconds:3600,namespace_prefix:"",issuer:""},staging:{count:0,malformed:0,oldest_queued_at:null},batches:{count:0,last_batch_id:null,last_closed_at:null,last_tree_size:null,last_tree_head_id:null}});function n(r,t=0){return typeof r=="number"&&Number.isFinite(r)?r:t}function a(r,t=""){return typeof r=="string"?r:t}function f(r){const t=JSON.parse(JSON.stringify(i)),e=r&&typeof r=="object"&&!Array.isArray(r)?r:s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.ok=!0,e.config&&typeof e.config=="object"&&(t.config.enabled=e.config.enabled===!0,t.config.batch_interval_seconds=n(e.config.batch_interval_seconds,t.config.batch_interval_seconds),t.config.namespace_prefix=a(e.config.namespace_prefix),t.config.issuer=a(e.config.issuer)),e.staging&&typeof e.staging=="object"&&(t.staging.count=n(e.staging.count,0),t.staging.malformed=n(e.staging.malformed,0),t.staging.oldest_queued_at=e.staging.oldest_queued_at??null),e.batches&&typeof e.batches=="object"&&(t.batches.count=n(e.batches.count,0),t.batches.last_batch_id=e.batches.last_batch_id??null,t.batches.last_closed_at=e.batches.last_closed_at??null,t.batches.last_tree_size=e.batches.last_tree_size??null,t.batches.last_tree_head_id=e.batches.last_tree_head_id??null)),t}const o=Object.freeze({ok:!1,exists:!1,stateFile:"",lastSeq:0,lastFingerprint:null,lastPublishedAt:null,historyCount:0,history:[]});function l(r){if(!r||typeof r!="object")return null;const t=a(r.seq);return t?{key:t,seq:t,namespace:a(r.namespace),treeHeadId:a(r.tree_head_id),rootHash:a(r.root_hash),treeSize:n(r.tree_size,0),fingerprint:a(r.fingerprint),publishedAt:a(r.published_at),batchDir:a(r.batch_dir)}:null}function _(r){const t=JSON.parse(JSON.stringify(o)),e=s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.ok=e.ok===!0,t.exists=e.exists===!0,t.stateFile=a(e.state_file),!t.exists)||(t.lastSeq=n(e.last_seq,0),t.lastFingerprint=e.last_fingerprint??null,t.lastPublishedAt=e.last_published_at??null,t.historyCount=n(e.history_count,0),Array.isArray(e.history)&&(t.history=e.history.map(l).filter(Boolean))),t}const u=Object.freeze({ok:!1,code:"",recoverable:!1,leaf:null,treeHead:null,raw:null});function d(r){const t=JSON.parse(JSON.stringify(u)),e=s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.raw=e,t.ok=e.ok===!0,t.code=a(e.code,e.reason||""),t.recoverable=e.recoverable===!0,e.leaf&&typeof e.leaf=="object"&&(t.leaf=e.leaf),e.treeHead&&typeof e.treeHead=="object"&&(t.treeHead=e.treeHead)),t}function h(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?"—":r<60?`${r}s`:r<3600?`${Math.round(r/60)}min`:`${Math.round(r/3600)}h`}function b(r){if(!r)return"—";const t=new Date(r);return isNaN(t.getTime())?r:t.toLocaleString("zh-CN",{hour12:!1})}function g(r){if(!r)return"—";const t=Date.parse(r);if(isNaN(t))return r;const e=Math.round((Date.now()-t)/1e3);return e<60?`${e}s 前`:e<3600?`${Math.round(e/60)}min 前`:e<86400?`${Math.round(e/3600)}h 前`:`${Math.round(e/86400)}d 前`}export{f as a,_ as b,b as c,h as d,g as f,d as p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as s}from"./index-
|
|
1
|
+
import{h as s}from"./index-CWZ3REg6.js";function a(n,t){const e=s({},n);for(let o=0;o<t.length;o+=1){const r=t[o];delete e[r]}return e}export{a as o};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-CWZ3REg6.js";const l=`accept acceptcharset accesskey action allowfullscreen allowtransparency
|
|
2
2
|
alt async autocomplete autofocus autoplay capture cellpadding cellspacing challenge
|
|
3
3
|
charset checked classid classname colspan cols content contenteditable contextmenu
|
|
4
4
|
controls coords crossorigin data datetime default defer dir disabled download draggable
|
package/src/assets/web-panel/assets/{placementArrow-BRtkJ-nv.js → placementArrow-sW7ylSky.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-CWZ3REg6.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
|
package/src/assets/web-panel/assets/{responsiveObserve-Cebq7EZn.js → responsiveObserve-Cnl39Vbz.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{J as o,h}from"./index-
|
|
1
|
+
import{J as o,h}from"./index-CWZ3REg6.js";import{b as x}from"./vendor-Bn1JzzAn.js";const v=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{v as r,w as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
1
|
+
import{K as n}from"./index-CWZ3REg6.js";import{i as e}from"./motion-BGIFFozv.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
|
|
2
2
|
${i}-enter,
|
|
3
3
|
${i}-appear
|
|
4
4
|
`]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./index-
|
|
1
|
+
import{i as e}from"./index-CWZ3REg6.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as d}from"./index-
|
|
1
|
+
import{B as d}from"./index-CWZ3REg6.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
|
package/src/assets/web-panel/assets/{useFlexGapSupport-DsS5-0bE.js → useFlexGapSupport-BWyT_eoU.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-
|
|
1
|
+
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-BNpV4Nqs.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as d}from"./index-
|
|
1
|
+
import{u as d}from"./index-CWZ3REg6.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
1
|
+
import{u as v}from"./index-CWZ3REg6.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-CWZ3REg6.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-CWZ3REg6.js";import{i as f}from"./motion-BGIFFozv.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-CWZ3REg6.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.165.3",
|
|
7
|
+
"cliVersions": ["0.165.2", "0.165.3"],
|
|
8
|
+
"date": "2026-08-19",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed — cc CLI 0.165.3: durable background keeper retirement",
|
|
13
|
+
"body": "> `chainlesschain` **0.165.2 -> 0.165.3** (candidate; not yet published,\n> 2026-08-19).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.58**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Durable keeper retirement evidence**: a Worker accepts a lost keeper\n response only when the persisted retirement record matches the exact worker\n generation, turn attempt, process identities, start anchors, and cleanup\n confirmation. Ambiguous or partial records continue to fail closed.\n- **Bounded keeper health probes**: Windows process-identity checks are delayed\n until the application heartbeat is actually silent, avoiding synchronized\n helper-process storms while preserving an exact-identity backstop before\n cleanup.\n- **Recoverable lock publication**: a lock owned by a provably dead process can\n be reclaimed even when that owner published its release marker but crashed\n before removing its private staging path. Active or identity-mismatched\n owners remain fenced.\n- **Idempotent bootstrap release**: a matching bootstrap release can be replayed\n after READY, and the Worker retransmits it when READY is repeated. Nonce,\n generation, attempt, wrapper PID, and runtime PID mismatches remain rejected.\n- **Release status**: immutable tag, final source SHA, workflow run IDs, npm\n provenance, package digests, and registry readback remain intentionally\n absent until the exact `0.165.3` candidate passes complete `CLI CI`,\n `CLI Strict Sandbox`, and the dedicated cross-platform keeper soak, followed\n by the npm release and independent public readback workflows."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"productVersion": null,
|
|
6
19
|
"cliVersion": "0.165.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { lstatSync, mkdirSync, rmdirSync } from "node:fs";
|
|
3
|
-
import { posix } from "node:path";
|
|
3
|
+
import { join, posix, resolve } from "node:path";
|
|
4
4
|
|
|
5
5
|
export const BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION = 1;
|
|
6
6
|
export const BACKGROUND_AGENT_KEEPER_HELLO = "background-agent-keeper-hello";
|
|
@@ -12,8 +12,22 @@ export const BACKGROUND_AGENT_KEEPER_ARMED = "background-agent-keeper-armed";
|
|
|
12
12
|
export const BACKGROUND_AGENT_KEEPER_RETIRE = "background-agent-keeper-retire";
|
|
13
13
|
export const BACKGROUND_AGENT_KEEPER_RETIRED =
|
|
14
14
|
"background-agent-keeper-retired";
|
|
15
|
+
export const BACKGROUND_AGENT_KEEPER_LAUNCH_CLAIM =
|
|
16
|
+
"background-agent-keeper-launch-claim";
|
|
15
17
|
export const BACKGROUND_AGENT_KEEPER_HEARTBEAT_INTERVAL_MS = 1_000;
|
|
16
|
-
|
|
18
|
+
// Do not launch an OS process-identity probe while authenticated application
|
|
19
|
+
// heartbeats are fresh. On Windows the cached WMIC/CIM fallback can otherwise
|
|
20
|
+
// make 20 keepers synchronously spawn probe helpers together every ten seconds.
|
|
21
|
+
export const BACKGROUND_AGENT_KEEPER_IDENTITY_PROBE_DELAY_MS = 15_000;
|
|
22
|
+
// This application-level fence is a backstop for the rare case where Windows
|
|
23
|
+
// retains both the named-pipe handle and an exact process object after worker
|
|
24
|
+
// death. Normal death still closes the socket immediately; a stale channel
|
|
25
|
+
// gets the delayed PID/start-time probe before this final fence. A 20-worker
|
|
26
|
+
// hosted Windows launch has demonstrated
|
|
27
|
+
// 37-second scheduling tails, so 15 seconds could kill a live, healthy worker
|
|
28
|
+
// while it was merely descheduled. Keep the backstop bounded but above that
|
|
29
|
+
// measured contention window.
|
|
30
|
+
export const BACKGROUND_AGENT_KEEPER_HEARTBEAT_TIMEOUT_MS = 60_000;
|
|
17
31
|
|
|
18
32
|
// RETIRE is the only keeper request that performs destructive OS cleanup. Its
|
|
19
33
|
// deadline is deliberately independent from the short HELLO/ARM request
|
|
@@ -22,7 +36,7 @@ export const BACKGROUND_AGENT_KEEPER_HEARTBEAT_TIMEOUT_MS = 15_000;
|
|
|
22
36
|
//
|
|
23
37
|
// 2 targets * (strict identity + taskkill + cleanup confirmation identity) +
|
|
24
38
|
// 2 cleanup-critical persistence retry windows + cleanup confirmation +
|
|
25
|
-
// scheduling margin =
|
|
39
|
+
// scheduling margin = 128 seconds.
|
|
26
40
|
//
|
|
27
41
|
// Keeping these limits in the shared protocol contract prevents either side
|
|
28
42
|
// from silently reintroducing the old 10-second client / longer keeper race.
|
|
@@ -36,7 +50,12 @@ export const BACKGROUND_AGENT_KEEPER_IDENTITY_PROBE_TIMEOUT_MS =
|
|
|
36
50
|
export const BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS = 5_000;
|
|
37
51
|
export const BACKGROUND_AGENT_KEEPER_PERSIST_RETRY_TIMEOUT_MS =
|
|
38
52
|
3 * BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS;
|
|
39
|
-
|
|
53
|
+
// A 20-Agent macOS formal run can leave successfully SIGKILLed process groups
|
|
54
|
+
// observable for several seconds while launchd reaps their orphaned leaders.
|
|
55
|
+
// Two seconds made that bounded kernel/reaper delay look like an escaped tree.
|
|
56
|
+
// Ten seconds stays inside the formal observer's 150-second budget while
|
|
57
|
+
// retaining a finite fail-closed confirmation window.
|
|
58
|
+
export const BACKGROUND_AGENT_KEEPER_CLEANUP_CONFIRM_TIMEOUT_MS = 10_000;
|
|
40
59
|
export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MARGIN_MS = 8_000;
|
|
41
60
|
export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS =
|
|
42
61
|
BACKGROUND_AGENT_KEEPER_CLEANUP_TARGET_LIMIT *
|
|
@@ -92,6 +111,58 @@ function requiredTimestamp(value, label) {
|
|
|
92
111
|
return normalized;
|
|
93
112
|
}
|
|
94
113
|
|
|
114
|
+
export function backgroundAgentKeeperLaunchClaimPath(
|
|
115
|
+
id,
|
|
116
|
+
keeperGeneration,
|
|
117
|
+
directory,
|
|
118
|
+
) {
|
|
119
|
+
const safeId = requiredSafeString(id, "id");
|
|
120
|
+
const safeGeneration = requiredSafeString(
|
|
121
|
+
keeperGeneration,
|
|
122
|
+
"keeper generation",
|
|
123
|
+
);
|
|
124
|
+
const requestedDirectory =
|
|
125
|
+
typeof directory === "string" ? directory.trim() : "";
|
|
126
|
+
if (!requestedDirectory || requestedDirectory.includes("\0")) {
|
|
127
|
+
throw new TypeError("invalid background agent keeper state directory");
|
|
128
|
+
}
|
|
129
|
+
const stateDirectory = resolve(requestedDirectory);
|
|
130
|
+
return join(
|
|
131
|
+
stateDirectory,
|
|
132
|
+
`.${safeId}.keeper-${safeGeneration}.launch-claim.json`,
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function createBackgroundAgentKeeperLaunchClaim(binding = {}) {
|
|
137
|
+
return Object.freeze({
|
|
138
|
+
type: BACKGROUND_AGENT_KEEPER_LAUNCH_CLAIM,
|
|
139
|
+
protocolVersion: BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION,
|
|
140
|
+
id: requiredSafeString(binding.id, "id"),
|
|
141
|
+
workerGeneration: requiredSafeString(
|
|
142
|
+
binding.workerGeneration,
|
|
143
|
+
"worker generation",
|
|
144
|
+
),
|
|
145
|
+
keeperGeneration: requiredSafeString(
|
|
146
|
+
binding.keeperGeneration,
|
|
147
|
+
"keeper generation",
|
|
148
|
+
),
|
|
149
|
+
keeperPid: requiredPositiveInteger(binding.keeperPid, "keeper pid"),
|
|
150
|
+
token: requiredSafeString(binding.token, "token", SAFE_TOKEN),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function matchesBackgroundAgentKeeperLaunchClaim(value, expected = {}) {
|
|
155
|
+
let actual;
|
|
156
|
+
let binding;
|
|
157
|
+
try {
|
|
158
|
+
actual = createBackgroundAgentKeeperLaunchClaim(value);
|
|
159
|
+
binding = createBackgroundAgentKeeperLaunchClaim(expected);
|
|
160
|
+
} catch {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
return Object.keys(binding).every((key) => actual[key] === binding[key]);
|
|
164
|
+
}
|
|
165
|
+
|
|
95
166
|
function digestKeeperPath(value, length) {
|
|
96
167
|
return createHash("sha256").update(value).digest("hex").slice(0, length);
|
|
97
168
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only startup barrier shared by the detached background worker and its
|
|
3
|
+
* keeper. The launcher publishes both exact child PIDs in one state
|
|
4
|
+
* transaction before clearing `launchFinalizationUncertain`. Until then the
|
|
5
|
+
* children must not contend for the same state lock.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const BACKGROUND_AGENT_LAUNCH_BARRIER_TIMEOUT_MS = 30_000;
|
|
9
|
+
|
|
10
|
+
const DEFAULT_POLL_MS = 25;
|
|
11
|
+
const PID_FIELDS = new Set(["workerPid", "keeperPid"]);
|
|
12
|
+
|
|
13
|
+
function delay(milliseconds) {
|
|
14
|
+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function waitForBackgroundAgentLaunchBarrier(options = {}) {
|
|
18
|
+
const id = String(options.id || "").trim();
|
|
19
|
+
const workerGeneration = String(options.workerGeneration || "").trim();
|
|
20
|
+
const expectedPid = Number(options.expectedPid);
|
|
21
|
+
const pidField = String(options.pidField || "");
|
|
22
|
+
const readState = options.readState;
|
|
23
|
+
const readyWhen = options.readyWhen;
|
|
24
|
+
const now = options.now || Date.now;
|
|
25
|
+
const sleep = options.sleep || delay;
|
|
26
|
+
const timeoutMs = Math.max(
|
|
27
|
+
1,
|
|
28
|
+
Number(options.timeoutMs) || BACKGROUND_AGENT_LAUNCH_BARRIER_TIMEOUT_MS,
|
|
29
|
+
);
|
|
30
|
+
const pollMs = Math.max(1, Number(options.pollMs) || DEFAULT_POLL_MS);
|
|
31
|
+
|
|
32
|
+
if (!id) {
|
|
33
|
+
throw new TypeError("background launch barrier id is required");
|
|
34
|
+
}
|
|
35
|
+
if (!PID_FIELDS.has(pidField)) {
|
|
36
|
+
throw new TypeError("background launch barrier pid field is invalid");
|
|
37
|
+
}
|
|
38
|
+
if (!Number.isSafeInteger(expectedPid) || expectedPid <= 0) {
|
|
39
|
+
throw new TypeError("background launch barrier pid is invalid");
|
|
40
|
+
}
|
|
41
|
+
if (typeof readState !== "function") {
|
|
42
|
+
throw new TypeError("background launch barrier state reader is required");
|
|
43
|
+
}
|
|
44
|
+
if (readyWhen !== undefined && typeof readyWhen !== "function") {
|
|
45
|
+
throw new TypeError("background launch barrier readiness check is invalid");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const deadline = now() + timeoutMs;
|
|
49
|
+
for (;;) {
|
|
50
|
+
const state = readState(id);
|
|
51
|
+
if (!state || state.status !== "running") {
|
|
52
|
+
return Object.freeze({ status: "terminal", state: state || null });
|
|
53
|
+
}
|
|
54
|
+
// Jobs written before generation fencing are allowed to observe an
|
|
55
|
+
// already-terminal record above, but can never enter a running record.
|
|
56
|
+
if (!workerGeneration || state.workerGeneration !== workerGeneration) {
|
|
57
|
+
return Object.freeze({ status: "terminal", state });
|
|
58
|
+
}
|
|
59
|
+
if (state.launchFinalizationUncertain !== true) {
|
|
60
|
+
if (Number(state[pidField]) !== expectedPid) {
|
|
61
|
+
return Object.freeze({ status: "identity-mismatch", state });
|
|
62
|
+
}
|
|
63
|
+
if (!readyWhen || readyWhen(state)) {
|
|
64
|
+
return Object.freeze({ status: "ready", state });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const remaining = deadline - now();
|
|
69
|
+
if (remaining <= 0) {
|
|
70
|
+
return Object.freeze({ status: "timeout", state });
|
|
71
|
+
}
|
|
72
|
+
await sleep(Math.min(pollMs, remaining));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -79,6 +79,110 @@ export const PID_IDENTITY_TOLERANCE_MS = 60000;
|
|
|
79
79
|
export const PROCESS_START_TIME_CACHE_TTL_MS = 10_000;
|
|
80
80
|
export const PROCESS_START_TIME_CACHE_MAX_ENTRIES = 4_096;
|
|
81
81
|
|
|
82
|
+
// Linux exposes these fields directly through procfs. `/proc/<pid>/stat`
|
|
83
|
+
// reports starttime in USER_HZ units, which Linux defines as 100 ticks/second
|
|
84
|
+
// for this userspace ABI independently of the kernel scheduler frequency.
|
|
85
|
+
const LINUX_PROC_CLOCK_TICKS_PER_SECOND = 100;
|
|
86
|
+
let linuxBootTimeMsCache;
|
|
87
|
+
|
|
88
|
+
export function parseLinuxProcStat(text, bootTimeMs = null) {
|
|
89
|
+
const value = String(text || "").trim();
|
|
90
|
+
const open = value.indexOf("(");
|
|
91
|
+
const close = value.lastIndexOf(")");
|
|
92
|
+
if (open <= 0 || close <= open || value.charAt(close + 1) !== " ") {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const pid = Number(value.slice(0, open).trim());
|
|
96
|
+
const fields = value
|
|
97
|
+
.slice(close + 2)
|
|
98
|
+
.trim()
|
|
99
|
+
.split(/\s+/u);
|
|
100
|
+
const state = fields[0];
|
|
101
|
+
const processGroupId = Number(fields[2]);
|
|
102
|
+
const startTimeTicks = Number(fields[19]);
|
|
103
|
+
if (
|
|
104
|
+
!Number.isSafeInteger(pid) ||
|
|
105
|
+
pid <= 0 ||
|
|
106
|
+
!/^[A-Z]$/iu.test(state || "") ||
|
|
107
|
+
!Number.isSafeInteger(processGroupId) ||
|
|
108
|
+
processGroupId <= 0 ||
|
|
109
|
+
!Number.isFinite(startTimeTicks) ||
|
|
110
|
+
startTimeTicks < 0
|
|
111
|
+
) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const boot = Number(bootTimeMs);
|
|
115
|
+
return {
|
|
116
|
+
pid,
|
|
117
|
+
state: state.toUpperCase(),
|
|
118
|
+
processGroupId,
|
|
119
|
+
startTimeTicks,
|
|
120
|
+
startedAtMs:
|
|
121
|
+
Number.isFinite(boot) && boot > 0
|
|
122
|
+
? boot + (startTimeTicks * 1000) / LINUX_PROC_CLOCK_TICKS_PER_SECOND
|
|
123
|
+
: null,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function linuxBootTimeMs() {
|
|
128
|
+
if (linuxBootTimeMsCache !== undefined) return linuxBootTimeMsCache;
|
|
129
|
+
try {
|
|
130
|
+
const match = /^btime\s+(\d+)\s*$/mu.exec(
|
|
131
|
+
readFileSync("/proc/stat", "utf8"),
|
|
132
|
+
);
|
|
133
|
+
const seconds = match ? Number(match[1]) : null;
|
|
134
|
+
linuxBootTimeMsCache =
|
|
135
|
+
Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : null;
|
|
136
|
+
} catch {
|
|
137
|
+
linuxBootTimeMsCache = null;
|
|
138
|
+
}
|
|
139
|
+
return linuxBootTimeMsCache;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function readLinuxProcProcess(pid) {
|
|
143
|
+
const target = Number(pid);
|
|
144
|
+
if (!Number.isSafeInteger(target) || target <= 0) {
|
|
145
|
+
return { status: "unknown", process: null };
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const parsed = parseLinuxProcStat(
|
|
149
|
+
readFileSync(`/proc/${target}/stat`, "utf8"),
|
|
150
|
+
linuxBootTimeMs(),
|
|
151
|
+
);
|
|
152
|
+
return parsed
|
|
153
|
+
? { status: "present", process: parsed }
|
|
154
|
+
: { status: "unknown", process: null };
|
|
155
|
+
} catch (error) {
|
|
156
|
+
return ["ENOENT", "ESRCH"].includes(error?.code)
|
|
157
|
+
? { status: "absent", process: null }
|
|
158
|
+
: { status: "unknown", process: null };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function readLinuxProcProcessGroupStates(pgid) {
|
|
163
|
+
const target = Number(pgid);
|
|
164
|
+
if (!Number.isSafeInteger(target) || target <= 0) return null;
|
|
165
|
+
let entries;
|
|
166
|
+
try {
|
|
167
|
+
entries = readdirSync("/proc");
|
|
168
|
+
} catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const states = [];
|
|
172
|
+
for (const entry of entries) {
|
|
173
|
+
if (!/^\d+$/u.test(entry)) continue;
|
|
174
|
+
const observed = readLinuxProcProcess(Number(entry));
|
|
175
|
+
if (observed.status === "unknown") return null;
|
|
176
|
+
if (
|
|
177
|
+
observed.status === "present" &&
|
|
178
|
+
observed.process.processGroupId === target
|
|
179
|
+
) {
|
|
180
|
+
states.push(observed.process.state);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return states;
|
|
184
|
+
}
|
|
185
|
+
|
|
82
186
|
/**
|
|
83
187
|
* A bounded FIFO/TTL cache for process creation-time probes.
|
|
84
188
|
*
|
|
@@ -263,6 +367,13 @@ function defaultReadProcessStartTimeMs(pid) {
|
|
|
263
367
|
}
|
|
264
368
|
return null;
|
|
265
369
|
}
|
|
370
|
+
if (process.platform === "linux") {
|
|
371
|
+
const observed = readLinuxProcProcess(target);
|
|
372
|
+
if (observed.status === "absent") return { status: "absent" };
|
|
373
|
+
if (Number.isFinite(observed.process?.startedAtMs)) {
|
|
374
|
+
return observed.process.startedAtMs;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
266
377
|
// POSIX: `ps -o lstart=` gives an absolute start timestamp on Linux + macOS
|
|
267
378
|
// (procps and BSD ps both support it; busybox ps does not → null → open).
|
|
268
379
|
try {
|
|
@@ -300,6 +411,12 @@ function defaultReadProcessState(pid) {
|
|
|
300
411
|
) {
|
|
301
412
|
return null;
|
|
302
413
|
}
|
|
414
|
+
if (process.platform === "linux") {
|
|
415
|
+
const observed = readLinuxProcProcess(target);
|
|
416
|
+
if (observed.status !== "unknown") {
|
|
417
|
+
return observed.process?.state || null;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
303
420
|
try {
|
|
304
421
|
const result = runSupervisorCommand(
|
|
305
422
|
"ps",
|
|
@@ -335,6 +452,10 @@ function defaultReadProcessGroupStates(pgid) {
|
|
|
335
452
|
) {
|
|
336
453
|
return null;
|
|
337
454
|
}
|
|
455
|
+
if (process.platform === "linux") {
|
|
456
|
+
const states = readLinuxProcProcessGroupStates(target);
|
|
457
|
+
if (Array.isArray(states)) return states;
|
|
458
|
+
}
|
|
338
459
|
try {
|
|
339
460
|
const result = runSupervisorCommand(
|
|
340
461
|
"ps",
|
|
@@ -1128,7 +1249,7 @@ function mergeBackgroundAgentState(current, requested) {
|
|
|
1128
1249
|
return next;
|
|
1129
1250
|
}
|
|
1130
1251
|
|
|
1131
|
-
function persistBackgroundAgentState(target, next) {
|
|
1252
|
+
function persistBackgroundAgentState(target, next, options = {}) {
|
|
1132
1253
|
// Multiple async state writers can run in one process; a pid-only temporary
|
|
1133
1254
|
// name lets them overwrite each other's staging file. A unique suffix keeps
|
|
1134
1255
|
// each atomic replacement independent. Windows scanners/readers can also
|
|
@@ -1136,6 +1257,21 @@ function persistBackgroundAgentState(target, next) {
|
|
|
1136
1257
|
// transient class rather than surfacing a spurious EPERM background failure.
|
|
1137
1258
|
const tmp = `${target}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`;
|
|
1138
1259
|
writeFileSync(tmp, JSON.stringify(next, null, 2), { mode: 0o600 });
|
|
1260
|
+
try {
|
|
1261
|
+
if (
|
|
1262
|
+
typeof options.publishReleaseAfterPathRemoved === "function" &&
|
|
1263
|
+
options.publishReleaseAfterPathRemoved(tmp) !== true
|
|
1264
|
+
) {
|
|
1265
|
+
const error = new Error(
|
|
1266
|
+
`Could not publish state-lock release handoff: ${target}`,
|
|
1267
|
+
);
|
|
1268
|
+
error.code = "STATE_LOCK_RELEASE_HANDOFF_FAILED";
|
|
1269
|
+
throw error;
|
|
1270
|
+
}
|
|
1271
|
+
} catch (error) {
|
|
1272
|
+
rmSync(tmp, { force: true });
|
|
1273
|
+
throw error;
|
|
1274
|
+
}
|
|
1139
1275
|
for (let attempt = 0; ; attempt++) {
|
|
1140
1276
|
try {
|
|
1141
1277
|
renameSync(tmp, target);
|
|
@@ -1179,7 +1315,7 @@ export function mutateBackgroundAgentState(id, updater, options = {}) {
|
|
|
1179
1315
|
const target = statePath(safe);
|
|
1180
1316
|
return withFileLock(
|
|
1181
1317
|
target,
|
|
1182
|
-
() => {
|
|
1318
|
+
({ publishReleaseAfterPathRemoved }) => {
|
|
1183
1319
|
const read = readBackgroundAgentStateResult(safe);
|
|
1184
1320
|
if (read.error) throw read.error;
|
|
1185
1321
|
if (read.missing && options.createIfMissing !== true) {
|
|
@@ -1193,7 +1329,9 @@ export function mutateBackgroundAgentState(id, updater, options = {}) {
|
|
|
1193
1329
|
...requested,
|
|
1194
1330
|
id: safe,
|
|
1195
1331
|
});
|
|
1196
|
-
persistBackgroundAgentState(target, next
|
|
1332
|
+
persistBackgroundAgentState(target, next, {
|
|
1333
|
+
publishReleaseAfterPathRemoved,
|
|
1334
|
+
});
|
|
1197
1335
|
return { applied: true, state: next, previous: read.state };
|
|
1198
1336
|
},
|
|
1199
1337
|
{
|
|
@@ -2976,8 +3114,14 @@ function recordedBackgroundProcessesAlive(state) {
|
|
|
2976
3114
|
);
|
|
2977
3115
|
}
|
|
2978
3116
|
|
|
2979
|
-
export function isBackgroundProcessTreeExecutionAlive(
|
|
2980
|
-
|
|
3117
|
+
export function isBackgroundProcessTreeExecutionAlive(
|
|
3118
|
+
pid,
|
|
3119
|
+
startedAt,
|
|
3120
|
+
options = {},
|
|
3121
|
+
) {
|
|
3122
|
+
const identity = inspectDestructiveProcessIdentity(pid, startedAt, {
|
|
3123
|
+
processGroup: options.processGroup !== false,
|
|
3124
|
+
});
|
|
2981
3125
|
// `unverifiable` includes a vanished/zombie POSIX leader whose process group
|
|
2982
3126
|
// is still executable or whose group snapshot failed. Both must block
|
|
2983
3127
|
// worktree deletion just as a verified live leader does.
|