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,3 +1,4 @@
1
+ import { isFormalQualityHermeticRuntime } from "@chainlesschain/session-core/host-storage-environment";
1
2
  import { createHash } from "node:crypto";
2
3
  import fs from "node:fs";
3
4
  import os from "node:os";
@@ -23,20 +24,7 @@ export const FORMAL_QUALITY_FILE_TOOLS = Object.freeze([
23
24
  * headless boundary through a launcher-only environment marker. Keep the
24
25
  * check exact so inherited or malformed values never change normal CLI runs.
25
26
  */
26
- export function isFormalQualityHermeticRuntime(environment = process.env) {
27
- if (environment?.[FORMAL_QUALITY_HERMETIC_ENV] !== "1") return false;
28
- const configuredHome = String(environment?.CHAINLESSCHAIN_HOME || "").trim();
29
- if (!configuredHome) return false;
30
- const temporaryRoot = path.resolve(os.tmpdir());
31
- const resolvedHome = path.resolve(configuredHome);
32
- const relation = path.relative(temporaryRoot, resolvedHome);
33
- return Boolean(
34
- relation &&
35
- relation !== ".." &&
36
- !relation.startsWith(`..${path.sep}`) &&
37
- !path.isAbsolute(relation),
38
- );
39
- }
27
+ export { isFormalQualityHermeticRuntime };
40
28
 
41
29
  function formalQualityIsolationRoot(environment) {
42
30
  if (!isFormalQualityHermeticRuntime(environment)) return null;
@@ -18,8 +18,15 @@
18
18
 
19
19
  import fs from "node:fs";
20
20
  import path from "node:path";
21
+ import { createHash } from "node:crypto";
21
22
  import { getHomeDir } from "./paths.js";
22
23
  import { withFileLock } from "./with-file-lock.js";
24
+ import {
25
+ createGoalRecord,
26
+ validateGoalRecord,
27
+ upgradeLegacyGoal,
28
+ goalError,
29
+ } from "@chainlesschain/session-core/goal-contract";
23
30
 
24
31
  /** Valid goal lifecycle states. `active` goals are the ones injected. */
25
32
  export const GOAL_STATUS = Object.freeze({
@@ -35,6 +42,25 @@ function defaultRoot() {
35
42
  return path.join(getHomeDir(), "goals");
36
43
  }
37
44
 
45
+ /** Store identity is path-bound metadata, not filesystem authorization. */
46
+ export function goalFileStoreId(root = defaultRoot()) {
47
+ const resolved = path.resolve(root);
48
+ const canonical =
49
+ process.platform === "win32" ? resolved.toLowerCase() : resolved;
50
+ return `cli-goals-${createHash("sha256").update(canonical).digest("hex")}`;
51
+ }
52
+
53
+ function fileRecord(value, root) {
54
+ const record = upgradeLegacyGoal(value, goalFileStoreId(root));
55
+ if (record.storeId !== goalFileStoreId(root))
56
+ throw goalError("GOAL_STORE_MISMATCH");
57
+ // Files are the legacy standalone CLI store. Project authority lives in the
58
+ // host database and must not be acquired by copying a record into this dir.
59
+ if (record.ownerRef !== null || record.projectRef !== null)
60
+ throw goalError("GOAL_PROJECT_STORE_REQUIRED");
61
+ return record;
62
+ }
63
+
38
64
  function ensureDir(dir) {
39
65
  if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
40
66
  }
@@ -83,6 +109,7 @@ function isUnsafeGoalId(id) {
83
109
  id == null ||
84
110
  id === "" ||
85
111
  typeof id !== "string" ||
112
+ !/^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/u.test(id) ||
86
113
  id.includes("/") ||
87
114
  id.includes("\\") ||
88
115
  id.includes("..")
@@ -133,17 +160,15 @@ export function createGoal(input = {}, opts = {}) {
133
160
  }
134
161
  const keyResults = (input.keyResults || []).map((kr) => normalizeKr(kr));
135
162
  const goal = {
136
- id,
137
- title: String(input.title || objective).trim(),
138
- objective,
139
- keyResults,
140
- status: GOAL_STATUS.ACTIVE,
163
+ ...createGoalRecord({
164
+ id,
165
+ storeId: goalFileStoreId(root),
166
+ title: String(input.title || objective).trim(),
167
+ objective,
168
+ keyResults,
169
+ createdAt: nowIso(),
170
+ }),
141
171
  progress: derivedProgress(keyResults) ?? 0,
142
- linkedSessions: [],
143
- notes: [],
144
- drift: { lastProgressAt: null, flags: [] },
145
- createdAt: nowIso(),
146
- updatedAt: nowIso(),
147
172
  };
148
173
  ensureDir(root);
149
174
  const file = goalFile(root, id);
@@ -186,21 +211,42 @@ export function getGoal(id, opts = {}) {
186
211
  const file = goalFile(root, id);
187
212
  if (!fs.existsSync(file)) return null;
188
213
  try {
189
- return JSON.parse(fs.readFileSync(file, "utf-8"));
214
+ const value = JSON.parse(fs.readFileSync(file, "utf-8"));
215
+ if (value?.id !== id) return null;
216
+ if (Object.hasOwn(value, "schema") || Object.hasOwn(value, "schemaVersion"))
217
+ fileRecord(value, root);
218
+ return value;
190
219
  } catch {
191
220
  return null;
192
221
  }
193
222
  }
194
223
 
195
- function saveGoal(goal, opts = {}) {
224
+ function saveGoal(goal, opts = {}, before = null) {
196
225
  if (isUnsafeGoalId(goal && goal.id)) {
197
226
  throw new Error(`非法 goal id: ${String(goal && goal.id).slice(0, 60)}`);
198
227
  }
199
228
  const root = opts.root || defaultRoot();
200
229
  ensureDir(root);
201
- goal.updatedAt = nowIso();
202
- atomicWriteFileSync(goalFile(root, goal.id), JSON.stringify(goal, null, 2));
203
- return goal;
230
+ const previous = before || fileRecord(goal, root);
231
+ const migrated = goal.schema ? goal : { ...fileRecord(goal, root) };
232
+ if (previous.completion !== null && migrated.status === "done")
233
+ throw goalError("GOAL_TERMINAL_REVISION_DENIED");
234
+ const controls = ["status", "objective", "keyResults"];
235
+ const changedControl = controls.some(
236
+ (key) => JSON.stringify(previous[key]) !== JSON.stringify(migrated[key]),
237
+ );
238
+ const saved = fileRecord(
239
+ {
240
+ ...migrated,
241
+ revision: previous.revision + 1,
242
+ controlGeneration: previous.controlGeneration + (changedControl ? 1 : 0),
243
+ completion: null,
244
+ updatedAt: nowIso(),
245
+ },
246
+ root,
247
+ );
248
+ atomicWriteFileSync(goalFile(root, goal.id), JSON.stringify(saved, null, 2));
249
+ return saved;
204
250
  }
205
251
 
206
252
  /** List goals, newest first. Optionally filter by status. */
@@ -233,8 +279,64 @@ function mutate(id, fn, opts = {}) {
233
279
  () => {
234
280
  const goal = getGoal(id, opts);
235
281
  if (!goal) throw new Error(`no such goal: ${id}`);
282
+ let before;
283
+ try {
284
+ before = fileRecord(goal, root);
285
+ } catch (error) {
286
+ // Older CLI records had unbounded notes/strings. Preserve their full
287
+ // history and existing controls if the bounded contract cannot accept
288
+ // them. This fallback is never available to a versioned record.
289
+ if (
290
+ Object.hasOwn(goal, "schema") ||
291
+ Object.hasOwn(goal, "schemaVersion") ||
292
+ ![
293
+ "GOAL_INVALID_ARRAY",
294
+ "GOAL_INVALID_TEXT",
295
+ "GOAL_INVALID_JSON",
296
+ ].includes(error.code)
297
+ )
298
+ throw error;
299
+ const revision = goal.revision ?? 1;
300
+ const generation = goal.controlGeneration ?? 0;
301
+ if (
302
+ !Number.isSafeInteger(revision) ||
303
+ revision < 1 ||
304
+ !Number.isSafeInteger(generation) ||
305
+ generation < 0 ||
306
+ !Number.isSafeInteger(revision + 1) ||
307
+ !Number.isSafeInteger(generation + 1)
308
+ )
309
+ throw goalError("GOAL_INVALID_REVISION");
310
+ if (
311
+ opts.expectedRevision !== undefined &&
312
+ opts.expectedRevision !== revision
313
+ )
314
+ throw goalError("GOAL_REVISION_CONFLICT");
315
+ const controls = JSON.stringify([
316
+ goal.status,
317
+ goal.objective,
318
+ goal.keyResults,
319
+ ]);
320
+ fn(goal);
321
+ goal.revision = revision + 1;
322
+ goal.controlGeneration =
323
+ generation +
324
+ (controls !==
325
+ JSON.stringify([goal.status, goal.objective, goal.keyResults])
326
+ ? 1
327
+ : 0);
328
+ goal.updatedAt = nowIso();
329
+ atomicWriteFileSync(goalFile(root, id), JSON.stringify(goal, null, 2));
330
+ return goal;
331
+ }
332
+ if (
333
+ opts.expectedRevision !== undefined &&
334
+ (!Number.isSafeInteger(opts.expectedRevision) ||
335
+ opts.expectedRevision !== before.revision)
336
+ )
337
+ throw goalError("GOAL_REVISION_CONFLICT");
236
338
  fn(goal);
237
- return saveGoal(goal, opts);
339
+ return saveGoal(goal, opts, before);
238
340
  },
239
341
  { failIfUnavailable: true },
240
342
  );
@@ -385,6 +487,15 @@ export function deleteGoal(id, opts = {}) {
385
487
  file,
386
488
  () => {
387
489
  if (!fs.existsSync(file)) return false;
490
+ if (opts.expectedRevision !== undefined) {
491
+ const current = getGoal(id, { root });
492
+ if (
493
+ !current ||
494
+ !Number.isSafeInteger(opts.expectedRevision) ||
495
+ opts.expectedRevision !== (current.revision ?? 1)
496
+ )
497
+ throw goalError("GOAL_REVISION_CONFLICT");
498
+ }
388
499
  fs.rmSync(file);
389
500
  return true;
390
501
  },
@@ -419,3 +530,101 @@ export function resolveActiveGoal(sel = {}, opts = {}) {
419
530
  // Ambiguous (multiple active, none linked) — caller must pick explicitly.
420
531
  return null;
421
532
  }
533
+
534
+ /** Injectable repository adapter using the same files/strict locks as cc goal.
535
+ * Reading a legacy file upgrades the returned view only; it never rewrites the
536
+ * file, binds an owner or enables scheduling. */
537
+ export function createGoalFileAdapter(opts = {}) {
538
+ const root = opts.root || defaultRoot();
539
+ const storeId = goalFileStoreId(root);
540
+ function read(id) {
541
+ if (isUnsafeGoalId(id)) throw goalError("GOAL_INVALID_ID");
542
+ const file = goalFile(root, id);
543
+ if (!fs.existsSync(file)) return null;
544
+ let value;
545
+ try {
546
+ value = JSON.parse(fs.readFileSync(file, "utf8"));
547
+ } catch {
548
+ throw goalError("GOAL_RECORD_CORRUPT");
549
+ }
550
+ const record = fileRecord(value, root);
551
+ if (record.id !== id) throw goalError("GOAL_RECORD_CORRUPT");
552
+ return record;
553
+ }
554
+ return Object.freeze({
555
+ storeId,
556
+ get: read,
557
+ create(value) {
558
+ const record = fileRecord(value, root);
559
+ if (isUnsafeGoalId(record.id)) throw goalError("GOAL_INVALID_ID");
560
+ if (
561
+ record.revision !== 1 ||
562
+ record.controlGeneration !== 0 ||
563
+ record.status !== "active"
564
+ )
565
+ throw goalError("GOAL_INVALID_INITIAL_STATE");
566
+ ensureDir(root);
567
+ return withFileLock(
568
+ goalFile(root, record.id),
569
+ () => {
570
+ if (fs.existsSync(goalFile(root, record.id)))
571
+ throw goalError("GOAL_ALREADY_EXISTS");
572
+ atomicWriteFileSync(
573
+ goalFile(root, record.id),
574
+ JSON.stringify(record, null, 2),
575
+ );
576
+ return record;
577
+ },
578
+ { failIfUnavailable: true },
579
+ );
580
+ },
581
+ compareAndSwap(id, expectedRevision, transform) {
582
+ if (isUnsafeGoalId(id)) throw goalError("GOAL_INVALID_ID");
583
+ if (
584
+ !Number.isSafeInteger(expectedRevision) ||
585
+ expectedRevision < 1 ||
586
+ typeof transform !== "function"
587
+ )
588
+ throw goalError("GOAL_INVALID_REVISION");
589
+ if (!fs.existsSync(goalFile(root, id)))
590
+ throw goalError("GOAL_NOT_FOUND_OR_DENIED");
591
+ return withFileLock(
592
+ goalFile(root, id),
593
+ () => {
594
+ const current = read(id);
595
+ if (current === null) throw goalError("GOAL_NOT_FOUND_OR_DENIED");
596
+ if (current.revision !== expectedRevision)
597
+ throw goalError("GOAL_REVISION_CONFLICT");
598
+ const next = fileRecord(validateGoalRecord(transform(current)), root);
599
+ if (
600
+ next.id !== id ||
601
+ next.revision !== current.revision + 1 ||
602
+ next.controlGeneration < current.controlGeneration
603
+ )
604
+ throw goalError("GOAL_INVALID_REPLACEMENT");
605
+ atomicWriteFileSync(
606
+ goalFile(root, id),
607
+ JSON.stringify(next, null, 2),
608
+ );
609
+ return next;
610
+ },
611
+ { failIfUnavailable: true },
612
+ );
613
+ },
614
+ list({ status } = {}) {
615
+ if (status !== undefined && !STATUS_VALUES.has(status))
616
+ throw goalError("GOAL_INVALID_STATUS");
617
+ if (!fs.existsSync(root)) return [];
618
+ return fs
619
+ .readdirSync(root)
620
+ .filter((name) => name.endsWith(".json"))
621
+ .map((name) => read(name.slice(0, -5)))
622
+ .filter(
623
+ (record) =>
624
+ record !== null &&
625
+ (status === undefined || record.status === status),
626
+ )
627
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
628
+ },
629
+ });
630
+ }