chainlesschain 0.166.91 → 0.166.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/README.md +17 -17
  2. package/package.json +3 -3
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-DgV7xb8F.js → AIOps-oo9rE0gh.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-CgANpkKu.js → ActionButton-CVJVVv4i.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-DnvpX7RB.js → Analytics-CUXuwmia.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-C2bHccBM.js → AppLayout-iM4PvCuY.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-BIhijC9g.js → Artifacts-DKUIJbf9.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-CKRjWGdp.js → Audit-C4_SzFN2.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-CblYtgBE.js → BackgroundAgents-C3427uy-.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-Cq35b78a.js → Backup-BpEQQiog.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-DcB7NoRz.js → BaseInput-C_exQomZ.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-tc3b-s7i.js → Chat-DzpkLtWa.js} +5 -5
  15. package/src/assets/web-panel/assets/ChatBubbleRenderer-DX4XmTWm.js +1 -0
  16. package/src/assets/web-panel/assets/{Checkbox-BLD5bH5u.js → Checkbox-CxAC1CU8.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-BLOsoazN.js → Codegen-wDFAGCLp.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-Bdr7JwIx.js → Col-BvwirhMf.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-C84BsWE0.js → Community-BJuA7paY.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-Dzdwd04z.js → Compact-DzV35_u2.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-CCG-R0EV.js → Compliance-CIDPPvr9.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-BYj72SK0.js → Cowork-DyTMxP3N.js} +3 -3
  23. package/src/assets/web-panel/assets/{Cron-B6iKAwOf.js → Cron-PcNLjMFx.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-BJ-oDC6u.js → Crosschain-B_O7ck6Z.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-BnMckGLr.js → DID-CII35Me1.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-Cyje-gCO.js → Dashboard-DU56fkNz.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-BpNlenjK.js → Dropdown-DHC8HVeJ.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-BhonO7Nv.js → EmailListRenderer-oUOHFNsD.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-DVoNU-Id.js → EvolutionSettings-D7RCAWNl.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-tdn-KC67.js → FamilyGuardDashboard-CGONPZxC.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation--EEVrHhz.js → Federation-BbDlPWcl.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-Cy8zr0-4.js → FormItemContext-BBJbFQQT.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-BuUhpgFi.js → GenericCardRenderer-iuxAero4.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-Ctd3E5Pe.js → Git-Dw0prdY5.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-Ce7dV6aU.js → Governance-DOGqi_uV.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-CD1vExIH.js → Inference-BY5oUGGj.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-Dn64OdQ7.js → KnowledgeGraph-CcE2EVYX.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-PmElVRrT.js → Logs-DyfN4R5w.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-BFiVKf5t.js → MarkdownRenderer-Bj62Aq0M.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-OW4jTXwx.js → Marketplace-CuuuAXUh.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-BEq2Ib4x.js → McpTools-948Fithv.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-Can_P2oK.js → Memory-D4PINvyy.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DJ8R-dn3.js → MobileBridge-ECKMaLzX.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-B7kV9GOt.js → MobileProjects-CB5MAcvD.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-BfxamolS.js → Mtc-BRzIM3HJ.js} +4 -4
  46. package/src/assets/web-panel/assets/{MtcAudit-DHtuv7av.js → MtcAudit-CGeAXJGn.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-DLkLpvxc.js → Multisig-C_qJ-8K-.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-u4XtJTIt.js → NLProgramming-DAEyCn7T.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-BwuuPJLS.js → Notes-DmD3MEec.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-HEeu-E9v.js → NotificationSettings-Cv4Q3VC9.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-BNlpaFjH.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-Yh-czs3b.js → Organization-DqAFdz6p.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-DmE8mYVM.js → Overflow-8Ye9cIcE.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-CWVck8WN.js → P2P-755SfHoJ.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-DgFqekod.js → PdhVaultBrowser-CgZLiucX.js} +4 -4
  56. package/src/assets/web-panel/assets/{Permissions-BtJBVOHV.js → Permissions-C-vFF_rL.js} +3 -3
  57. package/src/assets/web-panel/assets/{PersonalDataHub-6VBObXzd.js → PersonalDataHub-Diz1oXM3.js} +5 -5
  58. package/src/assets/web-panel/assets/{Pipeline-D222FmqY.js → Pipeline-D4kIzsZG.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Bi9FMikp.js → Privacy-QKLkSAUH.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-Bo52H47H.js → ProjectInit-I0S9o_RT.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-BPkesfOc.js → ProjectSettings-DdgV3-Ho.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-GynohSFX.js → Projects-BJHHegtj.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-DVdMg04n.js → Providers-uVa1zfbS.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-DqJCb595.js → QrScannerModal-YLVpOChR.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-J7loQbXi.js → QuickAsk-535AYH61.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-BI5aURVc.js → Recommend-C_P6eNSw.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-BN2sqGvz.js → RemoteSession-EXH1SbNj.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-BGOND-Fi.js → Reputation-Cxc7d3eU.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-77dfwaUk.js → Row-EDqJy-wS.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-FtBAxS3g.js → RssFeed-C03Xeg9_.js} +2 -2
  71. package/src/assets/web-panel/assets/{Search-BaYVLFb7.js → Search-DsIga9DK.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-LE3Vv6ab.js → Security-DgArMFc-.js} +3 -3
  73. package/src/assets/web-panel/assets/{Services-C5pP-Whz.js → Services-MooDpHBP.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-CLqKUVsF.js → Skeleton-B10P1Dr6.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-BPjN0SX5.js → Skills-DHLHEkLl.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-14jD70kg.js → Sla-D4RT7d4g.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-Dr9ij42W.js → SpeechSettings-D8u6F-LV.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BzLHP7B8.js → SyncSettings-4nvNzRq8.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-YqV9b0rV.js → Tasks-CmCb8zNO.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-CxxAE4PK.js → Templates-CzESIa21.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CRb3PcKJ.js → Tenant-Ch_N3p4d.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-CTzPpBaP.js → Terminal-BZccUf_X.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-DjFUj_hy.js → TimelineRenderer-FrKcNy_3.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-Bbb8tPvx.js → Tokens-4xvLpXfD.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-CSeWGM0W.js → Trigger-84UjyxXd.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-JgESMBo3.js → Trust-M6UtHnji.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-CiObLk0T.js → UkeySign-L_xEgtCg.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-CFEZaQ2x.js → VideoEditing-BLJCX9ru.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-DR8ZGDNn.js → Wallet-DwL6uJCj.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-DxZukvu7.js → WebAuthn-Bmn9pdzz.js} +5 -5
  91. package/src/assets/web-panel/assets/{WorkflowEditor-CKgSZQwn.js → WorkflowEditor-DSsZ5xG1.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-CTxEQE66.js → chat--FGNUaa8.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-CAjKMUu3.js → colors-DeuwNdqX.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-BXuz49at.js → compact-item-I4XKxRFU.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-CFN_Hwr9.js → createContext-RoD2p5Ba.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-ctnml4IW.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-BwoSBSfP.js → hasIn-BsvyddUM.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CB3kVd9c.js → index-0tRU1Sv-.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-o9DpkZKf.js → index-4xHc2WjT.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BmQITjMU.js → index-B8-eGLN9.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DY-gBSm8.js → index-BS_uqSTa.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-F2E5RCwz.js → index-BYEVBlCl.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CF9lWi1o.js → index-BcBM065G.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Bu2P6u8m.js → index-BnrL4s-3.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Dv7V2kg6.js → index-BrZPb0On.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C7PN8mh1.js +1 -0
  107. package/src/assets/web-panel/assets/{index-DViK2bkv.js → index-CBazK4-7.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BmXpdcHI.js → index-CPS3zv1c.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Bqv_Cray.js → index-CSrZiiAs.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-B7kp-zRE.js → index-CVwZMt9Z.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-B0QbLlWn.js → index-CdgKZYgm.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DjF5BOZx.js → index-CesTu01s.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CSmFby3Q.js → index-CiHlSuMl.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B2o_BBjg.js → index-CsLVac9n.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CehdwJ_Q.js → index-D1ONyBTW.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Bj4hIiLW.js → index-D4IZsKbF.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-_ZtCyUdz.js → index-D4P4vpmv.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-B9yR7zqr.js → index-D6J8dz7X.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-u9_DM3ZC.js → index-DChy2sHE.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-C8er4W9u.js → index-DKUCl_Lk.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BK4ftQ4d.js → index-DRluW3_r.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B2tEnBPx.js → index-DWUmhNO-.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-IY9bd5az.js → index-DXnpVGG3.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Cp5y7lX_.js → index-DYOpAS6-.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-T3MTE6jB.js → index-DiH-3cR2.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DxunxaTw.js → index-DlEfwgzr.js} +1 -1
  127. package/src/assets/web-panel/assets/index-KnbBJAO-.js +1 -0
  128. package/src/assets/web-panel/assets/{index-DTX9CJPx.js → index-R4St_zjR.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Tz5dheZa.js → index-ScgoDU9V.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DmkbAADP.js → index-UWdT_lty.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bw9s2d3c.js → index-VAlor744.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CN53dE_u.js → index-Wco_uvRo.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DpdDnZX_.js → index-ZgFED_Zd.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-IahILygB.js → index-jaHeti4i.js} +3 -3
  135. package/src/assets/web-panel/assets/{index-Cgk0YEiq.js → index-rJDabtw4.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-t2Ch_JKn.js → index-vRiGKIP0.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-BoiGJDoO.js → initDefaultProps-BHT0PacY.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-5eL4E0pA.js → motion-CBYsMtsC.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-DjggDi_1.js → move-DnHfFV4K.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-Ce8Vo2T3.js → mtc-parser-DfGkRYrx.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-D1yOBaO2.js → omit-SjLcPQA9.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-8NLceQe8.js → pickAttrs-CCZHF4ep.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-CsIdBRmQ.js → placementArrow-DjCGn2sJ.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-GM5NE8En.js → responsiveObserve-BCFCl2on.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-44yj3u49.js → slide-DsfmuIZu.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-B8tqtWcX.js → statusUtils-hPKuJUia.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-NhDPBbyB.js → styleChecker-DOXKH7Kf.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-C8Qz1GtN.js → useFlexGapSupport-B_G7yqio.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-ClUv4kih.js → useFs-BXOTOm2l.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-BwkOVEh6.js → usePersonalDataHub-CRvie3g7.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode--gMF33R0.js → vnode-D9_zMmww.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-DXg3TqOP.js → zoom-C4tW03qI.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/data/changelog.json +52 -0
  155. package/src/lib/artifact-store.js +51 -3
  156. package/src/lib/bounded-artifact-file-read.js +131 -0
  157. package/src/lib/evolution/evolution-artifact-ports.js +235 -129
  158. package/src/lib/evolution/evolution-eval-cohort-enrollment.js +713 -47
  159. package/src/lib/evolution/evolution-eval-gate.js +146 -0
  160. package/src/lib/evolution/evolution-eval-launch-admission.js +168 -90
  161. package/src/lib/evolution/evolution-eval-ledger-capture.js +50 -0
  162. package/src/lib/evolution/evolution-eval-readonly-audit.js +106 -0
  163. package/src/lib/evolution/evolution-ledger-file-backend.js +20 -0
  164. package/src/lib/evolution/evolution-ledger-ports.js +59 -27
  165. package/src/lib/evolution/evolution-ledger-v2-journal.js +55 -18
  166. package/src/lib/evolution/evolution-workbench-file-resources.js +19 -1
  167. package/src/lib/evolution/rrsi-cohort-registration.js +275 -0
  168. package/src/lib/evolution/rrsi-contracts.js +742 -0
  169. package/src/lib/evolution/rrsi-data.js +196 -0
  170. package/src/lib/evolution/rrsi-evaluation-adapter.js +275 -0
  171. package/src/lib/evolution/rrsi-evaluation-variants.js +267 -0
  172. package/src/lib/evolution/rrsi-group-statistics.js +553 -0
  173. package/src/lib/evolution/rrsi-history-ledger-adapter.js +3286 -0
  174. package/src/lib/evolution/rrsi-installation-route-contracts.js +275 -0
  175. package/src/lib/evolution/rrsi-installation-route-reader.js +282 -0
  176. package/src/lib/evolution/rrsi-native-batch-evidence.js +520 -0
  177. package/src/lib/evolution/rrsi-native-eval-row-collector.js +538 -0
  178. package/src/lib/evolution/rrsi-native-evaluation-batch.js +547 -0
  179. package/src/lib/evolution/rrsi-native-evaluation-plan.js +431 -0
  180. package/src/lib/evolution/rrsi-native-group-statistics-plan.js +121 -0
  181. package/src/lib/evolution/rrsi-native-group-statistics.js +482 -0
  182. package/src/lib/evolution/rrsi-native-quality-receipt-contracts.js +321 -0
  183. package/src/lib/evolution/rrsi-native-quality-receipt.js +256 -0
  184. package/src/lib/evolution/rrsi-native-statistics-protocol.js +330 -0
  185. package/src/lib/evolution/rrsi-observed-text-index.js +978 -0
  186. package/src/lib/evolution/rrsi-parent-binding.js +290 -0
  187. package/src/lib/evolution/rrsi-pm-execution-bridge.js +500 -0
  188. package/src/lib/evolution/rrsi-pm-training-mapping.js +134 -0
  189. package/src/lib/evolution/rrsi-preparation-contracts.js +213 -0
  190. package/src/lib/evolution/rrsi-registry-history-binding.js +193 -0
  191. package/src/lib/evolution/rrsi-registry-runtime-policy.js +648 -0
  192. package/src/lib/evolution/rrsi-registry-store-policy.js +1271 -0
  193. package/src/lib/evolution/rrsi-runtime-composition.js +79 -0
  194. package/src/lib/evolution/rrsi-selector.js +434 -0
  195. package/src/lib/evolution/rrsi-statistics-simulation.js +354 -0
  196. package/src/lib/evolution/rrsi-tenant-index-anchor-contracts.js +223 -0
  197. package/src/lib/evolution/rrsi-tenant-index-anchor-history.js +157 -0
  198. package/src/lib/evolution/skill-candidate-registry.js +216 -29
  199. package/src/lib/evolution/skill-registry-maintenance.js +80 -0
  200. package/src/lib/evolution/skill-registry-writer-control.js +138 -0
  201. package/src/lib/evolution/skill-release-registry.js +414 -169
  202. package/src/lib/formal-quality-eval-runtime.js +2 -14
  203. package/src/lib/goal-store.js +225 -16
  204. package/src/lib/process-execution-broker/windows-native-evaluator-capabilities.js +291 -30
  205. package/src/lib/record-replay/skill-recorder.js +38 -3
  206. package/src/lib/remote-read-loop-guard.js +227 -24
  207. package/src/lib/scheduler-kernel/authority-resolver.js +12 -163
  208. package/src/lib/scheduler-kernel/contract.js +27 -414
  209. package/src/lib/scheduler-kernel/runtime.js +21 -823
  210. package/src/lib/scheduler-kernel/service.js +11 -328
  211. package/src/lib/scheduler-kernel/source-locator-path.js +7 -142
  212. package/src/lib/scheduler-kernel/store.js +67 -5931
  213. package/src/lib/secure-fs.js +16 -1314
  214. package/src/lib/task-progress-tracker.js +6 -1
  215. package/src/lib/with-file-lock.js +122 -20
  216. package/src/runtime/agent-core.js +71 -23
  217. package/src/assets/web-panel/assets/ChatBubbleRenderer-fcc_Tvqu.js +0 -1
  218. package/src/assets/web-panel/assets/OrderTableRenderer-BtvN-Qwh.js +0 -1
  219. package/src/assets/web-panel/assets/devWarning-CfB8DxT2.js +0 -1
  220. package/src/assets/web-panel/assets/index-CCsRfd0k.js +0 -1
  221. package/src/assets/web-panel/assets/index-CsmiZIQ4.js +0 -1
@@ -1,328 +1,11 @@
1
- import {
2
- SchedulerKernelError,
3
- normalizeIdentifier,
4
- normalizeJson,
5
- } from "./contract.js";
6
-
7
- export const DEFAULT_SERVICE_INTERVAL_MS = 5_000;
8
- export const MIN_SERVICE_INTERVAL_MS = 250;
9
- export const MAX_SERVICE_INTERVAL_MS = 3_600_000;
10
- export const MAX_SERVICE_SUMMARIES = 100;
11
-
12
- function serviceError(code, message, details = undefined, cause = undefined) {
13
- return new SchedulerKernelError(
14
- code,
15
- message,
16
- details,
17
- cause ? { cause } : undefined,
18
- );
19
- }
20
-
21
- function normalizeIntervalMs(value = DEFAULT_SERVICE_INTERVAL_MS) {
22
- if (
23
- !Number.isSafeInteger(value) ||
24
- value < MIN_SERVICE_INTERVAL_MS ||
25
- value > MAX_SERVICE_INTERVAL_MS
26
- ) {
27
- throw serviceError(
28
- "SCHEDULER_SERVICE_INVALID_INTERVAL",
29
- `intervalMs must be an integer between ${MIN_SERVICE_INTERVAL_MS} and ${MAX_SERVICE_INTERVAL_MS}`,
30
- );
31
- }
32
- return value;
33
- }
34
-
35
- function normalizeMaxTicks(value) {
36
- if (value === undefined) return null;
37
- if (!Number.isSafeInteger(value) || value < 1) {
38
- throw serviceError(
39
- "SCHEDULER_SERVICE_INVALID_MAX_TICKS",
40
- "maxTicks must be a positive integer",
41
- );
42
- }
43
- return value;
44
- }
45
-
46
- function normalizeDrivers(drivers) {
47
- if (!drivers || typeof drivers[Symbol.iterator] !== "function") {
48
- throw serviceError(
49
- "SCHEDULER_SERVICE_INVALID_DRIVERS",
50
- "Scheduler service drivers must be iterable",
51
- );
52
- }
53
- const normalized = [];
54
- const names = new Set();
55
- for (const driver of drivers) {
56
- if (!driver || typeof driver !== "object" || Array.isArray(driver)) {
57
- throw serviceError(
58
- "SCHEDULER_SERVICE_INVALID_DRIVER",
59
- "Scheduler service driver must be an object",
60
- );
61
- }
62
- const name = normalizeIdentifier(driver.name, "driver.name", {
63
- maxLength: 64,
64
- });
65
- if (names.has(name)) {
66
- throw serviceError(
67
- "SCHEDULER_SERVICE_DUPLICATE_DRIVER",
68
- `Scheduler service driver is registered more than once: ${name}`,
69
- );
70
- }
71
- if (typeof driver.run !== "function") {
72
- throw serviceError(
73
- "SCHEDULER_SERVICE_INVALID_DRIVER",
74
- `Scheduler service driver must implement run(): ${name}`,
75
- );
76
- }
77
- names.add(name);
78
- normalized.push({ name, driver });
79
- }
80
- if (normalized.length === 0) {
81
- throw serviceError(
82
- "SCHEDULER_SERVICE_INVALID_DRIVERS",
83
- "Scheduler service requires at least one driver",
84
- );
85
- }
86
- return normalized;
87
- }
88
-
89
- function safeError(error) {
90
- let details;
91
- try {
92
- if (error?.details !== undefined) {
93
- details = normalizeJson(error.details, "schedulerService.error.details");
94
- }
95
- } catch {
96
- details = { omitted: "invalid_error_details" };
97
- }
98
- return {
99
- code:
100
- typeof error?.code === "string" && error.code
101
- ? error.code.slice(0, 128)
102
- : "SCHEDULER_SERVICE_DRIVER_FAILED",
103
- message:
104
- typeof error?.message === "string" && error.message
105
- ? error.message.slice(0, 2_000)
106
- : String(error ?? "Scheduler driver failed").slice(0, 2_000),
107
- ...(details === undefined ? {} : { details }),
108
- };
109
- }
110
-
111
- function defaultSleep(ms, signal) {
112
- if (signal?.aborted) return Promise.resolve();
113
- return new Promise((resolve) => {
114
- let timer;
115
- const done = () => {
116
- if (timer !== undefined) clearTimeout(timer);
117
- signal?.removeEventListener?.("abort", done);
118
- resolve();
119
- };
120
- timer = setTimeout(done, ms);
121
- signal?.addEventListener?.("abort", done, { once: true });
122
- });
123
- }
124
-
125
- /**
126
- * Foreground host for independently durable scheduler domains.
127
- *
128
- * A service tick is serialized so a slow driver cannot overlap itself on the
129
- * next timer wakeup. Driver failures are isolated and emitted as visible
130
- * incidents; the remaining domains still run. Each domain remains responsible
131
- * for its own scheduler-kernel owner/fence, authority and settlement protocol.
132
- */
133
- export class SchedulerService {
134
- constructor({
135
- drivers,
136
- onEvent,
137
- now = Date.now,
138
- sleep = defaultSleep,
139
- dispose,
140
- } = {}) {
141
- this.drivers = normalizeDrivers(drivers);
142
- if (onEvent !== undefined && typeof onEvent !== "function") {
143
- throw serviceError(
144
- "SCHEDULER_SERVICE_INVALID_OBSERVER",
145
- "Scheduler service onEvent must be a function",
146
- );
147
- }
148
- if (typeof now !== "function" || typeof sleep !== "function") {
149
- throw serviceError(
150
- "SCHEDULER_SERVICE_INVALID_RUNTIME",
151
- "Scheduler service requires clock and sleep functions",
152
- );
153
- }
154
- if (dispose !== undefined && typeof dispose !== "function") {
155
- throw serviceError(
156
- "SCHEDULER_SERVICE_INVALID_DISPOSER",
157
- "Scheduler service dispose must be a function",
158
- );
159
- }
160
- this.onEvent = onEvent || null;
161
- this.now = now;
162
- this.sleep = sleep;
163
- this.dispose = dispose || null;
164
- this.tickNumber = 0;
165
- this._tickPromise = null;
166
- this._closed = false;
167
- }
168
-
169
- _emit(event) {
170
- if (!this.onEvent) return;
171
- try {
172
- this.onEvent(event);
173
- } catch {
174
- // Observability must never acquire scheduler execution authority.
175
- }
176
- }
177
-
178
- async _runOnce({ signal } = {}) {
179
- if (this._closed) {
180
- throw serviceError(
181
- "SCHEDULER_SERVICE_CLOSED",
182
- "Scheduler service is already closed",
183
- );
184
- }
185
- if (signal?.aborted) {
186
- return { status: "aborted", tick: this.tickNumber, results: [] };
187
- }
188
-
189
- const tick = ++this.tickNumber;
190
- const startedAt = Number(this.now());
191
- const results = [];
192
- this._emit({ type: "scheduler-tick-started", tick, startedAt });
193
- for (const { name, driver } of this.drivers) {
194
- if (signal?.aborted) break;
195
- const driverStartedAt = Number(this.now());
196
- try {
197
- const value = await driver.run({ signal, tick });
198
- const completedAt = Number(this.now());
199
- const result = {
200
- driver: name,
201
- status: "succeeded",
202
- startedAt: driverStartedAt,
203
- completedAt,
204
- value: value ?? null,
205
- };
206
- results.push(result);
207
- this._emit({ type: "scheduler-driver-completed", tick, ...result });
208
- } catch (error) {
209
- const completedAt = Number(this.now());
210
- const result = {
211
- driver: name,
212
- status: "failed",
213
- startedAt: driverStartedAt,
214
- completedAt,
215
- error: safeError(error),
216
- };
217
- results.push(result);
218
- this._emit({ type: "scheduler-driver-failed", tick, ...result });
219
- }
220
- }
221
- const completedAt = Number(this.now());
222
- const failed = results.filter((result) => result.status === "failed");
223
- const summary = {
224
- status: signal?.aborted
225
- ? "aborted"
226
- : failed.length > 0
227
- ? "degraded"
228
- : "succeeded",
229
- tick,
230
- startedAt,
231
- completedAt,
232
- results,
233
- };
234
- this._emit({ type: "scheduler-tick-completed", ...summary });
235
- return summary;
236
- }
237
-
238
- runOnce(options = {}) {
239
- if (this._tickPromise) return this._tickPromise;
240
- this._tickPromise = this._runOnce(options).finally(() => {
241
- this._tickPromise = null;
242
- });
243
- return this._tickPromise;
244
- }
245
-
246
- async run({ intervalMs, once = false, maxTicks, signal } = {}) {
247
- const interval = normalizeIntervalMs(intervalMs);
248
- const boundedTicks = once ? 1 : normalizeMaxTicks(maxTicks);
249
- const summaries = [];
250
- let ticks = 0;
251
- let omittedSummaries = 0;
252
- let degraded = false;
253
- this._emit({
254
- type: "scheduler-service-started",
255
- intervalMs: interval,
256
- drivers: this.drivers.map(({ name }) => name),
257
- });
258
- try {
259
- while (!signal?.aborted) {
260
- const summary = await this.runOnce({ signal });
261
- ticks += 1;
262
- summaries.push(summary);
263
- if (summaries.length > MAX_SERVICE_SUMMARIES) {
264
- summaries.shift();
265
- omittedSummaries += 1;
266
- }
267
- if (summary.status === "degraded") degraded = true;
268
- if (
269
- once ||
270
- signal?.aborted ||
271
- (boundedTicks !== null && ticks >= boundedTicks)
272
- ) {
273
- break;
274
- }
275
- await this.sleep(interval, signal);
276
- }
277
- return {
278
- status: signal?.aborted
279
- ? "aborted"
280
- : degraded
281
- ? "degraded"
282
- : "succeeded",
283
- ticks,
284
- omittedSummaries,
285
- summaries,
286
- };
287
- } finally {
288
- this._emit({
289
- type: "scheduler-service-stopped",
290
- ticks,
291
- aborted: signal?.aborted === true,
292
- });
293
- }
294
- }
295
-
296
- async close() {
297
- if (this._closed) return;
298
- this._closed = true;
299
- let closeError = null;
300
- try {
301
- // A caller may initiate shutdown while a manual tick is still settling.
302
- // Do not dispose the shared store underneath an active domain driver.
303
- try {
304
- await this._tickPromise;
305
- } catch (error) {
306
- closeError ||= error;
307
- }
308
- for (const { driver } of [...this.drivers].reverse()) {
309
- try {
310
- await driver.close?.();
311
- } catch (error) {
312
- closeError ||= error;
313
- }
314
- }
315
- } finally {
316
- try {
317
- await this.dispose?.();
318
- } catch (error) {
319
- closeError ||= error;
320
- }
321
- }
322
- if (closeError) throw closeError;
323
- }
324
- }
325
-
326
- export function createSchedulerService(options) {
327
- return new SchedulerService(options);
328
- }
1
+ // Compatibility entry: both hosts share the same implementation and error type.
2
+ import schedulerService from "@chainlesschain/session-core/scheduler-service";
3
+
4
+ export const {
5
+ DEFAULT_SERVICE_INTERVAL_MS,
6
+ MIN_SERVICE_INTERVAL_MS,
7
+ MAX_SERVICE_INTERVAL_MS,
8
+ MAX_SERVICE_SUMMARIES,
9
+ SchedulerService,
10
+ createSchedulerService,
11
+ } = schedulerService;
@@ -1,142 +1,7 @@
1
- import { posix, win32 } from "node:path";
2
-
3
- function sourcePathError(message) {
4
- const error = new TypeError(message);
5
- error.code = "SCHEDULER_SOURCE_PATH_INVALID";
6
- return error;
7
- }
8
-
9
- function pathApiFor(platform) {
10
- return platform === "win32" ? win32 : posix;
11
- }
12
-
13
- function isWindowsFilesystemRoot(value) {
14
- return (
15
- /^[A-Za-z]:\\$/u.test(value) ||
16
- /^\\\\\?\\[A-Za-z]:\\$/u.test(value) ||
17
- /^\\\\\?\\UNC\\[^\\]+\\[^\\]+\\$/iu.test(value) ||
18
- /^\\\\(?![?.]\\)[^\\]+\\[^\\]+\\$/u.test(value)
19
- );
20
- }
21
-
22
- function stripNonRootTrailingSeparators(value, pathApi, platform) {
23
- if (platform === "win32" && isWindowsFilesystemRoot(value)) return value;
24
- const root = pathApi.parse(value).root;
25
- let end = value.length;
26
- while (end > root.length && value[end - 1] === pathApi.sep) end -= 1;
27
- return value.slice(0, end);
28
- }
29
-
30
- export function isFullyQualifiedWindowsSchedulerPath(value) {
31
- if (
32
- typeof value !== "string" ||
33
- value.length === 0 ||
34
- value.trim() !== value
35
- ) {
36
- return false;
37
- }
38
-
39
- // Extended-length paths are accepted only for a fully-qualified drive or
40
- // UNC share. Other device namespaces (for example \\.\pipe) are not disk
41
- // locations and must never become durable source locators.
42
- if (/^[\\/]{2}\?[\\/]UNC[\\/][^\\/]+[\\/]+[^\\/]+(?:[\\/]|$)/iu.test(value)) {
43
- return true;
44
- }
45
- if (/^[\\/]{2}\?[\\/][A-Za-z]:[\\/]/u.test(value)) return true;
46
- if (/^[\\/]{2}[?.][\\/]/u.test(value)) return false;
47
-
48
- if (/^[A-Za-z]:[\\/]/u.test(value)) return true;
49
- return /^[\\/]{2}[^\\/]+[\\/]+[^\\/]+(?:[\\/]|$)/u.test(value);
50
- }
51
-
52
- /**
53
- * Produce the durable identity used by scheduler source locators.
54
- *
55
- * Windows identities are separator-normalized and case-folded. A rooted path
56
- * without a drive (\foo), a drive-relative path (C:foo), and incomplete UNC
57
- * paths are rejected because their meaning depends on process-local state.
58
- * Plain relative inputs remain supported for runtime-facing adapter APIs and
59
- * are resolved against a fully-qualified base before they enter a journal.
60
- */
61
- export function canonicalSchedulerSourcePath(
62
- value,
63
- {
64
- platform = process.platform,
65
- basePath = process.cwd(),
66
- allowRelative = true,
67
- } = {},
68
- ) {
69
- if (
70
- typeof value !== "string" ||
71
- value.length === 0 ||
72
- value.trim() !== value
73
- ) {
74
- throw sourcePathError("scheduler source path must be a non-empty string");
75
- }
76
- const input = value;
77
- const pathApi = pathApiFor(platform);
78
-
79
- if (platform === "win32") {
80
- let candidate = input;
81
- if (!isFullyQualifiedWindowsSchedulerPath(candidate)) {
82
- const isRootRelative = /^[\\/]/u.test(candidate);
83
- const isDriveRelative = /^[A-Za-z]:(?:[^\\/]|$)/u.test(candidate);
84
- if (isRootRelative || isDriveRelative || !allowRelative) {
85
- throw sourcePathError(
86
- "Windows scheduler source path must use a fully-qualified drive or UNC share",
87
- );
88
- }
89
- if (!isFullyQualifiedWindowsSchedulerPath(basePath)) {
90
- throw sourcePathError(
91
- "Windows scheduler source path base must use a fully-qualified drive or UNC share",
92
- );
93
- }
94
- candidate = pathApi.resolve(basePath, candidate);
95
- }
96
- if (!isFullyQualifiedWindowsSchedulerPath(candidate)) {
97
- throw sourcePathError(
98
- "Windows scheduler source path must use a fully-qualified drive or UNC share",
99
- );
100
- }
101
- return stripNonRootTrailingSeparators(
102
- pathApi.normalize(candidate),
103
- pathApi,
104
- platform,
105
- ).toLowerCase();
106
- }
107
-
108
- if (!pathApi.isAbsolute(input) && !allowRelative) {
109
- throw sourcePathError("scheduler source path must be absolute");
110
- }
111
- return stripNonRootTrailingSeparators(
112
- pathApi.normalize(
113
- pathApi.isAbsolute(input) ? input : pathApi.resolve(basePath, input),
114
- ),
115
- pathApi,
116
- platform,
117
- );
118
- }
119
-
120
- export function isCanonicalSchedulerSourcePath(value, options = {}) {
121
- try {
122
- return (
123
- canonicalSchedulerSourcePath(value, {
124
- ...options,
125
- allowRelative: false,
126
- }) === value
127
- );
128
- } catch {
129
- return false;
130
- }
131
- }
132
-
133
- export function schedulerSourcePathDirname(value, options = {}) {
134
- const platform = options.platform ?? process.platform;
135
- const pathApi = pathApiFor(platform);
136
- const canonical = canonicalSchedulerSourcePath(value, options);
137
- return canonicalSchedulerSourcePath(pathApi.dirname(canonical), {
138
- ...options,
139
- platform,
140
- allowRelative: false,
141
- });
142
- }
1
+ import sourcePaths from "@chainlesschain/session-core/scheduler-source-path";
2
+ export const {
3
+ isFullyQualifiedWindowsSchedulerPath,
4
+ canonicalSchedulerSourcePath,
5
+ isCanonicalSchedulerSourcePath,
6
+ schedulerSourcePathDirname,
7
+ } = sourcePaths;