chainlesschain 0.166.91 → 0.166.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/package.json +3 -3
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-DgV7xb8F.js → AIOps-C74YzqwJ.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CgANpkKu.js → ActionButton-TFef1hOE.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DnvpX7RB.js → Analytics-CYsWpkkU.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-C2bHccBM.js → AppLayout-CFf9kjwu.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-BIhijC9g.js → Artifacts-TQqa94YO.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CKRjWGdp.js → Audit-B79ayqfS.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CblYtgBE.js → BackgroundAgents-pjkHfLP9.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Cq35b78a.js → Backup-CE6A-t_r.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DcB7NoRz.js → BaseInput-CwcgWMBY.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-tc3b-s7i.js → Chat-BIkDNesY.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DgaokYts.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BLD5bH5u.js → Checkbox-MbypIy5V.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BLOsoazN.js → Codegen-DiFHWDnt.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Bdr7JwIx.js → Col-BNMlYMso.js} +1 -1
- package/src/assets/web-panel/assets/{Community-C84BsWE0.js → Community-B3HVyHOX.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Dzdwd04z.js → Compact-C7hlAubb.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CCG-R0EV.js → Compliance-PaXZu6sE.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BYj72SK0.js → Cowork-BGiojbm-.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-B6iKAwOf.js → Cron-Bmr-1QAx.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BJ-oDC6u.js → Crosschain-BwUvWCVd.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BnMckGLr.js → DID-k_4QZocW.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cyje-gCO.js → Dashboard-_ieRo2C5.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BpNlenjK.js → Dropdown-DYHh6T27.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BhonO7Nv.js → EmailListRenderer-BNlQcWQX.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-DVoNU-Id.js → EvolutionSettings-DIkZ6U2D.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-tdn-KC67.js → FamilyGuardDashboard-Dq7qSr0P.js} +1 -1
- package/src/assets/web-panel/assets/{Federation--EEVrHhz.js → Federation-C64e3Cbx.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Cy8zr0-4.js → FormItemContext-D-GE2vUa.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BuUhpgFi.js → GenericCardRenderer-DO3B2gis.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Ctd3E5Pe.js → Git-0ETirIQH.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Ce7dV6aU.js → Governance-C9fnRygX.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CD1vExIH.js → Inference-CLJ9RTsK.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Dn64OdQ7.js → KnowledgeGraph-D3C_GxrN.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-PmElVRrT.js → Logs-C5ctGbkN.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-Ce-eWK3j.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-OW4jTXwx.js → Marketplace-GF_t6hJ_.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BEq2Ib4x.js → McpTools-BGsGzgQs.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-Can_P2oK.js → Memory-CcrY2A0j.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DJ8R-dn3.js → MobileBridge-Bi4T0RlS.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-B7kV9GOt.js → MobileProjects-DvjEGyvf.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BfxamolS.js → Mtc-DL77Vf-k.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-DHtuv7av.js → MtcAudit-CDy_Uswb.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DLkLpvxc.js → Multisig-DL0BAO_c.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-u4XtJTIt.js → NLProgramming-B-woh5IR.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BwuuPJLS.js → Notes-CEFVCxk7.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-HEeu-E9v.js → NotificationSettings-BqPPMuAP.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BtvN-Qwh.js → OrderTableRenderer-GUKQ1xwp.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Yh-czs3b.js → Organization-B1gX8jlr.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DmE8mYVM.js → Overflow-CeMxuUZy.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CWVck8WN.js → P2P-B5aIRWwJ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DgFqekod.js → PdhVaultBrowser-6rYgejd4.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BtJBVOHV.js → Permissions-CqCp2SIl.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-6VBObXzd.js → PersonalDataHub-BsA7DJWW.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-D222FmqY.js → Pipeline-CiW6HeZh.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bi9FMikp.js → Privacy-DckUOLYq.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bo52H47H.js → ProjectInit-CZppOOYR.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BPkesfOc.js → ProjectSettings-B9QPzhDU.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-GynohSFX.js → Projects-BErjjGha.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DVdMg04n.js → Providers-DehU6Qiz.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DqJCb595.js → QrScannerModal-E1SUvv1m.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-J7loQbXi.js → QuickAsk-COWFxyH3.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BI5aURVc.js → Recommend-D26pWKxX.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BN2sqGvz.js → RemoteSession-DCOIaId3.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BGOND-Fi.js → Reputation-DT_AHGAR.js} +1 -1
- package/src/assets/web-panel/assets/{Row-77dfwaUk.js → Row-B50S-1nl.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-FtBAxS3g.js → RssFeed-BaBnHg3Q.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BaYVLFb7.js → Search-BVdnLuuS.js} +1 -1
- package/src/assets/web-panel/assets/{Security-LE3Vv6ab.js → Security-BnacH74J.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C5pP-Whz.js → Services-CxM08Zch.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CLqKUVsF.js → Skeleton-DE7CIc1N.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BPjN0SX5.js → Skills-CGI0SJmf.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-14jD70kg.js → Sla-DpEzPcqc.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Dr9ij42W.js → SpeechSettings-CTmnmMHn.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BzLHP7B8.js → SyncSettings-Dxgrd9hd.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-YqV9b0rV.js → Tasks-CW4slS0A.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CxxAE4PK.js → Templates-DxvGWDgB.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CRb3PcKJ.js → Tenant-_Q0o2tNK.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CTzPpBaP.js → Terminal-BTZn8pow.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DjFUj_hy.js → TimelineRenderer-CauL0KFe.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Bbb8tPvx.js → Tokens-CDoM2qeT.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CSeWGM0W.js → Trigger-B-QYGEU7.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-JgESMBo3.js → Trust-BD6XJHT-.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CiObLk0T.js → UkeySign-x4TFwCy0.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CFEZaQ2x.js → VideoEditing-t3imBK_0.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DR8ZGDNn.js → Wallet-BCfkWwNC.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DxZukvu7.js → WebAuthn-WH314Mdm.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CKgSZQwn.js → WorkflowEditor-jUlcjrUg.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CTxEQE66.js → chat-Dg3VASTL.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CAjKMUu3.js → colors-BNvmBRKE.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BXuz49at.js → compact-item-BGOfoqf4.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CFN_Hwr9.js → createContext-BNQeqKAs.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B7_ypN1G.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BwoSBSfP.js → hasIn-Bg3AjCrq.js} +1 -1
- package/src/assets/web-panel/assets/{index-u9_DM3ZC.js → index--I3UF5t1.js} +1 -1
- package/src/assets/web-panel/assets/{index-IahILygB.js → index-2D04Zltx.js} +3 -3
- package/src/assets/web-panel/assets/{index-Bqv_Cray.js → index-60AnjUTX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSmFby3Q.js → index-7QJUWemf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTX9CJPx.js → index-B--0QM0S.js} +1 -1
- package/src/assets/web-panel/assets/index-B-jSKJK6.js +1 -0
- package/src/assets/web-panel/assets/{index-C8er4W9u.js → index-B0mgngoB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DViK2bkv.js → index-BBCMulQ-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmkbAADP.js → index-BSNhW95G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2tEnBPx.js → index-B_JmInC0.js} +1 -1
- package/src/assets/web-panel/assets/{index-_ZtCyUdz.js → index-BaPvEvB4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CN53dE_u.js → index-Bkz1tgFR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bj4hIiLW.js → index-BmTacaQV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Tz5dheZa.js → index-CCFZN66A.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dv7V2kg6.js → index-COol3xfA.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bu2P6u8m.js → index-CY8cRKHR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bw9s2d3c.js → index-Cbp-wp-U.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9yR7zqr.js → index-Co_LnCWD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BK4ftQ4d.js → index-Cx2EXRfr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxunxaTw.js → index-D-mSvCQK.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7kp-zRE.js → index-D072oLjp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CB3kVd9c.js → index-D6UqK83L.js} +1 -1
- package/src/assets/web-panel/assets/{index-CF9lWi1o.js → index-DF_FKSVH.js} +1 -1
- package/src/assets/web-panel/assets/{index-IY9bd5az.js → index-DLwEXRrb.js} +1 -1
- package/src/assets/web-panel/assets/{index-F2E5RCwz.js → index-DO0VlNtc.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2o_BBjg.js → index-DS04wRll.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY-gBSm8.js → index-DYn5DnDk.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0QbLlWn.js → index-D_O2ZjPk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjF5BOZx.js → index-DcCnO0RU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CehdwJ_Q.js → index-Dkp-okWa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmXpdcHI.js → index-OUFoxUgH.js} +1 -1
- package/src/assets/web-panel/assets/index-P4FXZJqI.js +1 -0
- package/src/assets/web-panel/assets/{index-t2Ch_JKn.js → index-Wo0f2iqb.js} +1 -1
- package/src/assets/web-panel/assets/{index-T3MTE6jB.js → index-ZD5Kd8tx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cp5y7lX_.js → index-fOwii3LP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cgk0YEiq.js → index-hG7jXGEW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpdDnZX_.js → index-pVdQieac.js} +1 -1
- package/src/assets/web-panel/assets/{index-o9DpkZKf.js → index-uH2LnAs_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmQITjMU.js → index-xzaUx19r.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BoiGJDoO.js → initDefaultProps-B8PN9AxJ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-5eL4E0pA.js → motion-BHivfw5Q.js} +1 -1
- package/src/assets/web-panel/assets/{move-DjggDi_1.js → move-B0QU5nDd.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Ce8Vo2T3.js → mtc-parser-DRwRM3PE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-D1yOBaO2.js → omit-SHt2rV2p.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-8NLceQe8.js → pickAttrs-CcmDlEb2.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CsIdBRmQ.js → placementArrow-DYatmXDS.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-GM5NE8En.js → responsiveObserve-B7qrsXq5.js} +1 -1
- package/src/assets/web-panel/assets/{slide-44yj3u49.js → slide-BRGhlOWd.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-B8tqtWcX.js → statusUtils-CT-7NXsQ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-NhDPBbyB.js → styleChecker-rZdw_Yyp.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C8Qz1GtN.js → useFlexGapSupport-D8YNIP4P.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-ClUv4kih.js → useFs-B8pt0Gu-.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BwkOVEh6.js → usePersonalDataHub-VMmYM1tt.js} +1 -1
- package/src/assets/web-panel/assets/{vnode--gMF33R0.js → vnode-UNDuoPoq.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DXg3TqOP.js → zoom-dN-u667S.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +39 -0
- package/src/lib/evolution/evolution-artifact-ports.js +26 -0
- package/src/lib/evolution/evolution-eval-cohort-enrollment.js +713 -47
- package/src/lib/evolution/evolution-eval-gate.js +146 -0
- package/src/lib/evolution/evolution-eval-launch-admission.js +168 -90
- package/src/lib/evolution/evolution-eval-ledger-capture.js +50 -0
- package/src/lib/evolution/evolution-eval-readonly-audit.js +106 -0
- package/src/lib/evolution/evolution-ledger-file-backend.js +20 -0
- package/src/lib/evolution/evolution-ledger-ports.js +59 -27
- package/src/lib/evolution/evolution-ledger-v2-journal.js +55 -18
- package/src/lib/evolution/evolution-workbench-file-resources.js +19 -1
- package/src/lib/evolution/rrsi-cohort-registration.js +275 -0
- package/src/lib/evolution/rrsi-contracts.js +742 -0
- package/src/lib/evolution/rrsi-data.js +196 -0
- package/src/lib/evolution/rrsi-evaluation-adapter.js +275 -0
- package/src/lib/evolution/rrsi-evaluation-variants.js +267 -0
- package/src/lib/evolution/rrsi-group-statistics.js +553 -0
- package/src/lib/evolution/rrsi-history-ledger-adapter.js +3261 -0
- package/src/lib/evolution/rrsi-native-batch-evidence.js +520 -0
- package/src/lib/evolution/rrsi-native-eval-row-collector.js +538 -0
- package/src/lib/evolution/rrsi-native-evaluation-batch.js +547 -0
- package/src/lib/evolution/rrsi-native-evaluation-plan.js +431 -0
- package/src/lib/evolution/rrsi-native-group-statistics-plan.js +121 -0
- package/src/lib/evolution/rrsi-native-group-statistics.js +482 -0
- package/src/lib/evolution/rrsi-native-quality-receipt-contracts.js +321 -0
- package/src/lib/evolution/rrsi-native-quality-receipt.js +256 -0
- package/src/lib/evolution/rrsi-native-statistics-protocol.js +330 -0
- package/src/lib/evolution/rrsi-parent-binding.js +290 -0
- package/src/lib/evolution/rrsi-pm-execution-bridge.js +500 -0
- package/src/lib/evolution/rrsi-pm-training-mapping.js +134 -0
- package/src/lib/evolution/rrsi-preparation-contracts.js +213 -0
- package/src/lib/evolution/rrsi-registry-history-binding.js +193 -0
- package/src/lib/evolution/rrsi-registry-store-policy.js +1191 -0
- package/src/lib/evolution/rrsi-runtime-composition.js +79 -0
- package/src/lib/evolution/rrsi-selector.js +434 -0
- package/src/lib/evolution/rrsi-statistics-simulation.js +354 -0
- package/src/lib/evolution/skill-candidate-registry.js +216 -29
- package/src/lib/evolution/skill-registry-maintenance.js +80 -0
- package/src/lib/evolution/skill-registry-writer-control.js +138 -0
- package/src/lib/evolution/skill-release-registry.js +399 -169
- package/src/lib/formal-quality-eval-runtime.js +2 -14
- package/src/lib/goal-store.js +225 -16
- package/src/lib/record-replay/skill-recorder.js +38 -3
- package/src/lib/scheduler-kernel/authority-resolver.js +12 -163
- package/src/lib/scheduler-kernel/contract.js +27 -414
- package/src/lib/scheduler-kernel/runtime.js +21 -823
- package/src/lib/scheduler-kernel/service.js +11 -328
- package/src/lib/scheduler-kernel/source-locator-path.js +7 -142
- package/src/lib/scheduler-kernel/store.js +67 -5931
- package/src/lib/secure-fs.js +16 -1314
- package/src/lib/with-file-lock.js +122 -20
- package/src/assets/web-panel/assets/ChatBubbleRenderer-fcc_Tvqu.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BFiVKf5t.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CfB8DxT2.js +0 -1
- package/src/assets/web-panel/assets/index-CCsRfd0k.js +0 -1
- package/src/assets/web-panel/assets/index-CsmiZIQ4.js +0 -1
|
@@ -22,13 +22,54 @@
|
|
|
22
22
|
* lock convoys.
|
|
23
23
|
*
|
|
24
24
|
* @param {string} targetPath the file being guarded (lock is `${targetPath}.lock`)
|
|
25
|
-
* @param {(ctx:{locked:boolean,waitMs:number,attempts:number,publishReleaseAfterPathRemoved:(pendingPath:string)=>boolean})=>T} fn
|
|
25
|
+
* @param {(ctx:{locked:boolean,waitMs:number,attempts:number,assertOwnership:()=>true,publishReleaseAfterPathRemoved:(pendingPath:string)=>boolean})=>T} fn
|
|
26
26
|
* critical section; `publishReleaseAfterPathRemoved` lets a transaction
|
|
27
27
|
* publish an exact, contender-completable handoff before its final atomic
|
|
28
28
|
* rename removes a uniquely named staging path
|
|
29
29
|
* @returns {T} whatever `fn` returns
|
|
30
30
|
*/
|
|
31
31
|
export function withFileLock(targetPath, fn, opts = {}) {
|
|
32
|
+
const operation = runLocked(targetPath, fn, opts, false);
|
|
33
|
+
const sleep = opts._sleep ?? sleepSync;
|
|
34
|
+
let step = operation.next();
|
|
35
|
+
while (!step.done) {
|
|
36
|
+
try {
|
|
37
|
+
sleep(step.value.waitMs);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
step = operation.throw(error);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
step = operation.next();
|
|
43
|
+
}
|
|
44
|
+
return step.value;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Hold the same lock through asynchronous callback settlement and cleanup.
|
|
49
|
+
* Early publishReleaseAfterPathRemoved handoffs are unavailable (return false)
|
|
50
|
+
* because no contender may enter while the asynchronous body is still active.
|
|
51
|
+
*/
|
|
52
|
+
export async function withFileLockAsync(targetPath, fn, opts = {}) {
|
|
53
|
+
const operation = runLocked(targetPath, fn, opts, true);
|
|
54
|
+
const sleep = opts._sleep ?? sleepAsync;
|
|
55
|
+
let step = operation.next();
|
|
56
|
+
while (!step.done) {
|
|
57
|
+
let value;
|
|
58
|
+
try {
|
|
59
|
+
value = Object.hasOwn(step.value, "callbackResult")
|
|
60
|
+
? await step.value.callbackResult
|
|
61
|
+
: await sleep(step.value.waitMs);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
step = operation.throw(error);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
step = operation.next(value);
|
|
67
|
+
}
|
|
68
|
+
return step.value;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// One acquire/reclaim/release state machine; only waiting differs by API.
|
|
72
|
+
function* runLocked(targetPath, fn, opts, asynchronous) {
|
|
32
73
|
const {
|
|
33
74
|
timeoutMs = 2000,
|
|
34
75
|
staleMs = 30000,
|
|
@@ -38,7 +79,6 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
38
79
|
yieldAfterReleaseMs = 0,
|
|
39
80
|
_fs = defaultFs,
|
|
40
81
|
_now = () => Date.now(),
|
|
41
|
-
_sleep = sleepSync,
|
|
42
82
|
_random = Math.random,
|
|
43
83
|
_isProcessAlive = isProcessAlive,
|
|
44
84
|
_ownerToken = () => randomUUID(),
|
|
@@ -61,6 +101,9 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
61
101
|
let lastOwnerObservation = null;
|
|
62
102
|
let retryAttempt = 0;
|
|
63
103
|
let releasePublished = false;
|
|
104
|
+
let bodyActive = false;
|
|
105
|
+
let ownershipLost = false;
|
|
106
|
+
let directoryIdentity = null;
|
|
64
107
|
const deadline = _now() + timeoutMs;
|
|
65
108
|
|
|
66
109
|
for (;;) {
|
|
@@ -74,16 +117,15 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
74
117
|
if (
|
|
75
118
|
failIfUnavailable &&
|
|
76
119
|
isTransientLockError(error) &&
|
|
77
|
-
waitForRetry({
|
|
120
|
+
(yield* waitForRetry({
|
|
78
121
|
_now,
|
|
79
|
-
_sleep,
|
|
80
122
|
_random,
|
|
81
123
|
deadline,
|
|
82
124
|
retryAttempt: retryAttempt++,
|
|
83
125
|
retryMs,
|
|
84
126
|
maxRetryMs,
|
|
85
127
|
retryJitterMs,
|
|
86
|
-
})
|
|
128
|
+
}))
|
|
87
129
|
) {
|
|
88
130
|
continue;
|
|
89
131
|
}
|
|
@@ -147,16 +189,15 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
147
189
|
}
|
|
148
190
|
}
|
|
149
191
|
if (
|
|
150
|
-
!waitForRetry({
|
|
192
|
+
!(yield* waitForRetry({
|
|
151
193
|
_now,
|
|
152
|
-
_sleep,
|
|
153
194
|
_random,
|
|
154
195
|
deadline,
|
|
155
196
|
retryAttempt: retryAttempt++,
|
|
156
197
|
retryMs,
|
|
157
198
|
maxRetryMs,
|
|
158
199
|
retryJitterMs,
|
|
159
|
-
})
|
|
200
|
+
}))
|
|
160
201
|
) {
|
|
161
202
|
break;
|
|
162
203
|
}
|
|
@@ -186,12 +227,48 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
186
227
|
let bodyThrew = false;
|
|
187
228
|
let result;
|
|
188
229
|
try {
|
|
230
|
+
if (held) directoryIdentity = readLockDirectoryIdentity(_fs, lockDir);
|
|
231
|
+
bodyActive = true;
|
|
189
232
|
result = fn({
|
|
190
233
|
locked: held,
|
|
191
234
|
waitMs: Math.max(0, _now() - owner.startedAt),
|
|
192
235
|
attempts: retryAttempt + 1,
|
|
236
|
+
assertOwnership() {
|
|
237
|
+
let cause = null;
|
|
238
|
+
try {
|
|
239
|
+
if (
|
|
240
|
+
held &&
|
|
241
|
+
bodyActive &&
|
|
242
|
+
!ownershipLost &&
|
|
243
|
+
!releasePublished &&
|
|
244
|
+
sameLockDirectoryIdentity(
|
|
245
|
+
directoryIdentity,
|
|
246
|
+
readLockDirectoryIdentity(_fs, lockDir),
|
|
247
|
+
) &&
|
|
248
|
+
sameOwner(readOwner(_fs, ownerPath), owner) &&
|
|
249
|
+
pathStatus(_fs, path.join(lockDir, `.release-${owner.token}`)) ===
|
|
250
|
+
"absent"
|
|
251
|
+
)
|
|
252
|
+
return true;
|
|
253
|
+
} catch (error) {
|
|
254
|
+
cause = error;
|
|
255
|
+
}
|
|
256
|
+
ownershipLost = true;
|
|
257
|
+
const error = new Error(
|
|
258
|
+
`State lock ownership is no longer current: ${targetPath}`,
|
|
259
|
+
cause ? { cause } : undefined,
|
|
260
|
+
);
|
|
261
|
+
error.code = "STATE_LOCK_OWNERSHIP_LOST";
|
|
262
|
+
throw error;
|
|
263
|
+
},
|
|
193
264
|
publishReleaseAfterPathRemoved(pendingPath) {
|
|
194
|
-
if (
|
|
265
|
+
if (
|
|
266
|
+
asynchronous ||
|
|
267
|
+
!bodyActive ||
|
|
268
|
+
!held ||
|
|
269
|
+
typeof pendingPath !== "string" ||
|
|
270
|
+
!pendingPath
|
|
271
|
+
) {
|
|
195
272
|
return false;
|
|
196
273
|
}
|
|
197
274
|
const current = readOwner(_fs, ownerPath);
|
|
@@ -214,21 +291,31 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
214
291
|
return true;
|
|
215
292
|
},
|
|
216
293
|
});
|
|
294
|
+
if (asynchronous) result = yield { callbackResult: result };
|
|
217
295
|
} catch (error) {
|
|
218
296
|
bodyThrew = true;
|
|
219
297
|
bodyError = error;
|
|
220
298
|
}
|
|
299
|
+
bodyActive = false;
|
|
221
300
|
let released = !held;
|
|
222
301
|
let releaseError = null;
|
|
223
302
|
if (held) {
|
|
224
303
|
try {
|
|
225
|
-
released =
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
304
|
+
released =
|
|
305
|
+
ownershipLost &&
|
|
306
|
+
!releasePublished &&
|
|
307
|
+
!sameLockDirectoryIdentity(
|
|
308
|
+
directoryIdentity,
|
|
309
|
+
readLockDirectoryIdentity(_fs, lockDir),
|
|
310
|
+
)
|
|
311
|
+
? false
|
|
312
|
+
: releaseOwnedDirectory(
|
|
313
|
+
_fs,
|
|
314
|
+
lockDir,
|
|
315
|
+
owner,
|
|
316
|
+
isOwnerAlive,
|
|
317
|
+
releasePublished,
|
|
318
|
+
);
|
|
232
319
|
} catch (error) {
|
|
233
320
|
releaseError = error;
|
|
234
321
|
}
|
|
@@ -245,7 +332,7 @@ export function withFileLock(targetPath, fn, opts = {}) {
|
|
|
245
332
|
// The lock is gone or its exact release marker has transferred cleanup to
|
|
246
333
|
// contenders. Let an existing waiter run before a process performing many
|
|
247
334
|
// tiny transactions can immediately reacquire it.
|
|
248
|
-
|
|
335
|
+
yield { waitMs: yieldAfterReleaseMs };
|
|
249
336
|
}
|
|
250
337
|
return result;
|
|
251
338
|
}
|
|
@@ -256,6 +343,7 @@ import { randomUUID } from "node:crypto";
|
|
|
256
343
|
|
|
257
344
|
const defaultFs = {
|
|
258
345
|
mkdirSync: (p) => fs.mkdirSync(p),
|
|
346
|
+
lstatSync: (p) => fs.lstatSync(p, { bigint: true }),
|
|
259
347
|
statSync: (p) => fs.statSync(p),
|
|
260
348
|
readFileSync: (p, o) => fs.readFileSync(p, o),
|
|
261
349
|
writeFileSync: (p, value, o) => fs.writeFileSync(p, value, o),
|
|
@@ -263,6 +351,17 @@ const defaultFs = {
|
|
|
263
351
|
rmSync: (p, o) => fs.rmSync(p, o),
|
|
264
352
|
};
|
|
265
353
|
|
|
354
|
+
function readLockDirectoryIdentity(io, lockDir) {
|
|
355
|
+
const value = io.lstatSync ? io.lstatSync(lockDir) : io.statSync(lockDir);
|
|
356
|
+
if (value.isSymbolicLink?.() || value.isDirectory?.() === false)
|
|
357
|
+
throw new Error("State lock is not a regular directory");
|
|
358
|
+
return { dev: value.dev, ino: value.ino };
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function sameLockDirectoryIdentity(left, right) {
|
|
362
|
+
return !!left && left.dev === right.dev && left.ino === right.ino;
|
|
363
|
+
}
|
|
364
|
+
|
|
266
365
|
function acquireOwnedDirectory(_fs, lockDir, owner) {
|
|
267
366
|
const serializedOwner = JSON.stringify(owner);
|
|
268
367
|
// Injected legacy filesystems used by a few consumers may not implement
|
|
@@ -350,9 +449,8 @@ function isTransientLockError(error) {
|
|
|
350
449
|
return !!error && TRANSIENT_LOCK_ERROR_CODES.has(error.code);
|
|
351
450
|
}
|
|
352
451
|
|
|
353
|
-
function waitForRetry({
|
|
452
|
+
function* waitForRetry({
|
|
354
453
|
_now,
|
|
355
|
-
_sleep,
|
|
356
454
|
_random,
|
|
357
455
|
deadline,
|
|
358
456
|
retryAttempt,
|
|
@@ -373,7 +471,7 @@ function waitForRetry({
|
|
|
373
471
|
jitterLimit > 0 && Number.isFinite(sample)
|
|
374
472
|
? Math.floor(Math.min(1, Math.max(0, sample)) * jitterLimit)
|
|
375
473
|
: 0;
|
|
376
|
-
|
|
474
|
+
yield { waitMs: Math.min(remaining, exponential + jitter) };
|
|
377
475
|
return true;
|
|
378
476
|
}
|
|
379
477
|
|
|
@@ -730,6 +828,10 @@ function releaseOwnedDirectory(
|
|
|
730
828
|
}
|
|
731
829
|
|
|
732
830
|
/** Synchronous sleep that doesn't busy-spin the CPU when possible. */
|
|
831
|
+
function sleepAsync(ms) {
|
|
832
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
833
|
+
}
|
|
834
|
+
|
|
733
835
|
function sleepSync(ms) {
|
|
734
836
|
try {
|
|
735
837
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as s,R as a,S as y,K as C,Q as x,V as w,_ as B,b as n}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-IahILygB.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=n(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=n(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=n(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=n(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=n(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:n};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},O={class:"actor"},R={class:"time"},V={class:"body"};function q(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[s("div",T,[s("div",M,[s("span",O,a(r.actorLabel),1),s("span",R,a(r.formattedTime),1)]),s("div",V,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const j=k(N,[["render",q],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-OGunJz/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as c,J as p,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-IahILygB.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function u(t,o,e,r,n,m){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",u],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-OGunJz/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-IahILygB.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-77dfwaUk.js";import{a0 as t}from"./index-IahILygB.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-GM5NE8En.js";import"./useFlexGapSupport-C8Qz1GtN.js";import"./styleChecker-NhDPBbyB.js";import"./index-CSmFby3Q.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-Bdr7JwIx.js";import{a0 as t}from"./index-IahILygB.js";import"./vendor-Bn1JzzAn.js";import"./index-CSmFby3Q.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|